Skip to content

Commit a36c498

Browse files
authored
✨ complete signal._filter_design frequency response functions (#287)
1 parent e078bf4 commit a36c498

File tree

1 file changed

+122
-17
lines changed

1 file changed

+122
-17
lines changed

scipy-stubs/signal/_filter_design.pyi

+122-17
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
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
17
from scipy._typing import Untyped
28

39
__all__ = [
@@ -49,29 +55,128 @@ __all__ = [
4955
"zpk2tf",
5056
]
5157

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]
5364

54-
filter_dict: Untyped
55-
band_dict: Untyped
56-
bessel_norms: Untyped
65+
###
5766

5867
class BadCoefficients(UserWarning): ...
5968

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
63106
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
70113
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+
75180
def tf2zpk(b: Untyped, a: Untyped) -> Untyped: ...
76181
def zpk2tf(z: Untyped, p: Untyped, k: Untyped) -> Untyped: ...
77182
def tf2sos(b: Untyped, a: Untyped, pairing: Untyped | None = None, *, analog: bool = False) -> Untyped: ...

0 commit comments

Comments
 (0)