Source code for zfit.util.exception

#  Copyright (c) 2024 zfit

# TODO: improve errors of models. Generate more general error, inherit and use more specific?
from __future__ import annotations

import warnings


class PDFCompatibilityError(Exception):
    pass


class LogicalUndefinedOperationError(Exception):
    pass


class OperationNotAllowedError(Exception):
    pass


class ExtendedPDFError(Exception):
    pass


class AlreadyExtendedPDFError(ExtendedPDFError):
    pass


class NotExtendedPDFError(ExtendedPDFError):
    pass


class ConversionError(Exception):
    pass


class SubclassingError(Exception):
    pass


class BasePDFSubclassingError(SubclassingError):
    pass


class MinimizerSubclassingError(SubclassingError):
    pass


class IntentionAmbiguousError(Exception):
    pass


class UnderdefinedError(IntentionAmbiguousError):
    pass


class LimitsUnderdefinedError(UnderdefinedError):
    pass


class NormRangeUnderdefinedError(UnderdefinedError):
    pass


class OverdefinedError(IntentionAmbiguousError):
    pass


class LimitsOverdefinedError(OverdefinedError):
    pass


class CoordinatesUnderdefinedError(UnderdefinedError):
    pass


class AxesAmbiguousError(IntentionAmbiguousError):
    pass


class NotSpecifiedError(Exception):
    pass


class LimitsNotSpecifiedError(NotSpecifiedError):
    pass


class NormRangeNotSpecifiedError(NotSpecifiedError):
    pass


class AxesNotSpecifiedError(NotSpecifiedError):
    pass


class ObsNotSpecifiedError(NotSpecifiedError):
    pass


class ParamNameNotUniqueError(Exception):
    pass


# Operation errors
class IncompatibleError(Exception):
    pass


class ShapeIncompatibleError(IncompatibleError):
    pass


class ObsIncompatibleError(IncompatibleError):
    pass


class AxesIncompatibleError(IncompatibleError):
    pass


class CoordinatesIncompatibleError(IncompatibleError):
    pass


class SpaceIncompatibleError(IncompatibleError):
    pass


class LimitsIncompatibleError(IncompatibleError):
    pass


class NumberOfEventsIncompatibleError(ShapeIncompatibleError):
    pass


class InvalidLimitSubspaceError(Exception):
    pass


class ModelIncompatibleError(IncompatibleError):
    pass


# Data errors
class WeightsNotImplementedError(Exception):
    pass


class DataIsBatchedError(Exception):
    pass


# Parameter errors
class ParameterNotIndependentError(Exception):
    pass


# Minimizer errors


class NotMinimizedError(Exception):
    pass


# Runtime Errors


class IllegalInGraphModeError(Exception):
    pass


class CannotConvertToNumpyError(Exception):
    pass


# Baseclass to steer execution
class ZfitNotImplementedError(NotImplementedError):
    def __init__(self, *args: object) -> None:
        super().__init__(*args)
        if type(self) is ZfitNotImplementedError:
            warnings.warn(
                "Prefer to use a more specific subclass. See in `zfit.exceptions`", DeprecationWarning, stacklevel=2
            )


[docs] class FunctionNotImplemented(ZfitNotImplementedError): """Any function, e.g. in a BaseModel, that not implemented and a fallback should be called. Preferably use more specific exceptions """
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 SpecificFunctionNotImplemented(FunctionNotImplemented): """If a specific function, e.g. by the user is not implemented."""
class MinimizeNotImplemented(FunctionNotImplemented): """The `minimize` function of a minimizer is not implemented.""" class MinimizeStepNotImplemented(FunctionNotImplemented): """The `step` function of a minimizer is not implemented."""
[docs] class AnalyticNotImplemented(ZfitNotImplementedError): """General exception if an analytic way is not implemented."""
[docs] class AnalyticIntegralNotImplemented(AnalyticNotImplemented): """If an analytic integral is not provided."""
[docs] class AnalyticSamplingNotImplemented(AnalyticNotImplemented): """If analytic sampling from a distribution is not possible."""
# PDF class internal handling errors class NormNotImplemented(StandardControlFlow): """Indicates that a function does not support the normalization range argument `norm_range`.""" NormRangeNotImplemented = NormNotImplemented # legacy
[docs] class MultipleLimitsNotImplemented(StandardControlFlow): """Indicates that a function does not support several limits in a :py:class:`~zfit.Space`."""
[docs] class InitNotImplemented(StandardControlFlow): """Indicates that a minimize method does not support a FitResult instead of a loss."""
[docs] class VectorizedLimitsNotImplemented(StandardControlFlow): """Indicates that a function does not support vectorized (n_events > 1) limits in a :py:class:`~zfit.Space`."""
class DerivativeCalculationError(ValueError): pass # Developer verbose messages class WorkInProgressError(Exception): """Only for developing purpose. Does not serve as a 'real' Exception. """ 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) 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) class MaximumIterationReached(StandardControlFlow): pass class AnalyticGradientNotAvailable(Exception): pass