Skip to content

Commit 97e8b98

Browse files
authored
Accept all_qubits in GridDevice._from_device_information() to allow isolated qubits (#6103)
1 parent 683286b commit 97e8b98

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

cirq-google/cirq_google/devices/grid_device.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,8 @@ def _from_device_information(
510510
*,
511511
qubit_pairs: Collection[Tuple[cirq.GridQubit, cirq.GridQubit]],
512512
gateset: cirq.Gateset,
513-
gate_durations: Optional[Mapping['cirq.GateFamily', 'cirq.Duration']] = None,
513+
gate_durations: Optional[Mapping[cirq.GateFamily, cirq.Duration]] = None,
514+
all_qubits: Optional[Collection[cirq.GridQubit]] = None,
514515
) -> 'GridDevice':
515516
"""Constructs a GridDevice using the device information provided.
516517
@@ -555,9 +556,14 @@ def _from_device_information(
555556
ValueError: If `gate_durations` contains keys which are not in `gateset`.
556557
ValueError: If multiple gate families in gate_durations can
557558
represent a particular gate, but they have different durations.
559+
ValueError: If all_qubits is provided and is not a superset
560+
of all the qubits found in qubit_pairs.
558561
"""
559562
metadata = cirq.GridDeviceMetadata(
560-
qubit_pairs=qubit_pairs, gateset=gateset, gate_durations=gate_durations
563+
qubit_pairs=qubit_pairs,
564+
gateset=gateset,
565+
gate_durations=gate_durations,
566+
all_qubits=all_qubits,
561567
)
562568
incomplete_device = GridDevice(metadata)
563569
# incomplete_device may have incomplete gateset and gate durations information, as described

cirq-google/cirq_google/devices/grid_device_test.py

+23-2
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,24 @@ def _create_device_spec_with_all_couplings():
204204
return spec
205205

206206

207+
def _create_device_spec_with_isolated_qubits():
208+
# Qubit layout:
209+
# x -- x
210+
# x -- x
211+
# x -- x
212+
# x -- x
213+
# x -- x
214+
# x x
215+
device_info, spec = _create_device_spec_with_horizontal_couplings()
216+
217+
isolated_qubits = [cirq.GridQubit(GRID_HEIGHT, j) for j in range(2)]
218+
spec.valid_qubits.extend([v2.qubit_to_proto_id(q) for q in isolated_qubits])
219+
220+
device_info.grid_qubits.extend(isolated_qubits)
221+
222+
return device_info, spec
223+
224+
207225
def _create_device_spec_duplicate_qubit() -> v2.device_pb2.DeviceSpecification:
208226
"""Creates a DeviceSpecification with a qubit name that does not conform to '<int>_<int>'."""
209227
q_proto_id = v2.qubit_to_proto_id(cirq.GridQubit(0, 0))
@@ -440,7 +458,7 @@ def test_grid_device_repr_pretty(cycle, func):
440458

441459

442460
def test_device_from_device_information_equals_device_from_proto():
443-
device_info, spec = _create_device_spec_with_horizontal_couplings()
461+
device_info, spec = _create_device_spec_with_isolated_qubits()
444462

445463
# The set of gates in gateset and gate durations are consistent with what's generated in
446464
# _create_device_spec_with_horizontal_couplings()
@@ -482,7 +500,10 @@ def test_device_from_device_information_equals_device_from_proto():
482500
}
483501

484502
device_from_information = cirq_google.GridDevice._from_device_information(
485-
qubit_pairs=device_info.qubit_pairs, gateset=gateset, gate_durations=gate_durations
503+
qubit_pairs=device_info.qubit_pairs,
504+
gateset=gateset,
505+
gate_durations=gate_durations,
506+
all_qubits=device_info.grid_qubits,
486507
)
487508

488509
assert device_from_information == cirq_google.GridDevice.from_proto(spec)

0 commit comments

Comments
 (0)