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

Ring geometry#

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

Square lattice#

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

Triangular lattice#

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

Hexagonal lattice#

qhexagon = qse.lattices.hexagonal(1, repeats_x=5, repeats_y=5)
qhexagon.draw(radius="nearest", show_labels=True)
../_images/4e7fe662d4c66a6746bfdf9d600df670b5f5509d462281893c005fc29afc6d9d.png
del qhexagon[[0, 49]]
qhexagon.draw(radius="nearest")
../_images/3bcb7a9560f262e93d77ac9f3fdf77a9934d2278c8041c1597dd13fea3e2fae5.png

Kagome lattice#

qkagome = qse.lattices.kagome(1, repeats_x=5, repeats_y=5)
qkagome.set_centroid(0.0)
qkagome.draw(radius=3)
../_images/71ed7b2d801977060479e1475e3fb8c0a68a1588942e237793494a29e7b27ced.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/e27e7598bc4f006afeee72478be2446ab029bd6b4ea689583d55cfc815e05f5c.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/7dc159423da46738bbebdb496bff664abf797f116bef402bd67acde1bf203ed3.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/85048c0cc6872b33fe4210de3104174b08c08b0c06b5ca2330c4a3db241b6a5b.png

Version#

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