示例#1
0
def test_vec_solve():
    mu_12 = Tensor('mu_12', rank=0)
    p_1, p_2 = map(lambda x: Tensor(x, rank=1), ['p_1', 'p_2'])
    A = Tensor('A', rank=2)
    print solve_vec_eqn(
        -mu_12 * (T(p_1) * A * p_2) - mu_12 * (T(p_2) * A * p_1) +
        (T(p_2) * A * p_1), mu_12)
示例#2
0
def get_chronos_eqns_1():
    delta_1, omega_2, pi_1, pi_2, gamma_2, mu_12 = \
        map(lambda x: Tensor(x, rank=0),
            ['delta_1', 'omega_2', 'pi_1', 'pi_2', 'gamma_2', 'mu_12'])
    r_1, r_2, q_1, q_2, p_1, p_2, s_1, s_2 = \
        map(lambda x: Tensor(x, rank=1),
            ['r_1', 'r_2', 'q_1', 'q_2', 'p_1', 'p_2', 's_1', 's_2'])
    A, R_0, P_0 = map(lambda x: Tensor(x, rank=2), ['A', 'R_0', 'P_0'])

    eqns = [
        r_2 - r_1 - delta_1 * q_1,
        q_2 - A * p_2,
        p_2 - r_2 + p_1 * mu_12,
        q_2 - A * r_2 + q_1 * mu_12,
        omega_2 - T(r_2) * r_2,
        pi_2 - T(p_2) * A * p_2,
        T(R_0) * r_2,
        T(r_1) * r_2,
        T(P_0) * A * p_2,
        T(p_1) * A * p_2,
        T(p_2) * A * p_2 - T(r_2) * A * r_2 +
        T(mu_12) * T(p_1) * A * p_1 * mu_12,
    ]
    knowns = [p_1, r_1, q_1, pi_1, A, R_0, P_0]
    return eqns, knowns
示例#3
0
def testInverseMul():
    ans = 5*I
    A = Tensor('A', rank=2, has_inv=True)
    A_I = Inverse(A)
    e = 5*A
    assert(A_I * e == ans)
    assert(e*A_I == ans)
    e = 5*A_I
    assert(A * e == ans)
    assert(e*A == ans)

    ans = 5*one
    p = Tensor('p', rank=1)
    pAp = T(p)*A*p
    pAp_I = Inverse(pAp)
    e = 5*pAp
    assert(e*pAp_I == ans)
    assert(pAp_I*e == ans)
    e = 5*pAp_I
    assert(e*pAp == ans)
    assert(pAp*e == ans)

    e = 5*pAp*A
    assert(A_I*e == 5*pAp*I)
    assert(e*pAp_I == 5*A)
示例#4
0
def test_chronos_cg():
    skip("Test takes too long")
    delta_1, omega_2, pi_1, pi_2, mu_12 = map(lambda x: Tensor(x, rank=0), \
        ['delta_1', 'omega_2', 'pi_1', 'pi_2', 'mu_12'])
    r_1, r_2, q_1, q_2, p_1, p_2, x_1, x_2 = map(lambda x: Tensor(x, rank=1), \
        ['r_1', 'r_2', 'q_1', 'q_2', 'p_1', 'p_2', 'x_1', 'x_2'])
    A, R_0, P_0 = map(lambda x: Tensor(x, rank=2), ['A', 'R_0', 'P_0'])

    # Specify which variables are known
    knowns = [pi_1, p_1, r_1, q_1, x_1, A, R_0, P_0]

    # Now try the chronos variant and repeat.
    chronos_eqns = [
        r_2 - r_1 - delta_1 * q_1,
        q_2 - A * p_2,
        p_2 - r_2 + p_1 * mu_12,
        q_2 - A * r_2 + q_1 * mu_12,
        x_2 - x_1 - delta_1 * p_1,
        omega_2 - T(r_2) * r_2,
        pi_2 - T(p_2) * A * p_2,
        T(R_0) * r_2,
        T(r_1) * r_2,
        T(P_0) * A * p_2,
        T(p_1) * A * p_2,
        T(p_2) * A * p_2 - T(r_2) * A * r_2 + T(mu_12) * pi_1 * mu_12,
    ]
    run_cg_algorithms(chronos_eqns, knowns)
