コード例 #1
0
ファイル: measures_test.py プロジェクト: ybc1991/Cirq
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,),
        )
コード例 #2
0
ファイル: product_state_test.py プロジェクト: wingers/Cirq
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)
コード例 #3
0
ファイル: product_state_test.py プロジェクト: wingers/Cirq
def test_tp_initial_state():
    q0, q1 = cirq.LineQubit.range(2)
    psi1 = cirq.final_state_vector(cirq.Circuit([cirq.I.on_each(q0, q1), cirq.X(q1)]))

    s01 = cirq.KET_ZERO(q0) * cirq.KET_ONE(q1)
    psi2 = cirq.final_state_vector(cirq.Circuit([cirq.I.on_each(q0, q1)]), initial_state=s01)

    np.testing.assert_allclose(psi1, psi2)
コード例 #4
0
ファイル: product_state_test.py プロジェクト: wingers/Cirq
def test_tp_state_vector():
    q0, q1 = cirq.LineQubit.range(2)
    s00 = cirq.KET_ZERO(q0) * cirq.KET_ZERO(q1)
    np.testing.assert_equal(s00.state_vector(), [1, 0, 0, 0])
    np.testing.assert_equal(s00.state_vector(qubit_order=(q1, q0)), [1, 0, 0, 0])

    s01 = cirq.KET_ZERO(q0) * cirq.KET_ONE(q1)
    np.testing.assert_equal(s01.state_vector(), [0, 1, 0, 0])
    np.testing.assert_equal(s01.state_vector(qubit_order=(q1, q0)), [0, 0, 1, 0])
コード例 #5
0
def test_simulate_tps_initial_state():
    q0, q1 = cirq.LineQubit.range(2)
    simulator = cirq.DensityMatrixSimulator()
    for b0 in [0, 1]:
        for b1 in [0, 1]:
            circuit = cirq.Circuit((cirq.X ** b0)(q0), (cirq.X ** b1)(q1))
            result = simulator.simulate(circuit, initial_state=cirq.KET_ZERO(q0) * cirq.KET_ONE(q1))
            expected_density_matrix = np.zeros(shape=(4, 4))
            expected_density_matrix[b0 * 2 + 1 - b1, b0 * 2 + 1 - b1] = 1.0
            np.testing.assert_equal(result.final_density_matrix, expected_density_matrix)
コード例 #6
0
def test_quantum_state_product_state():
    q0, q1, q2 = cirq.LineQubit.range(3)
    product_state_1 = cirq.KET_PLUS(q0) * cirq.KET_PLUS(q1) * cirq.KET_ONE(q2)

    state = cirq.quantum_state(product_state_1)
    np.testing.assert_allclose(state.data, product_state_1.state_vector())
    assert state.qid_shape == (2, 2, 2)
    assert state.dtype == np.complex64

    with pytest.raises(ValueError, match='qid shape'):
        _ = cirq.quantum_state(product_state_1, qid_shape=(2, 2))
コード例 #7
0
ファイル: product_state_test.py プロジェクト: wingers/Cirq
def test_product_state():
    q0, q1, q2 = cirq.LineQubit.range(3)

    ps = cirq.KET_PLUS(q0) * cirq.KET_PLUS(q1)
    assert str(ps) == "+X(0) * +X(1)"

    ps *= cirq.KET_ONE(q2)
    assert str(ps) == "+X(0) * +X(1) * -Z(2)"

    with pytest.raises(ValueError) as e:
        # Re-use q2
        ps *= cirq.KET_PLUS(q2)
    assert e.match(r'.*both contain factors for these qubits: ' r'\[cirq.LineQubit\(2\)\]')

    ps2 = eval(repr(ps))
    assert ps == ps2