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(...)'
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)
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⟩'