|
1 | | -from typing import TypeAlias |
| 1 | +from typing import Any, Final, TypeAlias |
2 | 2 |
|
3 | 3 | import numpy as np |
| 4 | +import optype as op |
4 | 5 | import optype.numpy as onp |
5 | 6 |
|
6 | 7 | __all__ = ["CZT", "ZoomFFT", "czt", "czt_points", "zoom_fft"] |
7 | 8 |
|
8 | | -_Float: TypeAlias = np.float64 | np.float32 |
9 | | -_Complex: TypeAlias = np.complex128 | np.complex64 |
| 9 | +_Complex: TypeAlias = np.complex128 | np.clongdouble |
10 | 10 |
|
| 11 | +### |
| 12 | + |
| 13 | +# TODO: make generic on `_Complex` |
11 | 14 | class CZT: |
12 | | - def __init__(self, /, n: int, m: int | None = None, w: onp.ToComplex | None = None, a: onp.ToComplex = 1 + 0j) -> None: ... |
| 15 | + w: Final[onp.ToComplex] |
| 16 | + a: Final[onp.ToComplex] |
| 17 | + m: Final[int | np.integer[Any]] |
| 18 | + n: Final[int | np.integer[Any]] |
| 19 | + |
| 20 | + def __init__( |
| 21 | + self, |
| 22 | + /, |
| 23 | + n: onp.ToJustInt, |
| 24 | + m: onp.ToJustInt | None = None, |
| 25 | + w: onp.ToComplex | None = None, |
| 26 | + a: onp.ToComplex = 1 + 0j, |
| 27 | + ) -> None: ... |
13 | 28 | def __call__(self, /, x: onp.ToComplexND, *, axis: int = -1) -> onp.ArrayND[_Complex]: ... |
14 | | - def points(self, /) -> onp.ArrayND[_Complex]: ... |
| 29 | + def points(self, /) -> onp.Array1D[_Complex]: ... |
15 | 30 |
|
16 | 31 | class ZoomFFT(CZT): |
17 | | - w: complex |
18 | | - a: complex |
19 | | - |
20 | | - m: int |
21 | | - n: int |
22 | | - |
23 | 32 | f1: onp.ToFloat |
24 | 33 | f2: onp.ToFloat |
25 | 34 | fs: onp.ToFloat |
26 | 35 |
|
27 | 36 | def __init__( |
28 | 37 | self, |
29 | 38 | /, |
30 | | - n: int, |
31 | | - fn: onp.ToFloat | onp.ToFloatND, |
32 | | - m: int | None = None, |
| 39 | + n: onp.ToJustInt, |
| 40 | + fn: onp.ToFloat | onp.ToFloat1D, |
| 41 | + m: onp.ToJustInt | None = None, |
33 | 42 | *, |
34 | 43 | fs: onp.ToFloat = 2, |
35 | | - endpoint: bool = False, |
| 44 | + endpoint: onp.ToBool = False, |
36 | 45 | ) -> None: ... |
37 | 46 |
|
38 | | -def czt_points(m: int, w: onp.ToComplex | None = None, a: onp.ToComplex = ...) -> onp.ArrayND[_Complex]: ... |
| 47 | +# |
| 48 | +def _validate_sizes(n: onp.ToJustInt, m: onp.ToJustInt | None) -> int | np.integer[Any]: ... |
| 49 | + |
| 50 | +# |
| 51 | +def czt_points( |
| 52 | + m: onp.ToJustInt, |
| 53 | + w: onp.ToComplex | None = None, |
| 54 | + a: onp.ToComplex = 1 + 0j, |
| 55 | +) -> onp.Array1D[_Complex]: ... |
| 56 | + |
| 57 | +# |
39 | 58 | def czt( |
40 | 59 | x: onp.ToComplexND, |
41 | | - m: int | None = None, |
| 60 | + m: onp.ToJustInt | None = None, |
42 | 61 | w: onp.ToComplex | None = None, |
43 | 62 | a: onp.ToComplex = 1 + 0j, |
44 | 63 | *, |
45 | | - axis: int = -1, |
| 64 | + axis: op.CanIndex = -1, |
46 | 65 | ) -> onp.ArrayND[_Complex]: ... |
| 66 | + |
| 67 | +# |
47 | 68 | def zoom_fft( |
48 | 69 | x: onp.ToComplexND, |
49 | 70 | fn: onp.ToFloatND | onp.ToFloat, |
50 | | - m: int | None = None, |
| 71 | + m: onp.ToJustInt | None = None, |
51 | 72 | *, |
52 | | - fs: int = 2, |
53 | | - endpoint: bool = False, |
54 | | - axis: int = -1, |
55 | | -) -> onp.ArrayND[_Float | _Complex]: ... |
| 73 | + fs: onp.ToFloat = 2, |
| 74 | + endpoint: onp.ToBool = False, |
| 75 | + axis: op.CanIndex = -1, |
| 76 | +) -> onp.ArrayND[_Complex]: ... |
0 commit comments