Example #1
0
    def test_schmidt_examples(self):
        self.assertEqual(qc.bell_state().schmidt_number(indices=[0]), 2)

        self.assertEqual(
            qc.positive_superposition(d=2).schmidt_number(indices=[0]), 1)

        x = (qc.bitstring(0, 0) + qc.bitstring(0, 1) +
             qc.bitstring(1, 0)) / np.sqrt(3)
        self.assertEqual(x.schmidt_number(indices=[0]), 2)
Example #2
0
    def test_positive_superposition_measurement(self):
        state = qc.positive_superposition()
        rho1 = qc.DensityOperator.from_ensemble([state])
        measurement = rho1.measure()[0]

        state = qc.bitstring(measurement)
        rho2 = qc.DensityOperator.from_ensemble([state])

        assert_allclose(rho1._t, rho2._t)
Example #3
0
    def test_unitarily_unchanged(self):
        num_tests = 10

        for test_i in range(num_tests):

            x = qc.positive_superposition(d=2)
            U = random_unitary_operator(d=1) * random_unitary_operator(d=1)
            self.assertEqual(U(x).schmidt_number(indices=[0]), 1)

            x = qc.bell_state()
            U = random_unitary_operator(d=1) * random_unitary_operator(d=1)
            self.assertEqual(U(x).schmidt_number(indices=[0]), 2)
Example #4
0
    def test_superposition(self):
        x = qc.positive_superposition()
        y1 = (qc.zeros() + qc.ones()) / np.sqrt(2)
        y2 = (qc.zeros() + qc.ones()) * (1 / np.sqrt(2))
        y3 = (1 / np.sqrt(2)) * (qc.ones() + qc.zeros())
        y4 = (1 / np.sqrt(2)) * qc.ones() + qc.zeros() / np.sqrt(2)
        self.assertLess(max_absolute_difference(y1, x), epsilon)
        self.assertLess(max_absolute_difference(y2, x), epsilon)
        self.assertLess(max_absolute_difference(y3, x), epsilon)
        self.assertLess(max_absolute_difference(y4, x), epsilon)

        self.assertLess(
            max_absolute_difference(np.sqrt(2) * x - qc.ones(), qc.zeros()),
            epsilon)