Ejemplo n.º 1
0
    def test_group_subops(self, is_summed_op):
        """grouper subroutine test"""
        paulis = (I ^ X) + (2 * X ^ X) + (3 * Z ^ Y)
        if is_summed_op:
            paulis = paulis.to_pauli_op()
        grouped_sum = AbelianGrouper.group_subops(paulis)
        self.assertEqual(len(grouped_sum), 2)
        with self.subTest("test group subops 1"):
            if is_summed_op:
                expected = SummedOp(
                    [
                        SummedOp([I ^ X, 2.0 * X ^ X], abelian=True),
                        SummedOp([3.0 * Z ^ Y], abelian=True),
                    ]
                )
                self.assertEqual(grouped_sum, expected)
            else:
                self.assertSetEqual(
                    frozenset([frozenset(grouped_sum[i].primitive.to_list()) for i in range(2)]),
                    frozenset({frozenset({("ZY", 3)}), frozenset({("IX", 1), ("XX", 2)})}),
                )

        paulis = X + (2 * Y) + (3 * Z)
        if is_summed_op:
            paulis = paulis.to_pauli_op()
        grouped_sum = AbelianGrouper.group_subops(paulis)
        self.assertEqual(len(grouped_sum), 3)
        with self.subTest("test group subops 2"):
            if is_summed_op:
                self.assertEqual(grouped_sum, paulis)
            else:
                self.assertSetEqual(
                    frozenset(sum([grouped_sum[i].primitive.to_list() for i in range(3)], [])),
                    frozenset([("X", 1), ("Y", 2), ("Z", 3)]),
                )
Ejemplo n.º 2
0
    def test_group_subops(self):
        """grouper subroutine test"""
        paulis = (I ^ X) + (2 * X ^ X) + (3 * Z ^ Y)
        grouped_sum = AbelianGrouper.group_subops(paulis)
        with self.subTest('test group subops 1'):
            self.assertEqual(len(grouped_sum), 2)
            self.assertListEqual([str(op.primitive) for op in grouped_sum[0]],
                                 ['IX', 'XX'])
            self.assertListEqual([op.coeff for op in grouped_sum[0]], [1, 2])
            self.assertListEqual([str(op.primitive) for op in grouped_sum[1]],
                                 ['ZY'])
            self.assertListEqual([op.coeff for op in grouped_sum[1]], [3])

        paulis = X + (2 * Y) + (3 * Z)
        grouped_sum = AbelianGrouper.group_subops(paulis)
        with self.subTest('test group subops 2'):
            self.assertEqual(len(grouped_sum), 3)
            self.assertListEqual([str(op[0].primitive) for op in grouped_sum],
                                 ['X', 'Y', 'Z'])
            self.assertListEqual([op[0].coeff for op in grouped_sum],
                                 [1, 2, 3])
Ejemplo n.º 3
0
 def test_ablian_grouper_no_commute(self):
     """Abelian grouper test when non-PauliOp is given"""
     ops = Zero ^ Plus + X ^ Y
     with self.assertRaises(OpflowError):
         _ = AbelianGrouper.group_subops(ops)