Esempio n. 1
0
def test_PeriodicIdentity():
    world = vp.BoundingBox(pbc=True)
    pbc = vp.MultiResolutionAnalysis(box=world, order=k)

    pfunc = ffunc.periodify([1.0])
    ftree = vp.FunctionTree(mra=pbc)
    vp.advanced.build_grid(out=ftree, inp=pfunc)
    vp.advanced.project(prec=epsilon, out=ftree, inp=pfunc)

    I = vp.IdentityConvolution(mra=pbc, prec=epsilon, root=0, reach=5)
    gtree = vp.FunctionTree(mra=pbc)
    vp.advanced.apply(prec=epsilon, out=gtree, oper=I, inp=ftree)
    assert gtree.integrate() == pytest.approx(ftree.integrate(), rel=epsilon)
Esempio n. 2
0
def test_Identity():
    I = vp.IdentityConvolution(mra, prec=epsilon)

    ftree = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=ftree, inp=ffunc)
    vp.advanced.project(prec=epsilon, out=ftree, inp=ffunc)

    gtree = vp.FunctionTree(mra)
    vp.advanced.apply(prec=epsilon, out=gtree, oper=I, inp=ftree)
    assert gtree.integrate() == pytest.approx(ftree.integrate(), rel=epsilon)

    gtree2 = I(ftree)
    assert gtree2.integrate() == pytest.approx(ftree.integrate(), rel=epsilon)
Esempio n. 3
0
def test_BuildProjectSemiPeriodicGauss():
    sfac = [np.pi / 3]
    periodic_world = vp.BoundingBox(scaling=sfac, pbc=True)
    pbc = vp.MultiResolutionAnalysis(box=periodic_world, order=k)

    tree_1 = vp.FunctionTree(pbc)
    vp.advanced.build_grid(out=tree_1, inp=gauss)
    vp.advanced.project(out=tree_1, inp=gauss)
    assert tree_1.integrate() < 1.0

    pgauss = gauss.periodify(period=sfac, std_dev=6.0)
    assert pgauss.size() > 0

    tree_2 = vp.FunctionTree(pbc)
    vp.advanced.build_grid(out=tree_2, inp=pgauss)
    vp.advanced.project(out=tree_2, inp=pgauss)
    assert tree_2.integrate() == pytest.approx(1.0, rel=epsilon)
Esempio n. 4
0
def test_ClearProjectRefine():
    tree = vp.FunctionTree(mra)

    nsplit = 1
    while nsplit > 0:
        vp.advanced.clear_grid(out=tree)
        vp.advanced.project(out=tree, inp=func)
        nsplit = vp.advanced.refine_grid(out=tree, prec=epsilon)
        assert tree.norm() > 0.0
    assert tree.integrate() == pytest.approx(1.0, rel=epsilon)
Esempio n. 5
0
def test_Addition():
    tree_1 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_1, inp=gauss)
    vp.advanced.project(prec=epsilon, out=tree_1, inp=gauss)

    tree_2 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_2, inp=tree_1)
    vp.advanced.add(out=tree_2, inp_a=tree_1, b=-0.5, inp_b=tree_1)
    assert tree_2.nNodes() == tree_1.nNodes()
    assert tree_2.integrate() == pytest.approx(0.5 * tree_1.integrate(),
                                               rel=epsilon)

    tree_vec_1 = []
    tree_vec_1.append((1.0, tree_1))
    tree_vec_1.append((-0.5, tree_1))

    tree_3 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_3, inp=tree_vec_1)
    vp.advanced.add(out=tree_3, inp=tree_vec_1)
    assert tree_3.nNodes() == tree_1.nNodes()
    assert tree_3.integrate() == pytest.approx(0.5 * tree_1.integrate(),
                                               rel=epsilon)

    tree_vec_2 = []
    tree_vec_2.append(tree_1)
    tree_vec_2.append(tree_1)

    tree_4 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_4, inp=tree_vec_2)
    vp.advanced.add(out=tree_4, inp=tree_vec_2)
    assert tree_4.nNodes() == tree_1.nNodes()
    assert tree_4.integrate() == pytest.approx(2.0 * tree_1.integrate(),
                                               rel=epsilon)

    tree_5 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_5, inp=tree_1)
    tree_5.setZero()
    tree_5 += tree_1
    tree_5 += 1.0 * tree_1
    assert tree_5.nNodes() == tree_1.nNodes()
    assert tree_5.integrate() == pytest.approx(2.0 * tree_1.integrate(),
                                               rel=epsilon)
