basefunctor

class zfit.models.basefunctor.FunctorMixin(models, obs, **kwargs)[source]

Bases: zfit.core.interfaces.ZfitFunctorMixin, zfit.core.basemodel.BaseModel

add_cache_dependents(cache_dependents: Union[zfit.core.interfaces.ZfitCachable, Iterable[zfit.core.interfaces.ZfitCachable]], allow_non_cachable: bool = True)

Add dependents that render the cache invalid if they change.

Parameters
  • cache_dependents (ZfitCachable) –

  • allow_non_cachable (bool) – If True, allow cache_dependents to be non-cachables. If False, any cache_dependents that is not a ZfitCachable will raise an error.

Raises

TypeError – if one of the cache_dependents is not a ZfitCachable _and_ allow_non_cachable if False.

analytic_integrate(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None) → Union[float, tensorflow.python.framework.ops.Tensor]

Analytical integration over function and raise Error if not possible.

Parameters
  • limits (tuple, ZfitSpace) – the limits to integrate over

  • norm_range (tuple, ZfitSpace, False) – the limits to normalize over

Returns

the integral value

Return type

Tensor

Raises
  • AnalyticIntegralNotImplementedError – If no analytical integral is available (for this limits).

  • NormRangeNotImplementedError – if the norm_range argument is not supported. This means that no analytical normalization is available, explicitly: the analytical integral over the limits = norm_range is not available.

property axes

Return the axes, integer based identifier(indices) for the coordinate system.

convert_sort_space(obs: Union[str, Iterable[str], zfit.Space, zfit.core.interfaces.ZfitLimit, tensorflow.python.framework.ops.Tensor, numpy.ndarray, Iterable[float], float, Tuple[float], List[float], bool, None] = None, axes: Union[int, Iterable[int]] = None, limits: Union[zfit.core.interfaces.ZfitLimit, tensorflow.python.framework.ops.Tensor, numpy.ndarray, Iterable[float], float, Tuple[float], List[float], bool, None] = None) → Optional[zfit.core.interfaces.ZfitSpace]

Convert the inputs (using eventually obs, axes) to ZfitSpace and sort them according to own obs.

Parameters
  • () (limits) –

  • ()

  • ()

Returns:

copy(deep: bool = False, name: str = None, **overwrite_params) → zfit.core.interfaces.ZfitObject
create_sampler(n: Union[int, tensorflow.python.framework.ops.Tensor, str] = None, limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, fixed_params: Union[bool, List[zfit.core.interfaces.ZfitParameter], Tuple[zfit.core.interfaces.ZfitParameter]] = True) → zfit.core.data.Sampler

Create a Sampler that acts as Data but can be resampled, also with changed parameters and n.

If limits is not specified, space is used (if the space contains limits). If n is None and the model is an extended pdf, ‘extended’ is used by default.

Parameters
  • n (int, tf.Tensor, str) –

    The number of samples to be generated. Can be a Tensor that will be or a valid string. Currently implemented:

    • ’extended’: samples poisson(yield) from each pdf that is extended.

  • () (fixed_params) – From which space to sample.

  • () – A list of Parameters that will be fixed during several resample calls. If True, all are fixed, if False, all are floating. If a Parameter is not fixed and its value gets updated (e.g. by a Parameter.set_value() call), this will be reflected in resample. If fixed, the Parameter will still have the same value as the Sampler has been created with when it resamples.

Returns

py:class:~`zfit.core.data.Sampler`

Raises
  • NotExtendedPDFError – if ‘extended’ is chosen (implicitly by default or explicitly) as an option for n but the pdf itself is not extended.

  • ValueError – if n is an invalid string option.

  • InvalidArgumentError – if n is not specified and pdf is not extended.

property dtype

The dtype of the object

get_dependents(only_floating: bool = True) -> OrderedSet(['z', 'f', 'i', 't', '.', 'P', 'a', 'r', 'm', 'e'])

Return a set of all independent Parameter that this object depends on.

Parameters

only_floating (bool) – If True, only return floating Parameter

get_models(names=None) → List[zfit.core.interfaces.ZfitModel][source]
get_params(only_floating: bool = False, names: Union[str, List[str], None] = None) → List[zfit.core.interfaces.ZfitParameter]

Return the parameters. If it is empty, automatically return all floating variables.

Parameters
  • () (names) – If True, return only the floating parameters.

  • () – The names of the parameters to return.

Returns

Return type

list(ZfitParameters)

