Example #1
0
def test_isub(key, mat, quad):
    test = key[0]
    trial = key[1]
    measure = 1
    if len(key) == 4:
        domain = key[2]
        measure = key[3]
        if quad == 'GL':
            return
    t0 = test[0]
    t1 = trial[0]
    if len(key) == 4:
        t0 = functools.partial(t0, domain=domain)
        t1 = functools.partial(t1, domain=domain)
    testfunction = (t0(N, quad=quad), test[1])
    trialfunction = (t1(N, quad=quad), trial[1])
    m = mat(testfunction, trialfunction, measure=measure)
    mc = SparseMatrix(deepcopy(dict(m)), m.shape, m.scale)
    m -= mc
    assert np.linalg.norm(m.diags('csr').data) < 1e-10

    m1 = SparseMatrix(deepcopy(dict(m)), m.shape)
    m2 = SparseMatrix(deepcopy(dict(m)), m.shape)
    m1 -= m2
    assert m1.scale == 0.0
Example #2
0
def test_sub(key, mat, quad):
    test = key[0]
    trial = key[1]
    measure = 1
    if len(key) == 4:
        domain = key[2]
        measure = key[3]
        if quad == 'GL':
            return
    t0 = test[0]
    t1 = trial[0]
    if len(key) == 4:
        t0 = functools.partial(t0, domain=domain)
        t1 = functools.partial(t1, domain=domain)
    testfunction = (t0(N, quad=quad), test[1])
    trialfunction = (t1(N, quad=quad), trial[1])
    m = mat(testfunction, trialfunction, measure=measure)
    mc = m - m
    assert mc.scale == 0.0

    m1 = SparseMatrix(copy(dict(m)), m.shape)
    m2 = SparseMatrix(copy(dict(m)), m.shape)

    mc = m1 - m2
    assert mc.scale == 0.0
Example #3
0
def test_eq():
    m0 = SparseMatrix({0: 1, 2: 2}, (6, 6))
    m1 = SparseMatrix({0: 1., 2: 2.}, (6, 6))
    assert m0 == m1
    assert m0 is not m1
    m2 = SparseMatrix({0: 1., 2: 3.}, (6, 6))
    assert m0 != m2
Example #4
0
def test_solve(quad):
    SD = Basis(N, 'C', bc=(0, 0), quad=quad, plan=True)
    u = TrialFunction(SD)
    v = TestFunction(SD)
    A = inner(div(grad(u)), v)
    b = np.ones(N)
    u_hat = Function(SD)
    u_hat = A.solve(b, u=u_hat)

    w_hat = Function(SD)
    B = SparseMatrix(dict(A), (N - 2, N - 2))
    w_hat[:-2] = B.solve(b[:-2], w_hat[:-2])
    assert np.all(abs(w_hat[:-2] - u_hat[:-2]) < 1e-8)

    ww = w_hat[:-2].repeat(N - 2).reshape((N - 2, N - 2))
    bb = b[:-2].repeat(N - 2).reshape((N - 2, N - 2))
    ww = B.solve(bb, ww, axis=0)
    assert np.all(
        abs(ww - u_hat[:-2].repeat(N - 2).reshape((N - 2, N - 2))) < 1e-8)

    bb = bb.transpose()
    ww = B.solve(bb, ww, axis=1)
    assert np.all(
        abs(ww - u_hat[:-2].repeat(N - 2).reshape(
            (N - 2, N - 2)).transpose()) < 1e-8)
Example #5
0
def test_sub(key, mat, quad):
    test = key[0]
    trial = key[1]
    m = mat((test[0](N, quad=quad), test[1]),
            (trial[0](N, quad=quad), trial[1]))
    mc = m - m
    assert mc.scale == 0.0

    m1 = SparseMatrix(copy(dict(m)), m.shape)
    m2 = SparseMatrix(copy(dict(m)), m.shape)

    mc = m1 - m2
    assert mc.scale == 0.0
Example #6
0
def test_isub(key, mat, quad):
    test = key[0]
    trial = key[1]
    m = mat((test[0](N, quad=quad), test[1]),
            (trial[0](N, quad=quad), trial[1]))
    mc = copy(m)
    m -= mc
    assert m.scale == 0.0

    m1 = SparseMatrix(copy(dict(m)), m.shape)
    m2 = SparseMatrix(copy(dict(m)), m.shape)
    m1 -= m2
    assert m1.scale == 0.0
Example #7
0
def test_mul2():
    mat = SparseMatrix({0: 1}, (3, 3))
    v = np.ones(3)
    c = mat * v
    assert np.allclose(c, 1)
    mat = SparseMatrix({-2: 1, -1: 1, 0: 1, 1: 1, 2: 1}, (3, 3))
    c = mat * v
    assert np.allclose(c, 3)
    SD = FunctionSpace(8, "L", bc=(0, 0), scaled=True)
    u = shenfun.TrialFunction(SD)
    v = shenfun.TestFunction(SD)
    mat = inner(grad(u), grad(v))
    z = Function(SD, val=1)
    c = mat * z
    assert np.allclose(c[:6], 1)
