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_abelian_grouper4(self): """ abelian grouper test 4 """ paulis = X + (2 * Y) + (3 * Z) grouped_sum = AbelianGrouper.group_subops(paulis) self.assertEqual(len(grouped_sum), 3) self.assertEqual(str(grouped_sum[0][0].primitive), 'X') self.assertEqual(grouped_sum[0][0].coeff, 1) self.assertEqual(str(grouped_sum[1][0].primitive), 'Y') self.assertEqual(grouped_sum[1][0].coeff, 2) self.assertEqual(str(grouped_sum[2][0].primitive), 'Z') self.assertEqual(grouped_sum[2][0].coeff, 3)
def test_abelian_grouper3(self): """ abelian grouper test 3 """ paulis = (I ^ X) + (2 * X ^ X) + (3 * Z ^ Y) for fast in [True, False]: for use_nx in [True, False]: grouped_sum = AbelianGrouper.group_subops(paulis, fast=fast, use_nx=use_nx) self.assertEqual(len(grouped_sum), 2) self.assertEqual(len(grouped_sum[0]), 2) self.assertEqual(str(grouped_sum[0][0].primitive), 'IX') self.assertEqual(grouped_sum[0][0].coeff, 1) self.assertEqual(str(grouped_sum[0][1].primitive), 'XX') self.assertEqual(grouped_sum[0][1].coeff, 2) self.assertEqual(len(grouped_sum[1]), 1) self.assertEqual(str(grouped_sum[1][0].primitive), 'ZY') self.assertEqual(grouped_sum[1][0].coeff, 3)
def test_ablian_grouper_no_commute(self): """Abelian grouper test when non-PauliOp is given""" ops = Zero ^ Plus + X ^ Y with self.assertRaises(AquaError): _ = AbelianGrouper.group_subops(ops)