Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uniform access to the layout in Register and MappableRegister #369

Merged
merged 1 commit into from
May 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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