"""Validation functionality for parameters."""fromcollections.abcimportSequencefromtypingimportAnyimportnumpyasnpfromattrs.validatorsimportgt,instance_of,lt
[docs]defvalidate_unique_values(# noqa: DOC101, DOC103obj:Any,_:Any,value:list)->None:"""Validate that there are no duplicates in ``value``. Raises: ValueError: If there are duplicates in ``value``. """iflen(set(value))!=len(value):raiseValueError(f"Cannot assign the following values containing duplicates to "f"parameter {obj.name}: {value}.")
[docs]defvalidate_decorrelation(obj:Any,attribute:Any,value:float)->None:"""Validate the decorrelation."""instance_of((bool,float))(obj,attribute,value)ifisinstance(value,float):gt(0.0)(obj,attribute,value)lt(1.0)(obj,attribute,value)
[docs]defvalidate_is_finite(# noqa: DOC101, DOC103obj:Any,_:Any,value:Sequence[float])->None:"""Validate that ``value`` contains no infinity/nan. Raises: ValueError: If ``value`` contains infinity/nan. """ifnotall(np.isfinite(value)):raiseValueError(f"Cannot assign the following values containing infinity/nan to "f"parameter {obj.name}: {value}.")