import nanobind
from typing import Any, Callable, overload

ExtractGradient: nanobind.nb_func
ExtractValue: nanobind.nb_func
InitializeAutoDiff: nanobind.nb_func
InitializeAutoDiffTuple: Callable

class AutoDiffXd:
    @overload
    def __init__(self, value: float) -> None: ...
    @overload
    def __init__(self, value: float, derivatives) -> None: ...
    @overload
    def __init__(self, value: float, size: int, offset: int) -> None: ...
    def abs(self) -> AutoDiffXd: ...
    def acos(self) -> AutoDiffXd: ...
    def arccos(self, *args, **kwargs): ...
    def arcsin(self, *args, **kwargs): ...
    def arctan(self) -> AutoDiffXd: ...
    def arctan2(self, *args, **kwargs): ...
    def asin(self) -> AutoDiffXd: ...
    def atan(self) -> AutoDiffXd: ...
    @overload
    def atan2(self, x: AutoDiffXd) -> AutoDiffXd: ...
    @overload
    def atan2(self, y, x) -> Any: ...
    def ceil(self) -> float: ...
    def cos(self) -> AutoDiffXd: ...
    def cosh(self) -> AutoDiffXd: ...
    def derivatives(self, *args, **kwargs): ...
    def exp(self) -> AutoDiffXd: ...
    def floor(self) -> float: ...
    def log(self) -> AutoDiffXd: ...
    def max(self, arg: AutoDiffXd) -> AutoDiffXd: ...
    def min(self, arg: AutoDiffXd) -> AutoDiffXd: ...
    def pow(self, arg: float) -> AutoDiffXd: ...
    def sin(self) -> AutoDiffXd: ...
    def sinh(self) -> AutoDiffXd: ...
    def sqrt(self) -> AutoDiffXd: ...
    def tan(self) -> AutoDiffXd: ...
    def tanh(self) -> AutoDiffXd: ...
    def value(self) -> float: ...
    @overload
    def __abs__(self) -> AutoDiffXd: ...
    @overload
    def __abs__(self) -> AutoDiffXd: ...
    def __add__(self, arg: AutoDiffXd) -> AutoDiffXd: ...
    def __ceil__(self) -> float: ...
    def __copy__(self) -> AutoDiffXd: ...
    def __deepcopy__(self, arg: dict) -> AutoDiffXd: ...
    def __eq__(self, arg: AutoDiffXd) -> bool: ...
    def __floor__(self) -> float: ...
    def __ge__(self, arg: AutoDiffXd) -> bool: ...
    def __gt__(self, arg: AutoDiffXd) -> bool: ...
    def __le__(self, arg: AutoDiffXd) -> bool: ...
    def __lt__(self, arg: AutoDiffXd) -> bool: ...
    def __mul__(self, arg: AutoDiffXd) -> AutoDiffXd: ...
    def __ne__(self, arg: AutoDiffXd) -> bool: ...
    def __neg__(self) -> AutoDiffXd: ...
    def __pow__(self, arg: float) -> AutoDiffXd: ...
    def __radd__(self, arg: float) -> AutoDiffXd: ...
    def __rmul__(self, arg: float) -> AutoDiffXd: ...
    def __rsub__(self, arg: float) -> AutoDiffXd: ...
    def __rtruediv__(self, arg: float) -> AutoDiffXd: ...
    def __sub__(self, arg: AutoDiffXd) -> AutoDiffXd: ...
    def __truediv__(self, arg: AutoDiffXd) -> AutoDiffXd: ...
