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)
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)
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)
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)
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)
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
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
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))