"""Functionality for single-target objectives."""importpandasaspdfromattrimportdefine,fieldfromattr.validatorsimportinstance_offrombaybe.objectives.baseimportObjectivefrombaybe.targets.baseimportTarget
[docs]@define(frozen=True,slots=False)classSingleTargetObjective(Objective):"""An objective focusing on a single target."""_target:Target=field(validator=instance_of(Target),alias="target")# type: ignore[type-abstract]"""The single target considered by the objective."""def__str__(self)->str:start_bold="\033[1m"end_bold="\033[0m"targets_list=[target.summary()fortargetinself.targets]targets_df=pd.DataFrame(targets_list)objective_str=f"""{start_bold}Objective{end_bold}\n{start_bold}Type: {end_bold}{self.__class__.__name__}\n{start_bold}Targets {end_bold}\n{targets_df}"""returnobjective_str.replace("\n","\n ")@propertydeftargets(self)->tuple[Target,...]:# noqa: D102# See base class.return(self._target,)
[docs]deftransform(self,data:pd.DataFrame)->pd.DataFrame:# noqa: D102# See base class.target_data=data[[self._target.name]].copy()returnself._target.transform(target_data)