Skip to content

Commit 1a81847

Browse files
authored
Adding methods to display parallelized lattices. (#852)
* adding methods to display parallelized lattices. * split up function and adding test.
1 parent 467cc56 commit 1a81847

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

src/bloqade/ir/location/location.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from beartype import beartype
99
from enum import Enum
1010
from numpy.typing import NDArray
11+
from bloqade.submission.ir.capabilities import QuEraCapabilities
1112
from bloqade.visualization import get_atom_arrangement_figure
1213
from bloqade.visualization import display_ir
1314

@@ -517,6 +518,34 @@ def n_dims(self):
517518
def __str__(self):
518519
return "ParallelRegister:\n" + self.atom_arrangement.__str__()
519520

521+
def _compile_to_list(
522+
self, __capabilities: Optional[QuEraCapabilities] = None, **assignments
523+
):
524+
from bloqade.compiler.rewrite.common import AssignBloqadeIR
525+
from bloqade.compiler.codegen.hardware import GenerateLattice
526+
from bloqade.submission.capabilities import get_capabilities
527+
528+
lattice_data = GenerateLattice(__capabilities or get_capabilities()).emit(
529+
AssignBloqadeIR(assignments).emit(self)
530+
)
531+
532+
list_of_locations = ListOfLocations()
533+
for site, filling in zip(lattice_data.sites, lattice_data.filling):
534+
list_of_locations = list_of_locations.add_position(site, filling == 1)
535+
536+
return list_of_locations
537+
538+
def figure(
539+
self,
540+
fig_kwargs=None,
541+
capabilities: Optional[QuEraCapabilities] = None,
542+
**assignments,
543+
):
544+
return self._compile_to_list(capabilities).figure(fig_kwargs)
545+
546+
def show(self, **assignments) -> None:
547+
display_ir(self, assignments)
548+
520549

521550
@dataclass(init=False)
522551
class ParallelRegisterInfo:

tests/test_lattice.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1+
from decimal import Decimal
12
import bloqade.ir as ir
2-
from bloqade.ir.location import ListOfLocations, AtomArrangement
3+
from bloqade.ir.location import ListOfLocations, AtomArrangement, ParallelRegister
34
from bloqade.ir.location import Square
45
from bloqade.constants import RB_C6
56
from bloqade import cast
67
import pytest
78
import numpy as np
89

10+
from bloqade.submission.capabilities import get_capabilities
11+
912

1013
def test_rydberg_interactions():
1114
geometry = ListOfLocations([(0, 0), (1, 0), (0, 1), (1, 1)]).scale(5.0)
@@ -113,3 +116,18 @@ def test_internal_base_listofloc():
113116

114117
with pytest.raises(NotImplementedError):
115118
lattice.n_dims
119+
120+
121+
def test_parallel_register():
122+
lat = ListOfLocations([(0, 0)])
123+
reg = ParallelRegister(lat, cast(5))
124+
125+
capabilities = get_capabilities()
126+
capabilities.capabilities.lattice.area.width = Decimal("1e-5")
127+
capabilities.capabilities.lattice.area.height = Decimal("1e-5")
128+
129+
list_of_locations = reg._compile_to_list(capabilities)
130+
expected = ListOfLocations().add_position(
131+
[(0, 0), (0, 5), (0, 10), (5, 0), (5, 5), (5, 10), (10, 0), (10, 5), (10, 10)]
132+
)
133+
assert set(expected.enumerate()) == set(list_of_locations.enumerate())

0 commit comments

Comments
 (0)