Skip to content

Commit 3e4e8ad

Browse files
committed
Add test for generate_flmn
1 parent d976243 commit 3e4e8ad

File tree

1 file changed

+45
-2
lines changed

1 file changed

+45
-2
lines changed

tests/test_signal_generator.py

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import s2fft.sampling as smp
66
import s2fft.utils.signal_generator as gen
77

8-
L_values_to_test = [4, 7, 64]
9-
L_lower_to_test = [0]
8+
L_values_to_test = [6, 7, 16]
9+
L_lower_to_test = [0, 1]
1010
spin_to_test = [-2, 0, 1]
1111
reality_values_to_test = [False, True]
1212

@@ -74,3 +74,46 @@ def test_generate_flm(rng, L, L_lower, spin, reality):
7474
assert np.allclose(f_complex.imag, 0)
7575
f_real = s2fft.inverse(flm, L, spin=spin, reality=True, L_lower=L_lower)
7676
assert np.allclose(f_complex.real, f_real)
77+
78+
79+
def check_flmn_zeros(flmn, L, N, L_lower):
80+
for n in range(-N + 1, N):
81+
min_el = max(L_lower, abs(n))
82+
for el in range(L):
83+
for m in range(L):
84+
if el < min_el or m > el:
85+
assert (
86+
flmn[N - 1 + n, el, L - 1 + m]
87+
== flmn[N - 1 + n, el, L - 1 - m]
88+
== 0
89+
)
90+
91+
92+
def check_flmn_conjugate_symmetry(flmn, L, N, L_lower):
93+
for n in range(-N + 1, N):
94+
min_el = max(L_lower, abs(n))
95+
for el in range(min_el, L):
96+
for m in range(el + 1):
97+
assert (
98+
flmn[N - 1 - n, el, L - 1 - m]
99+
== (-1) ** (m + n) * flmn[N - 1 + n, el, L - 1 + m].conj()
100+
)
101+
102+
103+
@pytest.mark.parametrize("L", L_values_to_test)
104+
@pytest.mark.parametrize("N", [1, 2])
105+
@pytest.mark.parametrize("L_lower", L_lower_to_test)
106+
@pytest.mark.parametrize("reality", reality_values_to_test)
107+
@pytest.mark.filterwarnings("ignore::RuntimeWarning")
108+
def test_generate_flmn(rng, L, N, L_lower, reality):
109+
flmn = gen.generate_flmn(rng, L, N, L_lower, reality)
110+
assert flmn.shape == smp.so3_samples.flmn_shape(L, N)
111+
assert flmn.dtype == np.complex128
112+
assert np.isfinite(flmn).all()
113+
check_flmn_zeros(flmn, L, N, L_lower)
114+
if reality:
115+
check_flmn_conjugate_symmetry(flmn, L, N, L_lower)
116+
f_complex = s2fft.wigner.inverse(flmn, L, N, reality=False, L_lower=L_lower)
117+
assert np.allclose(f_complex.imag, 0)
118+
f_real = s2fft.wigner.inverse(flmn, L, N, reality=True, L_lower=L_lower)
119+
assert np.allclose(f_complex.real, f_real)

0 commit comments

Comments
 (0)