示例#1
0
def test_arithmetics():
    a = list2tensor([3 for i in range(9)], (3, 3), (1, -1))
    b = list2tensor([7 for i in range(9)], (3, 3), (1, -1))

    c1 = a + b
    c2 = b + a
    assert c1 == c2

    d1 = a - b
    d2 = b - a
    assert d1 == d2 * (-1)

    e1 = a * 5
    e2 = 5 * a
    e3 = copy(a)
    e3 *= 5
    assert e1 == e2 == e3

    f1 = a / 5
    f2 = copy(a)
    f2 /= 5
    assert f1 == f2
    assert f1[0, 0] == f1[0, 1] == f1[0, 2] == f1[1, 0] == f1[1, 1] == \
    f1[1, 2] == f1[2, 0] == f1[2, 1] == f1[2, 2] == 3 / 5

    assert type(a) == type(b) == type(c1) == type(c2) == type(d1) == type(d2) \
        == type(e1) == type(e2) == type(e3) == type(f1)
示例#2
0
def test_raise_index():
    x, y, z, w, r, phi = symbols('x y z w r phi')
    A = list2tensor([1, 0, 0, 0, r**2, 0, 0, 0, (r**2) * sin(phi)], (3, 3),
                    (-1, -1))
    original_A = copy(A)

    T = list2tensor([w, x, 0, y, z, 0, 0, y**2, x * y * w], (3, 3), (-1, -1))
    original_T = copy(T)

    S1 = raise_index(T, A, 1)
    assert S1.ind_char == (1, -1)

    # check that original A and T not changed
    assert original_A == A
    assert original_T == T

    S2 = raise_index(T, A, 2)
    # w  x/r**2  0
    # y  z/r**2  0
    # 0  y**2/r**2  w*x*y/(r**2*sin(phi))
    assert S2.ind_char == (-1, 1)
    assert S2[0, 0] == w
    assert S2[0, 1] == x / r**2
    assert S2[0, 2] == S2[1, 2] == S2[2, 0] == 0
    assert S2[1, 0] == y
    assert S2[1, 1] == z / r**2
    assert S2[2, 1] == y**2 / r**2
    assert S2[2, 2] == w * x * y / (r**2 * sin(phi))

    S3 = raise_index(T, A, 1, 2)
    S4 = raise_index(T, A, *[1, 2])
    assert S3 == S4
    assert S3.ind_char == S4.ind_char == (1, 1)
示例#3
0
def test_lower_index():
    x, y, z, w, r, phi = symbols('x y z w r phi')
    A = list2tensor([1, 0, 0, 0, r**2, 0, 0, 0, (r**2) * sin(phi)], (3, 3),
                    (-1, -1))
    original_A = copy(A)

    T = list2tensor([w, x, 0, y, z, 0, 0, y**2, x * y * w], (3, 3), (1, 1))
    original_T = copy(T)

    S1 = lower_index(T, A, 1)
    assert S1.ind_char == (-1, 1)

    assert original_A == A
    assert original_T == T

    # w  x  0
    # r**2*y  r**2*z  0
    # 0  r**2*y**2*sin(phi)  r**2*w*x*y*sin(phi)
    assert S1[0, 0] == w
    assert S1[0, 1] == x
    assert S1[0, 2] == S1[1, 2] == S1[2, 0] == 0
    assert S1[1, 0] == r**2 * y
    assert S1[1, 1] == r**2 * z
    assert S1[2, 1] == r**2 * y**2 * sin(phi)
    assert S1[2, 2] == r**2 * w * x * y * sin(phi)

    S2 = lower_index(T, A, 2)
    assert S2.ind_char == (1, -1)

    S3 = lower_index(T, A, 1, 2)
    S4 = lower_index(T, A, *[1, 2])
    assert S3 == S4
    assert S3.ind_char == S4.ind_char == (-1, -1)
