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
import tensorflow as tf
from .interfaces import ZfitPDF
from .parameter import ZfitParameterMixin
from ..util.cache import clear_graph_cache
from ..util.container import convert_to_container
__all__ = ["tester", "setup_function", "teardown_function"]
[docs]def setup_function():
pass
[docs]def teardown_function():
ZfitParameterMixin._existing_params.clear()
clear_graph_cache()
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()