Esempio n. 6
0
def test_BuildProjectCopyClear():
    tree_1 = vp.FunctionTree(mra)
    tree_2 = vp.FunctionTree(mra)

    vp.advanced.build_grid(out=tree_1, inp=gauss)
    assert tree_1.depth() > 1

    vp.advanced.project(prec=epsilon, out=tree_1, inp=gauss, abs_prec=True)
    assert tree_1.integrate() == pytest.approx(1.0, rel=epsilon)

    vp.advanced.copy_grid(out=tree_2, inp=tree_1)
    assert tree_2.depth() == tree_1.depth()

    vp.advanced.copy_func(out=tree_2, inp=tree_1)
    assert tree_2.integrate() == pytest.approx(tree_1.integrate(), rel=epsilon)
    assert tree_2.norm() == pytest.approx(tree_1.norm(), rel=epsilon)

    vp.advanced.clear_grid(out=tree_2)
    assert tree_2.depth() == tree_1.depth()
    assert tree_2.norm() < 0.0
Esempio n. 7
0
def test_DerivativeBS_1():
    D = vp.BSDerivative(mra, order=1)
    assert D.getOrder() == 1

    dh = vp.FunctionTree(mra)
    vp.advanced.apply(out=dh, oper=D, inp=f, dir=0)
    assert dh.integrate() == pytest.approx(df.integrate(), abs=epsilon)
    assert dh.norm() == pytest.approx(df.norm(), rel=epsilon)

    dh2 = D(f)
    assert dh2.integrate() == pytest.approx(df.integrate(), abs=epsilon)
    assert dh2.norm() == pytest.approx(df.norm(), rel=epsilon)
Esempio n. 8
0
def test_BuildUnionGrid():
    # building sharp grid
    tree_1 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_1, inp=gauss)
    assert tree_1.depth() > 1

    # building wide grid
    tree_2 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_2, scales=s)
    assert tree_2.depth() > 1

    # building union grid
    tree_3 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_3, inp=tree_1)
    vp.advanced.build_grid(out=tree_3, inp=tree_2)
    assert tree_3.norm() < 0.0
    assert tree_3.nNodes() > tree_1.nNodes()
    assert tree_3.nNodes() > tree_2.nNodes()

    # refining union grid
    tree_4 = vp.FunctionTree(mra)
    tree_4.setZero()
    while vp.advanced.refine_grid(out=tree_4, inp=tree_1) > 0:
        pass
    while vp.advanced.refine_grid(out=tree_4, inp=tree_2) > 0:
        pass
    assert tree_4.norm() == pytest.approx(0.0, abs=epsilon)
    assert tree_4.nNodes() == tree_3.nNodes()

    # building union grid from vector
    tree_vec = []
    tree_vec.append(tree_1)
    tree_vec.append(tree_2)

    tree_5 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_5, inp=tree_vec)
    assert tree_5.norm() < 0.0
    assert tree_5.nNodes() == tree_3.nNodes()
Esempio n. 9
0
def test_FunctionTreeSave():
    tree.setZero()
    tree.saveTree(filename=name)

    tree_2 = vp.FunctionTree(mra)
    tree_2.setName("func_2")
    tree_2.loadTree(filename=name)

    assert tree_2.name() == "func_2"
    assert tree_2.norm() == 0.0
    assert tree_2.squaredNorm() == 0.0
    assert tree_2.integrate() == 0.0
    assert tree_2.MRA() == tree.MRA()
    assert tree_2(r0) == 0.0
    assert tree_2(r1) == 0.0
Esempio n. 10
0
def test_BuildProjectRefineCrop():
    tree = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree, scales=s)
    assert tree.fetchEndNode(0).center()[0] == pytest.approx(0.5)
    assert tree.depth() == s + 1
    assert tree.nEndNodes() == 2**(s * D)

    vp.advanced.project(out=tree, inp=func)
    assert tree.depth() == s + 1
    assert tree.nEndNodes() == 2**(s * D)
    assert tree.integrate() == pytest.approx(1.0, rel=epsilon)

    vp.advanced.refine_grid(out=tree, scales=1)
    assert tree.depth() == s + 2
    assert tree.nEndNodes() == 2**((s + 1) * D)
    assert tree.integrate() == pytest.approx(1.0, rel=epsilon)

    pre_crop = tree.nNodes()
    tree.crop(prec=epsilon)
    post_crop = tree.nNodes()
    assert pre_crop > post_crop
Esempio n. 11
0
def test_FunctionMap():
    g_tree = vp.FunctionTree(mra)
    vp.advanced.map(prec=epsilon, out=g_tree, inp=f_tree, fmap=gmap)
    assert g_tree.norm() == pytest.approx(g_ref.norm(), rel=epsilon)
    assert g_tree(r_0) == pytest.approx(g_ref(r_0), rel=epsilon)
Esempio n. 12
0
r1 = [-0.1]

D = 1
k = 5
N = -1
n = 1
l = [2]
name = "func"
two_d = 2**D
kp1_d = (k + 1)**D