示例#5
0
def test_forward_solve():
    q, r, s = map(lambda x: Tensor(x, rank=1), 'qrs')
    delta = Tensor('delta', rank=0)
    eqn1 = s + q
    eqn2 = delta * r - q
    sol_dict = forward_solve([eqn1, eqn2], [delta, r])
    print "sol_dict should be: {q: delta*r, s: -q }"
    print "  actual:", sol_dict
示例#6
0
def test_5():
    q, r, s = map(lambda x: Tensor(x, rank=1), 'qrs')
    s_t = Transpose(s)
    delta = Tensor('delta', rank=0)
    eqn1 = r - s - q * delta
    eqn2 = s_t * r

    print assump_solve([eqn1, eqn2], [r, q])
示例#7
0
def test_mul_inverse():
    delta_11 = Tensor('delta_11', 0)
    r_1, p_1 = map(lambda x: Tensor(x, 1), ['r_1', 'p_1'])
    A = Tensor('A', 2)
    a = Tensor('a', 0)

    expr = (-(T(p_1)*A*p_1)*(T(p_1)*A*r_1)*a + (T(p_1)*A*r_1))
    expr = expr.subs(a, (T(p_1)*A*p_1)**-1)
    assert(simplify(expr) == S(0))
示例#8
0
def test_0():
    A = Tensor('A', rank=2, has_inv=True)
    x = Tensor('x', rank=1)
    y = Tensor('y', rank=1)
    alpha = Tensor('alpha', rank=0)
    beta = Tensor('beta', rank=0)
    eqn = alpha * A * x + beta * y
    print eqn, "rank:", expr_rank(eqn)
    print "solution for y", solve_vec_eqn(eqn, y)
    print "solution for x", solve_vec_eqn(eqn, x)
示例#9
0
def test_3():
    q, r, s = map(lambda x: Tensor(x, rank=1), 'qrs')
    s_t = Transpose(s)
    delta = Tensor('delta', rank=0)
    eqn1 = r - s - q * delta
    eqn2 = s_t * r

    print forward_solve([eqn1, eqn2], [r, s, q])
    print forward_solve([eqn1, eqn2], [delta, s, q])
    print forward_solve([eqn2, eqn1], [delta, s, q])
示例#10
0
def test_backward_sub():
    q, r, s = map(lambda x: Tensor(x, rank=1), 'qrs')
    s_t = Transpose(s)
    delta = Tensor('delta', rank=0)
    eqn1 = r - s - q * delta
    eqn2 = s_t * r
    sol_dict, failed_var = backward_sub([eqn1, eqn2], [q, s], [r, delta])

    print sol_dict, failed_var

    sol_dict, failed_var = backward_sub([eqn1, eqn2], [q, s], [delta, r])
    print sol_dict, failed_var
示例#11
0
def test_algebra():
    delta_1, omega_2, pi_1, pi_2, gamma_2, mu_12 = \
        map(lambda x: Tensor(x, rank=0),
            ['delta_1', 'omega_2', 'pi_1', 'pi_2', 'gamma_2', 'mu_12'])
    r_1, r_2, q_1, q_2, p_1, p_2, s_1, s_2 = \
        map(lambda x: Tensor(x, rank=1),
            ['r_1', 'r_2', 'q_1', 'q_2', 'p_1', 'p_2', 's_1', 's_2'])
    A, R_0, P_0 = map(lambda x: Tensor(x, rank=2), ['A', 'R_0', 'P_0'])

    eqn = -2 * (T(p_1) * A * r_2) / (T(p_1) * A * p_1) * (T(p_1) * A * r_2)
    eqn -= -2 * (T(p_1) * A * r_2) * (T(p_1) * A * r_2) / (T(p_1) * A * p_1)
    assert (eqn == S(0))

    assert (T(p_1) * A * r_2 == T(r_2) * A * p_1)
