# Copyright (c) 2020 zfit import abc from abc import abstractmethod [docs]class ZfitResult: [docs] @abstractmethod def hesse(self, params, method): """Calculate for `params` the symmetric error using the Hessian matrix. Args: params: The parameters to calculate the Hessian symmetric error. If None, use all parameters. method: the method to calculate the hessian. Can be {'minuit'} or a callable. Returns: Result of the hessian (symmetric) error as dict with each parameter holding the error dict {'error': sym_error}. So given param_a (from zfit.Parameter(.)) `error_a = result.hesse(params=param_a)[param_a]['error']` error_a is the hessian error. """ raise NotImplementedError [docs] @abstractmethod def errors(self, params, method, sigma): """Calculate and set for `params` the asymmetric error using the set error method. Args: params: The parameters or their names to calculate the errors. If `params` is `None`, use all *floating* parameters. method: The method to use to calculate the errors. Valid choices are {'minuit_minos'} or a Callable. Returns: A `OrderedDict` containing as keys the parameter names and as value a `dict` which contains (next to probably more things) two keys 'lower' and 'upper', holding the calculated errors. Example: result['par1']['upper'] -> the asymmetric upper error of 'par1' """ raise NotImplementedError @property @abc.abstractmethod def minimizer(self): raise NotImplementedError @property @abc.abstractmethod def params(self): raise NotImplementedError @property @abc.abstractmethod def fmin(self): raise NotImplementedError @property @abc.abstractmethod def loss(self): raise NotImplementedError [docs]class ZfitMinimizer: """Define the minimizer interface.""" [docs] @abc.abstractmethod def minimize(self, loss, params=None): raise NotImplementedError [docs] def step(self, loss, params=None): raise NotImplementedError @property @abc.abstractmethod def tolerance(self): raise NotImplementedError