示例#4
0
def test_df_varlist():
    x1, x2, x3 = symbols('x1 x2 x3')
    f = x1**2 * x2 + sin(x2 * x3 - x2)
    var_list = [x1, x2, x3]

    assert df(f, var_list) == [
        2 * x1 * x2, x1**2 + (x3 - 1) * cos(x2 * x3 - x2),
        x2 * cos(x2 * x3 - x2)
    ]
    assert isinstance(df(f, var_list), list)
    assert df(f, var_list, 'l') == [
        2 * x1 * x2, x1**2 + (x3 - 1) * cos(x2 * x3 - x2),
        x2 * cos(x2 * x3 - x2)
    ]
    assert isinstance(df(f, var_list, 'l'), list)

    assert df(f, var_list, 'a') == list2arraypy([
        2 * x1 * x2, x1**2 + (x3 - 1) * cos(x2 * x3 - x2),
        x2 * cos(x2 * x3 - x2)
    ])
    assert isinstance(df(f, var_list, 'a'), Arraypy)

    assert df(f, var_list, 't') == list2tensor([
        2 * x1 * x2, x1**2 + (x3 - 1) * cos(x2 * x3 - x2),
        x2 * cos(x2 * x3 - x2)
    ])
    assert isinstance(df(f, var_list, 't'), TensorArray)
    assert df(f, var_list, 't').type_pq == (0, 1)
示例#5
0
def test_df_var_tnsr0():
    x1, x2, x3 = symbols('x1 x2 x3')
    f = x1**2 * x2 + sin(x2 * x3 - x2)
    var_tnsr0 = TensorArray(Arraypy(3), (1))
    var_tnsr0[0] = x1
    var_tnsr0[1] = x2
    var_tnsr0[2] = x3

    assert df(f, var_tnsr0) == [
        2 * x1 * x2, x1**2 + (x3 - 1) * cos(x2 * x3 - x2),
        x2 * cos(x2 * x3 - x2)
    ]
    assert isinstance(df(f, var_tnsr0), list)

    assert df(f, var_tnsr0, 'l') == [
        2 * x1 * x2, x1**2 + (x3 - 1) * cos(x2 * x3 - x2),
        x2 * cos(x2 * x3 - x2)
    ]
    assert isinstance(df(f, var_tnsr0, 'l'), list)

    assert df(f, var_tnsr0, 'a') == list2arraypy([
        2 * x1 * x2, x1**2 + (x3 - 1) * cos(x2 * x3 - x2),
        x2 * cos(x2 * x3 - x2)
    ])
    assert isinstance(df(f, var_tnsr0, 'a'), Arraypy)

    assert df(f, var_tnsr0, 't') == list2tensor([
        2 * x1 * x2, x1**2 + (x3 - 1) * cos(x2 * x3 - x2),
        x2 * cos(x2 * x3 - x2)
    ])
    assert isinstance(df(f, var_tnsr0, 't'), TensorArray)
    assert df(f, var_tnsr0, 't').type_pq == (0, 1)
示例#6
0
def test_tensor_contract():
    tensor = list2tensor(list(range(9)), (3, 3), (1, -1))
    # 0 1 2
    # 3 4 5
    # 6 7 8
    assert tensor.rank == 2

    # contract of matrix will be summ of diagonal elements: 0 + 4 + 8 == 12
    res_tensor = tensor.contract(1, 2)
    assert res_tensor.rank == 1
    assert len(res_tensor) == 1
    assert res_tensor[0] == 12
示例#7
0
def test_equality():
    first_list = [1, 2, 3, 4]
    second_list = [1, 2, 3, 4]
    third_list = [4, 3, 2, 1]
    assert first_list == second_list
    assert first_list != third_list

    first_arraypy = list2arraypy(first_list, (2, 2))
    second_arraypy = list2arraypy(second_list, (2, 2))
    third_arraypy = list2arraypy(third_list, (2, 2))
    fourth_arraypy = list2arraypy(first_list, 4)

    assert first_arraypy == second_arraypy
    second_arraypy[0, 0] = 0
    assert first_arraypy != second_arraypy
    assert first_arraypy != third_arraypy
    assert first_arraypy != fourth_arraypy

    first_tensor = list2tensor(first_list, (2, 2), (1, 1))
    second_tensor = list2tensor(second_list, (2, 2), (1, 1))
    third_tensor = list2tensor(second_list, (2, 2), (-1, 1))

    assert first_tensor == second_tensor
    assert first_tensor != third_tensor
示例#8
0
def test_converting_functions():
    arr_list = [1, 2, 3, 4]
    arr_matrix = Matrix(((1, 2), (3, 4)))

    # list
    arr_arraypy = list2arraypy(arr_list, (2, 2))
    assert (isinstance(arr_arraypy, Arraypy))

    arr_tensor = list2tensor(arr_list, (2, 2), (-1, -1))
    assert (isinstance(arr_tensor, TensorArray))

    # Matrix
    arr_arraypy = matrix2arraypy(arr_matrix)
    assert (isinstance(arr_arraypy, Arraypy))

    arr_tensor = matrix2tensor(arr_matrix, (-1, -1))
    assert (isinstance(arr_tensor, TensorArray))