Exemplo n.º 1
0
def test_constrain_correlation_nolag():
    f1 = filters.GaussianFilter(radius=5)
    fh = FieldHandler(Ndim=3, Lbox=50, dimensions=16, Pk=(k, Pk), filter=f1)
    f2 = filters.GaussianFilter(radius=6)
    f3 = filters.GaussianFilter(radius=7)
    f4 = filters.GaussianFilter(radius=8)

    X1 = np.array([0, 0, 0])

    c1 = C.DensityConstrain(X1, filter=f1, value=1.69, field_handler=fh)
    c2 = C.GradientConstrain(X1, filter=f2, value=[0, 0, 0], field_handler=fh)
    c3 = C.HessianConstrain(X1,
                            filter=f3,
                            value=[0, 0, 0, 0, 0, 0],
                            field_handler=fh)
    c4 = C.ThirdDerivativeConstrain(X1,
                                    filter=f4,
                                    value=list(range(10)),
                                    field_handler=fh)

    fh.add_constrain(c1)
    fh.add_constrain(c2)
    fh.add_constrain(c3)
    fh.add_constrain(c4)

    cov = fh.compute_covariance()

    # Check positive definite
    evals = np.linalg.eigvalsh(cov)
    assert_array_less(np.zeros_like(evals), evals)

    # Check symmetry
    assert_allclose(cov, cov.T)
Exemplo n.º 2
0
def test_xi():
    positions = np.random.rand(10, 3) * 20

    # Build reference
    c = Correlator(quiet=True)
    c.add_point([0, 0, 0], ["hessian"], 5)
    for x in positions:
        c.add_point(x, ["delta"], 5)
    ref = c.cov[:6, 6:]

    # Build answer
    WG = filters.GaussianFilter(radius=5)
    fh = FieldHandler(Ndim=3,
                      Lbox=2,
                      dimensions=128,
                      filter=WG,
                      Pk=(c.k, c.Pk))
    c_hess = C.HessianConstrain([0, 0, 0],
                                filter=WG,
                                field_handler=fh,
                                value=None)

    order = [0, 3, 5, 1, 2, 4]
    ans = (c_hess.xi(positions) / (fh.sigma(0) * fh.sigma(2)))[:, 0, order].T

    # Check
    assert_allclose(ref, ans, rtol=5e-2)
Exemplo n.º 3
0
def test_measures():
    f1 = filters.GaussianFilter(radius=5)
    fh = FieldHandler(Ndim=3, Lbox=15, dimensions=16, Pk=(k, Pk), filter=f1)
    dx = fh.Lbox / fh.dimensions
    sfield = fh.get_smoothed(f1)

    # Test density measurement
    c = C.DensityConstrain([8, 8, 8], filter=f1, value=1, field_handler=fh)
    val = c.measure()
    tgt = sfield[8, 8, 8]
    assert_allclose(val, tgt)

    # Test gradient measurement
    c = C.GradientConstrain([8, 8, 8],
                            filter=f1,
                            value=[0, 0, 0],
                            field_handler=fh)
    val = c.measure()
    tgt = np.array(np.gradient(sfield, dx))[:, 8, 8, 8]
    assert_allclose(val, tgt)

    # Test hessian measurement
    c = C.HessianConstrain([8, 8, 8],
                           filter=f1,
                           value=[0] * 6,
                           field_handler=fh)
    val = c.measure()
    tgt = np.array(np.gradient(np.gradient(sfield, dx), dx,
                               axis=(-3, -2, -1)))[:, :, 8, 8, 8]
    assert_allclose(val, tgt)
Exemplo n.º 4
0
def test_constrain_initialisation():
    filter = filters.GaussianFilter(radius=5)
    fh = FieldHandler(Ndim=3,
                      Lbox=50,
                      dimensions=16,
                      Pk=(k, Pk),
                      filter=filter)
    c = C.Constrain(position=[0, 0, 0],
                    filter=filter,
                    value=1.69,
                    field_handler=fh)
    c
Exemplo n.º 5
0
def test_sigma():
    filt = filters.GaussianFilter(radius=5)
    fh = FieldHandler(Ndim=3, Lbox=50, dimensions=16, Pk=(k, Pk), filter=filt)

    def test_sigma_n(i):
        got = fh.sigma(i)
        expected = np.sqrt(
            np.trapz(k ** (2 + 2 * i) * Pk * filt.W(k) ** 2, k) / (2 * np.pi ** 2)
        )

        assert_allclose(got, expected)

    for i in range(-5, 5):
        yield test_sigma_n, i
Exemplo n.º 6
0
def test_full_correlation():
    f1 = filters.GaussianFilter(radius=5)
    f2 = filters.GaussianFilter(radius=6)
    f3 = filters.GaussianFilter(radius=7)

    X1 = np.array([0, 0, 0])
    X2 = np.array([1, 2, 3])
    X3 = X2 * 2

    # Reference
    c = Correlator(quiet=True)
    c.add_point(X1, ["density"], f1.radius)
    c.add_point(X2, ["grad_delta"], f2.radius)
    c.add_point(X3, ["hessian"], f3.radius)
    U = Utils(c.k, c.Pk)
    # Compute matrix of sigma
    sigma = np.array([U.sigma(0, f1.radius)] + [U.sigma(1, f2.radius)] * 3 +
                     [U.sigma(2, f3.radius)] * 6)
    S = sigma[:, None] * sigma[None, :]

    ref = c.cov

    def test_it(use_cache):

        # Note: here we use the old package's k and Pk so that their result agree can be
        # be compared
        fh = FieldHandler(
            Ndim=3,
            Lbox=50,
            dimensions=16,
            Pk=(c.k, c.Pk),
            use_covariance_cache=use_cache,
            filter=f1,
        )

        c1 = C.DensityConstrain(X1, filter=f1, value=1.69, field_handler=fh)
        c2 = C.GradientConstrain(X2,
                                 filter=f2,
                                 value=[0, 0, 0],
                                 field_handler=fh)
        c3 = C.HessianConstrain(X3,
                                filter=f3,
                                value=[0, 0, 0, 0, 0, 0],
                                field_handler=fh)
        fh.add_constrain(c1)
        fh.add_constrain(c2)
        fh.add_constrain(c3)

        new = fh.compute_covariance() / S

        # Check closeness (note: the order may be different so only
        # check det and eigenvalues)
        det_ref = np.linalg.det(ref)
        det_new = np.linalg.det(new)

        assert_allclose(det_ref, det_new)

        eval_ref = np.linalg.eigvalsh(ref)
        eval_new = np.linalg.eigvalsh(new)

        assert_allclose(eval_ref, eval_new)

    # Run once first to fill cache
    test_it(False)
    for use_cache in (True, False):
        yield test_it, use_cache