def raises_array():
     stab[inds] = StabilizerTable.from_labels(["+YY", "-ZZ", "+XX"])
 def test_eq(self):
     """Test __eq__ method."""
     stab1 = StabilizerTable.from_labels(["II", "XI"])
     stab2 = StabilizerTable.from_labels(["XI", "II"])
     self.assertEqual(stab1, stab1)
     self.assertNotEqual(stab1, stab2)
 def test_len_methods(self):
     """Test __len__ method."""
     for j in range(1, 10):
         labels = j * ["XX"]
         stab = StabilizerTable.from_labels(labels)
         self.assertEqual(len(stab), j)
    def test_compose_qargs(self):
        """Test compose and dot methods with qargs."""

        # Dot product with qargs
        stab1 = StabilizerTable.from_labels(["III", "-XXX", "YYY", "-ZZZ"])

        # 1-qubit qargs
        stab2 = StabilizerTable("-Z")

        with self.subTest(msg="dot 1-qubit qargs=[0]"):
            target = StabilizerTable.from_labels(["-IIZ", "XXY", "YYX", "ZZI"])
            value = stab1.dot(stab2, qargs=[0])
            self.assertEqual(value, target)

        with self.subTest(msg="compose 1-qubit qargs=[0]"):
            target = StabilizerTable.from_labels(
                ["-IIZ", "-XXY", "-YYX", "ZZI"])
            value = stab1.compose(stab2, qargs=[0])
            self.assertEqual(value, target)

        with self.subTest(msg="dot 1-qubit qargs=[1]"):
            target = StabilizerTable.from_labels(["-IZI", "XYX", "YXY", "ZIZ"])
            value = stab1.dot(stab2, qargs=[1])
            self.assertEqual(value, target)

        with self.subTest(msg="compose 1-qubit qargs=[1]"):
            value = stab1.compose(stab2, qargs=[1])
            target = StabilizerTable.from_labels(
                ["-IZI", "-XYX", "-YXY", "ZIZ"])
            self.assertEqual(value, target)

        target = StabilizerTable.from_labels(["ZII", "YXX"])
        with self.subTest(msg="dot 1-qubit qargs=[2]"):
            value = stab1.dot(stab2, qargs=[2])
            target = StabilizerTable.from_labels(["-ZII", "YXX", "XYY", "IZZ"])
            self.assertEqual(value, target)

        with self.subTest(msg="compose 1-qubit qargs=[2]"):
            value = stab1.compose(stab2, qargs=[2])
            target = StabilizerTable.from_labels(
                ["-ZII", "-YXX", "-XYY", "IZZ"])
            self.assertEqual(value, target)

        # 2-qubit qargs
        stab2 = StabilizerTable("-ZY")
        with self.subTest(msg="dot 2-qubit qargs=[0, 1]"):
            value = stab1.dot(stab2, qargs=[0, 1])
            target = StabilizerTable.from_labels(
                ["-IZY", "-XYZ", "-YXI", "ZIX"])
            self.assertEqual(value, target)

        with self.subTest(msg="compose 2-qubit qargs=[0, 1]"):
            value = stab1.compose(stab2, qargs=[0, 1])
            target = StabilizerTable.from_labels(
                ["-IZY", "-XYZ", "YXI", "-ZIX"])
            self.assertEqual(value, target)

        target = StabilizerTable.from_labels(["YIZ", "ZXY"])
        with self.subTest(msg="dot 2-qubit qargs=[2, 0]"):
            value = stab1.dot(stab2, qargs=[2, 0])
            target = StabilizerTable.from_labels(
                ["-YIZ", "-ZXY", "-IYX", "XZI"])
            self.assertEqual(value, target)

        with self.subTest(msg="compose 2-qubit qargs=[2, 0]"):
            value = stab1.compose(stab2, qargs=[2, 0])
            target = StabilizerTable.from_labels(
                ["-YIZ", "-ZXY", "IYX", "-XZI"])
            self.assertEqual(value, target)

        # 3-qubit qargs
        stab2 = StabilizerTable("-XYZ")

        target = StabilizerTable.from_labels(["XYZ", "IZY"])
        with self.subTest(msg="dot 3-qubit qargs=None"):
            value = stab1.dot(stab2, qargs=[0, 1, 2])
            target = StabilizerTable.from_labels(
                ["-XYZ", "-IZY", "-ZIX", "-YXI"])
            self.assertEqual(value, target)

        with self.subTest(msg="dot 3-qubit qargs=[0, 1, 2]"):
            value = stab1.dot(stab2, qargs=[0, 1, 2])
            target = StabilizerTable.from_labels(
                ["-XYZ", "-IZY", "-ZIX", "-YXI"])
            self.assertEqual(value, target)

        with self.subTest(msg="dot 3-qubit qargs=[2, 1, 0]"):
            value = stab1.dot(stab2, qargs=[2, 1, 0])
            target = StabilizerTable.from_labels(
                ["-ZYX", "-YZI", "-XIZ", "-IXY"])
            self.assertEqual(value, target)

        with self.subTest(msg="compose 3-qubit qargs=[2, 1, 0]"):
            value = stab1.compose(stab2, qargs=[2, 1, 0])
            target = StabilizerTable.from_labels(
                ["-ZYX", "-YZI", "-XIZ", "-IXY"])
            self.assertEqual(value, target)
 def set_z():
     stab = StabilizerTable.from_labels(["XI", "IZ"])
     val = np.array([[False, False, False], [True, True, True]],
                    dtype=bool)
     stab.Z = val
     return stab
