Skip to content

Index

start module-attribute

start = ListOfLocations()

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:
    • start.rydberg: for Rydberg Level coupling
    • start.hyperfine: for Hyperfine Level coupling
    • LOCKOUT: You cannot add atoms to your geometry after specifying level coupling.
  • 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"))
      • 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

AtomArrangement

Bases: ProgramStart, TransformTrait

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 src/bloqade/ir/location/base.py
def enumerate(self) -> Generator[LocationInfo, None, None]:
    """enumerate all locations in the register."""
    raise NotImplementedError

figure

figure(fig_kwargs=None, **assignments)

obtain a figure object from the atom arrangement.

Source code in src/bloqade/ir/location/base.py
def figure(self, fig_kwargs=None, **assignments):
    """obtain a figure object from the atom arrangement."""
    return get_atom_arrangement_figure(self, fig_kwargs, **assignments)

BoundedBravais

BoundedBravais(*shape, lattice_spacing=1.0)

Bases: AtomArrangement

Source code in src/bloqade/ir/location/bravais.py
@beartype
def __init__(self, *shape: int, lattice_spacing: ScalarType = 1.0):
    self.shape = shape
    self.lattice_spacing = cast(lattice_spacing)
    self.__n_atoms = None
    self.__n_dims = None
    super().__init__()

__match_args__ class-attribute instance-attribute

__match_args__ = ('shape', 'lattice_spacing')

n_dims property

n_dims

dimension of the lattice

Returns:

Name Type Description
int

dimension of the lattice

coordinates

coordinates(index)

calculate the coordinates of a cell in the lattice given the cell index.

Source code in src/bloqade/ir/location/bravais.py
@beartype
def coordinates(self, index: List[int]) -> NDArray:
    """calculate the coordinates of a cell in the lattice
    given the cell index.
    """
    # damn! this is like stone age broadcasting
    vectors = np.array(self.cell_vectors())
    index = np.array(index)
    pos = np.sum(vectors.T * index, axis=1)
    return pos + np.array(self.cell_atoms())

scale

scale(factor)

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
@beartype
def scale(self, factor: ScalarType) -> "BoundedBravais":
    """Scale the current location with a factor.

    (x,y) -> factor*(x,y)

    Args:
        factor (str | Real | Decimal | Scalar): scale factor

    Returns:
        BoundedBravais: The lattice with the scaled locations
    """
    factor = cast(factor)
    obj = self.__new__(type(self))
    for f in fields(self):
        if f.name == "lattice_spacing":
            obj.lattice_spacing = factor * self.lattice_spacing
        else:
            setattr(obj, f.name, getattr(self, f.name))
    return obj

Chain

Chain(L, lattice_spacing=1.0, vertical_chain=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 src/bloqade/ir/location/bravais.py
@beartype
def __init__(
    self, L: int, lattice_spacing: ScalarType = 1.0, vertical_chain: bool = False
):
    self.vertical = vertical_chain
    super().__init__(L, lattice_spacing=lattice_spacing)

Honeycomb

Honeycomb(L, lattice_spacing=1.0)

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
L int

number of sites in linear direction. n_atoms = L * L * 2.

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
@beartype
def __init__(self, L: int, lattice_spacing: ScalarType = 1.0):
    super().__init__(L, L, lattice_spacing=lattice_spacing)

Kagome

Kagome(L, lattice_spacing=1.0)

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
L int

number of sites in linear direction. n_atoms = L * L.

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
@beartype
def __init__(self, L: int, lattice_spacing: ScalarType = 1.0):
    super().__init__(L, L, lattice_spacing=lattice_spacing)

Lieb

Lieb(L, lattice_spacing=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
L int

number of sites in linear direction. n_atoms = L * L.

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
@beartype
def __init__(self, L: int, lattice_spacing: ScalarType = 1.0):
    super().__init__(L, L, lattice_spacing=lattice_spacing)

ParallelRegister

ParallelRegister(register, cluster_spacing)

Bases: ProgramStart

Parallel Register

Source code in src/bloqade/ir/location/base.py
@beartype
def __init__(self, register: AtomArrangement, cluster_spacing: ScalarType):
    self._register = register
    self._cluster_spacing = cast(cluster_spacing)

    if register.n_atoms > 0:
        # calculate bounding box
        # of this register
        location_iter = register.enumerate()
        (x, y) = next(location_iter).position
        x_min = x
        x_max = x
        y_min = y
        y_max = y

        for location_info in location_iter:
            (x, y) = location_info.position
            x_min = x.min(x_min)
            x_max = x.max(x_max)
            y_min = y.min(y_min)
            y_max = y.max(y_max)

        shift_x = (x_max - x_min) + cluster_spacing
        shift_y = (y_max - y_min) + cluster_spacing

        register_locations = [
            list(location_info.position) for location_info in register.enumerate()
        ]
        register_filling = [
            location_info.filling.value for location_info in register.enumerate()
        ]
        shift_vectors = [[shift_x, cast(0)], [cast(0), shift_y]]
    else:
        raise ValueError("No locations to parallelize.")

    self.register_locations = register_locations
    self.register_filling = register_filling
    self.shift_vectors = shift_vectors
    super().__init__(self)

Rectangular

Rectangular(
    width,
    height,
    lattice_spacing_x=1.0,
    lattice_spacing_y=None,
)

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.

None
  • 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
@beartype
def __init__(
    self,
    width: int,
    height: int,
    lattice_spacing_x: ScalarType = 1.0,
    lattice_spacing_y: Optional[ScalarType] = None,
):
    super().__init__(width, height, lattice_spacing=lattice_spacing_x)

    if lattice_spacing_y is None:
        self.ratio = cast(1.0) / cast(lattice_spacing_x)
    else:
        self.ratio = cast(lattice_spacing_y) / cast(lattice_spacing_x)

    super().__init__(width, height, lattice_spacing=lattice_spacing_x)

Square

Square(L, lattice_spacing=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
L int

number of sites in linear direction. n_atoms = L * L.

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
@beartype
def __init__(self, L: int, lattice_spacing: ScalarType = 1.0):
    super().__init__(L, L, lattice_spacing=lattice_spacing)

Triangular

Triangular(L, lattice_spacing=1.0)

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
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
@beartype
def __init__(self, L: int, lattice_spacing: ScalarType = 1.0):
    super().__init__(L, L, lattice_spacing=lattice_spacing)