Source code for zfit.core.testing
"""
Module for testing of the zfit components. Contains a singleton instance to register new PDFs and let
them be tested.
"""
# Copyright (c) 2020 zfit
from collections import OrderedDict
from typing import Callable, Tuple, List, Union, Iterable
import scipy.stats
from .interfaces import ZfitPDF
from .parameter import ZfitParameterMixin
from ..util.container import convert_to_container
__all__ = ["tester", "setup_function", "teardown_function"]
[docs]def setup_function():
pass
[docs]def teardown_function():
ZfitParameterMixin._existing_names.clear()
from zfit.z.zextension import FunctionWrapperRegistry
for registry in FunctionWrapperRegistry.registries:
registry.reset()
for method in FunctionWrapperRegistry.wrapped_functions:
method._created_variables = None
method._stateful_fn = None
method._stateless_fn = None
method._descriptor_cache.clear()
from zfit.util.cache import Cachable
Cachable.old_graph_caching_methods.clear()
class BaseTester:
pass
class AutoTester:
def __init__(self):
self.pdfs = []
def register_pdf(self, pdf_class: ZfitPDF, params_factories: Union[Callable, Iterable[Callable]],
scipy_dist: scipy.stats.rv_continuous = None,
analytic_int_axes: Union[None, int, List[Tuple[int, ...]]] = None):
# if not isinstance(pdf_class, ZfitPDF):
# raise TypeError(f"PDF {pdf_class} is not a ZfitPDF.")
params_factories = convert_to_container(params_factories)
if isinstance(analytic_int_axes, tuple):
raise TypeError(f"`analytic_int_axes` is either a number or a list of tuples.")
analytic_int_axes = convert_to_container(analytic_int_axes, non_containers=[tuple])
if analytic_int_axes is not None:
isinstance(analytic_int_axes)
registration = OrderedDict((('pdf_class', pdf_class),
("params", params_factories),
("scipy_dist", scipy_dist)))
self.pdfs.append(registration)
def create_parameterized_pdfs(self):
if len(self.pdfs) == 0:
return [], []
argnames = list(self.pdfs[0].keys())
argvals = [[] * len(argnames)]
for pdf in self.pdfs:
for i, param in enumerate(pdf.values()):
argvals[i].append(param)
return argnames, argvals
tester = AutoTester()