Exemple #6
0
 def set_z():
     stab = StabilizerTable.from_labels(['XI', 'IZ'])
     val = np.array([[False, False, False], [True, True, True]],
                    dtype=np.bool)
     stab.Z = val
     return stab
Exemple #7
0
    def test_compose(self):
        """Test compose and dot methods."""

        # Test single qubit Pauli dot products
        stab = StabilizerTable.from_labels(["I", "X", "Y", "Z"])

        # Test single qubit Pauli dot products
        stab = StabilizerTable.from_labels(
            ["I", "X", "Y", "Z", "-I", "-X", "-Y", "-Z"])

        with self.subTest(msg="dot single I"):
            value = stab.compose("I")
            target = StabilizerTable.from_labels(
                ["I", "X", "Y", "Z", "-I", "-X", "-Y", "-Z"])
            self.assertEqual(target, value)

        with self.subTest(msg="dot single -I"):
            value = stab.compose("-I")
            target = StabilizerTable.from_labels(
                ["-I", "-X", "-Y", "-Z", "I", "X", "Y", "Z"])
            self.assertEqual(target, value)

        with self.subTest(msg="dot single I"):
            value = stab.dot("I")
            target = StabilizerTable.from_labels(
                ["I", "X", "Y", "Z", "-I", "-X", "-Y", "-Z"])
            self.assertEqual(target, value)

        with self.subTest(msg="dot single -I"):
            value = stab.dot("-I")
            target = StabilizerTable.from_labels(
                ["-I", "-X", "-Y", "-Z", "I", "X", "Y", "Z"])
            self.assertEqual(target, value)

        with self.subTest(msg="compose single X"):
            value = stab.compose("X")
            target = StabilizerTable.from_labels(
                ["X", "I", "-Z", "Y", "-X", "-I", "Z", "-Y"])
            self.assertEqual(target, value)

        with self.subTest(msg="compose single -X"):
            value = stab.compose("-X")
            target = StabilizerTable.from_labels(
                ["-X", "-I", "Z", "-Y", "X", "I", "-Z", "Y"])
            self.assertEqual(target, value)

        with self.subTest(msg="dot single X"):
            value = stab.dot("X")
            target = StabilizerTable.from_labels(
                ["X", "I", "Z", "-Y", "-X", "-I", "-Z", "Y"])
            self.assertEqual(target, value)

        with self.subTest(msg="dot single -X"):
            value = stab.dot("-X")
            target = StabilizerTable.from_labels(
                ["-X", "-I", "-Z", "Y", "X", "I", "Z", "-Y"])
            self.assertEqual(target, value)

        with self.subTest(msg="compose single Y"):
            value = stab.compose("Y")
            target = StabilizerTable.from_labels(
                ["Y", "Z", "-I", "-X", "-Y", "-Z", "I", "X"])
            self.assertEqual(target, value)

        with self.subTest(msg="compose single -Y"):
            value = stab.compose("-Y")
            target = StabilizerTable.from_labels(
                ["-Y", "-Z", "I", "X", "Y", "Z", "-I", "-X"])
            self.assertEqual(target, value)

        with self.subTest(msg="dot single Y"):
            value = stab.dot("Y")
            target = StabilizerTable.from_labels(
                ["Y", "-Z", "-I", "X", "-Y", "Z", "I", "-X"])
            self.assertEqual(target, value)

        with self.subTest(msg="dot single -Y"):
            value = stab.dot("-Y")
            target = StabilizerTable.from_labels(
                ["-Y", "Z", "I", "-X", "Y", "-Z", "-I", "X"])
            self.assertEqual(target, value)

        with self.subTest(msg="compose single Z"):
            value = stab.compose("Z")
            target = StabilizerTable.from_labels(
                ["Z", "-Y", "X", "I", "-Z", "Y", "-X", "-I"])
            self.assertEqual(target, value)

        with self.subTest(msg="compose single -Z"):
            value = stab.compose("-Z")
            target = StabilizerTable.from_labels(
                ["-Z", "Y", "-X", "-I", "Z", "-Y", "X", "I"])
            self.assertEqual(target, value)

        with self.subTest(msg="dot single Z"):
            value = stab.dot("Z")
            target = StabilizerTable.from_labels(
                ["Z", "Y", "-X", "I", "-Z", "-Y", "X", "-I"])
            self.assertEqual(target, value)

        with self.subTest(msg="dot single -Z"):
            value = stab.dot("-Z")
            target = StabilizerTable.from_labels(
                ["-Z", "-Y", "X", "-I", "Z", "Y", "-X", "I"])
            self.assertEqual(target, value)
