Skip to content

Spin space groups

Nontrivial spin space groups, symmetry operations, and subgroup enumeration.

ssg

NontrivialSpinSpaceGroup dataclass

NontrivialSpinSpaceGroup(invariant_rotations: NDArrayInt, invariant_translations: NDArrayFloat, sublattice: Sublattice, spin_translation_coset: SpinSymmetryOperations, nontrivial_coset: SpinSymmetryOperations, spin_planochiral: SpinPlanochiral, family_sublattice: Sublattice = (lambda: Sublattice(eye(3, dtype=int64)))())

family_k_index property

family_k_index: int

Translation-lattice index of the family group in the input group.

family_sublattice class-attribute instance-attribute

family_sublattice: Sublattice = field(default_factory=lambda: Sublattice(np.eye(3, dtype=np.int64)))

invariant_rotations instance-attribute

invariant_rotations: NDArrayInt

Invariant spatial rotation matrices w.r.t. the input cell.

invariant_translations instance-attribute

invariant_translations: NDArrayFloat

k_index property

k_index: int

Translation-lattice index of the invariant group in the input group.

nontrivial_coset instance-attribute

nontrivial_coset: SpinSymmetryOperations

Nontrivial spin space group

relative_k_index property

relative_k_index: int

Invariant-lattice index relative to the family translation lattice.

spin_planochiral instance-attribute

spin_planochiral: SpinPlanochiral

spin_translation_coset instance-attribute

spin_translation_coset: SpinSymmetryOperations

Nontrivial spin translation group

sublattice instance-attribute

sublattice: Sublattice

t_index property

t_index: int

get_family_space_group_type

get_family_space_group_type(atol: float = 1e-05) -> SpaceGroupType

Space-group type of the family space group G (the spatial parts).

G's coset representatives over its translation lattice are the spatial parts of the full SSG operations, deduplicated by rotation (two operations sharing a rotation differ by a family-lattice translation). The family translation lattice is family_sublattice, so the operations are transformed into that basis before identification.

get_full_operations_and_table

get_full_operations_and_table() -> tuple[SpinSymmetryOperations, NDArrayInt]

get_invariant_space_subgroup_type

get_invariant_space_subgroup_type(atol: float = 1e-05) -> SpaceGroupType

transform_to_parent

transform_to_parent(family_to_parent: Sublattice, *, atol: float = 1e-05) -> NontrivialSpinSpaceGroup

Return this family-basis spin space group in parent coordinates.

family_to_parent maps coordinates from the current family basis to the parent basis. The returned family_sublattice records that map as provenance in the parent basis.

SpinSpaceGroupEnumerator

SpinSpaceGroupEnumerator(prim_rotations: Sequence[Sequence[int]], prim_translations: Sequence[Sequence[float]], *, sublattice: Sublattice | None = None, atol: float = 1e-05)

prim_rotations property

prim_rotations: NDArrayInt

prim_translations property

prim_translations: NDArrayFloat

table property

table: NDArrayInt

Cayley table of prim_rotations.

enumerate_normal_space_subgroups

enumerate_normal_space_subgroups(k_index: int) -> list[NormalSpaceSubgroup]

Enumerate normal subgroups of given space group with klassengleiche index k_index.

Parameters:

Name Type Description Default
k_index int

Index of klassengleiche subgroups

required

enumerate_spin_space_groups

enumerate_spin_space_groups(spin_only_group_type: SpinOnlyGroupType, k_index: int) -> tuple[SpinOnlyGroup, list[tuple[NormalSpaceSubgroup, list[NontrivialSpinSpaceGroup]]]]

Enumerate spin-rotation parts up to O(3), grouped by invariant subgroup.

The operations supplied to this enumerator define one family space group G; this method does not enumerate spatial embeddings of G. For this fixed spatial part, it enumerates compatible spin-rotation parts up to a global change of spin frame in O(3). This method does not apply a spatial-equivalence relation; parent-normalizer reduction is handled downstream.

Parameters:

Name Type Description Default
spin_only_group_type SpinOnlyGroupType

Type of spin-only group to pair with the spatial quotient.

required
k_index int

