182 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			182 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from collections.abc import Callable, Iterable
							 | 
						||
| 
								 | 
							
								from typing import Any, Concatenate, Final, Self, TypeVar, overload
							 | 
						||
| 
								 | 
							
								from typing import Literal as L
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import numpy as np
							 | 
						||
| 
								 | 
							
								import numpy.typing as npt
							 | 
						||
| 
								 | 
							
								from numpy._typing import _IntLike_co
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from ._polybase import ABCPolyBase
							 | 
						||
| 
								 | 
							
								from ._polytypes import (
							 | 
						||
| 
								 | 
							
								    _Array1,
							 | 
						||
| 
								 | 
							
								    _Array2,
							 | 
						||
| 
								 | 
							
								    _CoefSeries,
							 | 
						||
| 
								 | 
							
								    _FuncBinOp,
							 | 
						||
| 
								 | 
							
								    _FuncCompanion,
							 | 
						||
| 
								 | 
							
								    _FuncDer,
							 | 
						||
| 
								 | 
							
								    _FuncFit,
							 | 
						||
| 
								 | 
							
								    _FuncFromRoots,
							 | 
						||
| 
								 | 
							
								    _FuncGauss,
							 | 
						||
| 
								 | 
							
								    _FuncInteg,
							 | 
						||
| 
								 | 
							
								    _FuncLine,
							 | 
						||
| 
								 | 
							
								    _FuncPoly2Ortho,
							 | 
						||
| 
								 | 
							
								    _FuncPow,
							 | 
						||
| 
								 | 
							
								    _FuncPts,
							 | 
						||
| 
								 | 
							
								    _FuncRoots,
							 | 
						||
| 
								 | 
							
								    _FuncUnOp,
							 | 
						||
| 
								 | 
							
								    _FuncVal,
							 | 
						||
| 
								 | 
							
								    _FuncVal2D,
							 | 
						||
| 
								 | 
							
								    _FuncVal3D,
							 | 
						||
| 
								 | 
							
								    _FuncValFromRoots,
							 | 
						||
| 
								 | 
							
								    _FuncVander,
							 | 
						||
| 
								 | 
							
								    _FuncVander2D,
							 | 
						||
| 
								 | 
							
								    _FuncVander3D,
							 | 
						||
| 
								 | 
							
								    _FuncWeight,
							 | 
						||
| 
								 | 
							
								    _Series,
							 | 
						||
| 
								 | 
							
								    _SeriesLikeCoef_co,
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								from .polyutils import trimcoef as chebtrim
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__all__ = [
							 | 
						||
| 
								 | 
							
								    "chebzero",
							 | 
						||
| 
								 | 
							
								    "chebone",
							 | 
						||
| 
								 | 
							
								    "chebx",
							 | 
						||
| 
								 | 
							
								    "chebdomain",
							 | 
						||
| 
								 | 
							
								    "chebline",
							 | 
						||
| 
								 | 
							
								    "chebadd",
							 | 
						||
| 
								 | 
							
								    "chebsub",
							 | 
						||
| 
								 | 
							
								    "chebmulx",
							 | 
						||
| 
								 | 
							
								    "chebmul",
							 | 
						||
| 
								 | 
							
								    "chebdiv",
							 | 
						||
| 
								 | 
							
								    "chebpow",
							 | 
						||
| 
								 | 
							
								    "chebval",
							 | 
						||
| 
								 | 
							
								    "chebder",
							 | 
						||
| 
								 | 
							
								    "chebint",
							 | 
						||
| 
								 | 
							
								    "cheb2poly",
							 | 
						||
| 
								 | 
							
								    "poly2cheb",
							 | 
						||
| 
								 | 
							
								    "chebfromroots",
							 | 
						||
| 
								 | 
							
								    "chebvander",
							 | 
						||
| 
								 | 
							
								    "chebfit",
							 | 
						||
| 
								 | 
							
								    "chebtrim",
							 | 
						||
| 
								 | 
							
								    "chebroots",
							 | 
						||
| 
								 | 
							
								    "chebpts1",
							 | 
						||
| 
								 | 
							
								    "chebpts2",
							 | 
						||
| 
								 | 
							
								    "Chebyshev",
							 | 
						||
| 
								 | 
							
								    "chebval2d",
							 | 
						||
| 
								 | 
							
								    "chebval3d",
							 | 
						||
| 
								 | 
							
								    "chebgrid2d",
							 | 
						||
| 
								 | 
							
								    "chebgrid3d",
							 | 
						||
| 
								 | 
							
								    "chebvander2d",
							 | 
						||
| 
								 | 
							
								    "chebvander3d",
							 | 
						||
| 
								 | 
							
								    "chebcompanion",
							 | 
						||
| 
								 | 
							
								    "chebgauss",
							 | 
						||
| 
								 | 
							
								    "chebweight",
							 | 
						||
| 
								 | 
							
								    "chebinterpolate",
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_NumberOrObjectT = TypeVar("_NumberOrObjectT", bound=np.number | np.object_)
							 | 
						||
| 
								 | 
							
								def _cseries_to_zseries(c: npt.NDArray[_NumberOrObjectT]) -> _Series[_NumberOrObjectT]: ...
							 | 
						||
| 
								 | 
							
								def _zseries_to_cseries(zs: npt.NDArray[_NumberOrObjectT]) -> _Series[_NumberOrObjectT]: ...
							 | 
						||
| 
								 | 
							
								def _zseries_mul(
							 | 
						||
| 
								 | 
							
								    z1: npt.NDArray[_NumberOrObjectT],
							 | 
						||
| 
								 | 
							
								    z2: npt.NDArray[_NumberOrObjectT],
							 | 
						||
| 
								 | 
							
								) -> _Series[_NumberOrObjectT]: ...
							 | 
						||
| 
								 | 
							
								def _zseries_div(
							 | 
						||
| 
								 | 
							
								    z1: npt.NDArray[_NumberOrObjectT],
							 | 
						||
| 
								 | 
							
								    z2: npt.NDArray[_NumberOrObjectT],
							 | 
						||
| 
								 | 
							
								) -> _Series[_NumberOrObjectT]: ...
							 | 
						||
| 
								 | 
							
								def _zseries_der(zs: npt.NDArray[_NumberOrObjectT]) -> _Series[_NumberOrObjectT]: ...
							 | 
						||
| 
								 | 
							
								def _zseries_int(zs: npt.NDArray[_NumberOrObjectT]) -> _Series[_NumberOrObjectT]: ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								poly2cheb: _FuncPoly2Ortho[L["poly2cheb"]]
							 | 
						||
| 
								 | 
							
								cheb2poly: _FuncUnOp[L["cheb2poly"]]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								chebdomain: Final[_Array2[np.float64]]
							 | 
						||
| 
								 | 
							
								chebzero: Final[_Array1[np.int_]]
							 | 
						||
| 
								 | 
							
								chebone: Final[_Array1[np.int_]]
							 | 
						||
| 
								 | 
							
								chebx: Final[_Array2[np.int_]]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								chebline: _FuncLine[L["chebline"]]
							 | 
						||
| 
								 | 
							
								chebfromroots: _FuncFromRoots[L["chebfromroots"]]
							 | 
						||
| 
								 | 
							
								chebadd: _FuncBinOp[L["chebadd"]]
							 | 
						||
| 
								 | 
							
								chebsub: _FuncBinOp[L["chebsub"]]
							 | 
						||
| 
								 | 
							
								chebmulx: _FuncUnOp[L["chebmulx"]]
							 | 
						||
| 
								 | 
							
								chebmul: _FuncBinOp[L["chebmul"]]
							 | 
						||
| 
								 | 
							
								chebdiv: _FuncBinOp[L["chebdiv"]]
							 | 
						||
| 
								 | 
							
								chebpow: _FuncPow[L["chebpow"]]
							 | 
						||
| 
								 | 
							
								chebder: _FuncDer[L["chebder"]]
							 | 
						||
| 
								 | 
							
								chebint: _FuncInteg[L["chebint"]]
							 | 
						||
| 
								 | 
							
								chebval: _FuncVal[L["chebval"]]
							 | 
						||
| 
								 | 
							
								chebval2d: _FuncVal2D[L["chebval2d"]]
							 | 
						||
| 
								 | 
							
								chebval3d: _FuncVal3D[L["chebval3d"]]
							 | 
						||
| 
								 | 
							
								chebvalfromroots: _FuncValFromRoots[L["chebvalfromroots"]]
							 | 
						||
| 
								 | 
							
								chebgrid2d: _FuncVal2D[L["chebgrid2d"]]
							 | 
						||
| 
								 | 
							
								chebgrid3d: _FuncVal3D[L["chebgrid3d"]]
							 | 
						||
| 
								 | 
							
								chebvander: _FuncVander[L["chebvander"]]
							 | 
						||
| 
								 | 
							
								chebvander2d: _FuncVander2D[L["chebvander2d"]]
							 | 
						||
| 
								 | 
							
								chebvander3d: _FuncVander3D[L["chebvander3d"]]
							 | 
						||
| 
								 | 
							
								chebfit: _FuncFit[L["chebfit"]]
							 | 
						||
| 
								 | 
							
								chebcompanion: _FuncCompanion[L["chebcompanion"]]
							 | 
						||
| 
								 | 
							
								chebroots: _FuncRoots[L["chebroots"]]
							 | 
						||
| 
								 | 
							
								chebgauss: _FuncGauss[L["chebgauss"]]
							 | 
						||
| 
								 | 
							
								chebweight: _FuncWeight[L["chebweight"]]
							 | 
						||
| 
								 | 
							
								chebpts1: _FuncPts[L["chebpts1"]]
							 | 
						||
| 
								 | 
							
								chebpts2: _FuncPts[L["chebpts2"]]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# keep in sync with `Chebyshev.interpolate`
							 | 
						||
| 
								 | 
							
								_RT = TypeVar("_RT", bound=np.number | np.bool | np.object_)
							 | 
						||
| 
								 | 
							
								@overload
							 | 
						||
| 
								 | 
							
								def chebinterpolate(
							 | 
						||
| 
								 | 
							
								    func: np.ufunc,
							 | 
						||
| 
								 | 
							
								    deg: _IntLike_co,
							 | 
						||
| 
								 | 
							
								    args: tuple[()] = ...,
							 | 
						||
| 
								 | 
							
								) -> npt.NDArray[np.float64 | np.complex128 | np.object_]: ...
							 | 
						||
| 
								 | 
							
								@overload
							 | 
						||
| 
								 | 
							
								def chebinterpolate(
							 | 
						||
| 
								 | 
							
								    func: Callable[[npt.NDArray[np.float64]], _RT],
							 | 
						||
| 
								 | 
							
								    deg: _IntLike_co,
							 | 
						||
| 
								 | 
							
								    args: tuple[()] = ...,
							 | 
						||
| 
								 | 
							
								) -> npt.NDArray[_RT]: ...
							 | 
						||
| 
								 | 
							
								@overload
							 | 
						||
| 
								 | 
							
								def chebinterpolate(
							 | 
						||
| 
								 | 
							
								    func: Callable[Concatenate[npt.NDArray[np.float64], ...], _RT],
							 | 
						||
| 
								 | 
							
								    deg: _IntLike_co,
							 | 
						||
| 
								 | 
							
								    args: Iterable[Any],
							 | 
						||
| 
								 | 
							
								) -> npt.NDArray[_RT]: ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Chebyshev(ABCPolyBase[L["T"]]):
							 | 
						||
| 
								 | 
							
								    @overload
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    def interpolate(
							 | 
						||
| 
								 | 
							
								        cls,
							 | 
						||
| 
								 | 
							
								        func: Callable[[npt.NDArray[np.float64]], _CoefSeries],
							 | 
						||
| 
								 | 
							
								        deg: _IntLike_co,
							 | 
						||
| 
								 | 
							
								        domain: _SeriesLikeCoef_co | None = ...,
							 | 
						||
| 
								 | 
							
								        args: tuple[()] = ...,
							 | 
						||
| 
								 | 
							
								    ) -> Self: ...
							 | 
						||
| 
								 | 
							
								    @overload
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    def interpolate(
							 | 
						||
| 
								 | 
							
								        cls,
							 | 
						||
| 
								 | 
							
								        func: Callable[
							 | 
						||
| 
								 | 
							
								            Concatenate[npt.NDArray[np.float64], ...],
							 | 
						||
| 
								 | 
							
								            _CoefSeries,
							 | 
						||
| 
								 | 
							
								        ],
							 | 
						||
| 
								 | 
							
								        deg: _IntLike_co,
							 | 
						||
| 
								 | 
							
								        domain: _SeriesLikeCoef_co | None = ...,
							 | 
						||
| 
								 | 
							
								        *,
							 | 
						||
| 
								 | 
							
								        args: Iterable[Any],
							 | 
						||
| 
								 | 
							
								    ) -> Self: ...
							 | 
						||
| 
								 | 
							
								    @overload
							 | 
						||
| 
								 | 
							
								    @classmethod
							 | 
						||
| 
								 | 
							
								    def interpolate(
							 | 
						||
| 
								 | 
							
								        cls,
							 | 
						||
| 
								 | 
							
								        func: Callable[
							 | 
						||
| 
								 | 
							
								            Concatenate[npt.NDArray[np.float64], ...],
							 | 
						||
| 
								 | 
							
								            _CoefSeries,
							 | 
						||
| 
								 | 
							
								        ],
							 | 
						||
| 
								 | 
							
								        deg: _IntLike_co,
							 | 
						||
| 
								 | 
							
								        domain: _SeriesLikeCoef_co | None,
							 | 
						||
| 
								 | 
							
								        args: Iterable[Any],
							 | 
						||
| 
								 | 
							
								    ) -> Self: ...
							 |