Skip to content

Commit 6acb140

Browse files
committed
Add initial signal generator tests
1 parent 07c8c31 commit 6acb140

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

tests/test_signal_generator.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import numpy as np
2+
import pytest
3+
4+
import s2fft
5+
import s2fft.sampling as smp
6+
import s2fft.utils.signal_generator as gen
7+
8+
L_values_to_test = [4, 7, 64]
9+
L_lower_to_test = [0]
10+
spin_to_test = [-2, 0, 1]
11+
reality_values_to_test = [False, True]
12+
13+
14+
@pytest.mark.parametrize("L", L_values_to_test)
15+
@pytest.mark.parametrize("min_el", [0, 1])
16+
def test_complex_el_and_m_indices(L, min_el):
17+
expected_el_indices, expected_m_indices = np.array(
18+
[(el, m) for el in range(min_el, L) for m in range(1, el + 1)]
19+
).T
20+
el_indices, m_indices = gen.complex_el_and_m_indices(L, min_el)
21+
assert (el_indices == expected_el_indices).all()
22+
assert (m_indices == expected_m_indices).all()
23+
24+
25+
def check_flm_conjugate_symmetry(flm, L, min_el):
26+
for el in range(min_el, L):
27+
for m in range(el + 1):
28+
assert flm[el, L - 1 - m] == (-1) ** m * flm[el, L - 1 + m].conj()
29+
30+
31+
@pytest.mark.parametrize("L", L_values_to_test)
32+
@pytest.mark.parametrize("L_lower", L_lower_to_test)
33+
@pytest.mark.parametrize("spin", spin_to_test)
34+
@pytest.mark.parametrize("reality", reality_values_to_test)
35+
@pytest.mark.filterwarnings("ignore::RuntimeWarning")
36+
def test_generate_flm(rng, L, L_lower, spin, reality):
37+
if reality and spin != 0:
38+
pytest.skip("Reality only valid for scalar fields (spin=0).")
39+
flm = gen.generate_flm(rng, L, L_lower, spin, reality)
40+
assert flm.shape == smp.s2_samples.flm_shape(L)
41+
assert flm.dtype == np.complex128
42+
assert np.isfinite(flm).all()
43+
if reality:
44+
check_flm_conjugate_symmetry(flm, L, max(L_lower, abs(spin)))
45+
f_complex = s2fft.inverse(flm, L, spin=spin, reality=False, L_lower=L_lower)
46+
assert np.allclose(f_complex.imag, 0)
47+
f_real = s2fft.inverse(flm, L, spin=spin, reality=True, L_lower=L_lower)
48+
assert np.allclose(f_complex.real, f_real)

0 commit comments

Comments
 (0)