Source code for baybe.recommenders.pure.nonpredictive.base
"""Base class for all nonpredictive recommenders."""importgcimportwarningsfromabcimportABCimportpandasaspdfromattrsimportdefinefromtyping_extensionsimportoverridefrombaybe.exceptionsimportIncompatibleArgumentError,UnusedObjectWarningfrombaybe.objectives.baseimportObjectivefrombaybe.recommenders.pure.baseimportPureRecommenderfrombaybe.searchspace.coreimportSearchSpace
[docs]@defineclassNonPredictiveRecommender(PureRecommender,ABC):"""Abstract base class for all nonpredictive recommenders."""
[docs]@overridedefrecommend(self,batch_size:int,searchspace:SearchSpace,objective:Objective|None=None,measurements:pd.DataFrame|None=None,pending_experiments:pd.DataFrame|None=None,)->pd.DataFrame:ifpending_experimentsisnotNone:raiseIncompatibleArgumentError(f"Pending experiments were passed to '{self.__class__.__name__}"f".{self.recommend.__name__}' but non-predictive recommenders "f"cannot use this information. If you want to exclude the pending "f"experiments from the candidate set, adjust the search space "f"accordingly.")if(measurementsisnotNone)and(len(measurements)!=0):warnings.warn(f"'{self.recommend.__name__}' was called with a non-empty "f"set of measurements but '{self.__class__.__name__}' does not "f"utilize any training data, meaning that the argument is ignored.",UnusedObjectWarning,)ifobjectiveisnotNone:warnings.warn(f"'{self.recommend.__name__}' was called with a an explicit objective "f"but '{self.__class__.__name__}' does not "f"consider any objectives, meaning that the argument is ignored.",UnusedObjectWarning,)returnsuper().recommend(batch_size=batch_size,searchspace=searchspace,objective=objective,measurements=measurements,pending_experiments=None,)
# Collect leftover original slotted classes processed by `attrs.define`gc.collect()