import abc
from .. import z as z
from ..core.loss import BaseLoss as BaseLoss
from ..util import ztyping as ztyping
from ..util.checks import NONE as NONE
from ..util.container import convert_to_container as convert_to_container
from ..util.warnings import warn_advanced_feature as warn_advanced_feature
from ..util.ztyping import ConstraintsInputType as ConstraintsInputType, OptionsInputType as OptionsInputType
from zfit._interfaces import ZfitBinnedData as ZfitBinnedData, ZfitBinnedPDF as ZfitBinnedPDF, ZfitParameter as ZfitParameter

def poisson_loss_calc(probs, values, log_offset=None, variances=None): ...

class BaseBinned(BaseLoss, metaclass=abc.ABCMeta):
    def __init__(self, model: ztyping.BinnedPDFInputType, data: ztyping.BinnedDataInputType, constraints: ConstraintsInputType = None, options: OptionsInputType = None) -> None: ...
    def create_new(self, model: ztyping.BinnedPDFInputType = ..., data: ztyping.BinnedDataInputType = ..., constraints: ConstraintsInputType = ..., options: OptionsInputType = ...): ...

class ExtendedBinnedNLL(BaseBinned):
    def __init__(self, model: ztyping.BinnedPDFInputType, data: ztyping.BinnedDataInputType, constraints: ConstraintsInputType = None, options: OptionsInputType = None) -> None: ...
    @property
    def is_extended(self): ...

class BinnedNLL(BaseBinned):
    def __init__(self, model: ztyping.BinnedPDFInputType, data: ztyping.BinnedDataInputType, constraints: ConstraintsInputType = None, options: OptionsInputType = None) -> None: ...
    @property
    def is_extended(self): ...

def chi2_loss_calc(probs, values, variances, log_offset=None, ignore_empty=None): ...

class BinnedChi2(BaseBinned):
    def __init__(self, model: ztyping.BinnedPDFInputType, data: ztyping.BinnedDataInputType, constraints: ConstraintsInputType = None, options: OptionsInputType = None) -> None: ...
    def check_precompile(self, *, params=None, force: bool = False): ...
    @property
    def is_extended(self): ...

class ExtendedBinnedChi2(BaseBinned):
    def __init__(self, model: ztyping.BinnedPDFInputType, data: ztyping.BinnedDataInputType, constraints: ConstraintsInputType = None, options: OptionsInputType = None) -> None: ...
    def check_precompile(self, *, params=None, force=None): ...
    @property
    def is_extended(self): ...
