dist_tfp

A rich selection of analytically implemented Distributions (models) are available in TensorFlow Probability. While their API is slightly different from the zfit models, it is similar enough to be easily wrapped.

Therefore a convenient wrapper as well as a lot of implementations are provided.

class zfit.models.dist_tfp.ExponentialTFP(tau: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], obs: Union[str, Iterable[str], zfit.Space], name: str = 'Exponential')[source]

Bases: zfit.models.dist_tfp.WrapDistribution

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, name: str = 'analytic_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Analytical integration over function and raise Error if not possible.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

Raises:
  • NotImplementedError – 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.
apply_yield(value: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = False, log: bool = False) → Union[float, tensorflow.python.framework.ops.Tensor]

If a norm_range is given, the value will be multiplied by the yield.

Parameters:
  • value (numerical) –
  • () (norm_range) –
  • log (bool) –
Returns:

numerical

as_func(norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = False)

Return a Function with the function model(x, norm_range=norm_range).

Parameters:() (norm_range) –
axes

Return the axes.

convert_sort_space(obs: Union[str, Iterable[str], zfit.Space] = None, axes: Union[int, Iterable[int]] = None, limits: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None) → Optional[zfit.core.limits.Space]

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

Parameters:
  • () (limits) –
  • ()
  • ()

Returns:

copy(**override_parameters) → zfit.core.basepdf.BasePDF

Creates a copy of the model.

Note: the copy model may continue to depend on the original initialization arguments.

Parameters:**override_parameters – String/value dictionary of initialization arguments to override with new value.
Returns:
A new instance of type(self) initialized from the union
of self.parameters and override_parameters, i.e., dict(self.parameters, **override_parameters).
Return type:model
create_extended(yield_: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], name_addition='_extended') → zfit.core.interfaces.ZfitPDF

Return an extended version of this pdf with yield yield_. The parameters are shared.

Parameters:
Returns:

ZfitPDF

create_projection_pdf(limits_to_integrate: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool]) → zfit.core.interfaces.ZfitPDF

Create a PDF projection by integrating out some of the dimensions.

The new projection pdf is still fully dependent on the pdf it was created with.

Parameters:limits_to_integrate (Space) –
Returns:a pdf without the dimensions from limits_to_integrate.
Return type:ZfitPDF
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, name: str = 'create_sampler') → 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.
  • () (name) – 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.
distribution
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_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)

get_yield() → Optional[zfit.core.parameter.Parameter]

Return the yield (only for extended models).

Returns:the yield of the current model or None
Return type:Parameter
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 = []
integrate(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Integrate the function over limits (normalized over norm_range if not False).

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space) – the limits to normalize over or False to integrate the unnormalized probability
  • name (str) – name of the operation shown in the tf.Graph
Returns:

py:class`tf.Tensor`: the integral value as a scalar with shape ()

is_extended

Flag to tell whether the model is extended or not.

Returns:
Return type:bool
log_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'log_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

Log probability density function normalized over norm_range.

Parameters:
  • x (numerical) – float or double Tensor.
  • norm_range (tuple, Space) – Space to normalize over
  • name (str) – Prepended to names of ops created by this function.
Returns:

a Tensor of type self.dtype.

Return type:

log_pdf

n_obs

Return the number of observables.

name

The name of the object.

norm_range

Return the current normalization range. If None and the `obs`have limits, they are returned.

Returns:The current normalization range
Return type:Space or None
normalization(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], name: str = 'normalization') → Union[float, tensorflow.python.framework.ops.Tensor]

Return the normalization of the function (usually the integral over limits).

Parameters:
  • limits (tuple, Space) – The limits on where to normalize over
  • name (str) –
Returns:

the normalization value

Return type:

Tensor

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

Numerical integration over the model.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

obs

Return the observables.

old_graph_caching_methods = []
params
partial_analytic_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_analytic_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Do analytical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

