Exemple #1
0
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,),
        )
Exemple #2
0
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)
Exemple #3
0
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
Exemple #4
0
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)'