Generating Lattices#

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

import numpy as np
import qse

One Dimensional Chain#

qchain = qse.lattices.chain(lattice_spacing=3, repeats=10)
qchain.draw(radius="nearest", equal_aspect=False)
../_images/501768464b0dcb9e36640bc5cc5003dc946503cdbbfe98c2ab1300c8ba341548.png

Ring geometry#

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

Square lattice#

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

Triangular lattice#

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

Hexagonal lattice#

qhexagon = qse.lattices.hexagonal(1, repeats_x=5, repeats_y=5)
qhexagon.draw(radius="nearest", show_labels=True)
../_images/2b0394576942005b0f973bfa032f97d31bf9ff262cabc7771c674418358198de.png
del qhexagon[[0, 49]]
qhexagon.draw(radius="nearest")
../_images/06161137327ee4edbbf0615070f8061b6a2e72d9681ee0d3112cddaf8c97f4ee.png

Kagome lattice#

qkagome = qse.lattices.kagome(1, repeats_x=5, repeats_y=5)
qkagome.set_centroid(0.0)
qkagome.draw(radius=3)
../_images/2c326602983a2301f1c936824205bdc08957b66a02e07e80d6b80f846d95fe23.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/5225f46374a6526cd921ffecd1f489c4677e56a6df1782b629bffc33f46f1f2b.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/7e3499d8aeadeaf3452c9aaac1f9cb42294e02c1608ea6cc48444e3ab63e7ac6.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/280ec325f1479de5cc81f434f46dbabc7c55214295e6d6c218f139df29e73756.png

Version#

qse.utils.print_environment()
Python version: 3.12.12
qse version: 1.0.3