Raises:
  • NotImplementedError – if the analytic integral (over this limits) is not implemented
  • 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.
partial_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Partially integrate the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

partial_numeric_integrate(x: Union[float, tensorflow.python.framework.ops.Tensor], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_numeric_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Force numerical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

pdf(**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 (Space): the limits to integrate over.
    • norm_range (Space, 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, name: str = 'sample') → 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, Space) – In which region to sample in
  • name (str) –
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.
set_norm_range(norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool])

Set the normalization range (temporarily if used with contextmanager).

Parameters:norm_range (tuple, Space) –
space

Return the Space object that defines the dimensionality of the object.

unnormalized_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], component_norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None, name: str = 'unnormalized_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

PDF “unnormalized”. Use functions for unnormalized pdfs. this is only for performance in special cases.

Parameters:
  • x (numerical) – The value, have to be convertible to a Tensor
  • component_norm_range (Space) – The normalization range for the components. Needed for
  • composition (certain) – pdfs.
  • name (str) –
Returns:

1-dimensional tf.Tensor containing the unnormalized pdf.

Return type:

tf.Tensor

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) –
class zfit.models.dist_tfp.Gauss(mu: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], sigma: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], obs: Union[str, Iterable[str], zfit.Space], name: str = 'Gauss')[source]

Bases: zfit.models.dist_tfp.WrapDistribution

Gaussian or Normal distribution with a mean (mu) and a standartdevation (sigma).

The gaussian shape is defined as

\[f(x \mid \mu, \sigma^2) = e^{ -\frac{(x - \mu)^{2}}{2\sigma^2} }\]

with the normalization over [-inf, inf] of

\[\frac{1}{\sqrt{2\pi\sigma^2} }\]

The normalization changes for different normalization ranges

Parameters:
  • mu (Parameter) – Mean of the gaussian dist
  • sigma (Parameter) – Standard deviation or spread of the gaussian
  • obs (Space) – Observables and normalization range the pdf is defined in
  • name (str) – Name of the pdf
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, name: str = 'analytic_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Analytical integration over function and raise Error if not possible.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

Raises:
  • NotImplementedError – 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.
apply_yield(value: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = False, log: bool = False) → Union[float, tensorflow.python.framework.ops.Tensor]

If a norm_range is given, the value will be multiplied by the yield.

Parameters:
  • value (numerical) –
  • () (norm_range) –
  • log (bool) –
Returns:

numerical

as_func(norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = False)

Return a Function with the function model(x, norm_range=norm_range).

Parameters:() (norm_range) –
axes

Return the axes.

convert_sort_space(obs: Union[str, Iterable[str], zfit.Space] = None, axes: Union[int, Iterable[int]] = None, limits: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None) → Optional[zfit.core.limits.Space]

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

Parameters:
  • () (limits) –
  • ()
  • ()

Returns:

copy(**override_parameters) → zfit.core.basepdf.BasePDF

Creates a copy of the model.

Note: the copy model may continue to depend on the original initialization arguments.

Parameters:**override_parameters – String/value dictionary of initialization arguments to override with new value.
Returns:
A new instance of type(self) initialized from the union
of self.parameters and override_parameters, i.e., dict(self.parameters, **override_parameters).
Return type:model
create_extended(yield_: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], name_addition='_extended') → zfit.core.interfaces.ZfitPDF

Return an extended version of this pdf with yield yield_. The parameters are shared.

Parameters:
Returns:

ZfitPDF

create_projection_pdf(limits_to_integrate: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool]) → zfit.core.interfaces.ZfitPDF

Create a PDF projection by integrating out some of the dimensions.

The new projection pdf is still fully dependent on the pdf it was created with.

Parameters:limits_to_integrate (Space) –
Returns:a pdf without the dimensions from limits_to_integrate.
Return type:ZfitPDF
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, name: str = 'create_sampler') → 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.
  • () (name) – 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.
distribution
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_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)

get_yield() → Optional[zfit.core.parameter.Parameter]

