from ..models.functions import ProdFunc as ProdFunc, SumFunc as SumFunc
from ..models.functor import ProductPDF as ProductPDF, SumPDF as SumPDF
from ..util import ztyping as ztyping
from ..util.exception import BreakingAPIChangeError as BreakingAPIChangeError, FunctionNotImplemented as FunctionNotImplemented, IntentionAmbiguousError as IntentionAmbiguousError, ModelIncompatibleError as ModelIncompatibleError
from .parameter import convert_to_parameter as convert_to_parameter
from collections.abc import Callable as Callable
from zfit._interfaces import ZfitFunc as ZfitFunc, ZfitModel as ZfitModel, ZfitPDF as ZfitPDF, ZfitParameter as ZfitParameter

def multiply(object1: ztyping.BaseObjectType, object2: ztyping.BaseObjectType) -> ztyping.BaseObjectType: ...
def multiply_pdf_pdf(pdf1: ZfitPDF, pdf2: ZfitPDF, name: str = 'multiply_pdf_pdf') -> ProductPDF: ...
def multiply_func_func(func1: ZfitFunc, func2: ZfitFunc, name: str = 'multiply_func_func') -> ProdFunc: ...
def multiply_param_func(param: ZfitParameter, func: ZfitFunc) -> ZfitFunc: ...
def multiply_param_param(param1: ZfitParameter, param2: ZfitParameter) -> ZfitParameter: ...
def add(object1: ztyping.BaseObjectType, object2: ztyping.BaseObjectType) -> ztyping.BaseObjectType: ...
def add_pdf_pdf(pdf1: ZfitPDF, pdf2: ZfitPDF, name: str = 'add_pdf_pdf') -> SumPDF: ...
def add_func_func(func1: ZfitFunc, func2: ZfitFunc, name: str = 'add_func_func') -> SumFunc: ...
def add_param_func(param: ZfitParameter, func: ZfitFunc) -> ZfitFunc: ...
def add_param_param(param1: ZfitParameter, param2: ZfitParameter) -> ZfitParameter: ...
def convert_pdf_to_func(pdf: ZfitPDF, norm: ztyping.LimitsType) -> ZfitFunc: ...
def convert_func_to_pdf(func: ZfitFunc | Callable, obs=None, name=None) -> ZfitPDF: ...
