Index
start module-attribute
¶
A Program starting point, alias of empty [ListOfLocations
][bloqade.ir.location.list.ListOfLocations].
- Next possible steps to build your program are:
- Specify which level coupling to address with:
- continue/start building your geometry with:
start.add_position()
: to add atom(s) to current register. It will accept:- A single coordinate, represented as a tuple (e.g.
(5,6)
) with a value that can either be:- integers:
(5,6)
- floats:
(5.1, 2.5)
- strings (for later variable assignment):
("x", "y")
Scalar
objects:(2*cast("x"), 5+cast("y"))
- integers:
- A list of coordinates, represented as a list of types mentioned previously.
- A numpy array with shape (n, 2) where n is the total number of atoms
- A single coordinate, represented as a tuple (e.g.
AtomArrangement ¶
Bases: ProgramStart
Source code in src/bloqade/builder/base.py
add_position ¶
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 src/bloqade/ir/location/location.py
apply_defect_count ¶
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.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 src/bloqade/ir/location/location.py
apply_defect_density ¶
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.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 src/bloqade/ir/location/location.py
enumerate ¶
figure ¶
rydberg_interaction ¶
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 src/bloqade/ir/location/location.py
scale ¶
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.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 src/bloqade/ir/location/location.py
BoundedBravais ¶
Bases: AtomArrangement
Source code in src/bloqade/builder/base.py
__match_args__ class-attribute
instance-attribute
¶
Base classe for Bravais lattices [AtomArrangement
][bloqade.ir.location.base.AtomArrangement].
n_dims property
¶
dimension of the lattice
Returns:
Name | Type | Description |
---|---|---|
int | dimension of the lattice |
coordinates ¶
calculate the coordinates of a cell in the lattice given the cell index.
Source code in src/bloqade/ir/location/bravais.py
scale ¶
Scale the current location with a factor.
(x,y) -> factor*(x,y)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
factor | str | Real | Decimal | Scalar | scale factor | required |
Returns:
Name | Type | Description |
---|---|---|
BoundedBravais | BoundedBravais | The lattice with the scaled locations |
Source code in src/bloqade/ir/location/bravais.py
Chain ¶
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 src/bloqade/ir/location/bravais.py
Honeycomb ¶
Bases: BoundedBravais
Honeycomb lattice.
- 2D lattice
- primitive (cell) vector(s)
- a1 = (1, 0)
- a2 = (½, sqrt(3)/2)
- unit cell (2 atom(s))
- loc1 (0, 0)
- loc2 (½, 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 src/bloqade/ir/location/bravais.py
Kagome ¶
Bases: BoundedBravais
Kagome lattice.
- 2D lattice
- primitive (cell) vector(s)
- a1 = (1, 0)
- a2 = (½, 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 src/bloqade/ir/location/bravais.py
Lieb ¶
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 src/bloqade/ir/location/bravais.py
Rectangular ¶
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 src/bloqade/ir/location/bravais.py
Square ¶
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 src/bloqade/ir/location/bravais.py
Triangular ¶
Bases: BoundedBravais
Triangular lattice.
- 2D lattice
- primitive (cell) vector(s)
- a1 = (1, 0)
- a2 = (½, 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 ...)