def test_tensor_operator(self, coeff, label): """Test tensor and expand methods with ScalarOp and Operator. ({coeff}, {label})""" dim = 3 iden = ScalarOp(dim, coeff=coeff) op = Operator.from_label(label) with self.subTest(msg="{}.expand(Operator({}))".format(iden, label)): val = iden.expand(op) target = iden.to_operator().expand(op) self.assertOperator(val, (3, 2), target) with self.subTest(msg="Operator({}).expand({})".format(label, iden)): val = op.expand(iden) target = op.expand(iden.to_operator()) self.assertOperator(val, (2, 3), target) with self.subTest(msg="{}.tensor(Operator({}))".format(iden, label)): val = iden.tensor(op) target = iden.to_operator().tensor(op) self.assertOperator(val, (2, 3), target) with self.subTest(msg="Operator({}).tensor({})".format(label, iden)): val = op.tensor(iden) target = op.tensor(iden.to_operator()) self.assertOperator(val, (3, 2), target)
def test_to_operator(self, dims, coeff): """Test to_matrix and to_operator methods (dims={dims}, coeff={coeff})""" dim = np.product(dims) iden = ScalarOp(dims, coeff=coeff) target = Operator(coeff * np.eye(dim), input_dims=dims, output_dims=dims) with self.subTest(msg="to_operator"): self.assertEqual(iden.to_operator(), target) with self.subTest(msg="to_matrix"): self.assertTrue(np.allclose(iden.to_matrix(), target.data))
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_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_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)