298 lines
8.6 KiB
Python
298 lines
8.6 KiB
Python
|
import abc
|
||
|
import decimal
|
||
|
import numbers
|
||
|
import sys
|
||
|
from collections.abc import Iterator, Mapping, Sequence
|
||
|
from typing import (
|
||
|
TYPE_CHECKING,
|
||
|
Any,
|
||
|
ClassVar,
|
||
|
Final,
|
||
|
Generic,
|
||
|
Literal,
|
||
|
SupportsIndex,
|
||
|
TypeAlias,
|
||
|
TypeGuard,
|
||
|
TypeVar,
|
||
|
overload,
|
||
|
)
|
||
|
|
||
|
import numpy as np
|
||
|
import numpy.typing as npt
|
||
|
from numpy._typing import (
|
||
|
_FloatLike_co,
|
||
|
_NumberLike_co,
|
||
|
|
||
|
_ArrayLikeFloat_co,
|
||
|
_ArrayLikeComplex_co,
|
||
|
)
|
||
|
|
||
|
from ._polytypes import (
|
||
|
_AnyInt,
|
||
|
_CoefLike_co,
|
||
|
|
||
|
_Array2,
|
||
|
_Tuple2,
|
||
|
|
||
|
_Series,
|
||
|
_CoefSeries,
|
||
|
|
||
|
_SeriesLikeInt_co,
|
||
|
_SeriesLikeCoef_co,
|
||
|
|
||
|
_ArrayLikeCoefObject_co,
|
||
|
_ArrayLikeCoef_co,
|
||
|
)
|
||
|
|
||
|
if sys.version_info >= (3, 11):
|
||
|
from typing import LiteralString
|
||
|
elif TYPE_CHECKING:
|
||
|
from typing_extensions import LiteralString
|
||
|
else:
|
||
|
LiteralString: TypeAlias = str
|
||
|
|
||
|
|
||
|
__all__: Final[Sequence[str]] = ("ABCPolyBase",)
|
||
|
|
||
|
|
||
|
_NameCo = TypeVar("_NameCo", bound=None | LiteralString, covariant=True)
|
||
|
_Self = TypeVar("_Self", bound="ABCPolyBase")
|
||
|
_Other = TypeVar("_Other", bound="ABCPolyBase")
|
||
|
|
||
|
_AnyOther: TypeAlias = ABCPolyBase | _CoefLike_co | _SeriesLikeCoef_co
|
||
|
_Hundred: TypeAlias = Literal[100]
|
||
|
|
||
|
|
||
|
class ABCPolyBase(Generic[_NameCo], metaclass=abc.ABCMeta):
|
||
|
__hash__: ClassVar[None] # type: ignore[assignment]
|
||
|
__array_ufunc__: ClassVar[None]
|
||
|
|
||
|
maxpower: ClassVar[_Hundred]
|
||
|
_superscript_mapping: ClassVar[Mapping[int, str]]
|
||
|
_subscript_mapping: ClassVar[Mapping[int, str]]
|
||
|
_use_unicode: ClassVar[bool]
|
||
|
|
||
|
basis_name: _NameCo
|
||
|
coef: _CoefSeries
|
||
|
domain: _Array2[np.inexact[Any] | np.object_]
|
||
|
window: _Array2[np.inexact[Any] | np.object_]
|
||
|
|
||
|
_symbol: LiteralString
|
||
|
@property
|
||
|
def symbol(self, /) -> LiteralString: ...
|
||
|
|
||
|
def __init__(
|
||
|
self,
|
||
|
/,
|
||
|
coef: _SeriesLikeCoef_co,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
symbol: str = ...,
|
||
|
) -> None: ...
|
||
|
|
||
|
@overload
|
||
|
def __call__(self, /, arg: _Other) -> _Other: ...
|
||
|
# TODO: Once `_ShapeType@ndarray` is covariant and bounded (see #26081),
|
||
|
# additionally include 0-d arrays as input types with scalar return type.
|
||
|
@overload
|
||
|
def __call__(
|
||
|
self,
|
||
|
/,
|
||
|
arg: _FloatLike_co | decimal.Decimal | numbers.Real | np.object_,
|
||
|
) -> np.float64 | np.complex128: ...
|
||
|
@overload
|
||
|
def __call__(
|
||
|
self,
|
||
|
/,
|
||
|
arg: _NumberLike_co | numbers.Complex,
|
||
|
) -> np.complex128: ...
|
||
|
@overload
|
||
|
def __call__(self, /, arg: _ArrayLikeFloat_co) -> (
|
||
|
npt.NDArray[np.float64]
|
||
|
| npt.NDArray[np.complex128]
|
||
|
| npt.NDArray[np.object_]
|
||
|
): ...
|
||
|
@overload
|
||
|
def __call__(
|
||
|
self,
|
||
|
/,
|
||
|
arg: _ArrayLikeComplex_co,
|
||
|
) -> npt.NDArray[np.complex128] | npt.NDArray[np.object_]: ...
|
||
|
@overload
|
||
|
def __call__(
|
||
|
self,
|
||
|
/,
|
||
|
arg: _ArrayLikeCoefObject_co,
|
||
|
) -> npt.NDArray[np.object_]: ...
|
||
|
|
||
|
def __str__(self, /) -> str: ...
|
||
|
def __repr__(self, /) -> str: ...
|
||
|
def __format__(self, fmt_str: str, /) -> str: ...
|
||
|
def __eq__(self, x: object, /) -> bool: ...
|
||
|
def __ne__(self, x: object, /) -> bool: ...
|
||
|
def __neg__(self: _Self, /) -> _Self: ...
|
||
|
def __pos__(self: _Self, /) -> _Self: ...
|
||
|
def __add__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __sub__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __mul__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __truediv__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __floordiv__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __mod__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __divmod__(self: _Self, x: _AnyOther, /) -> _Tuple2[_Self]: ...
|
||
|
def __pow__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __radd__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __rsub__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __rmul__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __rtruediv__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __rfloordiv__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __rmod__(self: _Self, x: _AnyOther, /) -> _Self: ...
|
||
|
def __rdivmod__(self: _Self, x: _AnyOther, /) -> _Tuple2[_Self]: ...
|
||
|
def __len__(self, /) -> int: ...
|
||
|
def __iter__(self, /) -> Iterator[np.inexact[Any] | object]: ...
|
||
|
def __getstate__(self, /) -> dict[str, Any]: ...
|
||
|
def __setstate__(self, dict: dict[str, Any], /) -> None: ...
|
||
|
|
||
|
def has_samecoef(self, /, other: ABCPolyBase) -> bool: ...
|
||
|
def has_samedomain(self, /, other: ABCPolyBase) -> bool: ...
|
||
|
def has_samewindow(self, /, other: ABCPolyBase) -> bool: ...
|
||
|
@overload
|
||
|
def has_sametype(self: _Self, /, other: ABCPolyBase) -> TypeGuard[_Self]: ...
|
||
|
@overload
|
||
|
def has_sametype(self, /, other: object) -> Literal[False]: ...
|
||
|
|
||
|
def copy(self: _Self, /) -> _Self: ...
|
||
|
def degree(self, /) -> int: ...
|
||
|
def cutdeg(self: _Self, /) -> _Self: ...
|
||
|
def trim(self: _Self, /, tol: _FloatLike_co = ...) -> _Self: ...
|
||
|
def truncate(self: _Self, /, size: _AnyInt) -> _Self: ...
|
||
|
|
||
|
@overload
|
||
|
def convert(
|
||
|
self,
|
||
|
domain: None | _SeriesLikeCoef_co,
|
||
|
kind: type[_Other],
|
||
|
/,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
) -> _Other: ...
|
||
|
@overload
|
||
|
def convert(
|
||
|
self,
|
||
|
/,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
*,
|
||
|
kind: type[_Other],
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
) -> _Other: ...
|
||
|
@overload
|
||
|
def convert(
|
||
|
self: _Self,
|
||
|
/,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
kind: type[_Self] = ...,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
) -> _Self: ...
|
||
|
|
||
|
def mapparms(self, /) -> _Tuple2[Any]: ...
|
||
|
|
||
|
def integ(
|
||
|
self: _Self, /,
|
||
|
m: SupportsIndex = ...,
|
||
|
k: _CoefLike_co | _SeriesLikeCoef_co = ...,
|
||
|
lbnd: None | _CoefLike_co = ...,
|
||
|
) -> _Self: ...
|
||
|
|
||
|
def deriv(self: _Self, /, m: SupportsIndex = ...) -> _Self: ...
|
||
|
|
||
|
def roots(self, /) -> _CoefSeries: ...
|
||
|
|
||
|
def linspace(
|
||
|
self, /,
|
||
|
n: SupportsIndex = ...,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
) -> _Tuple2[_Series[np.float64 | np.complex128]]: ...
|
||
|
|
||
|
@overload
|
||
|
@classmethod
|
||
|
def fit(
|
||
|
cls: type[_Self], /,
|
||
|
x: _SeriesLikeCoef_co,
|
||
|
y: _SeriesLikeCoef_co,
|
||
|
deg: int | _SeriesLikeInt_co,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
rcond: _FloatLike_co = ...,
|
||
|
full: Literal[False] = ...,
|
||
|
w: None | _SeriesLikeCoef_co = ...,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
symbol: str = ...,
|
||
|
) -> _Self: ...
|
||
|
@overload
|
||
|
@classmethod
|
||
|
def fit(
|
||
|
cls: type[_Self], /,
|
||
|
x: _SeriesLikeCoef_co,
|
||
|
y: _SeriesLikeCoef_co,
|
||
|
deg: int | _SeriesLikeInt_co,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
rcond: _FloatLike_co = ...,
|
||
|
*,
|
||
|
full: Literal[True],
|
||
|
w: None | _SeriesLikeCoef_co = ...,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
symbol: str = ...,
|
||
|
) -> tuple[_Self, Sequence[np.inexact[Any] | np.int32]]: ...
|
||
|
@overload
|
||
|
@classmethod
|
||
|
def fit(
|
||
|
cls: type[_Self],
|
||
|
x: _SeriesLikeCoef_co,
|
||
|
y: _SeriesLikeCoef_co,
|
||
|
deg: int | _SeriesLikeInt_co,
|
||
|
domain: None | _SeriesLikeCoef_co,
|
||
|
rcond: _FloatLike_co,
|
||
|
full: Literal[True], /,
|
||
|
w: None | _SeriesLikeCoef_co = ...,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
symbol: str = ...,
|
||
|
) -> tuple[_Self, Sequence[np.inexact[Any] | np.int32]]: ...
|
||
|
|
||
|
@classmethod
|
||
|
def fromroots(
|
||
|
cls: type[_Self], /,
|
||
|
roots: _ArrayLikeCoef_co,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
symbol: str = ...,
|
||
|
) -> _Self: ...
|
||
|
|
||
|
@classmethod
|
||
|
def identity(
|
||
|
cls: type[_Self], /,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
symbol: str = ...,
|
||
|
) -> _Self: ...
|
||
|
|
||
|
@classmethod
|
||
|
def basis(
|
||
|
cls: type[_Self], /,
|
||
|
deg: _AnyInt,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
symbol: str = ...,
|
||
|
) -> _Self: ...
|
||
|
|
||
|
@classmethod
|
||
|
def cast(
|
||
|
cls: type[_Self], /,
|
||
|
series: ABCPolyBase,
|
||
|
domain: None | _SeriesLikeCoef_co = ...,
|
||
|
window: None | _SeriesLikeCoef_co = ...,
|
||
|
) -> _Self: ...
|
||
|
|
||
|
@classmethod
|
||
|
def _str_term_unicode(cls, i: str, arg_str: str) -> str: ...
|
||
|
@staticmethod
|
||
|
def _str_term_ascii(i: str, arg_str: str) -> str: ...
|
||
|
@staticmethod
|
||
|
def _repr_latex_term(i: str, arg_str: str, needs_parens: bool) -> str: ...
|