Exemple #8
0
    def test_compose(self):
        """Test compose and dot methods."""

        # Test single qubit Pauli dot products
        stab = StabilizerTable.from_labels(['I', 'X', 'Y', 'Z'])

        # Test single qubit Pauli dot products
        stab = StabilizerTable.from_labels(
            ['I', 'X', 'Y', 'Z', '-I', '-X', '-Y', '-Z'])

        with self.subTest(msg='dot single I'):
            value = stab.compose('I')
            target = StabilizerTable.from_labels(
                ['I', 'X', 'Y', 'Z', '-I', '-X', '-Y', '-Z'])
            self.assertEqual(target, value)

        with self.subTest(msg='dot single -I'):
            value = stab.compose('-I')
            target = StabilizerTable.from_labels(
                ['-I', '-X', '-Y', '-Z', 'I', 'X', 'Y', 'Z'])
            self.assertEqual(target, value)

        with self.subTest(msg='dot single I'):
            value = stab.dot('I')
            target = StabilizerTable.from_labels(
                ['I', 'X', 'Y', 'Z', '-I', '-X', '-Y', '-Z'])
            self.assertEqual(target, value)

        with self.subTest(msg='dot single -I'):
            value = stab.dot('-I')
            target = StabilizerTable.from_labels(
                ['-I', '-X', '-Y', '-Z', 'I', 'X', 'Y', 'Z'])
            self.assertEqual(target, value)

        with self.subTest(msg='compose single X'):
            value = stab.compose('X')
            target = StabilizerTable.from_labels(
                ['X', 'I', '-Z', 'Y', '-X', '-I', 'Z', '-Y'])
            self.assertEqual(target, value)

        with self.subTest(msg='compose single -X'):
            value = stab.compose('-X')
            target = StabilizerTable.from_labels(
                ['-X', '-I', 'Z', '-Y', 'X', 'I', '-Z', 'Y'])
            self.assertEqual(target, value)

        with self.subTest(msg='dot single X'):
            value = stab.dot('X')
            target = StabilizerTable.from_labels(
                ['X', 'I', 'Z', '-Y', '-X', '-I', '-Z', 'Y'])
            self.assertEqual(target, value)

        with self.subTest(msg='dot single -X'):
            value = stab.dot('-X')
            target = StabilizerTable.from_labels(
                ['-X', '-I', '-Z', 'Y', 'X', 'I', 'Z', '-Y'])
            self.assertEqual(target, value)

        with self.subTest(msg='compose single Y'):
            value = stab.compose('Y')
            target = StabilizerTable.from_labels(
                ['Y', 'Z', '-I', '-X', '-Y', '-Z', 'I', 'X'])
            self.assertEqual(target, value)

        with self.subTest(msg='compose single -Y'):
            value = stab.compose('-Y')
            target = StabilizerTable.from_labels(
                ['-Y', '-Z', 'I', 'X', 'Y', 'Z', '-I', '-X'])
            self.assertEqual(target, value)

        with self.subTest(msg='dot single Y'):
            value = stab.dot('Y')
            target = StabilizerTable.from_labels(
                ['Y', '-Z', '-I', 'X', '-Y', 'Z', 'I', '-X'])
            self.assertEqual(target, value)

        with self.subTest(msg='dot single -Y'):
            value = stab.dot('-Y')
            target = StabilizerTable.from_labels(
                ['-Y', 'Z', 'I', '-X', 'Y', '-Z', '-I', 'X'])
            self.assertEqual(target, value)

        with self.subTest(msg='compose single Z'):
            value = stab.compose('Z')
            target = StabilizerTable.from_labels(
                ['Z', '-Y', 'X', 'I', '-Z', 'Y', '-X', '-I'])
            self.assertEqual(target, value)

        with self.subTest(msg='compose single -Z'):
            value = stab.compose('-Z')
            target = StabilizerTable.from_labels(
                ['-Z', 'Y', '-X', '-I', 'Z', '-Y', 'X', 'I'])
            self.assertEqual(target, value)

        with self.subTest(msg='dot single Z'):
            value = stab.dot('Z')
            target = StabilizerTable.from_labels(
                ['Z', 'Y', '-X', 'I', '-Z', '-Y', 'X', '-I'])
            self.assertEqual(target, value)

        with self.subTest(msg='dot single -Z'):
            value = stab.dot('-Z')
            target = StabilizerTable.from_labels(
                ['-Z', '-Y', 'X', '-I', 'Z', 'Y', '-X', 'I'])
            self.assertEqual(target, value)