Return the yield (only for extended models).

Returns:the yield of the current model or None
Return type:Parameter
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 = []
integrate(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Integrate the function over limits (normalized over norm_range if not False).

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space) – the limits to normalize over or False to integrate the unnormalized probability
  • name (str) – name of the operation shown in the tf.Graph
Returns:

py:class`tf.Tensor`: the integral value as a scalar with shape ()

is_extended

Flag to tell whether the model is extended or not.

Returns:
Return type:bool
log_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'log_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

Log probability density function normalized over norm_range.

Parameters:
  • x (numerical) – float or double Tensor.
  • norm_range (tuple, Space) – Space to normalize over
  • name (str) – Prepended to names of ops created by this function.
Returns:

a Tensor of type self.dtype.

Return type:

log_pdf

n_obs

Return the number of observables.

name

The name of the object.

norm_range

Return the current normalization range. If None and the `obs`have limits, they are returned.

Returns:The current normalization range
Return type:Space or None
normalization(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], name: str = 'normalization') → Union[float, tensorflow.python.framework.ops.Tensor]

Return the normalization of the function (usually the integral over limits).

Parameters:
  • limits (tuple, Space) – The limits on where to normalize over
  • name (str) –
Returns:

the normalization value

Return type:

Tensor

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

Numerical integration over the model.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

obs

Return the observables.

old_graph_caching_methods = []
params
partial_analytic_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_analytic_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Do analytical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

Raises:
  • NotImplementedError – if the analytic integral (over this limits) is not implemented
  • 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.
partial_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Partially integrate the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

partial_numeric_integrate(x: Union[float, tensorflow.python.framework.ops.Tensor], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_numeric_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Force numerical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

pdf(**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 (Space): the limits to integrate over.
    • norm_range (Space, 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, name: str = 'sample') → 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, Space) – In which region to sample in
  • name (str) –
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.
set_norm_range(norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool])

Set the normalization range (temporarily if used with contextmanager).

Parameters:norm_range (tuple, Space) –
space

Return the Space object that defines the dimensionality of the object.

unnormalized_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], component_norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None, name: str = 'unnormalized_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

PDF “unnormalized”. Use functions for unnormalized pdfs. this is only for performance in special cases.

Parameters:
  • x (numerical) – The value, have to be convertible to a Tensor
  • component_norm_range (Space) – The normalization range for the components. Needed for
  • composition (certain) – pdfs.
  • name (str) –
Returns:

1-dimensional tf.Tensor containing the unnormalized pdf.

Return type:

tf.Tensor

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) –
class zfit.models.dist_tfp.TruncatedGauss(mu: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], sigma: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], low: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], high: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], obs: Union[str, Iterable[str], zfit.Space], name: str = 'TruncatedGauss')[source]

Bases: zfit.models.dist_tfp.WrapDistribution

Gaussian distribution that is 0 outside of low, high. Equivalent to the product of Gauss and Uniform.

Parameters:
  • mu (Parameter) – Mean of the gaussian dist
  • sigma (Parameter) – Standard deviation or spread of the gaussian
  • low (Parameter) – Below this value, the pdf is zero.
  • high (Parameter) – Above this value, the pdf is zero.
  • obs (Space) – Observables and normalization range the pdf is defined in
  • name (str) – Name of the pdf
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, name: str = 'analytic_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Analytical integration over function and raise Error if not possible.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

Raises:
  • NotImplementedError – 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.
apply_yield(value: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = False, log: bool = False) → Union[float, tensorflow.python.framework.ops.Tensor]

If a norm_range is given, the value will be multiplied by the yield.

Parameters:
  • value (numerical) –
  • () (norm_range) –
  • log (bool) –
Returns:

numerical

as_func(norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = False)

Return a Function with the function model(x, norm_range=norm_range).

Parameters:() (norm_range) –
axes

Return the axes.

