def test_compose_qargs_operator(self, coeff, label): """Test qargs compose and dot methods with ScalarOp and Operator.""" iden = ScalarOp((2, 2), coeff=coeff) op = Operator.from_label(label) with self.subTest(msg=f"{iden}.compose(Operator({label}), qargs=[0])"): val = iden.compose(op, qargs=[0]) target = iden.to_operator().compose(op, qargs=[0]) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"{iden}.compose(Operator({label}), qargs=[1])"): val = iden.compose(op, qargs=[1]) target = iden.to_operator().compose(op, qargs=[1]) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"{iden}.dot(Operator({label}), qargs=[0])"): val = iden.dot(op, qargs=[0]) target = iden.to_operator().dot(op, qargs=[0]) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"{iden}.dot(Operator({label}), qargs=[1])"): val = iden.dot(op, qargs=[1]) target = iden.to_operator().dot(op, qargs=[1]) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"{iden} & Operator({label})([0])"): val = iden & op([0]) target = iden.to_operator().compose(op, qargs=[0]) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"{iden} & Operator({label})([1])"): val = iden & op([1]) target = iden.to_operator().compose(op, qargs=[1]) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target)
def test_compose_scalar(self, coeff1, coeff2): """Test compose method with two ScalarOp. ({coeff1}, {coeff2})""" dims = (3, 2) op1 = ScalarOp(dims, coeff=coeff1) op2 = ScalarOp(dims, coeff=coeff2) val = op1.compose(op2) target = coeff1 * coeff2 self.assertScalarOp(val, dims, target)
def test_compose_operator(self, coeff, label): """Test compose and dot methods with ScalarOp and Operator.""" dim = 4 iden = ScalarOp(dim, coeff=coeff) op = Operator.from_label(label) with self.subTest(msg=f"{iden}.compose(Operator({label}))"): val = iden.compose(op) target = iden.to_operator().compose(op) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"Operator({label}).compose({iden})"): val = op.compose(iden) target = op.compose(iden.to_operator()) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"{iden}.dot(Operator({label}))"): val = iden.dot(op) target = iden.to_operator().dot(op) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"Operator({label}).dot({iden})"): val = op.dot(iden) target = op.dot(iden.to_operator()) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"{iden} & Operator({label})"): val = iden & op target = iden.to_operator().compose(op) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg=f"Operator({label}) & {iden}"): val = op & iden target = op.compose(iden.to_operator()) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target)
def test_compose_qargs_scalar(self, coeff1, coeff2): """Test qargs compose and dot methods with two ScalarOp. ({coeff1}, {coeff2})""" dims = (2, 3) op1 = ScalarOp(dims, coeff=coeff1) op2 = ScalarOp(2, coeff=coeff2) op3 = ScalarOp(3, coeff=coeff2) with self.subTest(msg="{}.compose({}, qargs=[0])".format(op1, op2)): val = op1.compose(op2, qargs=[0]) target = coeff1 * coeff2 self.assertScalarOp(val, dims, target) with self.subTest(msg="{}.compose({}, qargs=[1])".format(op1, op3)): val = op1.compose(op3, qargs=[1]) target = coeff1 * coeff2 self.assertScalarOp(val, dims, target) with self.subTest(msg="{}.dot({}, qargs=[0])".format(op1, op2)): val = op1.dot(op2, qargs=[0]) target = coeff1 * coeff2 self.assertTrue(isinstance(val, ScalarOp)) self.assertEqual(val.input_dims(), dims) self.assertEqual(val.output_dims(), dims) self.assertAlmostEqual(val.coeff, target) with self.subTest(msg="{}.dot({}, qargs=[1])".format(op1, op3)): val = op1.dot(op3, qargs=[1]) target = coeff1 * coeff2 self.assertTrue(isinstance(val, ScalarOp)) self.assertEqual(val.input_dims(), dims) self.assertEqual(val.output_dims(), dims) self.assertAlmostEqual(val.coeff, target) with self.subTest(msg="{} & {}([0])".format(op1, op2)): val = op1 & op2([0]) target = coeff1 * coeff2 self.assertTrue(isinstance(val, ScalarOp)) self.assertEqual(val.input_dims(), dims) self.assertEqual(val.output_dims(), dims) self.assertAlmostEqual(val.coeff, target) with self.subTest(msg="{} & {}([1])".format(op1, op3)): val = op1 & op3([1]) target = coeff1 * coeff2 self.assertTrue(isinstance(val, ScalarOp)) self.assertEqual(val.input_dims(), dims) self.assertEqual(val.output_dims(), dims) self.assertAlmostEqual(val.coeff, target) with self.subTest(msg="{} * {}([0])".format(op1, op2)): val = op1.dot(op2([0])) target = coeff1 * coeff2 self.assertTrue(isinstance(val, ScalarOp)) self.assertEqual(val.input_dims(), dims) self.assertEqual(val.output_dims(), dims) self.assertAlmostEqual(val.coeff, target) with self.subTest(msg="{} * {}([1])".format(op1, op3)): val = op1.dot(op3([1])) target = coeff1 * coeff2 self.assertTrue(isinstance(val, ScalarOp)) self.assertEqual(val.input_dims(), dims) self.assertEqual(val.output_dims(), dims) self.assertAlmostEqual(val.coeff, target)
def test_compose_operator(self, coeff, label): """Test compose and dot methods with ScalarOp and Operator.""" dim = 4 iden = ScalarOp(dim, coeff=coeff) op = Operator.from_label(label) with self.subTest(msg='{}.compose(Operator({}))'.format(iden, label)): val = iden.compose(op) target = iden.to_operator().compose(op) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg='Operator({}).compose({})'.format(label, iden)): val = op.compose(iden) target = op.compose(iden.to_operator()) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg='{}.dot(Operator({}))'.format(iden, label)): val = iden.dot(op) target = iden.to_operator().dot(op) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg='Operator({}).dot({})'.format(label, iden)): val = op.dot(iden) target = op.dot(iden.to_operator()) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg='{} @ Operator({})'.format(iden, label)): val = iden @ op target = iden.to_operator().compose(op) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg='Operator({}) @ {}'.format(label, iden)): val = op @ iden target = op.compose(iden.to_operator()) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg='{} * Operator({})'.format(iden, label)): val = iden * op target = iden.to_operator().dot(op) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target) with self.subTest(msg='Operator({}) * {}'.format(label, iden)): val = op * iden target = op.dot(iden.to_operator()) self.assertTrue(isinstance(val, Operator)) self.assertEqual(val.input_dims(), (2, 2)) self.assertEqual(val.output_dims(), (2, 2)) self.assertEqual(val, target)