Source code for nvtools.symmetry

"""Symmetry classes."""

import numpy as np

from nvtools.vector import Vector


[docs] class Symmetry: """Symmetry groups.""" def __new__(cls, *args, **kwargs): """Symmetry groups.""" if args[0] == "Td": return TdSymmetry() elif args[0] == "Oh": return OhSymmetry()
[docs] class SymmetryBaseClass: """Symmetry base class.""" matrices: list
[docs] def apply(self, vec: Vector): """Apply symmetry to vector.""" yield from (Vector(np.dot(mat, vec.vals)) for mat in self.matrices)
[docs] class TdSymmetry(SymmetryBaseClass): """Td Symmetry.""" matrices = [ np.eye(3), np.array([[0, 0, 1], [1, 0, 0], [0, 1, 0]]), np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]), np.array([[0, 0, -1], [-1, 0, 0], [0, -1, 0]]), np.array([[0, -1, 0], [0, 0, -1], [-1, 0, 0]]), np.array([[0, 1, 0], [-1, 0, 0], [0, 0, 1]]), np.array([[0, 0, -1], [1, 0, 0], [0, -1, 0]]), np.array([[0, -1, 0], [1, 0, 0], [0, 0, -1]]), np.array([[0, 0, 1], [-1, 0, 0], [0, 1, 0]]), np.array([[1, 0, 0], [0, -1, 0], [0, 0, -1]]), np.array([[-1, 0, 0], [0, 1, 0], [0, 0, -1]]), np.array([[-1, 0, 0], [0, -1, 0], [0, 0, 1]]), np.array([[0, 0, 1], [0, 1, 0], [-1, 0, 0]]), np.array([[0, 0, -1], [0, 1, 0], [1, 0, 0]]), np.array([[1, 0, 0], [0, 0, 1], [0, -1, 0]]), np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]]), np.array([[0, 1, 0], [1, 0, 0], [0, 0, -1]]), np.array([[0, -1, 0], [-1, 0, 0], [0, 0, 1]]), np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), np.array([[0, 0, -1], [0, -1, 0], [-1, 0, 0]]), np.array([[0, 1, 0], [0, 0, 1], [-1, 0, 0]]), np.array([[0, 0, -1], [-1, 0, 0], [0, 1, 0]]), np.array([[0, -1, 0], [0, 0, -1], [1, 0, 0]]), np.array([[0, 1, 0], [1, 0, 0], [0, 0, -1]]), ]
[docs] class OhSymmetry(SymmetryBaseClass): """Oh Symmetry.""" matrices = [ np.eye(3), np.array([[0, 0, 1], [1, 0, 0], [0, 1, 0]]), np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]), np.array([[0, 0, -1], [-1, 0, 0], [0, -1, 0]]), np.array([[0, -1, 0], [0, 0, -1], [-1, 0, 0]]), np.array([[0, 1, 0], [-1, 0, 0], [0, 0, 1]]), np.array([[0, 0, -1], [1, 0, 0], [0, -1, 0]]), np.array([[0, -1, 0], [1, 0, 0], [0, 0, -1]]), np.array([[0, 0, 1], [-1, 0, 0], [0, 1, 0]]), np.array([[1, 0, 0], [0, -1, 0], [0, 0, -1]]), np.array([[-1, 0, 0], [0, 1, 0], [0, 0, -1]]), np.array([[-1, 0, 0], [0, -1, 0], [0, 0, 1]]), np.array([[0, 0, 1], [0, 1, 0], [-1, 0, 0]]), np.array([[0, 0, -1], [0, 1, 0], [1, 0, 0]]), np.array([[1, 0, 0], [0, 0, 1], [0, -1, 0]]), np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]]), np.array([[0, 1, 0], [1, 0, 0], [0, 0, -1]]), np.array([[0, -1, 0], [-1, 0, 0], [0, 0, 1]]), np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), np.array([[0, 0, -1], [0, -1, 0], [-1, 0, 0]]), np.array([[0, 1, 0], [0, 0, 1], [-1, 0, 0]]), np.array([[0, 0, -1], [-1, 0, 0], [0, 1, 0]]), np.array([[0, -1, 0], [0, 0, -1], [1, 0, 0]]), np.array([[0, 1, 0], [1, 0, 0], [0, 0, -1]]), -np.eye(3), -np.array([[0, 0, 1], [1, 0, 0], [0, 1, 0]]), -np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]]), -np.array([[0, 0, -1], [-1, 0, 0], [0, -1, 0]]), -np.array([[0, -1, 0], [0, 0, -1], [-1, 0, 0]]), -np.array([[0, 1, 0], [-1, 0, 0], [0, 0, 1]]), -np.array([[0, 0, -1], [1, 0, 0], [0, -1, 0]]), -np.array([[0, -1, 0], [1, 0, 0], [0, 0, -1]]), -np.array([[0, 0, 1], [-1, 0, 0], [0, 1, 0]]), -np.array([[1, 0, 0], [0, -1, 0], [0, 0, -1]]), -np.array([[-1, 0, 0], [0, 1, 0], [0, 0, -1]]), -np.array([[-1, 0, 0], [0, -1, 0], [0, 0, 1]]), -np.array([[0, 0, 1], [0, 1, 0], [-1, 0, 0]]), -np.array([[0, 0, -1], [0, 1, 0], [1, 0, 0]]), -np.array([[1, 0, 0], [0, 0, 1], [0, -1, 0]]), -np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]]), -np.array([[0, 1, 0], [1, 0, 0], [0, 0, -1]]), -np.array([[0, -1, 0], [-1, 0, 0], [0, 0, 1]]), -np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), -np.array([[0, 0, -1], [0, -1, 0], [-1, 0, 0]]), -np.array([[0, 1, 0], [0, 0, 1], [-1, 0, 0]]), -np.array([[0, 0, -1], [-1, 0, 0], [0, 1, 0]]), -np.array([[0, -1, 0], [0, 0, -1], [1, 0, 0]]), -np.array([[0, 1, 0], [1, 0, 0], [0, 0, -1]]), ]