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/bdefa90b89d1c030b45ff950bea69f9681a298ad91c854653de135f8ee57c087.png

Ring geometry#

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

Square lattice#

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

Triangular lattice#

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

Hexagonal lattice#

qhexagon = qse.lattices.hexagonal(1, repeats_x=5, repeats_y=5)
qhexagon.draw(radius="nearest", show_labels=True)
../_images/88614f8cbbe658b870ad28b1ade5fe5650a106e99ac322cdbff320e7091abdb0.png
del qhexagon[[0, 49]]
qhexagon.draw(radius="nearest")
../_images/20c84d8b737df98183b4700dc8f2ad51c638166a38960c764ba821f7b69394bd.png

Kagome lattice#

qkagome = qse.lattices.kagome(1, repeats_x=5, repeats_y=5)
qkagome.set_centroid(0.0)
qkagome.draw(radius=3)
../_images/98c769c7f0725b8e63d1964e8f407827b325bfea7fafb21cdacdc1d4277774a9.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/1731ecdcf7094110cb8497238ab403058b7a091dda26d6fadeb46435ed850952.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/1dcaaeb479dc21d24815ae813fdf9c238c471c2b41070f759623111a6b15000c.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/96ddba9ee86bb7f7a776a632b6a34c2f0dd1ec49a3ed1e99667f3ba9237323f4.png

Version#

qse.utils.print_environment()
Python version: 3.12.13
qse version: 1.1.13