Skip to content

Commit

Permalink
Add Google-specific variant for noise properties. (quantumlib#5082)
Browse files Browse the repository at this point in the history
This PR provides an implementation of `SuperconductingQubitsNoiseProperties` for Google hardware. Now that SQNP is an abstract type, this is a prerequisite for re-enabling calibration-to-noise tools.

This is part 3 of quantumlib#4666; part 2 was quantumlib#4964. Remaining steps include:

- Reinstatement of calibration_to_noise_properties using new types
- Reinstatement of compare_generated_noise_to_metrics using new types
  • Loading branch information
95-martin-orion authored Mar 31, 2022
1 parent 0907ff2 commit 1b724de
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 6 deletions.
10 changes: 7 additions & 3 deletions cirq/devices/noise_properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import abc
from typing import Iterable, Sequence, TYPE_CHECKING, List

from cirq import _import, ops, protocols, devices
from cirq import _compat, _import, ops, protocols, devices
from cirq.devices.noise_utils import (
PHYSICAL_GATE_TAG,
)
Expand Down Expand Up @@ -54,7 +54,7 @@ def __init__(self, noise_properties: NoiseProperties) -> None:
self._noise_properties = noise_properties
self.noise_models = self._noise_properties.build_noise_models()

def virtual_predicate(self, op: 'cirq.Operation') -> bool:
def is_virtual(self, op: 'cirq.Operation') -> bool:
"""Returns True if an operation is virtual.
Device-specific subclasses should implement this method to mark any
Expand All @@ -68,6 +68,10 @@ def virtual_predicate(self, op: 'cirq.Operation') -> bool:
"""
return False

@_compat.deprecated(deadline='v0.16', fix='Use is_virtual instead.')
def virtual_predicate(self, op: 'cirq.Operation') -> bool:
return self.is_virtual(op)

def noisy_moments(
self, moments: Iterable['cirq.Moment'], system_qubits: Sequence['cirq.Qid']
) -> Sequence['cirq.OP_TREE']:
Expand All @@ -91,7 +95,7 @@ def noisy_moments(
# using `self.virtual_predicate` to determine virtuality.
new_moments = []
for moment in split_measure_moments:
virtual_ops = {op for op in moment if self.virtual_predicate(op)}
virtual_ops = {op for op in moment if self.is_virtual(op)}
physical_ops = [
op.with_tags(PHYSICAL_GATE_TAG) for op in moment if op not in virtual_ops
]
Expand Down
8 changes: 8 additions & 0 deletions cirq/devices/noise_properties_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,11 @@ def test_sample_model():
cirq.Moment(cirq.H(q0), cirq.H(q1)),
)
assert noisy_circuit == expected_circuit


def test_deprecated_virtual_predicate():
q0, q1 = cirq.LineQubit.range(2)
props = SampleNoiseProperties([q0, q1], [(q0, q1), (q1, q0)])
model = NoiseModelFromNoiseProperties(props)
with cirq.testing.assert_deprecated("Use is_virtual", deadline="v0.16"):
_ = model.virtual_predicate(cirq.X(q0))
7 changes: 4 additions & 3 deletions cirq/devices/superconducting_qubits_noise_properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,15 @@ class SuperconductingQubitsNoiseProperties(devices.NoiseProperties, abc.ABC):
Args:
gate_times_ns: Dict[type, float] of gate types to their duration on
quantum hardware.
quantum hardware. Used with t(1|phi)_ns to specify thermal noise.
t1_ns: Dict[cirq.Qid, float] of qubits to their T_1 time, in ns.
tphi_ns: Dict[cirq.Qid, float] of qubits to their T_phi time, in ns.
readout_errors: Dict[cirq.Qid, np.ndarray] of qubits to their readout
errors in matrix form: [P(read |1> from |0>), P(read |0> from |1>)].
Used to prepend amplitude damping errors to measurements.
gate_pauli_errors: dict of noise_utils.OpIdentifiers (a gate and the qubits it
targets) to the Pauli error for that operation. Keys in this dict
must have defined qubits.
targets) to the Pauli error for that operation. Used to construct
depolarizing error. Keys in this dict must have defined qubits.
validate: If True, verifies that t1 and tphi qubits sets match, and
that all symmetric two-qubit gates have errors which are
symmetric over the qubits they affect. Defaults to True.
Expand Down

0 comments on commit 1b724de

Please sign in to comment.