Source code for zfit.sample
# Copyright (c) 2024 zfit
from __future__ import annotations
from collections.abc import Iterable
from zfit import z
from zfit.core.interfaces import ZfitPDF
from zfit.util.exception import NotExtendedPDFError
from zfit.z.random import counts_multinomial, sample_with_replacement
from .util.container import convert_to_container
__all__ = ["poisson", "sample_with_replacement", "counts_multinomial"]
[docs]
def poisson(n=None, pdfs: Iterable[ZfitPDF] | None = None):
if n and pdfs:
msg = "Cannot specify both, `n`, and `pdfs`, at the same time."
raise ValueError(msg)
if pdfs:
pdfs = convert_to_container(pdfs)
not_extended = [pdf.is_extended for pdf in pdfs]
if not_extended:
msg = f"The following pdfs are not extended but need to be: {not_extended}"
raise NotExtendedPDFError(msg)
if len(pdfs) > 1:
msg = "More than one model (currently) not supported."
raise ValueError(msg)
# single pdf only implementation here
yield_ = pdfs[0].get_yield()
else:
yield_ = n
return z.random.poisson(lam=yield_)