convert_sort_space(obs: Union[str, Iterable[str], zfit.Space] = None, axes: Union[int, Iterable[int]] = None, limits: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None) → Optional[zfit.core.limits.Space]

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

Parameters:
  • () (limits) –
  • ()
  • ()

Returns:

copy(**override_parameters) → zfit.core.basepdf.BasePDF

Creates a copy of the model.

Note: the copy model may continue to depend on the original initialization arguments.

Parameters:**override_parameters – String/value dictionary of initialization arguments to override with new value.
Returns:
A new instance of type(self) initialized from the union
of self.parameters and override_parameters, i.e., dict(self.parameters, **override_parameters).
Return type:model
create_extended(yield_: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], name_addition='_extended') → zfit.core.interfaces.ZfitPDF

Return an extended version of this pdf with yield yield_. The parameters are shared.

Parameters:
Returns:

ZfitPDF

create_projection_pdf(limits_to_integrate: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool]) → zfit.core.interfaces.ZfitPDF

Create a PDF projection by integrating out some of the dimensions.

The new projection pdf is still fully dependent on the pdf it was created with.

Parameters:limits_to_integrate (Space) –
Returns:a pdf without the dimensions from limits_to_integrate.
Return type:ZfitPDF
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, name: str = 'create_sampler') → 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.
  • () (name) – 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.
distribution
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_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)

get_yield() → Optional[zfit.core.parameter.Parameter]

Return the yield (only for extended models).

Returns:the yield of the current model or None
Return type:Parameter
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 = []
integrate(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Integrate the function over limits (normalized over norm_range if not False).

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space) – the limits to normalize over or False to integrate the unnormalized probability
  • name (str) – name of the operation shown in the tf.Graph
Returns:

py:class`tf.Tensor`: the integral value as a scalar with shape ()

is_extended

Flag to tell whether the model is extended or not.

Returns:
Return type:bool
log_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'log_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

Log probability density function normalized over norm_range.

Parameters:
  • x (numerical) – float or double Tensor.
  • norm_range (tuple, Space) – Space to normalize over
  • name (str) – Prepended to names of ops created by this function.
Returns:

a Tensor of type self.dtype.

Return type:

log_pdf

n_obs

Return the number of observables.

name

The name of the object.

norm_range

Return the current normalization range. If None and the `obs`have limits, they are returned.

Returns:The current normalization range
Return type:Space or None
normalization(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], name: str = 'normalization') → Union[float, tensorflow.python.framework.ops.Tensor]

Return the normalization of the function (usually the integral over limits).

Parameters:
  • limits (tuple, Space) – The limits on where to normalize over
  • name (str) –
Returns:

the normalization value

Return type:

Tensor

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

Numerical integration over the model.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

obs

Return the observables.

old_graph_caching_methods = []
params
partial_analytic_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_analytic_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Do analytical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

Raises:
  • NotImplementedError – if the analytic integral (over this limits) is not implemented
  • 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.
partial_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Partially integrate the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

partial_numeric_integrate(x: Union[float, tensorflow.python.framework.ops.Tensor], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_numeric_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Force numerical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

pdf(**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 (Space): the limits to integrate over.
    • norm_range (Space, 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, name: str = 'sample') → 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, Space) – In which region to sample in
  • name (str) –
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.
set_norm_range(norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool])

Set the normalization range (temporarily if used with contextmanager).

Parameters:norm_range (tuple, Space) –
space

Return the Space object that defines the dimensionality of the object.

unnormalized_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], component_norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None, name: str = 'unnormalized_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

PDF “unnormalized”. Use functions for unnormalized pdfs. this is only for performance in special cases.

Parameters:
  • x (numerical) – The value, have to be convertible to a Tensor
  • component_norm_range (Space) – The normalization range for the components. Needed for
  • composition (certain) – pdfs.
  • name (str) –
Returns:

1-dimensional tf.Tensor containing the unnormalized pdf.

Return type:

