import tensorflow as tf
from ..minimizers.interface import ZfitResult as ZfitResult
from ..util import ztyping as ztyping
from ..util.cache import GraphCachable as GraphCachable
from ..util.container import convert_to_container as convert_to_container
from ..util.exception import ParamNameNotUniqueError as ParamNameNotUniqueError
from _typeshed import Incomplete
from collections.abc import Iterable, Mapping
from ordered_set import OrderedSet
from zfit._interfaces import ZfitIndependentParameter as ZfitIndependentParameter, ZfitNumericParametrized as ZfitNumericParametrized, ZfitObject as ZfitObject, ZfitParameter as ZfitParameter, ZfitParametrized as ZfitParametrized

RESERVED_NAMES: Incomplete
valid_name_regex: str

def validate_preprocess_name(name: str) -> str: ...

class BaseObject(ZfitObject):
    def __init__(self, name, **kwargs) -> None: ...
    def __init_subclass__(cls, **kwargs) -> None: ...
    @property
    def name(self) -> str: ...
    def copy(self, deep: bool = False, name: str | None = None, **overwrite_params) -> ZfitObject: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self): ...

def convert_param_values(params: Mapping[str | ztyping.ParamType, float] | ZfitResult): ...

class BaseParametrized(BaseObject, ZfitParametrized):
    def __init__(self, params, autograd_params=None, **kwargs) -> None: ...
    def get_params(self, floating: bool | None = True, is_yield: bool | None = None, extract_independent: bool | None = True, *, autograd: bool | None = None) -> set[ZfitParameter]: ...
    @property
    def params(self) -> ztyping.ParameterType: ...

class BaseNumeric(GraphCachable, BaseParametrized, ZfitNumericParametrized, BaseObject):
    def __init__(self, **kwargs) -> None: ...
    @property
    def dtype(self) -> tf.DType: ...

def extract_filter_params(params: Iterable[ZfitParametrized] | ZfitParametrized, floating: bool | None = True, extract_independent: bool | None = True) -> OrderedSet[ZfitParameter]: ...