Exemple #9
0
    def test_sort(self):
        """Test sort method."""
        with self.subTest(msg="1 qubit"):
            unsrt = ["X", "-Z", "I", "Y", "-X", "Z"]
            srt = ["I", "X", "-X", "Y", "-Z", "Z"]
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort()
            self.assertEqual(target, value)

        with self.subTest(msg="1 qubit weight order"):
            unsrt = ["X", "-Z", "I", "Y", "-X", "Z"]
            srt = ["I", "X", "-X", "Y", "-Z", "Z"]
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort(weight=True)
            self.assertEqual(target, value)

        with self.subTest(msg="2 qubit standard order"):
            srt_p = [
                "II",
                "IX",
                "IY",
                "XI",
                "XX",
                "XY",
                "XZ",
                "YI",
                "YX",
                "YY",
                "YZ",
                "ZI",
                "ZX",
                "ZY",
                "ZZ",
            ]
            srt_m = ["-" + i for i in srt_p]

            unsrt_p = srt_p.copy()
            np.random.shuffle(unsrt_p)
            unsrt_m = srt_m.copy()
            np.random.shuffle(unsrt_m)

            # Sort with + cases all first in shuffled list
            srt = [val for pair in zip(srt_p, srt_m) for val in pair]
            unsrt = unsrt_p + unsrt_m
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort()
            self.assertEqual(target, value)

            # Sort with - cases all first in shuffled list
            srt = [val for pair in zip(srt_m, srt_p) for val in pair]
            unsrt = unsrt_m + unsrt_p
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort()
            self.assertEqual(target, value)

        with self.subTest(msg="2 qubit weight order"):
            srt_p = [
                "II",
                "IX",
                "IY",
                "IZ",
                "XI",
                "YI",
                "ZI",
                "XX",
                "XY",
                "XZ",
                "YX",
                "YY",
                "YZ",
                "ZX",
                "ZY",
                "ZZ",
            ]
            srt_m = ["-" + i for i in srt_p]

            unsrt_p = srt_p.copy()
            np.random.shuffle(unsrt_p)
            unsrt_m = srt_m.copy()
            np.random.shuffle(unsrt_m)

            # Sort with + cases all first in shuffled list
            srt = [val for pair in zip(srt_p, srt_m) for val in pair]
            unsrt = unsrt_p + unsrt_m
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort(weight=True)
            self.assertEqual(target, value)

            # Sort with - cases all first in shuffled list
            srt = [val for pair in zip(srt_m, srt_p) for val in pair]
            unsrt = unsrt_m + unsrt_p
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort(weight=True)
            self.assertEqual(target, value)
Exemple #10
0
    def test_sort(self):
        """Test sort method."""
        with self.subTest(msg='1 qubit'):
            unsrt = ['X', '-Z', 'I', 'Y', '-X', 'Z']
            srt = ['I', 'X', '-X', 'Y', '-Z', 'Z']
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort()
            self.assertEqual(target, value)

        with self.subTest(msg='1 qubit weight order'):
            unsrt = ['X', '-Z', 'I', 'Y', '-X', 'Z']
            srt = ['I', 'X', '-X', 'Y', '-Z', 'Z']
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort(weight=True)
            self.assertEqual(target, value)

        with self.subTest(msg='2 qubit standard order'):
            srt_p = [
                'II', 'IX', 'IY', 'XI', 'XX', 'XY', 'XZ', 'YI', 'YX', 'YY',
                'YZ', 'ZI', 'ZX', 'ZY', 'ZZ'
            ]
            srt_m = ['-' + i for i in srt_p]

            unsrt_p = srt_p.copy()
            np.random.shuffle(unsrt_p)
            unsrt_m = srt_m.copy()
            np.random.shuffle(unsrt_m)

            # Sort with + cases all first in shuffled list
            srt = [val for pair in zip(srt_p, srt_m) for val in pair]
            unsrt = unsrt_p + unsrt_m
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort()
            self.assertEqual(target, value)

            # Sort with - cases all first in shuffled list
            srt = [val for pair in zip(srt_m, srt_p) for val in pair]
            unsrt = unsrt_m + unsrt_p
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort()
            self.assertEqual(target, value)

        with self.subTest(msg='2 qubit weight order'):
            srt_p = [
                'II', 'IX', 'IY', 'IZ', 'XI', 'YI', 'ZI', 'XX', 'XY', 'XZ',
                'YX', 'YY', 'YZ', 'ZX', 'ZY', 'ZZ'
            ]
            srt_m = ['-' + i for i in srt_p]

            unsrt_p = srt_p.copy()
            np.random.shuffle(unsrt_p)
            unsrt_m = srt_m.copy()
            np.random.shuffle(unsrt_m)

            # Sort with + cases all first in shuffled list
            srt = [val for pair in zip(srt_p, srt_m) for val in pair]
            unsrt = unsrt_p + unsrt_m
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort(weight=True)
            self.assertEqual(target, value)

            # Sort with - cases all first in shuffled list
            srt = [val for pair in zip(srt_m, srt_p) for val in pair]
            unsrt = unsrt_m + unsrt_p
            target = StabilizerTable.from_labels(srt)
            value = StabilizerTable.from_labels(unsrt).sort(weight=True)
            self.assertEqual(target, value)
