def test_tuple_derivative2(self):

        cell = ('aa', 'v', 'aa')
        d_cell = derivative(cell, self.DGC)
        d_cell = [tp for c in d_cell for tp in expand_tuple_list(c)]

        self.assertEqual(d_cell, [('b', 'v', 'aa'), ('aa', 'v', 'b')])
    def test_chain_derivative2(self):

        chain = [('v', 'aa'), ('v', 'ab'), ('aa', 'v'), ('ab', 'v'),
                 ('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]
        d_chain = derivative(chain, self.DGC)
        d_chain = [tp for c in d_chain for tp in expand_tuple_list(c)]

        self.assertEqual(d_chain, [('v', 'b'), ('b', 'v')])
    def test_chain_derivative1(self):

        chain = ['m_{4}', 'm_{11}']

        d_chain = derivative(chain, self.BR3)
        self.assertEqual(d_chain, ['v_{2}', 'v_{1}', 'v_{2}', 'v_{1}'])

        d_chain = list_mod(d_chain)
        self.assertFalse(d_chain)
    def test_tuple_derivative(self):

        cell = ('m_{4}', 'm_{11}')
        d_cell = derivative(cell, self.BR3)

        self.assertEqual(d_cell, [(['v_{2}', 'v_{1}'], 'm_{11}'),
                                  ('m_{4}', ['v_{2}', 'v_{1}'])])

        d_cell = [tp for c in d_cell for tp in expand_tuple_list(c)]
        self.assertEqual(d_cell, [('v_{2}', 'm_{11}'), ('v_{1}', 'm_{11}'),
                                  ('m_{4}', 'v_{2}'), ('m_{4}', 'v_{1}')])
    def test_BR3_g3_h1_1(self):
        g3_h1_1a = [(['c_{3}', 'c_{7}'], ['v_{1}', 'v_{3}'], ['m_{4}']),
                    (['c_{3}', 'c_{7}'], ['c_{3}'], ['v_{1}', 'v_{3}']),
                    (['c_{3}', 'c_{7}'], ['m_{4}'], ['v_{1}', 'v_{2}']),
                    (['c_{3}', 'c_{7}'], ['v_{2}', 'v_{3}'], ['c_{3}'])]

        anti_g3_h1_1a = chain_integrate(g3_h1_1a, self.BR_C)

        self.assertIsNotNone(anti_g3_h1_1a)

        d_anti_g3_h1_1a = [dX for dXs in derivative(anti_g3_h1_1a, self.BR_C) for dX in expand_tuple_list(dXs)]
        d_anti_g3_h1_1a = list_mod(d_anti_g3_h1_1a)
        g3_h1_1a_exp = [x for xs in g3_h1_1a for x in expand_tuple_list(xs)]
        g3_h1_1a_exp = list_mod(g3_h1_1a_exp)
        self.assertSetEqual(set(d_anti_g3_h1_1a), set(g3_h1_1a_exp))
    def test_chain_derivative2(self):

        chain = [('v_{1}', 'm_{4}'), ('v_{2}', 'm_{4}'),
                 ('v_{1}', 'm_{11}'), ('v_{2}', 'm_{11}')]

        d_chain = derivative(chain, self.BR3)
        self.assertEqual(d_chain, [([], 'm_{4}'), ('v_{1}', ['v_{2}', 'v_{1}']), ([], 'm_{4}'), ('v_{2}', ['v_{2}', 'v_{1}']),
                                   ([], 'm_{11}'), ('v_{1}', ['v_{2}', 'v_{1}']), ([], 'm_{11}'), ('v_{2}', ['v_{2}', 'v_{1}'])])

        d_chain = [tp for c in d_chain for tp in expand_tuple_list(c)]

        self.assertEqual(d_chain, [('v_{1}', 'v_{2}'), ('v_{1}', 'v_{1}'), ('v_{2}', 'v_{2}'), ('v_{2}', 'v_{1}'),
                                   ('v_{1}', 'v_{2}'), ('v_{1}', 'v_{1}'), ('v_{2}', 'v_{2}'), ('v_{2}', 'v_{1}')])

        d_chain = list_mod(d_chain)
        self.assertFalse(d_chain)
    def test_chain_derivative1(self):

        chain = ['aa', 'ab']

        self.assertEqual(derivative(chain, self.DGC), ['b'])
    def test_simple_derivative(self):

        cell = 'aa'

        self.assertEqual(derivative(cell, self.DGC), ['b'])
    def test_simple_derivative(self):

        cell1 = 'm_{4}'

        self.assertSetEqual(set(derivative(cell1, self.BR3)), set(['v_{1}', 'v_{2}']))