def test_fidelity_product_states(): a, b = cirq.LineQubit.range(2) np.testing.assert_allclose( cirq.fidelity(cirq.KET_ZERO(a) * cirq.KET_ZERO(b), cirq.KET_ZERO(a) * cirq.KET_ZERO(b)), 1.0 ) np.testing.assert_allclose( cirq.fidelity(cirq.KET_ZERO(a) * cirq.KET_ZERO(b), cirq.KET_ZERO(a) * cirq.KET_ONE(b)), 0.0, atol=1e-7, ) np.testing.assert_allclose( cirq.fidelity(cirq.KET_ZERO(a) * cirq.KET_ZERO(b), cirq.KET_ZERO(a) * cirq.KET_PLUS(b)), 0.5 ) np.testing.assert_allclose( cirq.fidelity(cirq.KET_ONE(a) * cirq.KET_ONE(b), cirq.KET_MINUS(a) * cirq.KET_PLUS(b)), 0.25 ) np.testing.assert_allclose( cirq.fidelity(cirq.KET_MINUS(a) * cirq.KET_PLUS(b), cirq.KET_MINUS(a) * cirq.KET_PLUS(b)), 1.0, ) np.testing.assert_allclose( cirq.fidelity(cirq.KET_MINUS(a) * cirq.KET_PLUS(b), cirq.KET_PLUS(a) * cirq.KET_MINUS(b)), 0.0, atol=1e-7, ) with pytest.raises(ValueError, match='Mismatched'): _ = cirq.fidelity(cirq.KET_MINUS(a), cirq.KET_PLUS(a) * cirq.KET_MINUS(b)) with pytest.raises(ValueError, match='qid shape'): _ = cirq.fidelity( cirq.KET_MINUS(a) * cirq.KET_PLUS(b), cirq.KET_PLUS(a) * cirq.KET_MINUS(b), qid_shape=(4,), )
def test_tp_projector(): q0, q1 = cirq.LineQubit.range(2) p00 = (cirq.KET_ZERO(q0) * cirq.KET_ZERO(q1)).projector() rho = cirq.final_density_matrix(cirq.Circuit(cirq.I.on_each(q0, q1))) np.testing.assert_allclose(rho, p00) p01 = (cirq.KET_ZERO(q0) * cirq.KET_ONE(q1)).projector() rho = cirq.final_density_matrix(cirq.Circuit([cirq.I.on_each(q0, q1), cirq.X(q1)])) np.testing.assert_allclose(rho, p01) ppp = (cirq.KET_PLUS(q0) * cirq.KET_PLUS(q1)).projector() rho = cirq.final_density_matrix( cirq.Circuit( [ cirq.H.on_each(q0, q1), ] ) ) np.testing.assert_allclose(rho, ppp, atol=1e-7) ppm = (cirq.KET_PLUS(q0) * cirq.KET_MINUS(q1)).projector() rho = cirq.final_density_matrix(cirq.Circuit([cirq.H.on_each(q0, q1), cirq.Z(q1)])) np.testing.assert_allclose(rho, ppm, atol=1e-7) pii = (cirq.KET_IMAG(q0) * cirq.KET_IMAG(q1)).projector() rho = cirq.final_density_matrix(cirq.Circuit(cirq.rx(-np.pi / 2).on_each(q0, q1))) np.testing.assert_allclose(rho, pii, atol=1e-7) pij = (cirq.KET_IMAG(q0) * cirq.KET_MINUS_IMAG(q1)).projector() rho = cirq.final_density_matrix(cirq.Circuit(cirq.rx(-np.pi / 2)(q0), cirq.rx(np.pi / 2)(q1))) np.testing.assert_allclose(rho, pij, atol=1e-7)
def test_max_weight_state(): q0, q1 = cirq.LineQubit.range(2) states = [cirq.KET_PLUS(q0), cirq.KET_PLUS(q1)] assert _max_weight_state(states) == cirq.KET_PLUS(q0) * cirq.KET_PLUS(q1) states = [cirq.KET_PLUS(q0), cirq.KET_PLUS(q1), cirq.KET_MINUS(q1)] assert _max_weight_state(states) is None
def test_product_state_equality(): q0, q1, q2 = cirq.LineQubit.range(3) assert cirq.KET_PLUS(q0) == cirq.KET_PLUS(q0) assert cirq.KET_PLUS(q0) != cirq.KET_PLUS(q1) assert cirq.KET_PLUS(q0) != cirq.KET_MINUS(q0) assert cirq.KET_PLUS(q0) * cirq.KET_MINUS(q1) == cirq.KET_PLUS(q0) * cirq.KET_MINUS(q1) assert cirq.KET_PLUS(q0) * cirq.KET_MINUS(q1) != cirq.KET_PLUS(q0) * cirq.KET_MINUS(q2) assert hash(cirq.KET_PLUS(q0) * cirq.KET_MINUS(q1)) == hash( cirq.KET_PLUS(q0) * cirq.KET_MINUS(q1) ) assert hash(cirq.KET_PLUS(q0) * cirq.KET_MINUS(q1)) != hash( cirq.KET_PLUS(q0) * cirq.KET_MINUS(q2) ) assert cirq.KET_PLUS(q0) != '+X(0)'