Exemple #11
0
    def test_insert(self):
        """Test insert method."""
        # Insert single row
        for j in range(1, 10):
            l_px = j * 'X'
            l_mi = '-' + j * 'I'
            stab = StabilizerTable(l_px)
            target0 = StabilizerTable.from_labels([l_mi, l_px])
            target1 = StabilizerTable.from_labels([l_px, l_mi])

            with self.subTest(msg='single row from str ({})'.format(j)):
                value0 = stab.insert(0, l_mi)
                self.assertEqual(value0, target0)
                value1 = stab.insert(1, l_mi)
                self.assertEqual(value1, target1)

            with self.subTest(
                    msg='single row from StabilizerTable ({})'.format(j)):
                value0 = stab.insert(0, StabilizerTable(l_mi))
                self.assertEqual(value0, target0)
                value1 = stab.insert(1, StabilizerTable(l_mi))
                self.assertEqual(value1, target1)

        # Insert multiple rows
        for j in range(1, 10):
            stab = StabilizerTable(j * 'X')
            insert = StabilizerTable.from_labels(
                ['-' + j * 'I', j * 'Y', '-' + j * 'Z'])
            target0 = insert + stab
            target1 = stab + insert

            with self.subTest(
                    msg='multiple-rows from StabilizerTable ({})'.format(j)):
                value0 = stab.insert(0, insert)
                self.assertEqual(value0, target0)
                value1 = stab.insert(1, insert)
                self.assertEqual(value1, target1)

        # Insert single column
        stab = StabilizerTable.from_labels(['X', 'Y', 'Z'])
        for sgn in ['+', '-']:
            for i in ['I', 'X', 'Y', 'Z']:
                target0 = StabilizerTable.from_labels(
                    [sgn + 'X' + i, sgn + 'Y' + i, sgn + 'Z' + i])
                target1 = StabilizerTable.from_labels(
                    [sgn + i + 'X', sgn + i + 'Y', sgn + i + 'Z'])

                with self.subTest(msg='single-column single-val from str'
                                  ' {}'.format(sgn + i)):
                    value = stab.insert(0, sgn + i, qubit=True)
                    self.assertEqual(value, target0)
                    value = stab.insert(1, sgn + i, qubit=True)
                    self.assertEqual(value, target1)

                with self.subTest(msg='single-column single-val from'
                                  ' StabilizerTable {}'.format(sgn + i)):
                    value = stab.insert(0,
                                        StabilizerTable(sgn + i),
                                        qubit=True)
                    self.assertEqual(value, target0)
                    value = stab.insert(1,
                                        StabilizerTable(sgn + i),
                                        qubit=True)
                    self.assertEqual(value, target1)

        # Insert single column with multiple values
        stab = StabilizerTable.from_labels(['X', 'Y', 'Z'])
        for i in [('I', 'X', 'Y'), ('X', 'Y', 'Z'), ('Y', 'Z', 'I')]:
            target0 = StabilizerTable.from_labels(
                ['X' + i[0], 'Y' + i[1], 'Z' + i[2]])
            target1 = StabilizerTable.from_labels(
                [i[0] + 'X', i[1] + 'Y', i[2] + 'Z'])

            with self.subTest(
                    msg='single-column multiple-vals from StabilizerTable'):
                value = stab.insert(0,
                                    StabilizerTable.from_labels(i),
                                    qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1,
                                    StabilizerTable.from_labels(i),
                                    qubit=True)
                self.assertEqual(value, target1)

            with self.subTest(msg='single-column multiple-vals from array'):
                value = stab.insert(0,
                                    StabilizerTable.from_labels(i).array,
                                    qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1,
                                    StabilizerTable.from_labels(i).array,
                                    qubit=True)
                self.assertEqual(value, target1)

        # Insert multiple columns from single
        stab = StabilizerTable.from_labels(['X', 'Y', 'Z'])
        for j in range(1, 5):
            for i in [j * 'I', j * 'X', j * 'Y', j * 'Z']:
                target0 = StabilizerTable.from_labels(
                    ['X' + i, 'Y' + i, 'Z' + i])
                target1 = StabilizerTable.from_labels(
                    [i + 'X', i + 'Y', i + 'Z'])

            with self.subTest(msg='multiple-columns single-val from str'):
                value = stab.insert(0, i, qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1, i, qubit=True)
                self.assertEqual(value, target1)

            with self.subTest(
                    msg='multiple-columns single-val from StabilizerTable'):
                value = stab.insert(0, StabilizerTable(i), qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1, StabilizerTable(i), qubit=True)
                self.assertEqual(value, target1)

            with self.subTest(msg='multiple-columns single-val from array'):
                value = stab.insert(0, StabilizerTable(i).array, qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1, StabilizerTable(i).array, qubit=True)
                self.assertEqual(value, target1)

        # Insert multiple columns multiple row values
        stab = StabilizerTable.from_labels(['X', 'Y', 'Z'])
        for j in range(1, 5):
            for i in [(j * 'I', j * 'X', j * 'Y'), (j * 'X', j * 'Z', j * 'Y'),
                      (j * 'Y', j * 'Z', j * 'I')]:
                target0 = StabilizerTable.from_labels(
                    ['X' + i[0], 'Y' + i[1], 'Z' + i[2]])
                target1 = StabilizerTable.from_labels(
                    [i[0] + 'X', i[1] + 'Y', i[2] + 'Z'])

                with self.subTest(
                        msg='multiple-column multiple-vals from StabilizerTable'
                ):
                    value = stab.insert(0,
                                        StabilizerTable.from_labels(i),
                                        qubit=True)
                    self.assertEqual(value, target0)
                    value = stab.insert(1,
                                        StabilizerTable.from_labels(i),
                                        qubit=True)
                    self.assertEqual(value, target1)

                with self.subTest(
                        msg='multiple-column multiple-vals from array'):
                    value = stab.insert(0,
                                        StabilizerTable.from_labels(i).array,
                                        qubit=True)
                    self.assertEqual(value, target0)
                    value = stab.insert(1,
                                        StabilizerTable.from_labels(i).array,
                                        qubit=True)
                    self.assertEqual(value, target1)