Example #8
0
def test_add(key, mat, quad):
    test = key[0]
    trial = key[1]
    measure = 1
    if len(key) == 4:
        domain = key[2]
        measure = key[3]
        if quad == 'GL':
            return
    t0 = test[0]
    t1 = trial[0]
    if len(key) == 4:
        t0 = functools.partial(t0, domain=domain)
        t1 = functools.partial(t1, domain=domain)
    testfunction = (t0(N, quad=quad), test[1])
    trialfunction = (t1(N, quad=quad), trial[1])
    m = mat(testfunction, trialfunction, measure=measure)

    mc = m + m
    assert mc.scale == 2.0 * m.scale

    mat = SparseMatrix(copy(dict(m)), m.shape, m.scale)
    mc = m + mat
    for key, val in mc.items():
        assert np.allclose(val * mc.scale, m[key] * 2 * m.scale)
Example #9
0
def test_imul(key, mat, quad):
    test = key[0]
    trial = key[1]
    measure = 1
    if len(key) == 4:
        domain = key[2]
        measure = key[3]
        if quad == 'GL':
            return
    t0 = test[0]
    t1 = trial[0]
    if len(key) == 4:
        t0 = functools.partial(t0, domain=domain)
        t1 = functools.partial(t1, domain=domain)
    testfunction = (t0(N, quad=quad), test[1])
    trialfunction = (t1(N, quad=quad), trial[1])
    mat = mat(testfunction, trialfunction, measure=measure)
    mc = mat.scale
    mat *= 2
    assert mat.scale == 2.0 * mc

    mat.scale = mc
    mat = SparseMatrix(copy(dict(mat)), mat.shape)
    mat *= 2
    assert mat.scale == 2.0
Example #10
0
def test_iadd(key, mat, quad):
    test = key[0]
    trial = key[1]
    measure = 1
    if len(key) == 4:
        domain = key[2]
        measure = key[3]
        if quad == 'GL':
            return
    if trial[0] in lBasisLG + cBasisGC and quad == 'GL':
        return
    t0 = test[0]
    t1 = trial[0]
    if len(key) == 4:
        t0 = functools.partial(t0, domain=domain)
        t1 = functools.partial(t1, domain=domain)
    testfunction = (t0(N, quad=quad), test[1])
    trialfunction = (t1(N, quad=quad), trial[1])
    try:
        m = mat(testfunction, trialfunction, measure=measure)
    except AssertionError:
        return
    mc = SparseMatrix(deepcopy(dict(m)), m.shape, m.scale)
    m += mc
    assert np.linalg.norm((m - 2 * mc).diags('csr').data) < 1e-8

    m -= 2 * mc

    assert np.linalg.norm(m.diags('csr').data) < 1e-10
Example #11
0
def test_div(key, mat, quad):
    test = key[0]
    trial = key[1]
    measure = 1
    if len(key) == 4:
        domain = key[2]
        measure = key[3]
        if quad == 'GL':
            return
    if trial[0] in lBasisLG + cBasisGC and quad == 'GL':
        return
    t0 = test[0]
    t1 = trial[0]
    if len(key) == 4:
        t0 = functools.partial(t0, domain=domain)
        t1 = functools.partial(t1, domain=domain)
    testfunction = (t0(N, quad=quad), test[1])
    trialfunction = (t1(N, quad=quad), trial[1])
    try:
        m = mat(testfunction, trialfunction, measure=measure)
    except AssertionError:
        return

    mc = m / 2.
    assert mc.scale == 0.5 * m.scale

    mat = SparseMatrix(copy(dict(m)), m.shape)
    mc = mat / 2.
    assert mc.scale == 0.5
Example #12
0
def test_iadd(key, mat, quad):
    test = key[0]
    trial = key[1]
    m = mat((test[0](N, quad=quad), test[1]),
            (trial[0](N, quad=quad), trial[1]))
    mc = copy(m)
    m += mc
    assert m.scale == 2.0*mc.scale

    m1 = SparseMatrix(copy(dict(mc)), mc.shape)
    m += m1
    assert  m.scale == 1
    assert m.__class__.__name__ == 'SparseMatrix' # downcast
    m -= 2*mc
    assert m == m1

    m2 = SparseMatrix(copy(dict(m)), m.shape)
    m1 += m2
    assert m1.scale == 2.0
Example #13
0
def test_rmul(key, mat, quad):
    test = key[0]
    trial = key[1]
    m = mat((test[0](N, quad=quad), test[1]),
            (trial[0](N, quad=quad), trial[1]))
    mc = m*2.
    assert mc.scale == 2.0*m.scale

    mat = SparseMatrix(copy(dict(m)), m.shape)
    mc = mat*2.
    assert mc.scale == 2.0
Example #14
0
def test_add(key, mat, quad):
    test = key[0]
    trial = key[1]
    m = mat((test[0](N, quad=quad), test[1]),
            (trial[0](N, quad=quad), trial[1]))
    mc = m + m
    assert mc.scale == 2.0*m.scale

    mat = SparseMatrix(copy(dict(m)), m.shape, m.scale)
    mc = m + mat
    for key, val in mc.items():
        assert np.allclose(val*mc.scale, m[key]*2*m.scale)
Example #15
0
def test_imul(key, mat, quad):
    test = key[0]
    trial = key[1]
    mat = mat((test[0](N, quad=quad), test[1]),
              (trial[0](N, quad=quad), trial[1]))
    mc = mat.scale
    mat *= 2
    assert mat.scale == 2.0*mc

    mat.scale = mc
    mat = SparseMatrix(copy(dict(mat)), mat.shape)
    mat *= 2
    assert mat.scale == 2.0