tf.Tensor

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) –
class zfit.models.dist_tfp.Uniform(low: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], high: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], obs: Union[str, Iterable[str], zfit.Space], name: str = 'Uniform')[source]

Bases: zfit.models.dist_tfp.WrapDistribution

Uniform distribution which is constant between low, high and zero outside.

Parameters:
  • low (Parameter) – Below this value, the pdf is zero.
  • high (Parameter) – Above this value, the pdf is zero.
  • obs (Space) – Observables and normalization range the pdf is defined in
  • name (str) – Name of the pdf
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, name: str = 'analytic_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Analytical integration over function and raise Error if not possible.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

Raises:
  • NotImplementedError – 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.
apply_yield(value: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = False, log: bool = False) → Union[float, tensorflow.python.framework.ops.Tensor]

If a norm_range is given, the value will be multiplied by the yield.

Parameters:
  • value (numerical) –
  • () (norm_range) –
  • log (bool) –
Returns:

numerical

as_func(norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = False)

Return a Function with the function model(x, norm_range=norm_range).

Parameters:() (norm_range) –
axes

Return the axes.

convert_sort_space(obs: Union[str, Iterable[str], zfit.Space] = None, axes: Union[int, Iterable[int]] = None, limits: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None) → Optional[zfit.core.limits.Space]

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

Parameters:
  • () (limits) –
  • ()
  • ()

Returns:

copy(**override_parameters) → zfit.core.basepdf.BasePDF

Creates a copy of the model.

Note: the copy model may continue to depend on the original initialization arguments.

Parameters:**override_parameters – String/value dictionary of initialization arguments to override with new value.
Returns:
A new instance of type(self) initialized from the union
of self.parameters and override_parameters, i.e., dict(self.parameters, **override_parameters).
Return type:model
create_extended(yield_: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], name_addition='_extended') → zfit.core.interfaces.ZfitPDF

Return an extended version of this pdf with yield yield_. The parameters are shared.

Parameters:
Returns:

ZfitPDF

create_projection_pdf(limits_to_integrate: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool]) → zfit.core.interfaces.ZfitPDF

Create a PDF projection by integrating out some of the dimensions.

The new projection pdf is still fully dependent on the pdf it was created with.

Parameters:limits_to_integrate (Space) –
Returns:a pdf without the dimensions from limits_to_integrate.
Return type:ZfitPDF
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, name: str = 'create_sampler') → 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.
  • () (name) – 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.
distribution
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_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)

get_yield() → Optional[zfit.core.parameter.Parameter]

Return the yield (only for extended models).

Returns:the yield of the current model or None
Return type:Parameter
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 = []
integrate(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Integrate the function over limits (normalized over norm_range if not False).

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space) – the limits to normalize over or False to integrate the unnormalized probability
  • name (str) – name of the operation shown in the tf.Graph
Returns:

py:class`tf.Tensor`: the integral value as a scalar with shape ()

is_extended

Flag to tell whether the model is extended or not.

Returns:
Return type:bool
log_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'log_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

Log probability density function normalized over norm_range.

Parameters:
  • x (numerical) – float or double Tensor.
  • norm_range (tuple, Space) – Space to normalize over
  • name (str) – Prepended to names of ops created by this function.
Returns:

a Tensor of type self.dtype.

Return type:

log_pdf

n_obs

Return the number of observables.

name

The name of the object.

norm_range

Return the current normalization range. If None and the `obs`have limits, they are returned.

Returns:The current normalization range
Return type:Space or None
normalization(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], name: str = 'normalization') → Union[float, tensorflow.python.framework.ops.Tensor]

Return the normalization of the function (usually the integral over limits).

Parameters:
  • limits (tuple, Space) – The limits on where to normalize over
  • name (str) –
Returns:

the normalization value

Return type:

Tensor

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

Numerical integration over the model.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

obs

Return the observables.

old_graph_caching_methods = []
params
partial_analytic_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_analytic_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Do analytical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

