netket.graph.space_group.SpaceGroup#

class netket.graph.space_group.SpaceGroup[source]#

Bases: PermutationGroup

Class to handle the space group symmetries of a Lattice.

Can be used as a PermutationGroup representing the action of a space group on a Lattice. The space group is generated as the semidirect product of the translation group of the lattice and a geometrical PointGroup given as a constructor argument.

Also generates PermutationGroup representations of

  • the supplied point group,

  • its rotational subgroup (i.e. point group symmetries with determinant +1)

  • the translation group of the lattice

as well as space group irreps for symmetrising wave functions.

Inheritance
Inheritance diagram of netket.graph.space_group.SpaceGroup
__init__(*args, __precompute_cached_properties=False, __skip_preprocess=False, **kwargs)#

Constructs the space group generated by the translation symmetries of the lattice and a given point group.

Parameters:
  • lattice – Lattice The lattice on which the space group is to act.

  • point_group – PointGroup The geometrical point group underlying the space group.

Attributes
character_table_by_class#

Calculates the character table using Burnside’s algorithm.

Each row of the output lists the characters of one irrep in the order the conjugacy classes are listed in conjugacy_classes.

Assumes that Identity() == self[0], if not, the sign of some characters may be flipped. The irreps are sorted by dimension.

conjugacy_classes#

The conjugacy classes of the group.

Returns:

The three arrays

  • classes: a boolean array, each row indicating the elements that belong to one conjugacy class

  • representatives: the lowest-indexed member of each conjugacy class

  • inverse: the conjugacy class index of every group element

conjugacy_table#

The conjugacy table of the group.

Assuming the definitions

g = self[idx_g]
h = self[idx_h]

self[self.conjugacy_table[idx_g,idx_h]] corresponds to \(h^{-1}gh\).

inverse#

Indices of the inverse of each element.

Assuming the definitions

g = self[idx_g]
h = self[self.inverse[idx_g]]

gh = product(g, h) is equivalent to Identity()

point_group_#

Returns the internally stored point group as a point group, instead of the one stored as a permutation group.

Type:

Deprecated

product_table#

A table of indices corresponding to \(g^{-1} h\) over the group.

Assuming the definitions

g = self[idx_g]
h = self[idx_h]
idx_u = self.product_table[idx_g, idx_h]

self[idx_u] corresponds to \(u = g^{-1} h\) .

Computed more efficiently than for a generic PermutationGroup exploiting the semidirect product structure of space groups.

rotation_group#

The group of rotations (i.e. point group symmetries with determinant +1) as a PermutationGroup acting on the sites of lattice.

Group elements are listed in the order they appear in _point_group.

shape#

Tuple (<# of group elements>, <degree>).

Equivalent to self.to_array().shape.

space_group#

Deprecated. Returns self.

lattice: Lattice#

The lattice underlying the space group.

point_group: PermutationGroup#

The point group as a PermutationGroup acting on the sites of lattice.

Group elements are listed in the order they appear in _point_group. Computed from _point_group upon construction, must not be changed after.

full_translation_group: TranslationGroup#
degree: int#

Number of elements the permutations act on.

elems: list[Element]#

List of group elements.

Methods
__call__(initial)[source]#

Apply all group elements to all entries of initial along the last axis.

apply_to_id(x)[source]#

Returns the image of indices x under all permutations

Parameters:

x (ndarray | Array)

character_table(multiplier=None)[source]#

Calculates the character table using Burnside’s algorithm.

Parameters:

multiplier (Union[ndarray, Array, None]) – (optional) Schur multiplier

Return type:

ndarray

Returns:

a matrix of all linear irrep characters (if multiplier is None) or projective irrep characters with the given multiplier, sorted by dimension.

Each row of lists the characters of all group elements for one irrep, i.e. self.character_table()[i,g] gives \(\chi_i(g)\).

It is assumed that Identity() == self[0]. If not, the sign of some characters may be flipped and the sorting by dimension will be wrong.

character_table_readable(multiplier=None, full=False)[source]#

Returns a conventional rendering of the character table.

Parameters:
  • multiplier (Union[ndarray, Array, None]) – (optional) Schur multiplier

  • full (bool) – whether the character table for all group elements (True) or one representative per conjugacy class (False, default)

Return type:

tuple[list[str], Union[ndarray, Array]]

Returns:

A tuple containing a list of strings and an array

  • classes: a text description of a representative of each conjugacy class (or each group element) as a list

  • characters: a matrix, each row of which lists the characters of one irrep

check_multiplier(multiplier, rtol=1e-08, atol=0)[source]#

Checks the associativity constraint of Schur multipliers.

\[\alpha(x, y) \alpha(xy, z) = \alpha(x, yz) \alpha(y, z).\]
Parameters:
  • multiplier (Union[ndarray, Array]) – the array of Schur multipliers \(\alpha(x,y)\)

  • rtol – relative tolerance

  • atol – absolute tolerance

Return type:

bool

Returns:

whether multiplier is a valid Schur multiplier up to the given tolerance

Raises:

ValueError – if the shape of multiplier does not match the size of the group

irrep_matrices()[source]#

Returns matrices that realise all irreps of the group.

Return type:

list[Union[ndarray, Array]]

Returns:

A list of 3D arrays such that self.irrep_matrices()[i][g] contains the representation of self[g] consistent with the characters in self.character_table()[i].

little_group(*k)[source]#

Returns the little co-group corresponding to wave vector \(\vec{k}\). This is the subgroup of the point group that leaves \(\vec{k}\) invariant.

Parameters:

k (Union[ndarray, Array]) – the wave vector in Cartesian axes

Return type:

PointGroup

Returns:

the little co-group

little_group_irreps_readable(*k, full=False)[source]#

Returns a conventional rendering of little-group irrep characters.

This differs from little_group(k).character_table_readable() in that nontrivial Schur multipliers for nonsymmorphic space group are automatically taken into account.

Parameters:
  • k (Union[ndarray, Array]) – the wave vector in Cartesian axes

  • full (bool) – whether the character table for all group elements (True) or one representative per conjugacy class (False, default)

Returns:

A tuple containing a list of strings and an array

  • classes: a text description of a representative of each conjugacy class (or each element) of the little group as a list

  • characters: a matrix, each row of which lists the characters of one irrep

little_group_multipliers(*k)[source]#

Computes the Schur multiplier associated with the little group given the translations associated with its elements.

The mutlipliers are given by (Bradney & Cracknell, eqs. 3.7.11-14)

\[ \begin{align}\begin{aligned}\mu(S_i, S_j) &= \exp(-i g_i \cdot w_j)\\g_i &= S_i^{-1} k - k\end{aligned}\end{align} \]

and \(w_j\) is the translation associated with point-group symmetry \(S_i\).

Parameters:

k (Union[ndarray, Array]) – the wave vector in Cartesian axes

Return type:

ndarray | None

Returns:

A square array of the \(\mu(S_i, S_j)\).

If all multipliers are +1, None is returned instead: this signals to character_table() etc. that linear (not projective) representations are required.

one_arm_irreps(*k)[source]#

Returns the portion of the character table of the full space group corresponding to the star of the wave vector \(\vec{k}\), projected onto \(\vec{k}\) itself.

Parameters:

k (Union[ndarray, Array]) – the wave vector in Cartesian axes

Return type:

Union[ndarray, Array]

Returns:

An array CT listing the projected characters for all irreps of the space group defined on the star of \(\vec{k}\).

CT[i] returns the irrep corresponding to the little-group irrep listed in row #i by little_group_irreps_readable().

CT[i,j] gives the character of self[j] in the same.

projective_characters_by_class(multiplier)[source]#

Calculates the character table of projective representations with a given Schur multiplier α using a modified Burnside algorithm.

Parameters:

multiplier (Union[ndarray, Array, None]) – the unitary Schur multiplier. If unspecified, computes linear representation characters.

Return type:

tuple[ndarray, ndarray]

Returns:

  • characters_by_class

    a 2D array, each row containing the characters of a representative element of each conjugacy class in one projective irrep with the given multiplier.

  • class_factors

    a 1D array listing the “class factors” of each element of the group. The character of each element is the product of the character of the class representative with this class factor. (Only returned if multiplier is not None.)

Note: the algorithm and the definitions above are explained in more detail in https://arxiv.org/abs/2505.14790.

remove_duplicates(*, return_inverse=False)[source]#

Returns a new PermutationGroup with duplicate elements (that is, elements which represent identical permutations) removed.

Parameters:

return_inverse – If True, also return indices to reconstruct the original group from the result.

Return type:

PermutationGroup

Returns:

The permutation group with duplicate elements removed. If return_inverse==True, it also returns the indices needed to reconstruct the original group from the result.

replace(**updates)[source]#

Returns a new object replacing the specified fields with new values.

space_group_irreps(*k)[source]#

Returns the portion of the character table of the full space group corresponding to the star of the wave vector \(\vec{k}\).

Parameters:

k (Union[ndarray, Array]) – the wave vector in Cartesian axes

Return type:

Union[ndarray, Array]

Returns:

An array CT listing the characters for all irreps of the space group defined on the star of \(\vec{k}\).

CT[i] returns the irrep corresponding to the little-group irrep listed in row #i by little_group_irreps_readable().

CT[i,j] gives the character of self[j] in the same.

to_array()[source]#

Convert the abstract group operations to an array of permutation indices.

It returns a matrix where the i-th row contains the indices corresponding to the i-th group element. That is, self.to_array()[i, j] is \(g_i^{-1}(j)\). Moreover,

G = # this permutation group...
V = np.arange(G.degree)
assert np.all(G(V) == V[..., G.to_array()])
Return type:

Union[ndarray, Array]

Returns:

A matrix that can be used to index arrays in the computational basis in order to obtain their permutations.

translation_group(axes=None)[source]#

The group of valid translations of lattice as a TranslationGroup acting on the sites of the same.

Return type:

TranslationGroup

Parameters:

axes (int | Sequence[int] | None)