def test_add(self):
        a = [['a', 'g'], ['b', 'x']]

        b = [['b', 'b'], ['d', 'b']]
        res1 = [['a+b', 'g+b'], ['b+d', 'b+x']]
        res2 = [['b+b', 'b+b'], ['d+d', 'b+b']]
        A = SymArray(a)
        B = SymArray(b)
        res1 = SymArray(res1)
        res2 = SymArray(res2)

        self.assertEqual(A + B, res1)
        self.assertEqual(B + B, res2)
    def test_equal(self):
        A = SymArray(self.a)
        B = SymArray(self.b)
        Aprim = SymArray(self.a)
        cut_A = A[2:, 0:2]
        cut_B = B[2:, 0:2]

        self.assertEqual(A, Aprim)
        self.assertFalse(A == B)
        self.assertEqual(cut_A, cut_B)

        self.assertTrue(A[2] == SymArray([['q', 't', 'i', 'y']]))
        self.assertTrue(A[2] == SymArray(['q', 't', 'i', 'y']))
    def test_mult(self):
        a = [['a', 'g'], ['b', 'x']]

        b = [['b', 'b'], ['d', 'b']]
        res1 = [['a*a + b*g', 'a*g + x*g'], ['b*a + x*b', 'g*b + x*x']]
        res2 = [['a*b + d*g', 'a*b + b*g'], ['b*b + d*x', 'b*b + x*b']]

        A = SymArray(a)
        B = SymArray(b)
        Res1 = SymArray(res1)
        Res2 = SymArray(res2)

        self.assertEqual(A * A, Res1)
        self.assertEqual(A * B, Res2)
    def test_sub(self):
        a = [['a', 'g'], ['b', 'x']]

        b = [['b', 'b'], ['d', 'b']]
        res1 = [['a-b', 'g-b'], ['b-d', 'x-b']]
        res2 = [['b-b', 'b-b'], ['d-d', 'b-b']]

        A = SymArray(a)
        B = SymArray(b)
        res1 = SymArray(res1)
        res2 = SymArray(res2)

        self.assertEqual(A - B, res1)
        self.assertEqual(B - B, res2)
    def test_traspose(self):
        a = [['a', 'g'], ['b', 'x']]

        b = [['a', 'b'], ['g', 'x']]

        a2 = [['a', 'g', 'j'], ['b', 'x', 'k']]

        b2 = [['a', 'b'], ['g', 'x'], ['j', 'k']]

        A = SymArray(a)
        B = SymArray(b)
        A2 = SymArray(a2)
        B2 = SymArray(b2)

        self.assertEqual(A.transp(), B)
        self.assertEqual(A2.transp(), B2)
    def test_row_change(self):
        ar0 = [['a', 'b', 'c'], ['a', 'd', 'g']]
        ar1_a = [['a', 'a', 'a'], ['a', 'a', 'a']]
        ar1_b = [['b', 'b', 'b'], ['d', 'd', 'd']]
        ar1_c = [['c', 'b', 'a'], ['g', 'd', 'a']]

        array0 = SymArray(ar0)
        new_array_a = array0.switch_cols([0, 0, 0])
        new_array_b = array0.switch_cols([1, 1, 1])
        new_array_c = array0.switch_cols([2, 1, 0])

        self.assertEqual(new_array_a, SymArray(ar1_a))
        self.assertEqual(new_array_b, SymArray(ar1_b))
        self.assertEqual(new_array_c, SymArray(ar1_c))
    def test_row_change(self):
        ar0 = [['a*a + b*g', 'a*g + x*g'], ['b*a + x*b', 'g*b + x*x']]
        ar1_a = [['a*a + b*g', 'a*g + x*g'], ['a*a + b*g', 'a*g + x*g']]
        ar1_b = [['b*a + x*b', 'g*b + x*x'], ['b*a + x*b', 'g*b + x*x']]
        ar1_c = [['b*a + x*b', 'g*b + x*x'], ['a*a + b*g', 'a*g + x*g']]

        array0 = SymArray(ar0)
        new_array_a = array0.switch_rows([0, 0])
        new_array_b = array0.switch_rows([1, 1])
        new_array_c = array0.switch_rows([1, 0])

        self.assertEqual(new_array_a, SymArray(ar1_a))
        self.assertEqual(new_array_b, SymArray(ar1_b))
        self.assertEqual(new_array_c, SymArray(ar1_c))
    def test_fit(self):
        a = \
            [['a', 'b', 'a', 'b'],
             ['a', 'b', 'a', 'b']]

        b = [['a', 'b'], ['c', 'd']]
        c = ['a', 'b', 'c']

        A = SymArray(a)
        B = SymArray(b)
        C = SymArray(c)

        self.assertTrue(A.match_any_patern())
        self.assertFalse(B.match_any_patern())
        self.assertRaises(ValueError, C.match_any_patern)
    def test_rowcols_change(self):
        ar0 = [['a', 'b', 'c'], ['a', 'd', 'g'], ['b', 'd', 'f']]
        ar1_a = [['a', 'a', 'a'], ['a', 'a', 'a'], ['a', 'a', 'a']]
        ar1_b = [['d', 'b', 'f'], ['d', 'a', 'g'], ['b', 'a', 'c']]

        array0 = SymArray(ar0)  # initial array for operations

        # Checking with ar1_a
        new_array_a = array0.switch_cols([0, 0, 0])
        new_array_a = new_array_a.switch_rows([1, 1, 1])
        self.assertEqual(new_array_a, SymArray(ar1_a))
        # Checking with ar1_b
        new_array_b = array0.switch_rows([2, 1, 0])
        new_array_b = new_array_b.switch_cols([1, 0, 2])
        self.assertEqual(new_array_b, SymArray(ar1_b))
 def test_arra_length(self):
     A = SymArray(self.a)
     self.assertEqual(A.size[0], len(A))
     self.assertEqual(A.size[0], 4)
     self.assertEqual(A.size[1], len(A[0]))
     self.assertEqual(A.size[1], 4)