Raises:
  • NotImplementedError – if the analytic integral (over this limits) is not implemented
  • 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.
partial_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Partially integrate the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

partial_numeric_integrate(x: Union[float, tensorflow.python.framework.ops.Tensor], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_numeric_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Force numerical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

pdf(**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 (Space): the limits to integrate over.
    • norm_range (Space, 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, name: str = 'sample') → 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, Space) – In which region to sample in
  • name (str) –
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.
set_norm_range(norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool])

Set the normalization range (temporarily if used with contextmanager).

Parameters:norm_range (tuple, Space) –
space

Return the Space object that defines the dimensionality of the object.

unnormalized_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], component_norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None, name: str = 'unnormalized_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

PDF “unnormalized”. Use functions for unnormalized pdfs. this is only for performance in special cases.

Parameters:
  • x (numerical) – The value, have to be convertible to a Tensor
  • component_norm_range (Space) – The normalization range for the components. Needed for
  • composition (certain) – pdfs.
  • name (str) –
Returns:

1-dimensional tf.Tensor containing the unnormalized pdf.

Return type:

tf.Tensor

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) –
class zfit.models.dist_tfp.WrapDistribution(distribution, dist_params, obs, params=None, dist_kwargs=None, dtype=tf.float64, name=None, **kwargs)[source]

Bases: zfit.core.basepdf.BasePDF

Baseclass to wrap tensorflow-probability distributions automatically.

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, name: str = 'analytic_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Analytical integration over function and raise Error if not possible.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

Raises:
  • NotImplementedError – 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.
apply_yield(value: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = False, log: bool = False) → Union[float, tensorflow.python.framework.ops.Tensor]

If a norm_range is given, the value will be multiplied by the yield.

Parameters:
  • value (numerical) –
  • () (norm_range) –
  • log (bool) –
Returns:

numerical

as_func(norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = False)

Return a Function with the function model(x, norm_range=norm_range).

Parameters:() (norm_range) –
axes

Return the axes.

convert_sort_space(obs: Union[str, Iterable[str], zfit.Space] = None, axes: Union[int, Iterable[int]] = None, limits: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None) → Optional[zfit.core.limits.Space]

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

Parameters:
  • () (limits) –
  • ()
  • ()

Returns:

copy(**override_parameters) → zfit.core.basepdf.BasePDF

Creates a copy of the model.

Note: the copy model may continue to depend on the original initialization arguments.

Parameters:**override_parameters – String/value dictionary of initialization arguments to override with new value.
Returns:
A new instance of type(self) initialized from the union
of self.parameters and override_parameters, i.e., dict(self.parameters, **override_parameters).
Return type:model
create_extended(yield_: Union[zfit.core.interfaces.ZfitParameter, int, float, complex, tensorflow.python.framework.ops.Tensor], name_addition='_extended') → zfit.core.interfaces.ZfitPDF

Return an extended version of this pdf with yield yield_. The parameters are shared.

Parameters:
Returns:

ZfitPDF

create_projection_pdf(limits_to_integrate: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool]) → zfit.core.interfaces.ZfitPDF

Create a PDF projection by integrating out some of the dimensions.

The new projection pdf is still fully dependent on the pdf it was created with.

Parameters:limits_to_integrate (Space) –
Returns:a pdf without the dimensions from limits_to_integrate.
Return type:ZfitPDF
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, name: str = 'create_sampler') → 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.
  • () (name) – 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.
distribution
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_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)

get_yield() → Optional[zfit.core.parameter.Parameter]

Return the yield (only for extended models).

Returns:the yield of the current model or None
Return type:Parameter
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 = []
integrate(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Integrate the function over limits (normalized over norm_range if not False).

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space) – the limits to normalize over or False to integrate the unnormalized probability
  • name (str) – name of the operation shown in the tf.Graph
Returns:

py:class`tf.Tensor`: the integral value as a scalar with shape ()

is_extended