Exemple #12
0
 def test_labels_round_trip(self):
     """Test from_labels and to_labels round trip."""
     target = ['+III', '-IXZ', '-XYI', '+ZZZ']
     value = StabilizerTable.from_labels(target).to_labels()
     self.assertEqual(value, target)
Exemple #13
0
 def raises_array():
     stab[inds] = StabilizerTable.from_labels(['+YY', '-ZZ', '+XX'])
Exemple #14
0
 def test_eq(self):
     """Test __eq__ method."""
     stab1 = StabilizerTable.from_labels(['II', 'XI'])
     stab2 = StabilizerTable.from_labels(['XI', 'II'])
     self.assertEqual(stab1, stab1)
     self.assertNotEqual(stab1, stab2)
 def test_labels_round_trip(self):
     """Test from_labels and to_labels round trip."""
     target = ["+III", "-IXZ", "-XYI", "+ZZZ"]
     value = StabilizerTable.from_labels(target).to_labels()
     self.assertEqual(value, target)
Exemple #16
0
    def test_insert(self):
        """Test insert method."""
        # Insert single row
        for j in range(1, 10):
            l_px = j * "X"
            l_mi = "-" + j * "I"
            stab = StabilizerTable(l_px)
            target0 = StabilizerTable.from_labels([l_mi, l_px])
            target1 = StabilizerTable.from_labels([l_px, l_mi])

            with self.subTest(msg=f"single row from str ({j})"):
                value0 = stab.insert(0, l_mi)
                self.assertEqual(value0, target0)
                value1 = stab.insert(1, l_mi)
                self.assertEqual(value1, target1)

            with self.subTest(msg=f"single row from StabilizerTable ({j})"):
                value0 = stab.insert(0, StabilizerTable(l_mi))
                self.assertEqual(value0, target0)
                value1 = stab.insert(1, StabilizerTable(l_mi))
                self.assertEqual(value1, target1)

        # Insert multiple rows
        for j in range(1, 10):
            stab = StabilizerTable(j * "X")
            insert = StabilizerTable.from_labels(
                ["-" + j * "I", j * "Y", "-" + j * "Z"])
            target0 = insert + stab
            target1 = stab + insert

            with self.subTest(msg=f"multiple-rows from StabilizerTable ({j})"):
                value0 = stab.insert(0, insert)
                self.assertEqual(value0, target0)
                value1 = stab.insert(1, insert)
                self.assertEqual(value1, target1)

        # Insert single column
        stab = StabilizerTable.from_labels(["X", "Y", "Z"])
        for sgn in ["+", "-"]:
            for i in ["I", "X", "Y", "Z"]:
                target0 = StabilizerTable.from_labels(
                    [sgn + "X" + i, sgn + "Y" + i, sgn + "Z" + i])
                target1 = StabilizerTable.from_labels(
                    [sgn + i + "X", sgn + i + "Y", sgn + i + "Z"])

                with self.subTest(
                        msg=f"single-column single-val from str {sgn + i}"):
                    value = stab.insert(0, sgn + i, qubit=True)
                    self.assertEqual(value, target0)
                    value = stab.insert(1, sgn + i, qubit=True)
                    self.assertEqual(value, target1)

                with self.subTest(
                        msg=
                        f"single-column single-val from StabilizerTable {sgn + i}"
                ):
                    value = stab.insert(0,
                                        StabilizerTable(sgn + i),
                                        qubit=True)
                    self.assertEqual(value, target0)
                    value = stab.insert(1,
                                        StabilizerTable(sgn + i),
                                        qubit=True)
                    self.assertEqual(value, target1)

        # Insert single column with multiple values
        stab = StabilizerTable.from_labels(["X", "Y", "Z"])
        for i in [("I", "X", "Y"), ("X", "Y", "Z"), ("Y", "Z", "I")]:
            target0 = StabilizerTable.from_labels(
                ["X" + i[0], "Y" + i[1], "Z" + i[2]])
            target1 = StabilizerTable.from_labels(
                [i[0] + "X", i[1] + "Y", i[2] + "Z"])

            with self.subTest(
                    msg="single-column multiple-vals from StabilizerTable"):
                value = stab.insert(0,
                                    StabilizerTable.from_labels(i),
                                    qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1,
                                    StabilizerTable.from_labels(i),
                                    qubit=True)
                self.assertEqual(value, target1)

            with self.subTest(msg="single-column multiple-vals from array"):
                value = stab.insert(0,
                                    StabilizerTable.from_labels(i).array,
                                    qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1,
                                    StabilizerTable.from_labels(i).array,
                                    qubit=True)
                self.assertEqual(value, target1)

        # Insert multiple columns from single
        stab = StabilizerTable.from_labels(["X", "Y", "Z"])
        for j in range(1, 5):
            for i in [j * "I", j * "X", j * "Y", j * "Z"]:
                target0 = StabilizerTable.from_labels(
                    ["X" + i, "Y" + i, "Z" + i])
                target1 = StabilizerTable.from_labels(
                    [i + "X", i + "Y", i + "Z"])

            with self.subTest(msg="multiple-columns single-val from str"):
                value = stab.insert(0, i, qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1, i, qubit=True)
                self.assertEqual(value, target1)

            with self.subTest(
                    msg="multiple-columns single-val from StabilizerTable"):
                value = stab.insert(0, StabilizerTable(i), qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1, StabilizerTable(i), qubit=True)
                self.assertEqual(value, target1)

            with self.subTest(msg="multiple-columns single-val from array"):
                value = stab.insert(0, StabilizerTable(i).array, qubit=True)
                self.assertEqual(value, target0)
                value = stab.insert(1, StabilizerTable(i).array, qubit=True)
                self.assertEqual(value, target1)

        # Insert multiple columns multiple row values
        stab = StabilizerTable.from_labels(["X", "Y", "Z"])
        for j in range(1, 5):
            for i in [
                (j * "I", j * "X", j * "Y"),
                (j * "X", j * "Z", j * "Y"),
                (j * "Y", j * "Z", j * "I"),
            ]:
                target0 = StabilizerTable.from_labels(
                    ["X" + i[0], "Y" + i[1], "Z" + i[2]])
                target1 = StabilizerTable.from_labels(
                    [i[0] + "X", i[1] + "Y", i[2] + "Z"])

                with self.subTest(
                        msg="multiple-column multiple-vals from StabilizerTable"
                ):
                    value = stab.insert(0,
                                        StabilizerTable.from_labels(i),
                                        qubit=True)
                    self.assertEqual(value, target0)
                    value = stab.insert(1,
                                        StabilizerTable.from_labels(i),
                                        qubit=True)
                    self.assertEqual(value, target1)

                with self.subTest(
                        msg="multiple-column multiple-vals from array"):
                    value = stab.insert(0,
                                        StabilizerTable.from_labels(i).array,
                                        qubit=True)
                    self.assertEqual(value, target0)
                    value = stab.insert(1,
                                        StabilizerTable.from_labels(i).array,
                                        qubit=True)
                    self.assertEqual(value, target1)
 def test_labels_round_trip_array(self):
     """Test from_labels and to_labels round trip w/ array=True."""
     labels = ["+III", "-IXZ", "-XYI", "+ZZZ"]
     target = np.array(labels)
     value = StabilizerTable.from_labels(labels).to_labels(array=True)
     self.assertTrue(np.all(value == target))
