class TestDirect(object): def setup_method(self, test_method): self.pb = PowerBox(N, lambda k: k**-2., dim=1) def test_hermitian(self): ensure_hermitian(self.pb.delta_k()) def test_reality_elementwise(self): ensure_reality_elementwise(self.pb.delta_x()) def test_reality(self): ensure_reality(self.pb.delta_x())
class TestDirectEven(TestDirect): def setup_method(self, test_method): self.pb = PowerBox(N - 1, lambda k: k**-2., dim=2) def test_reality_elementwise(self): return True ## It won't be element-wise correct for even case. def test_reality(self): ensure_reality(self.pb.delta_x())
def test_power1d_ordinary_freq(): p = [0] * 40 for i in range(40): pb = PowerBox(8001, dim=1, pk=lambda k: 1.0 * k**-3., boxlength=1.0) p[i], k = get_power(pb.delta_x(), pb.boxlength) assert np.allclose(np.mean(np.array(p), axis=0)[2000:], 1.0 * k[2000:]**-3., rtol=2)
def test_resolution(): var = [0] * 6 for i in range(6): pb = PowerBox(64 * 2**i, dim=2, pk=lambda k: 1.0 * k**-2., boxlength=1.0, angular_freq=True) var[i] = np.var(gaussian_filter(pb.delta_x(), sigma=2**i, mode='wrap')) print(var / var[0]) assert np.allclose(var / var[0], 1, atol=1e-2)
def test_k_zero_ignore(): pb = PowerBox(50, dim=2, pk=lambda k: 1.0 * k**-2., boxlength=1.0, b=1) dx = pb.delta_x() p1, k1 = get_power(dx, pb.boxlength, bin_ave=False) p0, k0 = get_power(dx, pb.boxlength, ignore_zero_mode=True, bin_ave=False) assert np.all(k1 == k0) assert np.all(p1[1:] == p0[1:]) assert p1[0] != p0[0]
def test_ln_vs_straight_standard_freq(): # Set up two boxes with exactly the same parameters pb = PowerBox(128,lambda u : 12.*u**-2., dim=3,seed=1234,boxlength=1200.,a=0,b=2*np.pi) ln_pb = LogNormalPowerBox(128,lambda u : 12.*u**-2., dim=3,seed=1234,boxlength=1200.,a=0,b=2*np.pi) pk = get_power(pb.delta_x(),pb.boxlength,a=0,b=2*np.pi)[0] ln_pk = get_power(ln_pb.delta_x(), pb.boxlength,a=0,b=2*np.pi)[0] pk = pk[1:-1] ln_pk = ln_pk[1:-1] print(np.mean(np.abs((pk-ln_pk)/pk)), np.abs((pk-ln_pk)/pk)) assert np.mean(np.abs((pk-ln_pk)/pk)) < 2e-1 # 10% agreement
def test_power2d(): p = [0] * 5 for i in range(5): pb = PowerBox(200, dim=2, pk=lambda k: 1.0 * k**-2., boxlength=1.0, b=1) p[i], k = get_power(pb.delta_x(), pb.boxlength, b=1) assert np.allclose(np.mean(np.array(p), axis=0)[100:], 1.0 * k[100:]**-2., rtol=2)
def test_power1d_halfN(): p = [0] * 40 for i in range(40): pb = PowerBox(4001, dim=1, pk=lambda k: 1.0 * k**-3., boxlength=1.0, b=1) p[i], k = get_power(pb.delta_x(), pb.boxlength, b=1) assert np.allclose(np.mean(np.array(p), axis=0)[1000:], 1.0 * k[1000:]**-3., rtol=2)
def test_k_weights(): pb = PowerBox(50, dim=2, pk=lambda k: 1.0 * k**-2., boxlength=1.0, b=1) dx = pb.delta_x() k_weights = np.ones_like(dx) k_weights[:, 25] = 0 p1, k1 = get_power(dx, pb.boxlength, bin_ave=False) p0, k0 = get_power(dx, pb.boxlength, bin_ave=False, k_weights=k_weights) assert np.all(k1 == k0) assert not np.allclose(p1, p0)
def test_power3d(): pb = PowerBox(50, dim=2, pk=lambda k: 1.0 * k**-2., boxlength=1.0, b=1) p, k = get_power(pb.delta_x(), pb.boxlength, b=1) print(p / (1.0 * k**-2.)) assert np.allclose(p, 1.0 * k**-2., rtol=2)