def test_state_vector_trial_result_repr():
    q0 = cirq.NamedQubit('a')
    args = cirq.ActOnStateVectorArgs(
        target_tensor=np.array([0, 1], dtype=np.int32),
        available_buffer=np.array([0, 1], dtype=np.int32),
        prng=np.random.RandomState(0),
        log_of_measurement_results={},
        qubits=[q0],
    )
    final_step_result = cirq.SparseSimulatorStep(args, cirq.Simulator())
    trial_result = cirq.StateVectorTrialResult(
        params=cirq.ParamResolver({'s': 1}),
        measurements={'m': np.array([[1]], dtype=np.int32)},
        final_step_result=final_step_result,
    )
    expected_repr = (
        "cirq.StateVectorTrialResult("
        "params=cirq.ParamResolver({'s': 1}), "
        "measurements={'m': np.array([[1]], dtype=np.int32)}, "
        "final_step_result=cirq.SparseSimulatorStep("
        "sim_state=cirq.ActOnStateVectorArgs("
        "target_tensor=np.array([0, 1], dtype=np.int32), "
        "available_buffer=np.array([0, 1], dtype=np.int32), "
        "qubits=(cirq.NamedQubit('a'),), "
        "log_of_measurement_results={}), "
        "dtype=np.complex64))"
    )
    assert repr(trial_result) == expected_repr
    assert eval(expected_repr) == trial_result
def test_pretty_print():
    args = cirq.ActOnStateVectorArgs(
        target_tensor=np.array([1]),
        available_buffer=np.array([1]),
        prng=np.random.RandomState(0),
        log_of_measurement_results={},
        qubits=[],
    )
    final_step_result = cirq.SparseSimulatorStep(args, cirq.Simulator())
    result = cirq.StateVectorTrialResult(cirq.ParamResolver(), {}, final_step_result)

    # Test Jupyter console output from
    class FakePrinter:
        def __init__(self):
            self.text_pretty = ''

        def text(self, to_print):
            self.text_pretty += to_print

    p = FakePrinter()
    result._repr_pretty_(p, False)
    assert p.text_pretty == 'measurements: (no measurements)\n\nphase:\noutput vector: |⟩'

    # Test cycle handling
    p = FakePrinter()
    result._repr_pretty_(p, True)
    assert p.text_pretty == 'StateVectorTrialResult(...)'
Esempio n. 3
0
def test_simulator_step_state_mixin():
    qubits = cirq.LineQubit.range(2)
    qubit_map = {qubits[i]: i for i in range(2)}
    result = cirq.SparseSimulatorStep(measurements={'m': np.array([1, 2])},
                                      state_vector=np.array([0, 1, 0, 0]),
                                      qubit_map=qubit_map,
                                      dtype=np.complex64)
    rho = np.array([[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
    np.testing.assert_array_almost_equal(rho, result.density_matrix_of(qubits))
    bloch = np.array([0, 0, -1])
    np.testing.assert_array_almost_equal(bloch,
                                         result.bloch_vector_of(qubits[1]))

    assert result.dirac_notation() == '|01⟩'
def test_str_big():
    qs = cirq.LineQubit.range(20)
    args = cirq.ActOnStateVectorArgs(
        target_tensor=np.array([1] * 2 ** 10),
        available_buffer=np.array([1] * 2 ** 10),
        prng=np.random.RandomState(0),
        log_of_measurement_results={},
        qubits=qs,
    )
    final_step_result = cirq.SparseSimulatorStep(args, cirq.Simulator())
    result = cirq.StateVectorTrialResult(
        cirq.ParamResolver(),
        {},
        final_step_result,
    )
    assert 'output vector: [1 1 1 ..' in str(result)
Esempio n. 5
0
def test_str_big():
    qs = cirq.LineQubit.range(10)
    args = cirq.ActOnStateVectorArgs(
        prng=np.random.RandomState(0),
        log_of_measurement_results={},
        qubits=qs,
        initial_state=np.array([1] * 2**10, dtype=np.complex64) * 0.03125,
        dtype=np.complex64,
    )
    final_step_result = cirq.SparseSimulatorStep(args, cirq.Simulator())
    result = cirq.StateVectorTrialResult(
        cirq.ParamResolver(),
        {},
        final_step_result,
    )
    assert 'output vector: [0.03125+0.j 0.03125+0.j 0.03125+0.j ..' in str(
        result)
def test_simulator_step_state_mixin():
    qubits = cirq.LineQubit.range(2)
    args = cirq.ActOnStateVectorArgs(
        log_of_measurement_results={'m': np.array([1, 2])},
        target_tensor=np.array([0, 1, 0, 0]).reshape((2, 2)),
        available_buffer=np.array([0, 1, 0, 0]).reshape((2, 2)),
        prng=cirq.value.parse_random_state(0),
        qubits=qubits,
    )
    result = cirq.SparseSimulatorStep(
        sim_state=args,
        dtype=np.complex64,
        simulator=None,  # type: ignore
    )
    rho = np.array([[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
    np.testing.assert_array_almost_equal(rho, result.density_matrix_of(qubits))
    bloch = np.array([0, 0, -1])
    np.testing.assert_array_almost_equal(bloch, result.bloch_vector_of(qubits[1]))

    assert result.dirac_notation() == '|01⟩'