432 lines
10 KiB
Python
432 lines
10 KiB
Python
from collections.abc import Callable, Iterable, Sequence
|
|
from typing import (
|
|
Any,
|
|
Final,
|
|
Literal,
|
|
SupportsIndex,
|
|
TypeAlias,
|
|
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,
|
|
|
|
_FloatSeries,
|
|
_CoefSeries,
|
|
_ComplexSeries,
|
|
_ObjectSeries,
|
|
|
|
_ComplexArray,
|
|
_FloatArray,
|
|
_CoefArray,
|
|
_ObjectArray,
|
|
|
|
_SeriesLikeInt_co,
|
|
_SeriesLikeFloat_co,
|
|
_SeriesLikeComplex_co,
|
|
_SeriesLikeCoef_co,
|
|
|
|
_ArrayLikeCoef_co,
|
|
|
|
_FuncBinOp,
|
|
_FuncValND,
|
|
_FuncVanderND,
|
|
)
|
|
|
|
__all__: Final[Sequence[str]] = [
|
|
"as_series",
|
|
"format_float",
|
|
"getdomain",
|
|
"mapdomain",
|
|
"mapparms",
|
|
"trimcoef",
|
|
"trimseq",
|
|
]
|
|
|
|
_AnyLineF: TypeAlias = Callable[
|
|
[_CoefLike_co, _CoefLike_co],
|
|
_CoefArray,
|
|
]
|
|
_AnyMulF: TypeAlias = Callable[
|
|
[npt.ArrayLike, npt.ArrayLike],
|
|
_CoefArray,
|
|
]
|
|
_AnyVanderF: TypeAlias = Callable[
|
|
[npt.ArrayLike, SupportsIndex],
|
|
_CoefArray,
|
|
]
|
|
|
|
@overload
|
|
def as_series(
|
|
alist: npt.NDArray[np.integer[Any]] | _FloatArray,
|
|
trim: bool = ...,
|
|
) -> list[_FloatSeries]: ...
|
|
@overload
|
|
def as_series(
|
|
alist: _ComplexArray,
|
|
trim: bool = ...,
|
|
) -> list[_ComplexSeries]: ...
|
|
@overload
|
|
def as_series(
|
|
alist: _ObjectArray,
|
|
trim: bool = ...,
|
|
) -> list[_ObjectSeries]: ...
|
|
@overload
|
|
def as_series( # type: ignore[overload-overlap]
|
|
alist: Iterable[_FloatArray | npt.NDArray[np.integer[Any]]],
|
|
trim: bool = ...,
|
|
) -> list[_FloatSeries]: ...
|
|
@overload
|
|
def as_series(
|
|
alist: Iterable[_ComplexArray],
|
|
trim: bool = ...,
|
|
) -> list[_ComplexSeries]: ...
|
|
@overload
|
|
def as_series(
|
|
alist: Iterable[_ObjectArray],
|
|
trim: bool = ...,
|
|
) -> list[_ObjectSeries]: ...
|
|
@overload
|
|
def as_series( # type: ignore[overload-overlap]
|
|
alist: Iterable[_SeriesLikeFloat_co | float],
|
|
trim: bool = ...,
|
|
) -> list[_FloatSeries]: ...
|
|
@overload
|
|
def as_series(
|
|
alist: Iterable[_SeriesLikeComplex_co | complex],
|
|
trim: bool = ...,
|
|
) -> list[_ComplexSeries]: ...
|
|
@overload
|
|
def as_series(
|
|
alist: Iterable[_SeriesLikeCoef_co | object],
|
|
trim: bool = ...,
|
|
) -> list[_ObjectSeries]: ...
|
|
|
|
_T_seq = TypeVar("_T_seq", bound=_CoefArray | Sequence[_CoefLike_co])
|
|
def trimseq(seq: _T_seq) -> _T_seq: ...
|
|
|
|
@overload
|
|
def trimcoef( # type: ignore[overload-overlap]
|
|
c: npt.NDArray[np.integer[Any]] | _FloatArray,
|
|
tol: _FloatLike_co = ...,
|
|
) -> _FloatSeries: ...
|
|
@overload
|
|
def trimcoef(
|
|
c: _ComplexArray,
|
|
tol: _FloatLike_co = ...,
|
|
) -> _ComplexSeries: ...
|
|
@overload
|
|
def trimcoef(
|
|
c: _ObjectArray,
|
|
tol: _FloatLike_co = ...,
|
|
) -> _ObjectSeries: ...
|
|
@overload
|
|
def trimcoef( # type: ignore[overload-overlap]
|
|
c: _SeriesLikeFloat_co | float,
|
|
tol: _FloatLike_co = ...,
|
|
) -> _FloatSeries: ...
|
|
@overload
|
|
def trimcoef(
|
|
c: _SeriesLikeComplex_co | complex,
|
|
tol: _FloatLike_co = ...,
|
|
) -> _ComplexSeries: ...
|
|
@overload
|
|
def trimcoef(
|
|
c: _SeriesLikeCoef_co | object,
|
|
tol: _FloatLike_co = ...,
|
|
) -> _ObjectSeries: ...
|
|
|
|
@overload
|
|
def getdomain( # type: ignore[overload-overlap]
|
|
x: _FloatArray | npt.NDArray[np.integer[Any]],
|
|
) -> _Array2[np.float64]: ...
|
|
@overload
|
|
def getdomain(
|
|
x: _ComplexArray,
|
|
) -> _Array2[np.complex128]: ...
|
|
@overload
|
|
def getdomain(
|
|
x: _ObjectArray,
|
|
) -> _Array2[np.object_]: ...
|
|
@overload
|
|
def getdomain( # type: ignore[overload-overlap]
|
|
x: _SeriesLikeFloat_co | float,
|
|
) -> _Array2[np.float64]: ...
|
|
@overload
|
|
def getdomain(
|
|
x: _SeriesLikeComplex_co | complex,
|
|
) -> _Array2[np.complex128]: ...
|
|
@overload
|
|
def getdomain(
|
|
x: _SeriesLikeCoef_co | object,
|
|
) -> _Array2[np.object_]: ...
|
|
|
|
@overload
|
|
def mapparms( # type: ignore[overload-overlap]
|
|
old: npt.NDArray[np.floating[Any] | np.integer[Any]],
|
|
new: npt.NDArray[np.floating[Any] | np.integer[Any]],
|
|
) -> _Tuple2[np.floating[Any]]: ...
|
|
@overload
|
|
def mapparms(
|
|
old: npt.NDArray[np.number[Any]],
|
|
new: npt.NDArray[np.number[Any]],
|
|
) -> _Tuple2[np.complexfloating[Any, Any]]: ...
|
|
@overload
|
|
def mapparms(
|
|
old: npt.NDArray[np.object_ | np.number[Any]],
|
|
new: npt.NDArray[np.object_ | np.number[Any]],
|
|
) -> _Tuple2[object]: ...
|
|
@overload
|
|
def mapparms( # type: ignore[overload-overlap]
|
|
old: Sequence[float],
|
|
new: Sequence[float],
|
|
) -> _Tuple2[float]: ...
|
|
@overload
|
|
def mapparms(
|
|
old: Sequence[complex],
|
|
new: Sequence[complex],
|
|
) -> _Tuple2[complex]: ...
|
|
@overload
|
|
def mapparms(
|
|
old: _SeriesLikeFloat_co,
|
|
new: _SeriesLikeFloat_co,
|
|
) -> _Tuple2[np.floating[Any]]: ...
|
|
@overload
|
|
def mapparms(
|
|
old: _SeriesLikeComplex_co,
|
|
new: _SeriesLikeComplex_co,
|
|
) -> _Tuple2[np.complexfloating[Any, Any]]: ...
|
|
@overload
|
|
def mapparms(
|
|
old: _SeriesLikeCoef_co,
|
|
new: _SeriesLikeCoef_co,
|
|
) -> _Tuple2[object]: ...
|
|
|
|
@overload
|
|
def mapdomain( # type: ignore[overload-overlap]
|
|
x: _FloatLike_co,
|
|
old: _SeriesLikeFloat_co,
|
|
new: _SeriesLikeFloat_co,
|
|
) -> np.floating[Any]: ...
|
|
@overload
|
|
def mapdomain(
|
|
x: _NumberLike_co,
|
|
old: _SeriesLikeComplex_co,
|
|
new: _SeriesLikeComplex_co,
|
|
) -> np.complexfloating[Any, Any]: ...
|
|
@overload
|
|
def mapdomain( # type: ignore[overload-overlap]
|
|
x: npt.NDArray[np.floating[Any] | np.integer[Any]],
|
|
old: npt.NDArray[np.floating[Any] | np.integer[Any]],
|
|
new: npt.NDArray[np.floating[Any] | np.integer[Any]],
|
|
) -> _FloatSeries: ...
|
|
@overload
|
|
def mapdomain(
|
|
x: npt.NDArray[np.number[Any]],
|
|
old: npt.NDArray[np.number[Any]],
|
|
new: npt.NDArray[np.number[Any]],
|
|
) -> _ComplexSeries: ...
|
|
@overload
|
|
def mapdomain(
|
|
x: npt.NDArray[np.object_ | np.number[Any]],
|
|
old: npt.NDArray[np.object_ | np.number[Any]],
|
|
new: npt.NDArray[np.object_ | np.number[Any]],
|
|
) -> _ObjectSeries: ...
|
|
@overload
|
|
def mapdomain( # type: ignore[overload-overlap]
|
|
x: _SeriesLikeFloat_co,
|
|
old: _SeriesLikeFloat_co,
|
|
new: _SeriesLikeFloat_co,
|
|
) -> _FloatSeries: ...
|
|
@overload
|
|
def mapdomain(
|
|
x: _SeriesLikeComplex_co,
|
|
old: _SeriesLikeComplex_co,
|
|
new: _SeriesLikeComplex_co,
|
|
) -> _ComplexSeries: ...
|
|
@overload
|
|
def mapdomain(
|
|
x: _SeriesLikeCoef_co,
|
|
old:_SeriesLikeCoef_co,
|
|
new: _SeriesLikeCoef_co,
|
|
) -> _ObjectSeries: ...
|
|
@overload
|
|
def mapdomain(
|
|
x: _CoefLike_co,
|
|
old: _SeriesLikeCoef_co,
|
|
new: _SeriesLikeCoef_co,
|
|
) -> object: ...
|
|
|
|
def _nth_slice(
|
|
i: SupportsIndex,
|
|
ndim: SupportsIndex,
|
|
) -> tuple[None | slice, ...]: ...
|
|
|
|
_vander_nd: _FuncVanderND[Literal["_vander_nd"]]
|
|
_vander_nd_flat: _FuncVanderND[Literal["_vander_nd_flat"]]
|
|
|
|
# keep in sync with `._polytypes._FuncFromRoots`
|
|
@overload
|
|
def _fromroots( # type: ignore[overload-overlap]
|
|
line_f: _AnyLineF,
|
|
mul_f: _AnyMulF,
|
|
roots: _SeriesLikeFloat_co,
|
|
) -> _FloatSeries: ...
|
|
@overload
|
|
def _fromroots(
|
|
line_f: _AnyLineF,
|
|
mul_f: _AnyMulF,
|
|
roots: _SeriesLikeComplex_co,
|
|
) -> _ComplexSeries: ...
|
|
@overload
|
|
def _fromroots(
|
|
line_f: _AnyLineF,
|
|
mul_f: _AnyMulF,
|
|
roots: _SeriesLikeCoef_co,
|
|
) -> _ObjectSeries: ...
|
|
@overload
|
|
def _fromroots(
|
|
line_f: _AnyLineF,
|
|
mul_f: _AnyMulF,
|
|
roots: _SeriesLikeCoef_co,
|
|
) -> _CoefSeries: ...
|
|
|
|
_valnd: _FuncValND[Literal["_valnd"]]
|
|
_gridnd: _FuncValND[Literal["_gridnd"]]
|
|
|
|
# keep in sync with `_polytypes._FuncBinOp`
|
|
@overload
|
|
def _div( # type: ignore[overload-overlap]
|
|
mul_f: _AnyMulF,
|
|
c1: _SeriesLikeFloat_co,
|
|
c2: _SeriesLikeFloat_co,
|
|
) -> _Tuple2[_FloatSeries]: ...
|
|
@overload
|
|
def _div(
|
|
mul_f: _AnyMulF,
|
|
c1: _SeriesLikeComplex_co,
|
|
c2: _SeriesLikeComplex_co,
|
|
) -> _Tuple2[_ComplexSeries]: ...
|
|
@overload
|
|
def _div(
|
|
mul_f: _AnyMulF,
|
|
c1: _SeriesLikeCoef_co,
|
|
c2: _SeriesLikeCoef_co,
|
|
) -> _Tuple2[_ObjectSeries]: ...
|
|
@overload
|
|
def _div(
|
|
mul_f: _AnyMulF,
|
|
c1: _SeriesLikeCoef_co,
|
|
c2: _SeriesLikeCoef_co,
|
|
) -> _Tuple2[_CoefSeries]: ...
|
|
|
|
_add: Final[_FuncBinOp]
|
|
_sub: Final[_FuncBinOp]
|
|
|
|
# keep in sync with `_polytypes._FuncPow`
|
|
@overload
|
|
def _pow( # type: ignore[overload-overlap]
|
|
mul_f: _AnyMulF,
|
|
c: _SeriesLikeFloat_co,
|
|
pow: _AnyInt,
|
|
maxpower: None | _AnyInt = ...,
|
|
) -> _FloatSeries: ...
|
|
@overload
|
|
def _pow(
|
|
mul_f: _AnyMulF,
|
|
c: _SeriesLikeComplex_co,
|
|
pow: _AnyInt,
|
|
maxpower: None | _AnyInt = ...,
|
|
) -> _ComplexSeries: ...
|
|
@overload
|
|
def _pow(
|
|
mul_f: _AnyMulF,
|
|
c: _SeriesLikeCoef_co,
|
|
pow: _AnyInt,
|
|
maxpower: None | _AnyInt = ...,
|
|
) -> _ObjectSeries: ...
|
|
@overload
|
|
def _pow(
|
|
mul_f: _AnyMulF,
|
|
c: _SeriesLikeCoef_co,
|
|
pow: _AnyInt,
|
|
maxpower: None | _AnyInt = ...,
|
|
) -> _CoefSeries: ...
|
|
|
|
# keep in sync with `_polytypes._FuncFit`
|
|
@overload
|
|
def _fit( # type: ignore[overload-overlap]
|
|
vander_f: _AnyVanderF,
|
|
x: _SeriesLikeFloat_co,
|
|
y: _ArrayLikeFloat_co,
|
|
deg: _SeriesLikeInt_co,
|
|
domain: None | _SeriesLikeFloat_co = ...,
|
|
rcond: None | _FloatLike_co = ...,
|
|
full: Literal[False] = ...,
|
|
w: None | _SeriesLikeFloat_co = ...,
|
|
) -> _FloatArray: ...
|
|
@overload
|
|
def _fit(
|
|
vander_f: _AnyVanderF,
|
|
x: _SeriesLikeComplex_co,
|
|
y: _ArrayLikeComplex_co,
|
|
deg: _SeriesLikeInt_co,
|
|
domain: None | _SeriesLikeComplex_co = ...,
|
|
rcond: None | _FloatLike_co = ...,
|
|
full: Literal[False] = ...,
|
|
w: None | _SeriesLikeComplex_co = ...,
|
|
) -> _ComplexArray: ...
|
|
@overload
|
|
def _fit(
|
|
vander_f: _AnyVanderF,
|
|
x: _SeriesLikeCoef_co,
|
|
y: _ArrayLikeCoef_co,
|
|
deg: _SeriesLikeInt_co,
|
|
domain: None | _SeriesLikeCoef_co = ...,
|
|
rcond: None | _FloatLike_co = ...,
|
|
full: Literal[False] = ...,
|
|
w: None | _SeriesLikeCoef_co = ...,
|
|
) -> _CoefArray: ...
|
|
@overload
|
|
def _fit(
|
|
vander_f: _AnyVanderF,
|
|
x: _SeriesLikeCoef_co,
|
|
y: _SeriesLikeCoef_co,
|
|
deg: _SeriesLikeInt_co,
|
|
domain: None | _SeriesLikeCoef_co,
|
|
rcond: None | _FloatLike_co ,
|
|
full: Literal[True],
|
|
/,
|
|
w: None | _SeriesLikeCoef_co = ...,
|
|
) -> tuple[_CoefSeries, Sequence[np.inexact[Any] | np.int32]]: ...
|
|
@overload
|
|
def _fit(
|
|
vander_f: _AnyVanderF,
|
|
x: _SeriesLikeCoef_co,
|
|
y: _SeriesLikeCoef_co,
|
|
deg: _SeriesLikeInt_co,
|
|
domain: None | _SeriesLikeCoef_co = ...,
|
|
rcond: None | _FloatLike_co = ...,
|
|
*,
|
|
full: Literal[True],
|
|
w: None | _SeriesLikeCoef_co = ...,
|
|
) -> tuple[_CoefSeries, Sequence[np.inexact[Any] | np.int32]]: ...
|
|
|
|
def _as_int(x: SupportsIndex, desc: str) -> int: ...
|
|
def format_float(x: _FloatLike_co, parens: bool = ...) -> str: ...
|