world = vp.BoundingBox(scale=N)
root = vp.NodeIndex(scale=N)
idx = vp.NodeIndex(scale=n, translation=l)
mra = vp.MultiResolutionAnalysis(box=world, order=k)
tree = vp.FunctionTree(mra, name)


def test_FunctionTree():
    assert tree.norm() < 0.0
    assert tree.squaredNorm() < 0.0
    assert tree.nNodes() == 1
    assert tree.nEndNodes() == 1
    assert tree.nGenNodes() == 0
    assert tree.rootScale() == N
    assert tree.depth() == 1
    assert tree.name() == name
    assert tree.MRA() == mra


def test_FunctionTreeZero():
Esempio n. 13
0
def test_Multiplication():
    tree_1 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_1, inp=gauss)
    vp.advanced.project(prec=epsilon, out=tree_1, inp=gauss)

    assert vp.dot(tree_1, tree_1) == pytest.approx(tree_1.squaredNorm(),
                                                   rel=epsilon)

    tree_2 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_2, inp=tree_1)
    vp.advanced.multiply(out=tree_2, inp_a=tree_1, inp_b=tree_1)
    assert tree_2.nNodes() == tree_1.nNodes()
    assert tree_2.integrate() == pytest.approx(tree_1.squaredNorm(),
                                               rel=epsilon)

    tree_vec_1 = []
    tree_vec_1.append((1.0, tree_1))
    tree_vec_1.append((1.0, tree_1))

    tree_3 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_3, inp=tree_vec_1)
    vp.advanced.multiply(out=tree_3, inp=tree_vec_1)
    assert tree_3.nNodes() == tree_1.nNodes()
    assert tree_3.integrate() == pytest.approx(tree_1.squaredNorm(),
                                               rel=epsilon)

    tree_vec_2 = []
    tree_vec_2.append(tree_1)
    tree_vec_2.append(tree_1)

    tree_4 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_4, inp=tree_vec_2)
    vp.advanced.multiply(out=tree_4, inp=tree_vec_2)
    assert tree_4.nNodes() == tree_1.nNodes()
    assert tree_4.integrate() == pytest.approx(tree_1.squaredNorm(),
                                               rel=epsilon)

    tree_5 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_5, inp=tree_1)
    vp.advanced.power(out=tree_5, inp=tree_1, pow=2.0)
    assert tree_5.nNodes() == tree_1.nNodes()
    assert tree_5.integrate() == pytest.approx(tree_1.squaredNorm(),
                                               rel=epsilon)

    tree_6 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_6, inp=tree_1)
    vp.advanced.square(out=tree_6, inp=tree_1)
    assert tree_6.nNodes() == tree_1.nNodes()
    assert tree_6.integrate() == pytest.approx(tree_1.squaredNorm(),
                                               rel=epsilon)

    tree_7 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_7, inp=tree_1)
    vp.advanced.copy_func(out=tree_7, inp=tree_1)
    tree_7 *= tree_1
    assert tree_7.nNodes() > tree_1.nNodes()
    assert tree_7.integrate() == pytest.approx(tree_1.squaredNorm(),
                                               rel=epsilon)

    tree_8 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_8, inp=tree_1)
    vp.advanced.copy_func(out=tree_8, inp=tree_1)
    tree_8 **= 2.0
    assert tree_8.nNodes() > tree_1.nNodes()
    assert tree_8.integrate() == pytest.approx(tree_1.squaredNorm(),
                                               rel=epsilon)

    tree_9 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_9, inp=tree_1)
    vp.advanced.copy_func(out=tree_9, inp=tree_1)
    tree_9 **= 2.0
    assert tree_9.nNodes() > tree_1.nNodes()
    assert tree_9.integrate() == pytest.approx(tree_1.squaredNorm(),
                                               rel=epsilon)
