From aadc56d69a99bdc9bacb5891fe0bbc8822c92e53 Mon Sep 17 00:00:00 2001 From: MichaelBroughton Date: Tue, 8 Feb 2022 12:10:30 -0800 Subject: [PATCH] Deperecate {ion,neutral_atom}.qubit_set. (#4943) More of #4744 --- cirq-core/cirq/ion/ion_device.py | 13 ++++++++++++ cirq-core/cirq/ion/ion_device_test.py | 13 ++++++++++-- .../neutral_atoms/neutral_atom_devices.py | 9 +++++++++ .../neutral_atom_devices_test.py | 20 +++++++++++++++++-- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/cirq-core/cirq/ion/ion_device.py b/cirq-core/cirq/ion/ion_device.py index 786804611f0..ea40d1193d2 100644 --- a/cirq-core/cirq/ion/ion_device.py +++ b/cirq-core/cirq/ion/ion_device.py @@ -13,6 +13,7 @@ # limitations under the License. from typing import Any, FrozenSet, Iterable, Optional, Set, TYPE_CHECKING +import networkx as nx from cirq import _compat, circuits, value, devices, ops, protocols from cirq.ion import convert_to_ion_gates @@ -70,6 +71,18 @@ def __init__( self.qubits = frozenset(qubits) self.gateset = get_ion_gateset() + graph = nx.Graph() + graph.add_edges_from([(a, b) for a in qubits for b in qubits if a != b], directed=False) + self._metadata = devices.DeviceMetadata(self.qubits, graph) + + @property + def metadata(self) -> devices.DeviceMetadata: + return self._metadata + + @_compat.deprecated( + fix='Use metadata.qubit_set if applicable.', + deadline='v0.15', + ) def qubit_set(self) -> FrozenSet['cirq.LineQubit']: return self.qubits diff --git a/cirq-core/cirq/ion/ion_device_test.py b/cirq-core/cirq/ion/ion_device_test.py index 76242ebab72..9d183e21e77 100644 --- a/cirq-core/cirq/ion/ion_device_test.py +++ b/cirq-core/cirq/ion/ion_device_test.py @@ -65,6 +65,14 @@ def test_init(): ) +def test_metadata(): + d = ion_device(3) + assert d.metadata.qubit_set == frozenset( + {cirq.LineQubit(0), cirq.LineQubit(1), cirq.LineQubit(2)} + ) + assert len(d.metadata.nx_graph.edges()) == 3 + + def test_init_timedelta(): d = ion_device(3, use_timedelta=True) ms = 1000 * cirq.Duration(nanos=1) @@ -209,8 +217,9 @@ def test_at(): assert d.at(2) == cirq.LineQubit(2) -def test_qubit_set(): - assert ion_device(3).qubit_set() == frozenset(cirq.LineQubit.range(3)) +def test_qubit_set_deprecated(): + with cirq.testing.assert_deprecated('qubit_set', deadline='v0.15'): + assert ion_device(3).qubit_set() == frozenset(cirq.LineQubit.range(3)) def test_qid_pairs_deprecated(): diff --git a/cirq-core/cirq/neutral_atoms/neutral_atom_devices.py b/cirq-core/cirq/neutral_atoms/neutral_atom_devices.py index 278026343e9..166d347803d 100644 --- a/cirq-core/cirq/neutral_atoms/neutral_atom_devices.py +++ b/cirq-core/cirq/neutral_atoms/neutral_atom_devices.py @@ -116,6 +116,15 @@ def __init__( raise ValueError(f'Unsupported qubit type: {q!r}') self.qubits = frozenset(qubits) + self._metadata = devices.GridDeviceMetadata( + [(a, b) for a in self.qubits for b in self.qubits if a.is_adjacent(b)], self.gateset + ) + + @property + def metadata(self) -> devices.GridDeviceMetadata: + return self._metadata + + @_compat.deprecated(fix='Use metadata.qubit_set if applicable.', deadline='v0.15') def qubit_set(self) -> FrozenSet['cirq.GridQubit']: return self.qubits diff --git a/cirq-core/cirq/neutral_atoms/neutral_atom_devices_test.py b/cirq-core/cirq/neutral_atoms/neutral_atom_devices_test.py index f50dfcb7781..a1a410ddd0f 100644 --- a/cirq-core/cirq/neutral_atoms/neutral_atom_devices_test.py +++ b/cirq-core/cirq/neutral_atoms/neutral_atom_devices_test.py @@ -56,6 +56,21 @@ def test_init(): _ = d.duration_of(cirq.SingleQubitGate().on(q00)) +def test_metadata(): + d = square_device(2, 3) + assert d.metadata.qubit_set == frozenset( + { + cirq.GridQubit(0, 0), + cirq.GridQubit(0, 1), + cirq.GridQubit(1, 0), + cirq.GridQubit(1, 1), + cirq.GridQubit(2, 0), + cirq.GridQubit(2, 1), + } + ) + assert len(d.metadata.nx_graph.edges()) == 7 + + def test_init_timedelta(): d = square_device(2, 2, holes=[cirq.GridQubit(1, 1)], use_timedelta=True) us = cirq.Duration(nanos=10 ** 3) @@ -282,5 +297,6 @@ def test_repr_pretty(): cirq.testing.assert_repr_pretty(square_device(2, 2), "cirq.NeutralAtomDevice(...)", cycle=True) -def test_qubit_set(): - assert square_device(2, 2).qubit_set() == frozenset(cirq.GridQubit.square(2, 0, 0)) +def test_qubit_set_deprecated(): + with cirq.testing.assert_deprecated('qubit_set', deadline='v0.15'): + assert square_device(2, 2).qubit_set() == frozenset(cirq.GridQubit.square(2, 0, 0))