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)
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)
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)
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)