"""Functionality for multi-target objectives."""from__future__importannotationsimportgcfromtypingimportClassVarfromattrsimportdefine,fieldfromattrs.validatorsimportdeep_iterable,instance_of,min_lenfromtyping_extensionsimportoverridefrombaybe.objectives.baseimportObjectivefrombaybe.objectives.validationimportvalidate_target_namesfrombaybe.targets.numericalimportNumericalTargetfrombaybe.utils.basicimportto_tuple
[docs]@define(frozen=True,slots=False)classParetoObjective(Objective):"""An objective handling multiple targets in a Pareto sense."""is_multi_output:ClassVar[bool]=True# See base class._targets:tuple[NumericalTarget,...]=field(converter=to_tuple,validator=[min_len(2),deep_iterable(member_validator=instance_of(NumericalTarget)),validate_target_names,],alias="targets",)"The targets considered by the objective."@override@propertydeftargets(self)->tuple[NumericalTarget,...]:returnself._targets@override@propertydefoutput_names(self)->tuple[str,...]:returntuple(target.namefortargetinself.targets)@override@propertydefsupports_partial_measurements(self)->bool:returnTrue
# Collect leftover original slotted classes processed by `attrs.define`gc.collect()