Klassengleiche index of the invariant space subgroups H normal in G to enumerate.

required

Returns:

Name Type Description
spin_only_group SpinOnlyGroup

Spin-only group shared by every enumerated spin space group.

grouped_spin_space_groups list of tuple

Pairs of an invariant space subgroup H and the spin space group representatives constructed with H as their invariant subgroup. The outer order follows :meth:enumerate_normal_space_subgroups; each inner list follows the enumeration order for its H.

Notes

The grouping lets downstream enumerators act on invariant subgroups before classifying their spin assignments. It does not add a new equivalence relation or change the representative order. For collinear spin-only groups with k_index >= 3, the grouped result is empty.

enumerate_spin_space_groups_with_normal_space_subgroup

enumerate_spin_space_groups_with_normal_space_subgroup(spin_only_group_type: SpinOnlyGroupType, normal_space_subgroup: NormalSpaceSubgroup) -> tuple[SpinOnlyGroup, list[NontrivialSpinSpaceGroup]]

SpinSpaceSubgroupEnumerator

SpinSpaceSubgroupEnumerator(family_space_subgroup: FamilySpaceSubgroup, *, atol: float = 1e-05)

Enumerate SSGs over a family subgroup G' <= G.

SpinSpaceGroupEnumerator supplies compatible spin-rotation parts for the fixed family group G', up to a global spin-frame transformation in O(3). This class additionally uses the inclusion G' <= G carried by FamilySpaceSubgroup. By default it returns representatives under N_G(G') x O(3); callers may disable the N_G(G') conjugacy reduction.

Returned operations are expressed in the translation-lattice basis of G'. Use NontrivialSpinSpaceGroup.transform_to_parent with family_space_subgroup.translation_sublattice when parent coordinates are required.

family_space_subgroup property

family_space_subgroup: FamilySpaceSubgroup

prim_rotations property

prim_rotations: NDArrayInt

prim_translations property

prim_translations: NDArrayFloat

enumerate_spin_space_groups

enumerate_spin_space_groups(spin_only_group_type: SpinOnlyGroupType, k_index: int, *, up_to_parent_normalizer_conjugacy: bool = True) -> tuple[SpinOnlyGroup, list[NontrivialSpinSpaceGroup]]

Enumerate spin space subgroups, optionally modulo N_G(G').

up_to_parent_normalizer_conjugacy=True returns representatives under N_G(G') x O(3). False skips the spatial N_G(G') reduction and returns every fixed-family result; the intrinsic O(3) spin-frame equivalence remains applied.

enumerate_spin_space_groups_by_invariant_subgroup

enumerate_spin_space_groups_by_invariant_subgroup(spin_only_group_type: SpinOnlyGroupType, k_index: int, *, up_to_parent_normalizer_conjugacy: bool = True, invariant_subgroup_filter: Callable[[NormalSpaceSubgroup], bool] | None = None) -> tuple[SpinOnlyGroup, list[tuple[NormalSpaceSubgroup, list[NontrivialSpinSpaceGroup]]]]

Enumerate results grouped by invariant subgroup.

When up_to_parent_normalizer_conjugacy is true, invariant subgroups and their spin-rotation assignments are reduced under the applicable N_G(G') actions. When false, the fixed-family groups are returned without either spatial conjugacy reduction. In both cases, spin frames remain equivalent under O(3).

invariant_subgroup_filter is applied after the spatial conjugacy reduction and before spin-rotation assignments are enumerated. It lets callers reject invariant subgroups using properties that do not depend on those assignments.

SpinSymmetryOperations dataclass

SpinSymmetryOperations(rotations: NDArrayInt, translations: NDArrayFloat, spin_rotations: NDArrayFloat)

rotations instance-attribute

rotations: NDArrayInt

(n, 3, 3)

size property

size: int

spin_rotations instance-attribute

spin_rotations: NDArrayFloat

(n, 3, 3)

translations instance-attribute

translations: NDArrayFloat

(n, 3)

transform_to_parent

transform_to_parent(sublattice: Sublattice, *, atol: float = 1e-05) -> SpinSymmetryOperations

Transform spatial parts from sublattice coordinates to the parent.