Generating Lattices#

We have several functions in the qse.lattices submodule to directly generate known lattices and geometries.

import numpy as np
import qse

Ring geometry#

qring = qse.lattices.ring(spacing=2.0, nqbits=12)
qring.draw(radius="nearest")
../_images/99b4f3fd60824f2824eb205a3f434c0d18c5bcc6173d2d66518c5e6d49719acb.png

Square lattice#

qsquare = qse.lattices.square(1, repeats_x=6, repeats_y=6)
qsquare.set_centroid(0.0)
qsquare.draw(radius=2)
../_images/64a157924dd7b767a29027004f0cd2c4bacb1a3a0ec6f5cec827ec9d288bb30f.png

Triangular lattice#

qtriangle = qse.lattices.triangular(1, repeats_x=6, repeats_y=5)
qtriangle.draw(radius="nearest")
../_images/a977dbb003db63c93302ad0de26003487d034086d8fd6151736d4e196faeed4b.png

Hexagonal lattice#

qhexagon = qse.lattices.hexagonal(1, repeats_x=5, repeats_y=5)
qhexagon.draw(radius="nearest", show_labels=True)
../_images/b99a7ef77317b345df832611ec84ee45345561ee87ec1e8fe2acc07cf6565f40.png
del qhexagon[[0, 49]]
qhexagon.draw(radius="nearest")
../_images/31c2dceb88ef0a356eb003412656f82a42670ba1b8ce352c70e6c88222c97018.png

Kagome lattice#

qkagome = qse.lattices.kagome(1, repeats_x=5, repeats_y=5)
qkagome.set_centroid(0.0)
qkagome.draw(radius=3)
../_images/6590b597693bee2b9bb4ec4aed95a4ccb18bbbc5794084815e18ab39ce32af5c.png

Constructing lattices via lattice vectors#

Rectangluar lattice#

spacing = 1.0
cell = spacing * np.array([[2.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 0.0]])

# qbits object with one qubit at origin
q_unit = qse.Qbits(positions=np.zeros((1, 3)), cell=cell)

# now repeat the pattern to get lattice of desired size
qrectangle = q_unit.repeat((5, 5, 1))
qrectangle.draw(radius=2)
../_images/83809a3db112339afdb4e8379719ff65b41dccd3e7efd3cb6278e16e4fb88c75.png

Simple Cubic lattice#

spacing = 1.0
cell = spacing * np.array([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]])

# qbits object with one qubit at origin
q_unit = qse.Qbits(positions=np.zeros((1, 3)), cell=cell)

# now repeat the pattern to get lattice of desired size
qsquare = q_unit.repeat((5, 5, 5))
qsquare.draw(radius="nearest")
../_images/dd48673702d3052883c317fb63fb51afc2c522398f6dbac6c193af19a1b676ee.png

Some special geometries#

Torus geometry#

qtorus = qse.lattices.torus(n_outer=15, n_inner=15, inner_radius=2.0, outer_radius=6.0)
qtorus.draw(radius=2.0)
../_images/88bfeb7f24eee788737d2a4ea0e6ee667a7b05b7f15ed175cd184346dfdd876e.png

Version#

qse.utils.print_environment()
Python version: 3.12.3
qse version: 0.2.28