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)]), )
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])
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)