def test_estimate_parallel_readout_errors_zero_batch(): qubits = cirq.LineQubit.range(10) with pytest.raises(ValueError, match='non-zero trials_per_batch'): _ = cirq.estimate_parallel_single_qubit_readout_errors( cirq.ZerosSampler(), qubits=qubits, repetitions=1000, trials=10, trials_per_batch=0)
def test_estimate_parallel_readout_errors_bad_bit_string(): qubits = cirq.LineQubit.range(4) with pytest.raises(ValueError, match='but was None'): _ = cirq.estimate_parallel_single_qubit_readout_errors( cirq.ZerosSampler(), qubits=qubits, repetitions=1000, trials=35, trials_per_batch=10, bit_strings=[[1] * 4], ) with pytest.raises(ValueError, match='0 or 1'): _ = cirq.estimate_parallel_single_qubit_readout_errors( cirq.ZerosSampler(), qubits=qubits, repetitions=1000, trials=2, bit_strings=np.array([[12, 47, 2, -4], [0.1, 7, 0, 0]]), )
def test_estimate_parallel_readout_errors_no_noise(): qubits = cirq.LineQubit.range(10) sampler = cirq.Simulator() repetitions = 1000 result = cirq.estimate_parallel_single_qubit_readout_errors( sampler, qubits=qubits, repetitions=repetitions) assert result.zero_state_errors == {q: 0 for q in qubits} assert result.one_state_errors == {q: 0 for q in qubits} assert result.repetitions == repetitions assert isinstance(result.timestamp, float)
def test_estimate_parallel_readout_errors_batching(): qubits = cirq.LineQubit.range(5) sampler = cirq.ZerosSampler() repetitions = 1000 result = cirq.estimate_parallel_single_qubit_readout_errors( sampler, qubits=qubits, repetitions=repetitions, trials=35, trials_per_batch=10 ) assert result.zero_state_errors == {q: 0.0 for q in qubits} assert result.one_state_errors == {q: 1.0 for q in qubits} assert result.repetitions == repetitions assert isinstance(result.timestamp, float)
def test_estimate_parallel_readout_errors_with_noise(): qubits = cirq.LineQubit.range(5) sampler = NoisySingleQubitReadoutSampler(p0=0.1, p1=0.2, seed=1234) repetitions = 1000 result = cirq.estimate_parallel_single_qubit_readout_errors( sampler, qubits=qubits, repetitions=repetitions, trials=40) for error in result.one_state_errors.values(): assert 0.17 < error < 0.23 for error in result.zero_state_errors.values(): assert 0.07 < error < 0.13 assert result.repetitions == repetitions assert isinstance(result.timestamp, float)
def test_estimate_parallel_readout_errors_missing_qubits(): qubits = cirq.LineQubit.range(4) result = cirq.estimate_parallel_single_qubit_readout_errors( cirq.ZerosSampler(), qubits=qubits, repetitions=2000, trials=1, bit_strings=np.array([[0] * 4]), ) assert result.zero_state_errors == {q: 0 for q in qubits} # Trial did not include a one-state assert all(np.isnan(result.one_state_errors[q]) for q in qubits) assert result.repetitions == 2000 assert isinstance(result.timestamp, float)