Exemple #18
0
    def test_compose_qargs(self):
        """Test compose and dot methods with qargs."""

        # Dot product with qargs
        stab1 = StabilizerTable.from_labels(['III', '-XXX', 'YYY', '-ZZZ'])

        # 1-qubit qargs
        stab2 = StabilizerTable('-Z')

        with self.subTest(msg='dot 1-qubit qargs=[0]'):
            target = StabilizerTable.from_labels(['-IIZ', 'XXY', 'YYX', 'ZZI'])
            value = stab1.dot(stab2, qargs=[0])
            self.assertEqual(value, target)

        with self.subTest(msg='compose 1-qubit qargs=[0]'):
            target = StabilizerTable.from_labels(
                ['-IIZ', '-XXY', '-YYX', 'ZZI'])
            value = stab1.compose(stab2, qargs=[0])
            self.assertEqual(value, target)

        with self.subTest(msg='dot 1-qubit qargs=[1]'):
            target = StabilizerTable.from_labels(['-IZI', 'XYX', 'YXY', 'ZIZ'])
            value = stab1.dot(stab2, qargs=[1])
            self.assertEqual(value, target)

        with self.subTest(msg='compose 1-qubit qargs=[1]'):
            value = stab1.compose(stab2, qargs=[1])
            target = StabilizerTable.from_labels(
                ['-IZI', '-XYX', '-YXY', 'ZIZ'])
            self.assertEqual(value, target)

        target = StabilizerTable.from_labels(['ZII', 'YXX'])
        with self.subTest(msg='dot 1-qubit qargs=[2]'):
            value = stab1.dot(stab2, qargs=[2])
            target = StabilizerTable.from_labels(['-ZII', 'YXX', 'XYY', 'IZZ'])
            self.assertEqual(value, target)

        with self.subTest(msg='compose 1-qubit qargs=[2]'):
            value = stab1.compose(stab2, qargs=[2])
            target = StabilizerTable.from_labels(
                ['-ZII', '-YXX', '-XYY', 'IZZ'])
            self.assertEqual(value, target)

        # 2-qubit qargs
        stab2 = StabilizerTable('-ZY')
        with self.subTest(msg='dot 2-qubit qargs=[0, 1]'):
            value = stab1.dot(stab2, qargs=[0, 1])
            target = StabilizerTable.from_labels(
                ['-IZY', '-XYZ', '-YXI', 'ZIX'])
            self.assertEqual(value, target)

        with self.subTest(msg='compose 2-qubit qargs=[0, 1]'):
            value = stab1.compose(stab2, qargs=[0, 1])
            target = StabilizerTable.from_labels(
                ['-IZY', '-XYZ', 'YXI', '-ZIX'])
            self.assertEqual(value, target)

        target = StabilizerTable.from_labels(['YIZ', 'ZXY'])
        with self.subTest(msg='dot 2-qubit qargs=[2, 0]'):
            value = stab1.dot(stab2, qargs=[2, 0])
            target = StabilizerTable.from_labels(
                ['-YIZ', '-ZXY', '-IYX', 'XZI'])
            self.assertEqual(value, target)

        with self.subTest(msg='compose 2-qubit qargs=[2, 0]'):
            value = stab1.compose(stab2, qargs=[2, 0])
            target = StabilizerTable.from_labels(
                ['-YIZ', '-ZXY', 'IYX', '-XZI'])
            self.assertEqual(value, target)

        # 3-qubit qargs
        stab2 = StabilizerTable('-XYZ')

        target = StabilizerTable.from_labels(['XYZ', 'IZY'])
        with self.subTest(msg='dot 3-qubit qargs=None'):
            value = stab1.dot(stab2, qargs=[0, 1, 2])
            target = StabilizerTable.from_labels(
                ['-XYZ', '-IZY', '-ZIX', '-YXI'])
            self.assertEqual(value, target)

        with self.subTest(msg='dot 3-qubit qargs=[0, 1, 2]'):
            value = stab1.dot(stab2, qargs=[0, 1, 2])
            target = StabilizerTable.from_labels(
                ['-XYZ', '-IZY', '-ZIX', '-YXI'])
            self.assertEqual(value, target)

        with self.subTest(msg='dot 3-qubit qargs=[2, 1, 0]'):
            value = stab1.dot(stab2, qargs=[2, 1, 0])
            target = StabilizerTable.from_labels(
                ['-ZYX', '-YZI', '-XIZ', '-IXY'])
            self.assertEqual(value, target)

        with self.subTest(msg='compose 3-qubit qargs=[2, 1, 0]'):
            value = stab1.compose(stab2, qargs=[2, 1, 0])
            target = StabilizerTable.from_labels(
                ['-ZYX', '-YZI', '-XIZ', '-IXY'])
            self.assertEqual(value, target)