from typing import overload

from pymeeus.Angle import Angle

class Interpolation:
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, a: Interpolation, /) -> None: ...
    @overload
    def __init__(self, a: list[float | Angle] | tuple[float | Angle, ...], /) -> None: ...
    @overload
    def __init__(
        self, a1: list[float | Angle] | tuple[float | Angle, ...], a2: list[float | Angle] | tuple[float | Angle, ...], /
    ) -> None: ...
    @overload
    def __init__(
        self, a1: float | Angle, a2: float | Angle, a3: float | Angle, a4: float | Angle, /, *rest: float | Angle
    ) -> None: ...

    @overload
    def set(self) -> None: ...
    @overload
    def set(self, a: Interpolation, /) -> None: ...
    @overload
    def set(self, a: list[float | Angle] | tuple[float | Angle, ...], /) -> None: ...
    @overload
    def set(
        self, a1: list[float | Angle] | tuple[float | Angle, ...], a2: list[float | Angle] | tuple[float | Angle, ...], /
    ) -> None: ...
    @overload
    def set(
        self, a1: float | Angle, a2: float | Angle, a3: float | Angle, a4: float | Angle, /, *rest: float | Angle
    ) -> None: ...

    def __len__(self) -> int: ...
    def get_tolerance(self) -> float: ...
    def set_tolerance(self, tol: float) -> None: ...
    def __call__(self, x: float | Angle) -> float | Angle: ...
    def derivative(self, x: float | Angle) -> float: ...
    def root(self, xl: float | Angle = 0, xh: float | Angle = 0, max_iter: int = 1000) -> float | Angle: ...
    def minmax(self, xl: float | Angle = 0, xh: float | Angle = 0, max_iter: int = 1000) -> float | Angle: ...

def main() -> None: ...
