Source code for zfit.core.dependents
# Copyright (c) 2020 zfit
import abc
import itertools
from typing import Iterable
from ordered_set import OrderedSet
from zfit.core.interfaces import ZfitDependentsMixin, ZfitObject
from zfit.util import ztyping
from zfit.util.container import convert_to_container
[docs]class BaseDependentsMixin(ZfitDependentsMixin):
@abc.abstractmethod
def _get_dependents(self) -> ztyping.DependentsType:
raise NotImplementedError
[docs] def get_dependents(self, only_floating: bool = True) -> ztyping.DependentsType:
"""Return a set of all independent :py:class:`~zfit.Parameter` that this object depends on.
Args:
only_floating (bool): If `True`, only return floating :py:class:`~zfit.Parameter`
"""
dependents = self._get_dependents()
if only_floating:
dependents = OrderedSet(filter(lambda p: p.floating, dependents))
return dependents
@staticmethod
def _extract_dependents(zfit_objects: Iterable[ZfitObject]) -> ztyping.DependentsType:
"""Calls the :py:meth:`~BaseDependentsMixin.get_dependents` method on every object and returns a combined set.
Args:
zfit_objects ():
Returns:
set(zfit.Parameter): A set of independent Parameters
"""
zfit_objects = convert_to_container(zfit_objects)
dependents = (obj.get_dependents(only_floating=False) for obj in zfit_objects)
dependents_set = OrderedSet(itertools.chain.from_iterable(dependents)) # flatten
return dependents_set