gradients(x: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], params: Optional[Iterable[zfit.core.interfaces.ZfitParameter]] = None)
graph_caching_methods = [<function FunctionWrapperRegistry.__call__.<locals>.concrete_func>, <function FunctionWrapperRegistry.__call__.<locals>.concrete_func>, <function FunctionWrapperRegistry.__call__.<locals>.concrete_func>, <function FunctionWrapperRegistry.__call__.<locals>.concrete_func>, <function FunctionWrapperRegistry.__call__.<locals>.concrete_func>, <function FunctionWrapperRegistry.__call__.<locals>.concrete_func>]
instances = <_weakrefset.WeakSet object>
integrate(**kwargs)
property models

Return the models of this Functor. Can be pdfs or funcs.

property n_obs

Return the number of observables, the dimensionality. Corresponds to the last dimension.

property name

The name of the object.

numeric_integrate(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None) → Union[float, tensorflow.python.framework.ops.Tensor]

Numerical integration over the model.

Parameters
  • limits (tuple, ZfitSpace) – the limits to integrate over

  • norm_range (tuple, ZfitSpace, False) – the limits to normalize over

Returns

the integral value

Return type

Tensor

property obs

Return the observables, string identifier for the coordinate system.

property params
partial_analytic_integrate(**kwargs)
partial_integrate(**kwargs)
partial_numeric_integrate(**kwargs)
classmethod register_additional_repr(**kwargs)

Register an additional attribute to add to the repr.

Parameters
  • keyword argument. The value has to be gettable from the instance (has to be an (any) –

  • or callable method of self. (attribute) –

classmethod register_analytic_integral(func: Callable, limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, priority: Union[int, float] = 50, *, supports_norm_range: bool = False, supports_multiple_limits: bool = False) → None

Register an analytic integral with the class.

Parameters
  • func (callable) –

    A function that calculates the (partial) integral over the axes limits. The signature has to be the following:

    • x (ZfitData, None): the data for the remaining axes in a partial

      integral. If it is not a partial integral, this will be None.

    • limits (ZfitSpace): the limits to integrate over.

    • norm_range (ZfitSpace, None): Normalization range of the integral.

      If not supports_supports_norm_range, this will be None.

    • params (Dict[param_name, zfit.Parameters]): The parameters of the model.

    • model (ZfitModel):The model that is being integrated.

  • () (limits) – |limits_arg_descr|

  • priority (int) – Priority of the function. If multiple functions cover the same space, the one with the highest priority will be used.

  • supports_multiple_limits (bool) – If True, the limits given to the integration function can have multiple limits. If False, only simple limits will pass through and multiple limits will be auto-handled.

  • supports_norm_range (bool) – If True, norm_range argument to the function may not be None. If False, norm_range will always be None and care is taken of the normalization automatically.

register_cacher(cacher: Union[zfit.core.interfaces.ZfitCachable, Iterable[zfit.core.interfaces.ZfitCachable]])

Register a cacher that caches values produces by this instance; a dependent.

Parameters

() (cacher) –

classmethod register_inverse_analytic_integral(func: Callable) → None

Register an inverse analytical integral, the inverse (unnormalized) cdf.

Parameters

() (func) –

reset_cache(reseter: zfit.util.cache.ZfitCachable)
reset_cache_self()

Clear the cache of self and all dependent cachers.

sample(n: Union[int, tensorflow.python.framework.ops.Tensor, str] = None, limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None) → zfit.core.data.SampleData

Sample n points within limits from the model.

If limits is not specified, space is used (if the space contains limits). If n is None and the model is an extended pdf, ‘extended’ is used by default.

Parameters
  • n (int, tf.Tensor, str) –

    The number of samples to be generated. Can be a Tensor that will be or a valid string. Currently implemented:

    • ’extended’: samples poisson(yield) from each pdf that is extended.

  • limits (tuple, ZfitSpace) – In which region to sample in

Returns

SampleData(n_obs, n_samples)

Raises
  • NotExtendedPDFError – if ‘extended’ is (implicitly by default or explicitly) chosen as an option for n but the pdf itself is not extended.

  • ValueError – if n is an invalid string option.

  • InvalidArgumentError – if n is not specified and pdf is not extended.

property space
update_integration_options(draws_per_dim=None, mc_sampler=None)

Set the integration options.

Parameters
  • draws_per_dim (int) – The draws for MC integration to do

  • () (mc_sampler) –

zfit.models.basefunctor.extract_daughter_input_obs(obs: Union[str, Iterable[str], zfit.Space], spaces: Iterable[zfit.core.interfaces.ZfitSpace]) → zfit.core.interfaces.ZfitSpace[source]

Extract the common space from spaces by combining them, test against obs.

The obs are assumed to be the obs given to a functor while the spaces are the spaces of the daughters. First, the combined space from the daughters is extracted. If no obs are given, this is returned. If obs are given, it is checked whether they agree. If they agree, and no limit is set on obs (i.e. they are pure strings), the inferred limits are used, sorted by obs. Otherwise, obs is directly used.

Parameters
  • obs

  • spaces

Returns: