# netket.graph.Lattice#

class netket.graph.Lattice#

Bases: Graph

A lattice built by periodic arrangement of a given unit cell.

The lattice is represented as a Bravais lattice with (basis_vectors) $$\{a_d\}_{d=1}^D$$ (where $$D = \mathtt{ndim}$$ is the dimension of the lattice) and a unit cell consisting of one or more sites, The positions of those sites within the unit cell can be specified by the site_offsets parameter. The extent is a array where extent[d] specifies the number of times each unit cell is translated along direction $$d$$. The full lattice is then generated by placing a site at each of the points

$R_{rq} = \sum_{d=1}^D r_d a_d + b_q \in \mathbb R^D$

where $$r_d \in \{1, \ldots, \mathtt{extent}[d]\}$$ and $$b_q = \mathtt{site\_offsets}[q]$$. We also refer to $$q$$ as the label of the site within the unit cell.

The lattice class supports three ways of addressing a specific lattice site:

id

An integer index that is used to identify the site in self.edges() and also corresponds to the index of the corresponding site in sequences like self.nodes(), self.positions or self.basis_coords.

positions

Real-space position vector $$R_{rq}$$ as defined above, which is available from positions() and can be resolved into an id via id_from_position().

basis coordinates

where each site is specified by a vector [r1, ..., rD, q] with $$r$$ being the integer vector of length ndim specifying the cell position as multiples of the primitive vectors and the site label $$q$$ giving the number of the site within the unit cell. Basis coordinates are available from basis_coords() and can be resolved into an id via id_from_basis_coords().

Inheritance __init__(basis_vectors, extent, *, pbc=True, site_offsets=None, atoms_coord=None, distance_atol=1e-05, point_group=None, max_neighbor_order=None, custom_edges=None)[source]#

Constructs a new Lattice given its side length and the features of the unit cell.

Parameters:

Examples

Constructs a Kagome lattice with 3 × 3 unit cells:

>>> import numpy as np
>>> from netket.graph import Lattice
>>> # Hexagonal lattice basis
>>> sqrt3 = np.sqrt(3.0)
>>> basis = np.array([
...     [1.0, 0.0],
...     [0.5, sqrt3 / 2.0],
... ])
>>> # Kagome unit cell
>>> cell = np.array([
...     basis / 2.0,
...     basis / 2.0,
...     (basis+basis)/2.0
... ])
>>> g = Lattice(basis_vectors=basis, site_offsets=cell, extent=[3, 3])
>>> print(g.n_nodes)
27
>>> print(g.basis_coords[:6])
[[0 0 0]
[0 0 1]
[0 0 2]
[0 1 0]
[0 1 1]
[0 1 2]]
>>> print(g.positions[:6])
[[0.5        0.        ]
[0.25       0.4330127 ]
[0.75       0.4330127 ]
[1.         0.8660254 ]
[0.75       1.29903811]
[1.25       1.29903811]]


Constructs a rectangular lattice with distinct horizontal and vertical edges:

>>> import numpy as np
>>> from netket.graph import Lattice
>>> basis = np.array([
...     [1.0,0.0],
...     [0.0,0.5],
... ])
>>> custom_edges = [
...     (0, 0, [1.0,0.0], 0),
...     (0, 0, [0.0,0.5], 1),
... ]
>>> g = Lattice(basis_vectors=basis, pbc=False, extent=[4,6],
...     custom_edges=custom_edges)
>>> print(g.n_nodes)
24
>>> print(len(g.edges(filter_color=0)))
18
>>> print(len(g.edges(filter_color=1)))
20

Attributes
atoms_coord#

Deprecated. please use site_offsets instead.

basis_coords#

basis coordinates of all lattice sites

basis_vectors#

Basis vectors of the lattice

coordinates#

Deprecated. please use positions instead.

edge_colors#

Sequence of edge colors, in the order of the edges returned by self.edges.

extent#

Extent of the lattice

n_edges#

The number of edges in the graph.

n_nodes#

The number of nodes (or vertices) in the graph

ndim#

Dimension of the lattice

pbc#

Array of bools such that pbc[d] indicates whether dimension d has periodic boundaries.

positions#

Real-space positions of all lattice sites

site_offsets#

Position offsets of sites in the unit cell

sites#

Sequence of lattice site objects

Methods

List containing the adjacency list of the graph where each node is represented by an integer in [0, n_nodes)

Return type:
atom_label(site_id)[source]#

Deprecated. please use basis_coords[site_id, -1] instead.

Return type:

int

Parameters:

site_id (int) –

automorphisms()#

Symmetry group containing the automorphisms of the graph

Return type:

PermutationGroup

distances()#

List containing the distances between the nodes. The distance between unconnected nodes (no path exists between them) is set to -1

Return type:
draw(ax=None, figsize=None, node_color='#1f78b4', node_size=300, edge_color='k', curvature=0.2, font_size=12, font_color='k')[source]#

Draws the Lattice graph

Parameters:
Returns:

Matplotlib axis object containing the graph’s drawing.

edges(color=None, *, return_color=False, filter_color=None)#

Returns the sequence of edges of the graph.

Parameters:
Return type:
Returns:

A sequence of edges as tuples (i, j) or, if return_color is passed, a sequence of tuples (i, j, c) with c indicating the color of the respective edge.

classmethod from_igraph(graph)#

Creates a new Graph instance from an igraph.Graph instance.

Return type:

Graph

Parameters:

graph (Graph) –

classmethod from_networkx(graph)#

Creates a new Graph instance from a networkx graph.

Return type:

Graph

id_from_basis_coords(basis_coords)[source]#

Return the id for a site at the given basis coordinates. When passed a rank-2 array where each row is a coordinate vector, returns an array of the corresponding ids. Throws an InvalidSiteError if any of the coords do not correspond to a site.

Return type:
Parameters:

basis_coords (ndarray) –

id_from_position(position)[source]#

Returns the id for a site at the given position. When passed a rank-2 array where each row is a position, returns an array of the corresponding ids. Throws an InvalidSiteError if any of the positions do not correspond to a site.

Return type:
Parameters:

position (ndarray) –

is_bipartite()#

True if the graph is bipartite

Return type:

bool

is_connected()#

True if the graph is connected

Return type:

bool

nodes()#

Iterator over the nodes of the graph

Return type:
point_group(point_group=None)[source]#

Returns the action of point_group on the sites of self as a PermutationGroup. If no point_group is specified, uses the point group provided upon construction.

Return type:

PermutationGroup

Parameters:

point_group (Optional[PointGroup]) –

position_from_basis_coords(basis_coords)[source]#

Return the position of the site with given basis coordinates. When passed a rank-2 array where each row is a coordinate vector, this method returns an array of the corresponding positions. Throws an InvalidSiteError if no site is found for any of the coordinates.

Return type:

ndarray

Parameters:

basis_coords (ndarray) –

rotation_group(point_group=None)[source]#

Returns the action of rotations (i.e. symmetries with determinant +1) in point_group on the sites of self as a PermutationGroup. If no point_group is specified, uses the point group provided upon construction.

Return type:

PermutationGroup

Parameters:

point_group (Optional[PointGroup]) –

site_to_coord(site_id)[source]#

Deprecated. please use positions[site_id] instead.

Return type:

ndarray

Parameters:

site_id (int) –

site_to_vector(site_id)[source]#

Deprecated. please use basis_coords[site_id, :-1] instead.

Return type:

ndarray

Parameters:

site_id (int) –

space_group(point_group=None)[source]#

Returns the space group generated by the translation symmetries of self and the elements of point_group as a PermutationGroup acting on the sites of self. If no point_group is specified, uses the point group provided upon construction.

Return type:

PermutationGroup

Parameters:

point_group (Optional[PointGroup]) –

space_group_builder(point_group=None)[source]#

Returns a SpaceGroupBuilder object that represents the spatial symmetries of self.

Parameters:

point_group (Optional[PointGroup]) – a PointGroup object describing the point-group symmetries of self. Optional, if not supplied, the PointGroup object provided at construction is used.

Return type:

SpaceGroupBuilder

Returns:

A SpaceGroupBuilder object that generates PermutationGroups encoding the action of point_group, the translation group of self, and the space group obtained as their semidirect product as permutations of the sites of self. It also yields space group irreps for symmetrising wave functions.

to_igraph()#

Returns a copy of this graph as an igraph.Graph instance.

to_networkx()#

Returns a copy of this graph as an igraph.Graph instance. This method requires networkx to be installed.

to_reciprocal_lattice(ks)[source]#

Converts wave vectors from Cartesian axes to reciprocal lattice vectors.

Parameters:

ks (Union[ndarray, Array]) – wave vectors in Cartesian axes. Multidimensional arrays are accepted, the Cartesian coordinates must form the last dimension.

Return type:
Returns:

The same wave vectors in the reciprocal basis of the simulation box. Valid wave vector components in this basis are integers in (periodic BCs) or zero (in open BCs).

Throws an InvalidWaveVectorError if any of the supplied wave vectors are not reciprocal lattice vectors of the simulation box.

translation_group(dim=None)[source]#

Returns the group of lattice translations of self as a PermutationGroup acting on the sites of self.

Return type:

PermutationGroup

Parameters:

dim (Optional[Union[int, Sequence[int]]]) –

vector_to_coord(vector, label)[source]#

Deprecated. please use position_from_basis_coords([*vector, label]).

Return type:

ndarray

Parameters:
vector_to_site(vector)[source]#

Deprecated. please use id_from_basis_coords([*vector, 0]) instead.

Return type:

int

Parameters:

vector (ndarray) –