|
| 1 | +from collections.abc import Callable |
| 2 | +from typing import Literal, TypeAlias, overload |
| 3 | + |
| 4 | +import numpy as np |
| 5 | +import optype as op |
| 6 | +import optype.numpy as onp |
1 | 7 | from scipy._typing import Untyped
|
2 | 8 |
|
3 | 9 | __all__ = [
|
@@ -49,29 +55,128 @@ __all__ = [
|
49 | 55 | "zpk2tf",
|
50 | 56 | ]
|
51 | 57 |
|
52 |
| -EPSILON: float |
| 58 | +_Float1D: TypeAlias = onp.Array1D[np.float64] |
| 59 | +_FloatND: TypeAlias = onp.ArrayND[np.float64] |
| 60 | +_Complex1D: TypeAlias = onp.Array1D[np.complex128] |
| 61 | +_ComplexND: TypeAlias = onp.ArrayND[np.complex128] |
| 62 | +_Inexact1D: TypeAlias = onp.Array1D[np.float64 | np.complex128] |
| 63 | +_InexactND: TypeAlias = onp.ArrayND[np.float64 | np.complex128] |
53 | 64 |
|
54 |
| -filter_dict: Untyped |
55 |
| -band_dict: Untyped |
56 |
| -bessel_norms: Untyped |
| 65 | +### |
57 | 66 |
|
58 | 67 | class BadCoefficients(UserWarning): ...
|
59 | 68 |
|
60 |
| -def findfreqs(num: Untyped, den: Untyped, N: Untyped, kind: str = "ba") -> Untyped: ... |
61 |
| -def freqs(b: Untyped, a: Untyped, worN: int = 200, plot: Untyped | None = None) -> Untyped: ... |
62 |
| -def freqs_zpk(z: Untyped, p: Untyped, k: Untyped, worN: int = 200) -> Untyped: ... |
| 69 | +# |
| 70 | +def findfreqs(num: onp.ToComplex1D, den: onp.ToComplex1D, N: op.CanIndex, kind: Literal["ba", "zp"] = "ba") -> _Float1D: ... |
| 71 | + |
| 72 | +# |
| 73 | +@overload # worN: real |
| 74 | +def freqs( |
| 75 | + b: onp.ToComplex1D, |
| 76 | + a: onp.ToComplex1D, |
| 77 | + worN: op.CanIndex | onp.ToFloat1D = 200, |
| 78 | + plot: Callable[[_Float1D, _Complex1D], object] | None = None, |
| 79 | +) -> tuple[_Float1D, _Complex1D]: ... |
| 80 | +@overload # worN: complex |
| 81 | +def freqs( |
| 82 | + b: onp.ToComplex1D, |
| 83 | + a: onp.ToComplex1D, |
| 84 | + worN: onp.ToComplex1D, |
| 85 | + plot: Callable[[_Float1D, _Complex1D], object] | Callable[[_Complex1D, _Complex1D], object] | None = None, |
| 86 | +) -> tuple[_Inexact1D, _Complex1D]: ... |
| 87 | + |
| 88 | +# |
| 89 | +@overload # worN: real |
| 90 | +def freqs_zpk( |
| 91 | + z: onp.ToComplex1D, |
| 92 | + p: onp.ToComplex1D, |
| 93 | + k: onp.ToComplex1D, |
| 94 | + worN: op.CanIndex | onp.ToFloat1D = 200, |
| 95 | +) -> tuple[_Float1D, _Complex1D]: ... |
| 96 | +@overload # worN: complex |
| 97 | +def freqs_zpk( |
| 98 | + z: onp.ToComplex1D, |
| 99 | + p: onp.ToComplex1D, |
| 100 | + k: onp.ToComplex1D, |
| 101 | + worN: onp.ToComplex1D, |
| 102 | +) -> tuple[_Inexact1D, _Complex1D]: ... |
| 103 | + |
| 104 | +# |
| 105 | +@overload # worN: real |
63 | 106 | def freqz(
|
64 |
| - b: Untyped, |
65 |
| - a: int = 1, |
66 |
| - worN: int = 512, |
67 |
| - whole: bool = False, |
68 |
| - plot: Untyped | None = None, |
69 |
| - fs: Untyped = ..., |
| 107 | + b: onp.ToComplex | onp.ToComplexND, |
| 108 | + a: onp.ToComplex | onp.ToComplexND = 1, |
| 109 | + worN: op.CanIndex | onp.ToFloat1D = 512, |
| 110 | + whole: op.CanBool = False, |
| 111 | + plot: Callable[[_FloatND, _ComplexND], object] | None = None, |
| 112 | + fs: onp.ToFloat = ..., # 2 * pi |
70 | 113 | include_nyquist: bool = False,
|
71 |
| -) -> Untyped: ... |
72 |
| -def freqz_zpk(z: Untyped, p: Untyped, k: Untyped, worN: int = 512, whole: bool = False, fs: Untyped = ...) -> Untyped: ... |
73 |
| -def group_delay(system: Untyped, w: int = 512, whole: bool = False, fs: Untyped = ...) -> Untyped: ... |
74 |
| -def sosfreqz(sos: Untyped, worN: int = 512, whole: bool = False, fs: Untyped = ...) -> Untyped: ... |
| 114 | +) -> tuple[_FloatND, _ComplexND]: ... |
| 115 | +@overload # worN: complex |
| 116 | +def freqz( |
| 117 | + b: onp.ToComplex | onp.ToComplexND, |
| 118 | + a: onp.ToComplex | onp.ToComplexND = 1, |
| 119 | + worN: op.CanIndex | onp.ToComplex1D = 512, |
| 120 | + whole: op.CanBool = False, |
| 121 | + plot: Callable[[_FloatND, _ComplexND], object] | None = None, |
| 122 | + fs: onp.ToFloat = ..., # 2 * pi |
| 123 | + include_nyquist: bool = False, |
| 124 | +) -> tuple[_InexactND, _ComplexND]: ... |
| 125 | + |
| 126 | +# |
| 127 | +@overload # worN: real |
| 128 | +def freqz_zpk( |
| 129 | + z: onp.ToComplex1D, |
| 130 | + p: onp.ToComplex1D, |
| 131 | + k: onp.ToComplex1D, |
| 132 | + worN: op.CanIndex | onp.ToFloat1D = 512, |
| 133 | + whole: op.CanBool = False, |
| 134 | + fs: onp.ToFloat = ..., # 2 * pi |
| 135 | +) -> tuple[_FloatND, _ComplexND]: ... |
| 136 | +@overload # worN: complex |
| 137 | +def freqz_zpk( |
| 138 | + z: onp.ToComplex1D, |
| 139 | + p: onp.ToComplex1D, |
| 140 | + k: onp.ToComplex1D, |
| 141 | + worN: onp.ToComplex1D, |
| 142 | + whole: op.CanBool = False, |
| 143 | + fs: onp.ToFloat = ..., # 2 * pi |
| 144 | +) -> tuple[_InexactND, _ComplexND]: ... |
| 145 | + |
| 146 | +# |
| 147 | +@overload # w: real |
| 148 | +def group_delay( |
| 149 | + system: tuple[onp.ToComplex1D, onp.ToComplex1D], |
| 150 | + w: op.CanIndex | onp.ToFloat1D | None = 512, |
| 151 | + whole: op.CanBool = False, |
| 152 | + fs: onp.ToFloat = ..., # 2 * pi |
| 153 | +) -> tuple[_Float1D, _Float1D]: ... |
| 154 | +@overload # w: complex |
| 155 | +def group_delay( |
| 156 | + system: tuple[onp.ToComplex1D, onp.ToComplex1D], |
| 157 | + w: onp.ToComplex1D, |
| 158 | + whole: op.CanBool = False, |
| 159 | + fs: onp.ToFloat = ..., # 2 * pi |
| 160 | +) -> tuple[_Inexact1D, _Float1D]: ... |
| 161 | + |
| 162 | +# |
| 163 | +@overload # worN: real |
| 164 | +def sosfreqz( |
| 165 | + sos: onp.ToFloat2D, |
| 166 | + worN: op.CanIndex | onp.ToFloat1D = 512, |
| 167 | + whole: op.CanBool = False, |
| 168 | + fs: onp.ToFloat = ..., # 2 * pi |
| 169 | +) -> tuple[_Float1D, _Complex1D]: ... |
| 170 | +@overload # worN: real |
| 171 | +def sosfreqz( |
| 172 | + sos: onp.ToFloat2D, |
| 173 | + worN: onp.ToComplex1D, |
| 174 | + whole: op.CanBool = False, |
| 175 | + fs: onp.ToFloat = ..., # 2 * pi |
| 176 | +) -> tuple[_Inexact1D, _Complex1D]: ... |
| 177 | + |
| 178 | +# TODO(jorenham): https://github.com/jorenham/scipy-stubs/issues/99 |
| 179 | + |
75 | 180 | def tf2zpk(b: Untyped, a: Untyped) -> Untyped: ...
|
76 | 181 | def zpk2tf(z: Untyped, p: Untyped, k: Untyped) -> Untyped: ...
|
77 | 182 | def tf2sos(b: Untyped, a: Untyped, pairing: Untyped | None = None, *, analog: bool = False) -> Untyped: ...
|
|
0 commit comments