Example #1
0
    def testDistributiveLaw(self):
        A, B, C, D, E = get_symbols(2, 1, 1, 1, 1)

        self.assertEquals((A + B) << (C + D + E),
                          Concatenation(A << (C + D), B << E))

        self.assertEquals((C + D + E) << (A + B),
                          Concatenation((C + D) << A, E << B))

        self.assertEquals((A + B) << (C + D + E) << (A + B),
                          Concatenation(A << (C + D) << A, B << E << B))

        self.assertEquals(SeriesProduct.create((A + B), (C + D + E), (A + B)),
                          Concatenation(A << (C + D) << A, B << E << B))

        test_perm = (0, 1, 3, 2)
        qtp = CPermutation(test_perm)

        self.assertEquals(
            CPermutation((1, 0)) << (B + C),
            SeriesProduct(Concatenation(C, B), CPermutation((1, 0))))

        self.assertEquals(qtp << (A + B + C), (A + C + B) << qtp)

        self.assertEquals(qtp << (B + C + A), B + C + (CPermutation(
            (1, 0)) << A))

        test_perm2 = (1, 0, 3, 2)
        qtp2 = CPermutation(test_perm2)

        self.assertEquals(qtp2 << (A + B + C), (CPermutation(
            (1, 0)) << A) + ((C + B) << CPermutation((1, 0))))

        self.assertEquals(qtp << qtp2,
                          CPermutation(permute(test_perm, test_perm2)))
Example #2
0
    def testCPermutation(self):
        test_perm = (0, 1, 2, 5, 6, 3, 4)
        qtp = CPermutation.create(test_perm)
        self.assertRaises(Exception, CPermutation.create, (list(test_perm)))
        self.assertEqual(qtp.series_inverse(),
                         CPermutation.create(invert_permutation(test_perm)))
        self.assertEqual(qtp.block_structure, (1, 1, 1, 4))
        id1 = circuit_identity(1)
        self.assertEqual(qtp.get_blocks(),
                         (id1, id1, id1, CPermutation.create((2, 3, 0, 1))))

        self.assertEqual(
            CPermutation((1, 0, 3, 2)).get_blocks(), (CPermutation(
                (1, 0)), CPermutation((1, 0))))
        nt = len(test_perm)
        self.assertEqual(qtp << qtp.series_inverse(), circuit_identity(nt))
        self.assertEqual(
            permute(list(invert_permutation(test_perm)), test_perm),
            list(range(nt)))
Example #3
0
 def testCPermutation(self):
     self.assertEqual(parse_circuit_strings('P_sigma(0,2,1)'),
                      CPermutation((0, 2, 1)))
     self.assertEqual(parse_circuit_strings('P_sigma(0,2,1,4,3)'),
                      CPermutation((0, 2, 1, 4, 3)))
Example #4
0
 def testDrawCPermutation(self):
     self.assertCanBeDrawn(CPermutation((0, 2, 3, 1)))