Flag to tell whether the model is extended or not.

Returns:
Return type:bool
log_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'log_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

Log probability density function normalized over norm_range.

Parameters:
  • x (numerical) – float or double Tensor.
  • norm_range (tuple, Space) – Space to normalize over
  • name (str) – Prepended to names of ops created by this function.
Returns:

a Tensor of type self.dtype.

Return type:

log_pdf

n_obs

Return the number of observables.

name

The name of the object.

norm_range

Return the current normalization range. If None and the `obs`have limits, they are returned.

Returns:The current normalization range
Return type:Space or None
normalization(limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], name: str = 'normalization') → Union[float, tensorflow.python.framework.ops.Tensor]

Return the normalization of the function (usually the integral over limits).

Parameters:
  • limits (tuple, Space) – The limits on where to normalize over
  • name (str) –
Returns:

the normalization value

Return type:

Tensor

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

Numerical integration over the model.

Parameters:
  • limits (tuple, Space) – the limits to integrate over
  • norm_range (tuple, Space, False) – the limits to normalize over
  • name (str) –
Returns:

the integral value

Return type:

Tensor

obs

Return the observables.

old_graph_caching_methods = []
params
partial_analytic_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_analytic_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Do analytical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

Raises:
  • NotImplementedError – if the analytic integral (over this limits) is not implemented
  • 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.
partial_integrate(x: Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor, zfit.Data], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_integrate') → Union[tensorflow.python.framework.ops.Tensor, zfit.Data]

Partially integrate the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

partial_numeric_integrate(x: Union[float, tensorflow.python.framework.ops.Tensor], limits: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool], norm_range: Union[Tuple[Tuple[float, ...]], Tuple[float, ...], bool] = None, name: str = 'partial_numeric_integrate') → Union[float, tensorflow.python.framework.ops.Tensor]

Force numerical partial integration of the function over the limits and evaluate it at x.

Dimension of limits and x have to add up to the full dimension and be therefore equal to the dimensions of norm_range (if not False)

Parameters:
  • x (numerical) – The value at which the partially integrated function will be evaluated
  • limits (tuple, Space) – the limits to integrate over. Can contain only some axes
  • norm_range (tuple, Space, False) – the limits to normalize over. Has to have all axes
  • name (str) –
Returns:

the value of the partially integrated function evaluated at x.

Return type:

Tensor

pdf(**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 (Space): the limits to integrate over.
    • norm_range (Space, 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, name: str = 'sample') → 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, Space) – In which region to sample in
  • name (str) –
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.
set_norm_range(norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool])

Set the normalization range (temporarily if used with contextmanager).

Parameters:norm_range (tuple, Space) –
space

Return the Space object that defines the dimensionality of the object.

unnormalized_pdf(x: Union[float, tensorflow.python.framework.ops.Tensor], component_norm_range: Union[Tuple[Tuple[Tuple[float, ...]]], Tuple[float, float], bool] = None, name: str = 'unnormalized_pdf') → Union[float, tensorflow.python.framework.ops.Tensor]

PDF “unnormalized”. Use functions for unnormalized pdfs. this is only for performance in special cases.

Parameters:
  • x (numerical) – The value, have to be convertible to a Tensor
  • component_norm_range (Space) – The normalization range for the components. Needed for
  • composition (certain) – pdfs.
  • name (str) –
Returns:

1-dimensional tf.Tensor containing the unnormalized pdf.

Return type:

tf.Tensor

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.dist_tfp.tfd_analytic_sample(n: int, dist: tensorflow_probability.python.distributions.distribution.Distribution, limits: Union[str, Iterable[str], zfit.Space])[source]

Sample analytically with a tfd.Distribution within the limits. No preprocessing.

Parameters:
  • n – Number of samples to get
  • dist – Distribution to sample from
  • limits – Limits to sample from within
Returns:

The sampled data with the number of samples and the number of observables.

Return type:

tf.Tensor (n, n_obs)