"""Validation functionality for search spaces."""importwarningsfromcollections.abcimportCollection,SequencefromtypingimportTypeVarimportpandasaspdfrombaybe.exceptionsimportEmptySearchSpaceErrorfrombaybe.parametersimportTaskParameterfrombaybe.parameters.baseimportParameterfrombaybe.utils.dataframeimportget_transform_objects_T=TypeVar("_T",bound=Parameter)
[docs]defvalidate_parameter_names(# noqa: DOC101, DOC103parameters:Collection[Parameter],)->None:"""Validate the parameter names. Raises: ValueError: If the given list contains parameters with the same name. """param_names=[p.nameforpinparameters]iflen(set(param_names))!=len(param_names):raiseValueError("All parameters must have unique names.")
[docs]defvalidate_parameters(parameters:Collection[Parameter])->None:# noqa: DOC101, DOC103"""Validate the parameters. Raises: EmptySearchSpaceError: If the parameter list is empty. NotImplementedError: If more than one :class:`baybe.parameters.categorical.TaskParameter` is requested. """ifnotparameters:raiseEmptySearchSpaceError("At least one parameter must be provided.")# TODO [16932]: Remove once more task parameters are supportediflen([pforpinparametersifisinstance(p,TaskParameter)])>1:raiseNotImplementedError("Currently, at most one task parameter can be considered.")# Assert: unique namesvalidate_parameter_names(parameters)
[docs]defget_transform_parameters(parameters:Sequence[_T],df:pd.DataFrame,allow_missing:bool=False,allow_extra:bool=False,)->list[_T]:"""Deprecated!"""# noqa: D401warnings.warn(f"The function 'get_transform_parameters' has been deprecated and will be "f"removed in a future version. Use '{get_transform_objects.__name__}' instead.",DeprecationWarning,)returnget_transform_objects(df,parameters,allow_missing=allow_missing,allow_extra=allow_extra)