Esempio n. 14
0
def test_OverloadedOperators():
    tree_1 = vp.FunctionTree(mra)
    vp.advanced.build_grid(out=tree_1, inp=gauss)
    vp.advanced.project(out=tree_1, inp=gauss)
    ref_int = tree_1.integrate()
    ref_norm = tree_1.squaredNorm()
    ref_nodes = tree_1.nNodes()

    tree_2 = +tree_1
    assert tree_2.nNodes() == ref_nodes
    assert tree_2.integrate() == pytest.approx(ref_int, rel=epsilon)

    tree_2 *= -2.0
    assert tree_2.nNodes() == ref_nodes
    assert tree_2.integrate() == pytest.approx(-2.0 * ref_int, rel=epsilon)

    tree_3 = -tree_1
    assert tree_3.nNodes() == ref_nodes
    assert tree_3.integrate() == pytest.approx(-ref_int, rel=epsilon)

    tree_3 /= 2.0
    assert tree_3.nNodes() == ref_nodes
    assert tree_3.integrate() == pytest.approx(-0.5 * ref_int, rel=epsilon)

    tree_3 *= tree_2
    assert tree_3.nNodes() > ref_nodes
    assert tree_3.integrate() == pytest.approx(ref_norm, rel=epsilon)

    tree_4 = tree_1 * 2.0
    assert tree_4.nNodes() == ref_nodes
    assert tree_4.integrate() == pytest.approx(2.0 * ref_int, rel=epsilon)

    tree_5 = 2.0 * tree_1
    assert tree_5.nNodes() == ref_nodes
    assert tree_5.integrate() == pytest.approx(2.0 * ref_int, rel=epsilon)

    tree_6 = tree_1 / 2.0 + 1.5 * tree_1
    assert tree_6.nNodes() == ref_nodes
    assert tree_6.integrate() == pytest.approx(2.0 * ref_int, rel=epsilon)

    tree_6 += tree_1
    assert tree_6.nNodes() == ref_nodes
    assert tree_6.integrate() == pytest.approx(3.0 * ref_int, rel=epsilon)

    tree_6 -= 2.0 * tree_4
    assert tree_6.nNodes() == ref_nodes
    assert tree_6.integrate() == pytest.approx(-1.0 * ref_int, rel=epsilon)

    tree_6 **= 2.0
    assert tree_6.nNodes() > ref_nodes
    assert tree_6.integrate() == pytest.approx(ref_norm, rel=epsilon)

    tree_7 = tree_1 - tree_2
    assert tree_7.nNodes() == ref_nodes
    assert tree_7.integrate() == pytest.approx(3.0 * ref_int, rel=epsilon)

    tree_8 = tree_1**2.0
    assert tree_8.nNodes() > ref_nodes
    assert tree_8.integrate() == pytest.approx(ref_norm, rel=epsilon)

    tree_9 = tree_1 * tree_1
    assert tree_9.nNodes() > ref_nodes
    assert tree_9.integrate() == pytest.approx(ref_norm, rel=epsilon)

    tree_10 = (tree_1 * tree_1).crop(epsilon) + (tree_1**2).crop(epsilon)
    assert tree_10.nNodes() > tree_1.nNodes()
    assert tree_10.nNodes() < tree_9.nNodes()
    assert tree_10.integrate() == pytest.approx(2.0 * ref_norm, rel=epsilon)

    tree_vec_1 = []
    tree_vec_1.append((1.0, tree_1))
    tree_vec_1.append((-0.5, tree_1))

    tree_11 = vp.sum(tree_vec_1)
    assert tree_11.nNodes() == tree_1.nNodes()
    assert tree_11.integrate() == pytest.approx(0.5 * ref_int, rel=epsilon)

    tree_12 = vp.prod(tree_vec_1)
    assert tree_12.nNodes() > tree_1.nNodes()
    assert tree_12.integrate() == pytest.approx(-0.5 * ref_norm, rel=epsilon)

    tree_vec_2 = []
    tree_vec_2.append(tree_1)
    tree_vec_2.append(tree_1)

    tree_13 = vp.sum(tree_vec_2)
    assert tree_13.nNodes() == tree_1.nNodes()
    assert tree_13.integrate() == pytest.approx(2.0 * ref_int, rel=epsilon)

    tree_14 = vp.prod(tree_vec_2)
    assert tree_14.nNodes() > tree_1.nNodes()
    assert tree_14.integrate() == pytest.approx(ref_norm, rel=epsilon)
Esempio n. 15
0
epsilon = 1.0e-3

D = 1
k = 5
N = -2
world = vp.BoundingBox(scale=N)
mra = vp.MultiResolutionAnalysis(box=world, order=k)

r0 = [0.4]
beta = 100.0
alpha = (beta / np.pi)**(D / 2.0)
g = vp.GaussFunc(coef=alpha, exp=beta, pos=r0)
dg = g.differentiate(dir=0)
ddg = dg.differentiate(dir=0)

f = vp.FunctionTree(mra)
vp.advanced.build_grid(out=f, inp=g)
vp.advanced.project(prec=epsilon / 10, out=f, inp=g)

df = vp.FunctionTree(mra)
vp.advanced.build_grid(out=df, inp=dg)
vp.advanced.project(prec=epsilon / 10, out=df, inp=dg)

ddf = vp.FunctionTree(mra)
vp.advanced.build_grid(out=ddf, inp=ddg)
vp.advanced.project(prec=epsilon / 10, out=ddf, inp=ddg)


def test_DerivativeABGV_00():
    D = vp.ABGVDerivative(mra, a=0.0, b=0.0)
    assert D.getOrder() == 1