示例#12
0
def test_overdetermined_forward_solve():
    pi_1, pi_2, mu_12 = \
        map(lambda x: Tensor(x, rank=0),
            ['pi_1', 'pi_2', 'mu_12'])
    r_2, p_1, p_2 = \
        map(lambda x: Tensor(x, rank=1),
            ['r_2', 'p_1', 'p_2'])
    A = Tensor('A', rank=2)

    eqns = [
        pi_2 - T(r_2) * A * r_2 + T(mu_12) * pi_1 * mu_12,
        p_2 - r_2 + p_1 * mu_12,
        pi_2 - T(p_2) * A * p_2,
    ]
    return forward_solve(eqns, [r_2, p_1, mu_12, A, pi_1], True)
示例#13
0
def testOne():
    A = Tensor('A', 2)
    a = Tensor('a', 1)
    alpha = Tensor('alpha', 0)
    ONE = Tensor('1', 2)
    one = Tensor('1', 0)

    assert(A * ONE == A)
    assert(ONE * A == A)

    assert(A * one == A)
    assert(one * A == A)
    assert (a * one == a)
    assert (one * a == a)
    assert(alpha * one == alpha)
    assert(one * alpha == alpha)
示例#14
0
def test_reg_cg():
    delta_1, mu_12 = map(lambda x: Tensor(x, rank=0), ['delta_1', 'mu_12'])
    r_1, r_2, p_1, p_2, x_1, x_2 = map(lambda x: Tensor(x, rank=1), \
                                   ['r_1', 'r_2', 'p_1', 'p_2', 'x_1', 'x_2'])
    A = Tensor('A', rank=2)

    # Specify which variables are known
    knowns = [p_1, r_1, x_1, A]

    # Specify the CG eqns (coming from a 4x4 PME)
    cg_eqns = [
        delta_1 * A * p_1 - r_1 + r_2,
        p_2 - r_2 + p_1 * mu_12,
        x_2 - x_1 - delta_1 * p_1,
        T(r_1) * r_2,
        T(p_1) * A * p_2,
    ]
    run_cg_algorithms(cg_eqns, knowns)
示例#15
0
def testZero():
    A = Tensor('A', 2)
    a = Tensor('a', 1)
    alpha = Tensor('alpha', 0)
    Z = Tensor('0', 2)
    z = Tensor('0', 1)
    z_0 = Tensor('0', 0)

    assert(A + Z == A)
    assert(Z + A == A)
    assert(A * Z == Z)
    assert(Z * A == Z)

    assert(a + z == a)
    assert(z + a == a)
    assert(A * z == z)
    assert(T(a) * z == z_0)
    assert(T(z) * a == z_0)
    assert(z * T(a) == Z)
    assert(a * T(z) == Z)

    assert(alpha + z_0 == alpha)
    assert(alpha * z_0 == z_0)
    assert(alpha * z == z)
    assert(alpha * Z == Z)

    assert(z_0 * A == Z)
    assert(z_0 * a == z)
    assert(A + z_0 == A)
    assert(z_0 + A == A)
示例#16
0
def testUpdate():
    k = Symbol('k')
    A = Tensor('A', 2)
    A_TL = A.update(l_ind='TL')
    A_TL_2 = A_TL.update(u_ind='2', rank=2)
    A_01 = A_TL.update(l_ind='01', shape=(k, k))
    a_02 = T(A_TL.update(l_ind='02', shape=(1, k), rank=1))

    assert(A_TL == Tensor('A_TL', 2))
    assert(A_TL_2 == Tensor('A_TL^2', 2))
    assert(A_01 == Tensor('A_01', 2, shape=(k, k)))
    assert(a_02 == T(Tensor('a_02', 1, shape=(1, k))))
