Skip to content

Commit

Permalink
Update noise model to new metrics. (#2927)
Browse files Browse the repository at this point in the history
* Update noise models to new metrics.

* Adjust for difference between Pauli error and depol_prob.

* Explain depol/Pauli difference.

* Fix constant names.
  • Loading branch information
95-martin-orion committed Apr 22, 2020
1 parent 9208cb3 commit aa2a40a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 17 deletions.
8 changes: 4 additions & 4 deletions cirq/contrib/noise_models/noise_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -321,11 +321,11 @@ def simple_noise_from_calibration_metrics(calibration: engine.Calibration,
readout_error_probs: Dict['cirq.Qid', float] = {}

if depol_noise:
# TODO: replace with Pauli error once it's available.
# Github issue: https://github.com/quantumlib/Cirq/issues/2832
# In the single-qubit case, Pauli error and the depolarization fidelity
# differ by a factor of 4/3.
depol_probs = {
qubit[0]: depol_prob[0] for qubit, depol_prob in
calibration['single_qubit_rb_total_error'].items()
qubit[0]: pauli_err[0] * 4 / 3 for qubit, pauli_err in
calibration['single_qubit_rb_pauli_error_per_gate'].items()
}
if damping_noise:
# TODO: implement per-gate amplitude damping noise.
Expand Down
30 changes: 17 additions & 13 deletions cirq/contrib/noise_models/noise_models_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,19 +299,19 @@ def test_aggregate_decay_noise_after_moment():
double_val: .9998
}]
}, {
name: 'single_qubit_rb_total_error',
name: 'single_qubit_rb_pauli_error_per_gate',
targets: ['q0_0'],
values: [{
double_val: .001
}]
}, {
name: 'single_qubit_rb_total_error',
name: 'single_qubit_rb_pauli_error_per_gate',
targets: ['q0_1'],
values: [{
double_val: .002
}]
}, {
name: 'single_qubit_rb_total_error',
name: 'single_qubit_rb_pauli_error_per_gate',
targets: ['q1_0'],
values: [{
double_val: .003
Expand Down Expand Up @@ -355,6 +355,10 @@ def test_aggregate_decay_noise_after_moment():
}]
""", v2.metrics_pb2.MetricsSnapshot())

DEPOL_001 = .001 * 4 / 3
DEPOL_002 = .002 * 4 / 3
DEPOL_003 = .003 * 4 / 3


def test_noise_from_metrics_requires_type():
# Attempt to generate a noise model without specifying a noise type.
Expand Down Expand Up @@ -396,15 +400,15 @@ def test_per_qubit_depol_noise_from_data():
# Insert channels explicitly to construct expected output.
expected_program = cirq.Circuit(
cirq.Moment([cirq.H(qubits[0])]),
cirq.Moment([cirq.DepolarizingChannel(0.001).on(qubits[0])]),
cirq.Moment([cirq.DepolarizingChannel(DEPOL_001).on(qubits[0])]),
cirq.Moment([cirq.CNOT(qubits[0], qubits[1])]),
cirq.Moment([
cirq.DepolarizingChannel(0.001).on(qubits[0]),
cirq.DepolarizingChannel(0.002).on(qubits[1])
cirq.DepolarizingChannel(DEPOL_001).on(qubits[0]),
cirq.DepolarizingChannel(DEPOL_002).on(qubits[1])
]), cirq.Moment([cirq.CNOT(qubits[0], qubits[2])]),
cirq.Moment([
cirq.DepolarizingChannel(0.001).on(qubits[0]),
cirq.DepolarizingChannel(0.003).on(qubits[2])
cirq.DepolarizingChannel(DEPOL_001).on(qubits[0]),
cirq.DepolarizingChannel(DEPOL_003).on(qubits[2])
]), cirq.Moment([cirq.Z(qubits[1]).with_tags(ops.VirtualTag())]),
cirq.Moment([
cirq.measure(qubits[0], key='q0'),
Expand Down Expand Up @@ -514,15 +518,15 @@ def test_per_qubit_combined_noise_from_data():
decay_prob = [1 - exp(-1 / 0.007), 1 - exp(-1 / 0.008), 1 - exp(-1 / 0.009)]
expected_program = cirq.Circuit(
cirq.Moment([cirq.H(qubits[0])]),
cirq.Moment([cirq.DepolarizingChannel(0.001).on(qubits[0])]),
cirq.Moment([cirq.DepolarizingChannel(DEPOL_001).on(qubits[0])]),
cirq.Moment([cirq.CNOT(qubits[0], qubits[1])]),
cirq.Moment([
cirq.DepolarizingChannel(0.001).on(qubits[0]),
cirq.DepolarizingChannel(0.002).on(qubits[1])
cirq.DepolarizingChannel(DEPOL_001).on(qubits[0]),
cirq.DepolarizingChannel(DEPOL_002).on(qubits[1])
]), cirq.Moment([cirq.CNOT(qubits[0], qubits[2])]),
cirq.Moment([
cirq.DepolarizingChannel(0.001).on(qubits[0]),
cirq.DepolarizingChannel(0.003).on(qubits[2])
cirq.DepolarizingChannel(DEPOL_001).on(qubits[0]),
cirq.DepolarizingChannel(DEPOL_003).on(qubits[2])
]),
cirq.Moment([
cirq.AmplitudeDampingChannel(decay_prob[i]).on(qubits[i])
Expand Down

0 comments on commit aa2a40a

Please sign in to comment.