Skip to content

Commit

Permalink
Uniform access to the layout between Register and MappableRegister (#369
Browse files Browse the repository at this point in the history
)
  • Loading branch information
HGSilveri authored May 12, 2022
1 parent f8b0e3e commit 50c70ea
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 6 deletions.
4 changes: 2 additions & 2 deletions pulser-core/pulser/devices/_device_datacls.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,9 @@ def validate_register(self, register: BaseRegister) -> None:
)
self._validate_coords(register.qubits, kind="atoms")

if register._layout_info is not None:
if register.layout is not None:
try:
self.validate_layout(register._layout_info.layout)
self.validate_layout(register.layout)
except (ValueError, TypeError):
raise ValueError(
"The 'register' is associated with an incompatible "
Expand Down
5 changes: 5 additions & 0 deletions pulser-core/pulser/register/base_register.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@ def qubit_ids(self) -> tuple[QubitId, ...]:
"""The qubit IDs of this register."""
return self._ids

@property
def layout(self) -> Optional[RegisterLayout]:
"""The layout used to define the register."""
return self._layout_info.layout if self._layout_info else None

def find_indices(self, id_list: abcSequence[QubitId]) -> list[int]:
"""Computes indices of qubits.
Expand Down
5 changes: 5 additions & 0 deletions pulser-core/pulser/register/mappable_reg.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ def qubit_ids(self) -> tuple[QubitId, ...]:
"""The qubit IDs of this mappable register."""
return self._qubit_ids

@property
def layout(self) -> RegisterLayout:
"""The layout used to define the register."""
return self._layout

def build_register(self, qubits: Mapping[QubitId, int]) -> BaseRegister:
"""Builds an actual register.
Expand Down
2 changes: 1 addition & 1 deletion pulser-core/pulser/register/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ def rotate(self, degrees: float) -> None:
Args:
degrees (float): The angle of rotation in degrees.
"""
if self._layout_info is not None:
if self.layout is not None:
raise TypeError(
"A register defined from a RegisterLayout cannot be rotated."
)
Expand Down
2 changes: 1 addition & 1 deletion pulser-core/pulser/sequence.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ def __init__(

# Checks if register is compatible with the device
if isinstance(register, MappableRegister):
device.validate_layout(register._layout)
device.validate_layout(register.layout)
else:
device.validate_register(register)

Expand Down
4 changes: 2 additions & 2 deletions tests/test_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,15 @@ def test_register_from_layout():
seq = Sequence(reg, device=MockDevice)
new_reg = encode_decode(seq).register
assert reg == new_reg
assert new_reg._layout_info.layout == layout
assert new_reg.layout == layout
assert new_reg._layout_info.trap_ids == (1, 0)


def test_mappable_register():
layout = RegisterLayout([[0, 0], [1, 1], [1, 0], [0, 1]])
mapp_reg = layout.make_mappable_register(2)
new_mapp_reg = encode_decode(mapp_reg)
assert new_mapp_reg._layout == layout
assert new_mapp_reg.layout == layout
assert new_mapp_reg.qubit_ids == ("q0", "q1")

seq = Sequence(mapp_reg, MockDevice)
Expand Down

0 comments on commit 50c70ea

Please sign in to comment.