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 spatial rotation matrices w.r.t. the input cell.
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_translation_coset
instance-attribute
¶
spin_translation_coset: SpinSymmetryOperations
Nontrivial spin translation group
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)
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
|
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 |
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.
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)
transform_to_parent
¶
transform_to_parent(sublattice: Sublattice, *, atol: float = 1e-05) -> SpinSymmetryOperations
Transform spatial parts from sublattice coordinates to the parent.