-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Decouple Plaquette and qubits (#173)
This PR decouples the `Plaquette` classes from their `qubits`, removing `SquarePlaquette` and `RoundedPlaquette` and allowing the description of higher-level plaquettes with less code duplication. Fixes #172
- Loading branch information
Showing
17 changed files
with
215 additions
and
311 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,7 @@ | ||
from .plaquette import ( | ||
Plaquette, | ||
RoundedPlaquette, | ||
SquarePlaquette, | ||
) | ||
from .qubit import PlaquetteQubit | ||
from ..circuit.schedule import ( | ||
ScheduledCircuit, | ||
ScheduleException, | ||
from .plaquette import Plaquette | ||
from .qubit import ( | ||
PlaquetteQubit, | ||
PlaquetteQubits, | ||
RoundedPlaquetteQubits, | ||
SquarePlaquetteQubits, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,25 @@ | ||
import cirq | ||
from tqec.enums import PlaquetteOrientation | ||
from tqec.plaquette.plaquette import RoundedPlaquette, SquarePlaquette | ||
|
||
from tqec.circuit.schedule import ScheduledCircuit | ||
from tqec.enums import PlaquetteOrientation | ||
from tqec.plaquette.plaquette import Plaquette | ||
from tqec.plaquette.qubit import ( | ||
PlaquetteQubits, | ||
RoundedPlaquetteQubits, | ||
SquarePlaquetteQubits, | ||
) | ||
|
||
|
||
class EmptyPlaquette(Plaquette): | ||
def __init__(self, qubits: PlaquetteQubits) -> None: | ||
super().__init__(qubits, ScheduledCircuit(cirq.Circuit())) | ||
|
||
|
||
class EmptySquarePlaquette(SquarePlaquette): | ||
class EmptySquarePlaquette(EmptyPlaquette): | ||
def __init__(self) -> None: | ||
super().__init__(ScheduledCircuit(cirq.Circuit())) | ||
super().__init__(SquarePlaquetteQubits()) | ||
|
||
|
||
class EmptyRoundedPlaquette(RoundedPlaquette): | ||
class EmptyRoundedPlaquette(EmptyPlaquette): | ||
def __init__(self, orientation: PlaquetteOrientation) -> None: | ||
super().__init__(ScheduledCircuit(cirq.Circuit()), orientation) | ||
super().__init__(RoundedPlaquetteQubits(orientation)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,74 +1,49 @@ | ||
from __future__ import annotations | ||
|
||
import typing as ty | ||
|
||
import cirq | ||
from tqec.enums import PlaquetteOrientation | ||
from tqec.plaquette.plaquette import RoundedPlaquette, SquarePlaquette | ||
|
||
from tqec.circuit.schedule import ScheduledCircuit | ||
from tqec.enums import PlaquetteOrientation | ||
from tqec.plaquette.plaquette import Plaquette | ||
from tqec.plaquette.qubit import ( | ||
PlaquetteQubits, | ||
RoundedPlaquetteQubits, | ||
SquarePlaquetteQubits, | ||
) | ||
|
||
|
||
class ZSquareInitialisationPlaquette(SquarePlaquette): | ||
def __init__( | ||
self, qubits_to_initialise: ty.Sequence[cirq.GridQubit] | None = None | ||
) -> None: | ||
if qubits_to_initialise is None: | ||
qubits_to_initialise = ( | ||
SquarePlaquette.get_data_qubits_cirq() | ||
+ SquarePlaquette.get_syndrome_qubits_cirq() | ||
) | ||
class ZInitialisationPlaquette(Plaquette): | ||
def __init__(self, qubits: PlaquetteQubits) -> None: | ||
circuit = cirq.Circuit( | ||
cirq.R(q).with_tags(self._MERGEABLE_TAG) for q in qubits_to_initialise | ||
cirq.R(q).with_tags(self._MERGEABLE_TAG) for q in qubits.to_grid_qubit() | ||
) | ||
super().__init__(ScheduledCircuit(circuit)) | ||
super().__init__(qubits, ScheduledCircuit(circuit)) | ||
|
||
|
||
class ZRoundedInitialisationPlaquette(RoundedPlaquette): | ||
def __init__( | ||
self, | ||
orientation: PlaquetteOrientation, | ||
qubits_to_initialise: ty.Sequence[cirq.GridQubit] | None = None, | ||
) -> None: | ||
if qubits_to_initialise is None: | ||
qubits_to_initialise = ( | ||
RoundedPlaquette.get_data_qubits_cirq(orientation) | ||
+ RoundedPlaquette.get_syndrome_qubits_cirq() | ||
) | ||
circuit = cirq.Circuit( | ||
cirq.R(q).with_tags(self._MERGEABLE_TAG) for q in qubits_to_initialise | ||
) | ||
super().__init__(ScheduledCircuit(circuit), orientation) | ||
class ZSquareInitialisationPlaquette(ZInitialisationPlaquette): | ||
def __init__(self) -> None: | ||
super().__init__(SquarePlaquetteQubits()) | ||
|
||
|
||
class XSquareInitialisationPlaquette(SquarePlaquette): | ||
def __init__( | ||
self, qubits_to_initialise: ty.Sequence[cirq.GridQubit] | None = None | ||
) -> None: | ||
if qubits_to_initialise is None: | ||
qubits_to_initialise = ( | ||
SquarePlaquette.get_data_qubits_cirq() | ||
+ SquarePlaquette.get_syndrome_qubits_cirq() | ||
) | ||
circuit = cirq.Circuit( | ||
(cirq.R(q).with_tags(self._MERGEABLE_TAG), cirq.H(q)) | ||
for q in qubits_to_initialise | ||
) | ||
super().__init__(ScheduledCircuit(circuit)) | ||
class ZRoundedInitialisationPlaquette(ZInitialisationPlaquette): | ||
def __init__(self, orientation: PlaquetteOrientation) -> None: | ||
super().__init__(RoundedPlaquetteQubits(orientation)) | ||
|
||
|
||
class XRoundedInitialisationPlaquette(RoundedPlaquette): | ||
def __init__( | ||
self, | ||
orientation: PlaquetteOrientation, | ||
qubits_to_initialise: ty.Sequence[cirq.GridQubit] | None = None, | ||
) -> None: | ||
if qubits_to_initialise is None: | ||
qubits_to_initialise = ( | ||
RoundedPlaquette.get_data_qubits_cirq(orientation) | ||
+ RoundedPlaquette.get_syndrome_qubits_cirq() | ||
) | ||
class XInitialisationPlaquette(Plaquette): | ||
def __init__(self, qubits: PlaquetteQubits) -> None: | ||
circuit = cirq.Circuit( | ||
(cirq.R(q).with_tags(self._MERGEABLE_TAG), cirq.H(q)) | ||
for q in qubits_to_initialise | ||
for q in qubits.to_grid_qubit() | ||
) | ||
super().__init__(ScheduledCircuit(circuit), orientation) | ||
super().__init__(qubits, ScheduledCircuit(circuit)) | ||
|
||
|
||
class XSquareInitialisationPlaquette(XInitialisationPlaquette): | ||
def __init__(self) -> None: | ||
super().__init__(SquarePlaquetteQubits()) | ||
|
||
|
||
class XRoundedInitialisationPlaquette(XInitialisationPlaquette): | ||
def __init__(self, orientation: PlaquetteOrientation) -> None: | ||
super().__init__(RoundedPlaquetteQubits(orientation)) |
Oops, something went wrong.