示例#17
0
def test_sol_without_recomputes():
    a, b, c, d = map(lambda x: Tensor(x, rank=0), 'abcd')
    sol_dict = {a: b + c * d, b: c * d}
    ord_unk = [a, b]
    assert (sol_without_recomputes((sol_dict, ord_unk)) == (sol_dict, ord_unk))
    sol_dict = {a: b + c * d, b: c * d}
    ord_unk = [b, a]
    assert (sol_without_recomputes((sol_dict, ord_unk)) is None)
    sol_dict = {a: set([b + c * d]), b: set([c * d])}
    ord_unk = [b, a]
    assert (sol_without_recomputes((sol_dict, ord_unk)) is None)
    sol_dict = {a: set([b + c * d, b * d]), b: set([c * d])}
    ord_unk = [b, a]
    assert(sol_without_recomputes((sol_dict, ord_unk)) == \
           ({a: set([b*d]), b: set([c*d])}, ord_unk))
    sol_dict = {a: set([b + c * d, b * d]), b: set([c * d])}
    ord_unk = [a, b]
    assert (sol_without_recomputes((sol_dict, ord_unk)) == (sol_dict, ord_unk))
示例#18
0
def test_2():
    from sympy import expand, S
    A = Tensor('A', rank=2)
    A_t = Transpose(A)
    B = Tensor('B', rank=2)
    x = Tensor('x', rank=1)
    y = Tensor('y', rank=1)
    x_t = Transpose(x)
    y_t = Transpose(y)
    alpha = Tensor('alpha', rank=0)
    beta = Tensor('beta', rank=0)
    teqn = Transpose((A + B) * x)
    print "teqn.expand: ", teqn.expand(), "should be x'*A' + x'*B'"

    print expand(S(2) * beta * (alpha * A + beta * B) *
                 x), "should be 2*beta**2*B*x + 2*alpha*beta*A*x"
    print expr_shape(expand(S(2) * A * x)), "should be (n, 1)"
示例#19
0
def testZeroOne():
    ZERO = Tensor('0', 2)
    One = Tensor('1', 1)
    k = Tensor('k', 1)
    assert(k - ZERO * One == k)
示例#20
0
from sympy import S, Symbol
from sympy.utilities.pytest import raises
from ignition.dsl.flame.tensors import (ConformityError, I, Inverse, one, T,
                                    Tensor, solve_vec_eqn)


delta_1, omega_2, pi_1, pi_2, gamma_2, mu_12 = \
    map(lambda x: Tensor(x, rank=0),
        ['delta_1', 'omega_2', 'pi_1', 'pi_2', 'gamma_2', 'mu_12'])
r_1, r_2, q_1, q_2, p_1, p_2, s_1, s_2, x_1 = \
    map(lambda x: Tensor(x, rank=1),
        ['r_1', 'r_2', 'q_1', 'q_2', 'p_1', 'p_2', 's_1', 's_2', 'x_1'])
A, R_0, P_0 = map(lambda x: Tensor(x, rank=2), ['A', 'R_0', 'P_0'])


def test_algebra():
    eqn = -2 * (T(p_1) * A * r_2) / (T(p_1) * A * p_1) * (T(p_1) * A * r_2)
    eqn -= -2 * (T(p_1) * A * r_2) * (T(p_1) * A * r_2) / (T(p_1) * A * p_1)
    assert(eqn == S(0))
    assert(T(p_1) * A * r_2 == T(r_2) * A * p_1)

def test_vec_solve():
    mu_12 = Tensor('mu_12', rank=0)
    p_1, p_2 = map(lambda x: Tensor(x, rank=1), ['p_1', 'p_2'])
    A = Tensor('A', rank=2)
    print solve_vec_eqn(-mu_12 * (T(p_1) * A * p_2) - mu_12 * (T(p_2) * A * p_1) + (T(p_2) * A * p_1) , mu_12)

def testZero():
    A = Tensor('A', 2)
    a = Tensor('a', 1)
    alpha = Tensor('alpha', 0)
示例#21
0
def test_cyclic_solve():
    a, b = map(lambda x: Tensor(x, rank=0), 'ab')
    assert (backward_sub([a + b], [], [a, b]) == (None, b))
示例#22
0
def test_numerator():
    a, b, c = map(lambda x: Tensor(x, rank=0), 'abc')
    expr = (a + b) / c
    sol = solve_vec_eqn(expr, a)
    assert (sol == -b)