Atom arrangement
AtomArrangement
AtomArrangement(parent: Optional[Builder] = None)
Bases: ProgramStart
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/builder/base.py
10 11 12 13 14 |
|
n_atoms
property
n_atoms: int
number of atoms (filled sites) in the register.
n_dims
property
n_dims: int
number of dimensions in the register.
n_sites
property
n_sites: int
number of sites in the register.
n_vacant
property
n_vacant: int
number of vacant sites in the register.
add_position
add_position(
position: Union[
PositionArray,
List[Tuple[ScalarType, ScalarType]],
Tuple[ScalarType, ScalarType],
],
filling: Optional[
Union[BoolArray, List[bool], bool]
] = None,
) -> ListOfLocations
Add a position or multiple positions to a pre-existing geometry.
add_position
is capable of accepting:
- A single tuple for one atom coordinate: (1.0, 2.5)
- A list of tuples: `[(0.0, 1.0), (2.0,1.5), etc.]
- A numpy array of shape (N, 2) where N is the number of atoms
You may also intersperse variables anywhere a value may be present.
You can also pass in an optional argument which determines the atom "filling" (whether or not at a specified coordinate an atom should be present).
Usage Example:
# single coordinate
>>> reg = start.add_position((0,0))
# you may chain add_position calls
>>> reg_plus_two = reg.add_position([(2,2),(5.0, 2.1)])
# you can add variables anywhere a value may be present
>>> reg_with_var = reg_plus_two.add_position(("x", "y"))
# and specify your atom fillings
>>> reg_with_filling = reg_with_var.add_position([(3.1, 0.0), (4.1, 2.2)],
[True, False])
# alternatively you could use one boolean to specify
# all coordinates should be empty/filled
>>> reg_with_more_filling = reg_with_filling.add_positions([(3.1, 2.9),
(5.2, 2.2)], False)
- Next possible steps are:
- Continuing to build your geometry via:
...add_position(positions).add_position(positions)
: to add more positions...add_position(positions).apply_defect_count(n_defects)
: to randomly drop out n_atoms...add_position(positions).apply_defect_density(defect_probability)
: to drop out atoms with a certain probability...add_position(positions).scale(scale)
: to scale the geometry
- Targeting a level coupling once you're done with the atom geometry:
...add_position(positions).rydberg
: to specify Rydberg coupling...add_position(positions).hyperfine
: to specify Hyperfine coupling
- Visualizing your atom geometry:
...add_position(positions).show()
: shows your geometry in your web browser
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 |
|
apply_defect_count
apply_defect_count(
n_defects: int, rng: Generator = np.random.default_rng()
)
Drop n_defects
atoms from the geometry randomly. Internally this occurs
by setting certain sites to have a SiteFilling set to false indicating
no atom is present at the coordinate.
A default numpy-based Random Number Generator is used but you can explicitly override this by passing in your own.
Usage Example:
>>> from bloqade.analog.atom_arrangement import Chain
>>> import numpy as np
# set a custom seed for a numpy-based RNG
>>> custom_rng = np.random.default_rng(888)
# randomly remove two atoms from the geometry
>>> reg = Chain(11).apply_defect_count(2, custom_rng)
# you may also chain apply_defect_count calls
>>> reg.apply_defect_count(2, custom_rng)
# you can also use apply_defect_count on custom geometries
>>> from bloqade import start
>>> start.add_position([(0,0), (1,1)]).apply_defect_count(1, custom_rng)
- Next possible steps are:
- Continuing to build your geometry via:
...apply_defect_count(defect_counts).add_position(positions)
: to add more positions...apply_defect_count(defect_counts) .apply_defect_count(n_defects)
: to randomly drop out n_atoms...apply_defect_count(defect_counts) .apply_defect_density(defect_probability)
: to drop out atoms with a certain probability...apply_defect_count(defect_counts).scale(scale)
: to scale the geometry
- Targeting a level coupling once you're done with the atom geometry:
...apply_defect_count(defect_counts).rydberg
: to specify Rydberg coupling...apply_defect_count(defect_counts).hyperfine
: to specify Hyperfine coupling
- Visualizing your atom geometry:
...apply_defect_count(defect_counts).show()
: shows your geometry in your web browser
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 |
|
apply_defect_density
apply_defect_density(
defect_probability: float,
rng: Generator = np.random.default_rng(),
)
Drop atoms randomly with defect_probability
probability (range of 0 to 1).
Internally this occurs by setting certain sites to have a SiteFilling
set to false indicating no atom is present at the coordinate.
A default numpy-based Random Number Generator is used but you can explicitly override this by passing in your own.
Usage Example:
>>> from bloqade.analog.atom_arrangement import Chain
>>> import numpy as np
# set a custom seed for a numpy-based RNG
>>> custom_rng = np.random.default_rng(888)
# randomly remove two atoms from the geometry
>>> reg = Chain(11).apply_defect_density(0.2, custom_rng)
# you may also chain apply_defect_density calls
>>> reg.apply_defect_count(0.1, custom_rng)
# you can also use apply_defect_density on custom geometries
>>> from bloqade import start
>>> start.add_position([(0,0), (1,1)])
.apply_defect_density(0.5, custom_rng)
- Next possible steps are:
- Continuing to build your geometry via:
...apply_defect_count(defect_counts).add_position(positions)
: to add more positions...apply_defect_count(defect_counts).apply_defect_count(n_defects)
: to randomly drop out n_atoms...apply_defect_count(defect_counts) .apply_defect_density(defect_probability)
: to drop out atoms with a certain probability...apply_defect_count(defect_counts).scale(scale)
: to scale the geometry
- Targeting a level coupling once you're done with the atom geometry:
...apply_defect_count(defect_counts).rydberg
: to specify Rydberg coupling...apply_defect_count(defect_counts).hyperfine
: to specify Hyperfine coupling
- Visualizing your atom geometry:
...apply_defect_count(defect_counts).show()
: shows your geometry in your web browser
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 |
|
enumerate
enumerate() -> Generator[LocationInfo, None, None]
enumerate all locations in the register.
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
128 129 130 |
|
figure
figure(fig_kwargs=None, **assignments)
obtain a figure object from the atom arrangement.
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
132 133 134 |
|
rydberg_interaction
rydberg_interaction(**assignments) -> NDArray
calculate the Rydberg interaction matrix.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
**assignments
|
the values to assign to the variables in the register. |
{}
|
Returns:
Name | Type | Description |
---|---|---|
NDArray |
NDArray
|
the Rydberg interaction matrix in the lower triangular form. |
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
|
scale
scale(scale: ScalarType)
Scale the geometry of your atoms.
Usage Example:
>>> reg = start.add_position([(0,0), (1,1)])
# atom positions are now (0,0), (2,2)
>>> new_reg = reg.scale(2)
# you may also use scale on pre-defined geometries
>>> from bloqade.analog.atom_arrangement import Chain
# atoms in the chain will now be 2 um apart versus
# the default 1 um
>>> Chain(11).scale(2)
- Next possible steps are:
- Continuing to build your geometry via:
...add_position(positions).add_position(positions)
: to add more positions...add_position(positions).apply_defect_count(n_defects)
: to randomly drop out n_atoms...add_position(positions).apply_defect_density(defect_probability)
: to drop out atoms with a certain probability...add_position(positions).scale(scale)
: to scale the geometry
- Targeting a level coupling once you're done with the atom geometry:
...add_position(positions).rydberg
: to specify Rydberg coupling...add_position(positions).hyperfine
: to specify Hyperfine coupling
- Visualizing your atom geometry:
...add_position(positions).show()
: shows your geometry in your web browser
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
|
show
show(**assignments) -> None
Display the current program being defined with the given arguments and batch ID.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
*args
|
Additional arguments for display. |
()
|
|
batch_id
|
int
|
The batch ID to be displayed. Defaults to 0. |
0
|
Note
This method uses the display_builder
function to render the builder's state.
Example:
>>> class MyBuilder(Show):
... pass
>>> builder = MyBuilder()
>>> builder.show()
>>> builder.show(batch_id=1)
>>> builder.show('arg1', 'arg2', batch_id=2)
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
136 137 |
|
Chain
Chain(
L: int,
*,
lattice_spacing: ScalarType = 1.0,
vertical_chain: bool = False
)
Bases: BoundedBravais
Chain lattice.
- 1D lattice
- primitive (cell) vector(s)
- a1 = (1,0).
- unit cell (1 atom(s))
- loc (0,0)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
L
|
int
|
number of sites in the chain |
required |
lattice_spacing
|
(Scalar, Real)
|
lattice spacing. Defaults to 1.0. |
1.0
|
- Possible Next:
continue with
.
to see possible next step in auto-prompt supported setting (IPython, IDE ...)
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/bravais.py
183 184 185 186 187 188 189 190 |
|
Honeycomb
Honeycomb(
L1: int,
L2: Optional[int] = None,
*,
lattice_spacing: ScalarType = 1.0
)
Bases: BoundedBravais
Honeycomb lattice.
- 2D lattice
- primitive (cell) vector(s)
- a1 = (1, 0)
- a2 = (1/2, sqrt(3)/2)
- unit cell (2 atom(s))
- loc1 (0, 0)
- loc2 (1/2, 1/(2*sqrt(3))
Parameters:
Name | Type | Description | Default |
---|---|---|---|
L1
|
int
|
number of unit cells in linear direction. n_atoms = L1 * L1 * 2. |
required |
L2
|
Optional[int]
|
number of unit cells in direction a2. n_atoms = L1 * L2 * 2, default is L1. |
None
|
lattice_spacing
|
(Scalar, Real)
|
lattice spacing. Defaults to 1.0. |
1.0
|
- Possible Next:
continue with
.
to see possible next step in auto-prompt supported setting (IPython, IDE ...)
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/bravais.py
420 421 422 423 424 425 426 427 428 429 430 431 |
|
Kagome
Kagome(
L1: int,
L2: Optional[int] = None,
*,
lattice_spacing: ScalarType = 1.0
)
Bases: BoundedBravais
Kagome lattice.
- 2D lattice
- primitive (cell) vector(s)
- a1 = (1, 0)
- a2 = (1/2, sqrt(3)/2)
- unit cell (3 atom(s))
- loc1 (0, 0)
- loc2 (0.5, 0)
- loc3 (0.25 ,0.25sqrt(3))
Parameters:
Name | Type | Description | Default |
---|---|---|---|
L1
|
int
|
number of sites in linear direction. n_atoms = 3 * L1 * L1. |
required |
L2
|
Optional[int]
|
number of unit cells along a2 direction, n_atoms = 3 * L1 * L2, default is L1. |
None
|
lattice_spacing
|
(Scalar, Real)
|
lattice spacing. Defaults to 1.0. |
1.0
|
- Possible Next:
continue with
.
to see possible next step in auto-prompt supported setting (IPython, IDE ...)
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/bravais.py
589 590 591 592 593 594 595 596 597 598 599 |
|
Lieb
Lieb(
L1: int,
L2: Optional[int] = None,
*,
lattice_spacing: ScalarType = 1.0
)
Bases: BoundedBravais
Lieb lattice.
- 2D lattice
- primitive (cell) vector(s)
- a1 = (1, 0)
- a2 = (0, 1)
- unit cell (3 atom(s))
- loc1 (0, 0)
- loc2 (0.5, 0)
- loc3 (0 ,0.5)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
L1
|
int
|
number of unit cells in linear direction. n_atoms = 3* L1 * L1. |
required |
L2
|
Optional[int]
|
number of unit cells along a2 direction, n_atoms = 3 * L1 * L2, default is L1. |
None
|
lattice_spacing
|
(Scalar, Real)
|
lattice spacing. Defaults to 1.0. |
1.0
|
- Possible Next:
continue with
.
to see possible next step in auto-prompt supported setting (IPython, IDE ...)
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/bravais.py
534 535 536 537 538 539 540 541 542 |
|
ListOfLocations
ListOfLocations(
location_list: List[
Union[LocationInfo, Tuple[ScalarType, ScalarType]]
] = [],
)
Bases: AtomArrangement
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 |
|
n_atoms
property
n_atoms
number of atoms (filled sites) in the register.
n_dims
property
n_dims
number of dimensions in the register.
n_sites
property
n_sites
number of sites in the register.
n_vacant
property
n_vacant
number of vacant sites in the register.
enumerate
enumerate()
enumerate all locations in the register.
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/location.py
661 662 |
|
Rectangular
Rectangular(
width: int,
height: int,
*,
lattice_spacing_x: ScalarType = 1.0,
lattice_spacing_y: ScalarType = 1.0
)
Bases: BoundedBravais
Rectangular lattice.
- 2D lattice
- primitive (cell) vector(s)
- a1 = (1,0)
- a2 = (0,1)
- unit cell (1 atom(s))
- loc (0,0)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
width
|
int
|
number of sites in x direction. |
required |
height
|
int
|
number of sites in y direction. |
required |
lattice_spacing_x
|
(Scalar, Real)
|
lattice spacing. Defaults to 1.0. |
1.0
|
lattice_spacing_y
|
(Scalar, Real)
|
lattice spacing in y direction. optional. |
1.0
|
- Possible Next:
continue with
.
to see possible next step in auto-prompt supported setting (IPython, IDE ...)
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/bravais.py
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 |
|
Square
Square(
L1: int,
L2: Optional[int] = None,
*,
lattice_spacing: ScalarType = 1.0
)
Bases: BoundedBravais
Square lattice.
- 2D lattice
- primitive (cell) vector(s)
- a1 = (1,0)
- a2 = (0,1)
- unit cell (1 atom(s))
- loc (0,0)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
L1
|
int
|
number of sites in linear direction. n_atoms = L1 * L1. |
required |
L2
|
Optional[int]
|
number of sites in direction a2. n_atoms = L1 * L2, default is L1 |
None
|
lattice_spacing
|
(Scalar, Real)
|
lattice spacing. Defaults to 1.0. |
1.0
|
- Possible Next:
continue with
.
to see possible next step in auto-prompt supported setting (IPython, IDE ...)
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/bravais.py
240 241 242 243 244 245 246 247 248 249 |
|
Triangular
Triangular(
L1: int,
L2: Optional[int] = None,
*,
lattice_spacing: ScalarType = 1.0
)
Bases: BoundedBravais
Triangular lattice.
- 2D lattice
- primitive (cell) vector(s)
- a1 = (1, 0)
- a2 = (1/2, sqrt(3)/2)
- unit cell (1 atom(s))
- loc (0, 0)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
L
|
int
|
number of sites in linear direction. n_atoms = L * L. |
required |
L2
|
Optional[int]
|
number of sites along a2 direction, n_atoms = L1 * L2, default is L1. |
None
|
lattice_spacing
|
(Scalar, Real)
|
lattice spacing. Defaults to 1.0. |
1.0
|
- Possible Next:
continue with
.
to see possible next step in auto-prompt supported setting (IPython, IDE ...)
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/ir/location/bravais.py
477 478 479 480 481 482 483 484 485 486 487 |
|