# Copyright (c) 2020 zfit # TODO: improve errors of models. Generate more general error, inherit and use more specific? import warnings [docs]class PDFCompatibilityError(Exception): pass [docs]class LogicalUndefinedOperationError(Exception): pass [docs]class OperationNotAllowedError(Exception): pass [docs]class ExtendedPDFError(Exception): pass [docs]class AlreadyExtendedPDFError(ExtendedPDFError): pass [docs]class NotExtendedPDFError(ExtendedPDFError): pass [docs]class ConversionError(Exception): pass [docs]class SubclassingError(Exception): pass [docs]class BasePDFSubclassingError(SubclassingError): pass [docs]class IntentionAmbiguousError(Exception): pass [docs]class UnderdefinedError(IntentionAmbiguousError): pass [docs]class LimitsUnderdefinedError(UnderdefinedError): pass [docs]class NormRangeUnderdefinedError(UnderdefinedError): pass [docs]class OverdefinedError(IntentionAmbiguousError): pass [docs]class LimitsOverdefinedError(OverdefinedError): pass [docs]class CoordinatesUnderdefinedError(UnderdefinedError): pass [docs]class AxesAmbiguousError(IntentionAmbiguousError): pass [docs]class NotSpecifiedError(Exception): pass [docs]class LimitsNotSpecifiedError(NotSpecifiedError): pass [docs]class NormRangeNotSpecifiedError(NotSpecifiedError): pass [docs]class AxesNotSpecifiedError(NotSpecifiedError): pass [docs]class ObsNotSpecifiedError(NotSpecifiedError): pass # Parameter Errors [docs]class NameAlreadyTakenError(Exception): pass # Operation errors [docs]class IncompatibleError(Exception): pass [docs]class ShapeIncompatibleError(IncompatibleError): pass [docs]class ObsIncompatibleError(IncompatibleError): pass [docs]class AxesIncompatibleError(IncompatibleError): pass [docs]class CoordinatesIncompatibleError(IncompatibleError): pass [docs]class SpaceIncompatibleError(IncompatibleError): pass [docs]class LimitsIncompatibleError(IncompatibleError): pass [docs]class NumberOfEventsIncompatibleError(ShapeIncompatibleError): pass [docs]class InvalidLimitSubspaceError(Exception): pass [docs]class ModelIncompatibleError(IncompatibleError): pass # Data errors [docs]class WeightsNotImplementedError(Exception): pass [docs]class DataIsBatchedError(Exception): pass # Parameter errors [docs]class ParameterNotIndependentError(Exception): pass # Minimizer errors [docs]class NotMinimizedError(Exception): pass # Runtime Errors [docs]class IllegalInGraphModeError(Exception): pass [docs]class CannotConvertToNumpyError(Exception): pass # Baseclass to steer execution [docs]class ZfitNotImplementedError(NotImplementedError): def __init__(self, *args: object) -> None: super().__init__(*args) if type(self) == ZfitNotImplementedError: warnings.warn("Prefer to use a more specific subclass. See in `zfit.exceptions`") [docs]class FunctionNotImplementedError(ZfitNotImplementedError): """Any function, e.g. in a BaseModel, that not implemented and a fallback should be called. Preferably use more specific exceptions """ [docs]class StandardControlFlow(Exception): """An exception that inherits from this class will be regarded as part of the standard control flow and not as an Error. For example, if a function raises that values are NaN, this is often intercepted on purpose.""" [docs]class SpecificFunctionNotImplementedError(FunctionNotImplementedError): """If a specific function, e.g. by the user is not implemented""" [docs]class MinimizeNotImplementedError(FunctionNotImplementedError): """The `minimize` function of a minimizer is not implemented.""" [docs]class MinimizeStepNotImplementedError(FunctionNotImplementedError): """The `step` function of a minimizer is not implemented.""" [docs]class AnalyticNotImplementedError(ZfitNotImplementedError): """General exception if an analytic way is not implemented""" [docs]class AnalyticIntegralNotImplementedError(AnalyticNotImplementedError): """If an analytic integral is not provided.""" pass [docs]class AnalyticSamplingNotImplementedError(AnalyticNotImplementedError): """If analytic sampling from a distribution is not possible.""" pass # PDF class internal handling errors [docs]class NormRangeNotImplementedError(Exception): """Indicates that a function does not support the normalization range argument `norm_range`.""" pass [docs]class MultipleLimitsNotImplementedError(Exception): """Indicates that a function does not support several limits in a :py:class:`~zfit.Space`.""" pass [docs]class VectorizedLimitsNotImplementedError(Exception): """Indicates that a function does not support vectorized (n_events > 1) limits in a :py:class:`~zfit.Space`.""" pass # Developer verbose messages [docs]class WorkInProgressError(Exception): """Only for developing purpose! Does not serve as a 'real' Exception.""" pass [docs]class BreakingAPIChangeError(Exception): def __init__(self, msg, *args: object) -> None: default_msg = ("This item has been removed due to an API change. Instruction to update:\n" "") msg = default_msg + str(msg) super().__init__(msg, *args) [docs]class BehaviorUnderDiscussion(Exception): def __init__(self, msg, *args: object) -> None: default_msg = ("The behavior of the following is currently under discussion and ideas are well needed. " "Please open an issue at https://github.com/zfit/zfit/issues with your opinion about this.\n" "") msg = default_msg + str(msg) super().__init__(msg, *args)