"""Functionality for single-target objectives."""from__future__importannotationsimportgcfromtypingimportTYPE_CHECKING,ClassVarimportpandasaspdfromattrsimportdefine,fieldfromattrs.validatorsimportinstance_offromtyping_extensionsimportoverridefrombaybe.objectives.baseimportObjectivefrombaybe.targets.baseimportTargetfrombaybe.targets.numericalimportNumericalTargetfrombaybe.utils.conversionimportto_stringfrombaybe.utils.dataframeimport(pretty_print_df,)ifTYPE_CHECKING:frombotorch.acquisition.objectiveimportMCAcquisitionObjective
[docs]@define(frozen=True,slots=False)classSingleTargetObjective(Objective):"""An objective focusing on a single target."""is_multi_output:ClassVar[bool]=False# See base class._target:Target=field(validator=instance_of(Target),alias="target")"""The single target considered by the objective."""@overridedef__str__(self)->str:targets_list=[target.summary()fortargetinself.targets]targets_df=pd.DataFrame(targets_list)fields=[to_string("Type",self.__class__.__name__,single_line=True),to_string("Targets",pretty_print_df(targets_df)),]returnto_string("Objective",*fields)@override@propertydeftargets(self)->tuple[Target,...]:return(self._target,)@override@propertydefoutput_names(self)->tuple[str,...]:return(self._target.name,)@override@propertydefsupports_partial_measurements(self)->bool:returnFalse