Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
 def test_mul_scalar(self, coeff1, coeff2):
     """Test mul method with two ScalarOp. ({coeff1}, {coeff2})"""
     dims = (3, 2)
     op1 = ScalarOp(dims, coeff=coeff1)
     op2 = ScalarOp(dims, coeff=coeff2)
     val = op1.dot(op2)
     target = coeff1 * coeff2
     self.assertScalarOp(val, dims, target)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)