import tensorflow as tf
import zfit
from ..util.container import convert_to_container as convert_to_container
from ..util.deprecation import deprecated as deprecated
from ..util.exception import BreakingAPIChangeError as BreakingAPIChangeError
from .zextension import convert_to_tensor as convert_to_tensor
from collections.abc import Callable as Callable, Iterable
from typing import NoReturn

def poly_complex(*args, real_x: bool = False) -> tf.Tensor: ...
def numerical_gradient(func: Callable, params: Iterable[zfit.Parameter]) -> tf.Tensor: ...
def numerical_value_gradient(func: Callable, params: Iterable[zfit.Parameter]) -> [tf.Tensor, tf.Tensor]: ...
def numerical_value_gradients(*args, **kwargs) -> tuple[tf.Tensor, tf.Tensor]: ...
def numerical_hessian(func: Callable | None, params: Iterable[zfit.Parameter], hessian=None) -> tf.Tensor: ...
def numerical_value_gradient_hessian(func: Callable | None, params: Iterable[zfit.Parameter], gradient: Callable | None = None, hessian: str | None = None) -> [tf.Tensor, tf.Tensor, tf.Tensor]: ...
def numerical_value_gradients_hessian(*args, **kwargs) -> tuple[tf.Tensor, tf.Tensor, tf.Tensor]: ...
def autodiff_gradient(func: Callable, params: Iterable[zfit.Parameter]) -> tf.Tensor: ...
def autodiff_value_gradient(func: Callable, params: Iterable[zfit.Parameter]) -> [tf.Tensor, tf.Tensor]: ...
def autodiff_value_gradients(*args, **kwargs) -> NoReturn: ...
def autodiff_hessian(func: Callable, params: Iterable[zfit.Parameter], hessian=None) -> tf.Tensor: ...
def automatic_value_gradient_hessian(func: Callable | None = None, params: Iterable[zfit.Parameter] | None = None, value_grad_func=None, hessian=None) -> [tf.Tensor, tf.Tensor, tf.Tensor]: ...
def automatic_value_gradients_hessian(*args, **kwargs) -> NoReturn: ...
def reduce_geometric_mean(input_tensor, axis=None, weights=None, keepdims: bool = False) -> tf.Tensor: ...
def log(x) -> tf.Tensor: ...
def weighted_quantile(x, quantiles, weights=None, side: str = 'middle') -> tf.Tensor: ...
