"""Data dictionaries for testing the strut_lattice module."""

from typing import NamedTuple

import numpy as np
import numpy.typing as npt


class LatticeData(NamedTuple):
    vertices: npt.NDArray[np.float64]
    strut_centers: npt.NDArray[np.float64]
    strut_directions: npt.NDArray[np.float64]


PRESET_LATTICE_DATA: dict[str, LatticeData] = {
    "BodyCenteredCubic": LatticeData(
        np.array(
            [
                [0.0, 0.0, 0.0],
                [-0.5, -0.5, -0.5],
                [-0.5, -0.5, 0.5],
                [-0.5, 0.5, -0.5],
                [-0.5, 0.5, 0.5],
                [0.5, -0.5, -0.5],
                [0.5, -0.5, 0.5],
                [0.5, 0.5, -0.5],
                [0.5, 0.5, 0.5],
            ]
        ),
        np.array(
            [
                [-0.25, -0.25, -0.25],
                [-0.25, -0.25, 0.25],
                [-0.25, 0.25, -0.25],
                [-0.25, 0.25, 0.25],
                [0.25, -0.25, -0.25],
                [0.25, -0.25, 0.25],
                [0.25, 0.25, -0.25],
                [0.25, 0.25, 0.25],
            ]
        ),
        np.array(
            [
                [-0.57735027, -0.57735027, -0.57735027],
                [-0.57735027, -0.57735027, 0.57735027],
                [-0.57735027, 0.57735027, -0.57735027],
                [-0.57735027, 0.57735027, 0.57735027],
                [0.57735027, -0.57735027, -0.57735027],
                [0.57735027, -0.57735027, 0.57735027],
                [0.57735027, 0.57735027, -0.57735027],
                [0.57735027, 0.57735027, 0.57735027],
            ]
        ),
    ),
    "Cubic": LatticeData(
        np.array(
            [
                [-0.5, -0.5, -0.5],
                [-0.5, -0.5, 0.5],
                [-0.5, 0.5, -0.5],
                [-0.5, 0.5, 0.5],
                [0.5, -0.5, -0.5],
                [0.5, -0.5, 0.5],
                [0.5, 0.5, -0.5],
                [0.5, 0.5, 0.5],
            ]
        ),
        np.array(
            [
                [-0.5, -0.5, 0.0],
                [-0.5, 0.0, -0.5],
                [0.0, -0.5, -0.5],
                [-0.5, 0.0, 0.5],
                [0.0, -0.5, 0.5],
                [-0.5, 0.5, 0.0],
                [0.0, 0.5, -0.5],
                [0.0, 0.5, 0.5],
                [0.5, -0.5, 0.0],
                [0.5, 0.0, -0.5],
                [0.5, 0.0, 0.5],
                [0.5, 0.5, 0.0],
            ]
        ),
        np.array(
            [
                [0.0, 0.0, 1.0],
                [0.0, 1.0, 0.0],
                [1.0, 0.0, 0.0],
                [0.0, 1.0, 0.0],
                [1.0, 0.0, 0.0],
                [0.0, 0.0, 1.0],
                [1.0, 0.0, 0.0],
                [1.0, 0.0, 0.0],
                [0.0, 0.0, 1.0],
                [0.0, 1.0, 0.0],
                [0.0, 1.0, 0.0],
                [0.0, 0.0, 1.0],
            ]
        ),
    ),
    "Cuboctahedron": LatticeData(
        np.array(
            [
                [-0.5, -0.5, 0.0],
                [-0.5, 0.0, -0.5],
                [0.0, -0.5, -0.5],
                [-0.5, 0.0, 0.5],
                [0.0, -0.5, 0.5],
                [-0.5, 0.5, 0.0],
                [0.0, 0.5, -0.5],
                [0.0, 0.5, 0.5],
                [0.5, -0.5, 0.0],
                [0.5, 0.0, -0.5],
                [0.5, 0.0, 0.5],
                [0.5, 0.5, 0.0],
            ]
        ),
        np.array(
            [
                [-0.25, -0.25, 0.5],
                [-0.25, 0.25, 0.5],
                [-0.25, 0.5, 0.25],
                [-0.25, -0.5, -0.25],
                [0.5, -0.25, -0.25],
                [-0.25, 0.25, -0.5],
                [0.5, 0.25, -0.25],
                [0.25, -0.5, -0.25],
                [0.25, 0.5, -0.25],
                [0.25, 0.25, 0.5],
                [-0.25, 0.5, -0.25],
                [0.25, -0.5, 0.25],
                [-0.5, -0.25, -0.25],
                [-0.25, -0.25, -0.5],
                [-0.25, -0.5, 0.25],
                [0.5, 0.25, 0.25],
                [-0.5, 0.25, -0.25],
                [-0.5, 0.25, 0.25],
                [0.25, -0.25, 0.5],
                [-0.5, -0.25, 0.25],
                [0.5, -0.25, 0.25],
                [0.25, -0.25, -0.5],
                [0.25, 0.5, 0.25],
                [0.25, 0.25, -0.5],
            ]
        ),
        np.array(
            [
                [0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [0.0, 0.70710678, 0.70710678],
                [0.70710678, 0.0, 0.70710678],
                [0.70710678, 0.0, 0.70710678],
                [0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.0, -0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.0, 0.70710678, 0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [0.0, 0.70710678, 0.70710678],
                [0.0, 0.70710678, 0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.0, -0.70710678],
                [0.70710678, -0.70710678, 0.0],
            ]
        ),
    ),
    "Diamond": LatticeData(
        np.array(
            [
                [-0.25, -0.25, 0.25],
                [-0.25, 0.25, -0.25],
                [0.25, -0.25, -0.25],
                [0.25, 0.25, 0.25],
                [-0.5, 0.0, 0.0],
                [0.5, 0.0, 0.0],
                [0.0, -0.5, 0.0],
                [0.0, 0.5, 0.0],
                [0.0, 0.0, -0.5],
                [0.0, 0.0, 0.5],
                [-0.5, -0.5, 0.5],
                [-0.5, 0.5, -0.5],
                [0.5, -0.5, -0.5],
                [0.5, 0.5, 0.5],
            ]
        ),
        np.array(
            [
                [-0.375, -0.125, 0.125],
                [-0.375, -0.375, 0.375],
                [-0.375, 0.375, -0.375],
                [0.125, 0.375, 0.125],
                [-0.125, 0.125, -0.375],
                [-0.125, -0.125, 0.375],
                [-0.375, 0.125, -0.125],
                [-0.125, -0.375, 0.125],
                [0.375, 0.375, 0.375],
                [-0.125, 0.375, -0.125],
                [0.125, -0.375, -0.125],
                [0.375, -0.375, -0.375],
                [0.125, 0.125, 0.375],
                [0.375, -0.125, -0.125],
                [0.375, 0.125, 0.125],
                [0.125, -0.125, -0.375],
            ]
        ),
        np.array(
            [
                [-0.57735027, 0.57735027, -0.57735027],
                [-0.57735027, -0.57735027, 0.57735027],
                [-0.57735027, 0.57735027, -0.57735027],
                [-0.57735027, 0.57735027, -0.57735027],
                [0.57735027, -0.57735027, -0.57735027],
                [0.57735027, 0.57735027, 0.57735027],
                [-0.57735027, -0.57735027, 0.57735027],
                [0.57735027, -0.57735027, -0.57735027],
                [0.57735027, 0.57735027, 0.57735027],
                [0.57735027, 0.57735027, 0.57735027],
                [-0.57735027, -0.57735027, 0.57735027],
                [0.57735027, -0.57735027, -0.57735027],
                [-0.57735027, -0.57735027, 0.57735027],
                [0.57735027, 0.57735027, 0.57735027],
                [0.57735027, -0.57735027, -0.57735027],
                [-0.57735027, 0.57735027, -0.57735027],
            ]
        ),
    ),
    "FaceCenteredCubic": LatticeData(
        np.array(
            [
                [-0.5, -0.5, -0.5],
                [-0.5, -0.5, 0.5],
                [-0.5, 0.5, -0.5],
                [-0.5, 0.5, 0.5],
                [0.5, -0.5, -0.5],
                [0.5, -0.5, 0.5],
                [0.5, 0.5, -0.5],
                [0.5, 0.5, 0.5],
                [-0.5, 0.0, 0.0],
                [0.5, 0.0, 0.0],
                [0.0, -0.5, 0.0],
                [0.0, 0.5, 0.0],
                [0.0, 0.0, -0.5],
                [0.0, 0.0, 0.5],
            ]
        ),
        np.array(
            [
                [-0.5, -0.25, -0.25],
                [-0.5, -0.25, 0.25],
                [-0.5, 0.25, -0.25],
                [-0.5, 0.25, 0.25],
                [0.5, -0.25, -0.25],
                [0.5, -0.25, 0.25],
                [0.5, 0.25, -0.25],
                [0.5, 0.25, 0.25],
                [-0.25, -0.5, -0.25],
                [-0.25, -0.5, 0.25],
                [0.25, -0.5, -0.25],
                [0.25, -0.5, 0.25],
                [-0.25, 0.5, -0.25],
                [-0.25, 0.5, 0.25],
                [0.25, 0.5, -0.25],
                [0.25, 0.5, 0.25],
                [-0.25, -0.25, -0.5],
                [-0.25, 0.25, -0.5],
                [0.25, -0.25, -0.5],
                [0.25, 0.25, -0.5],
                [-0.25, -0.25, 0.5],
                [-0.25, 0.25, 0.5],
                [0.25, -0.25, 0.5],
                [0.25, 0.25, 0.5],
            ]
        ),
        np.array(
            [
                [0.0, -0.70710678, -0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.0, 0.70710678, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.0, 0.70710678, 0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [0.70710678, 0.0, 0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [0.70710678, 0.0, 0.70710678],
                [-0.70710678, -0.70710678, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.70710678, 0.0],
                [-0.70710678, -0.70710678, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.70710678, 0.0],
            ]
        ),
    ),
    "Octahedron": LatticeData(
        np.array(
            [
                [-0.5, 0.0, 0.0],
                [0.5, 0.0, 0.0],
                [0.0, -0.5, 0.0],
                [0.0, 0.5, 0.0],
                [0.0, 0.0, -0.5],
                [0.0, 0.0, 0.5],
            ]
        ),
        np.array(
            [
                [0.0, -0.25, -0.25],
                [0.25, -0.25, 0.0],
                [-0.25, 0.0, -0.25],
                [0.0, 0.25, -0.25],
                [0.25, 0.0, 0.25],
                [-0.25, 0.25, 0.0],
                [0.25, 0.0, -0.25],
                [-0.25, -0.25, 0.0],
                [-0.25, 0.0, 0.25],
                [0.0, -0.25, 0.25],
                [0.25, 0.25, 0.0],
                [0.0, 0.25, 0.25],
            ]
        ),
        np.array(
            [
                [0.0, 0.70710678, -0.70710678],
                [-0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.0, -0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [-0.70710678, 0.0, -0.70710678],
                [0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [0.0, 0.70710678, 0.70710678],
                [-0.70710678, 0.70710678, 0.0],
                [0.0, -0.70710678, 0.70710678],
            ]
        ),
    ),
    "OctetTruss": LatticeData(
        np.array(
            [
                [-0.5, -0.5, -0.5],
                [-0.5, -0.5, 0.5],
                [-0.5, 0.5, -0.5],
                [-0.5, 0.5, 0.5],
                [0.5, -0.5, -0.5],
                [0.5, -0.5, 0.5],
                [0.5, 0.5, -0.5],
                [0.5, 0.5, 0.5],
                [-0.5, 0.0, 0.0],
                [0.5, 0.0, 0.0],
                [0.0, -0.5, 0.0],
                [0.0, 0.5, 0.0],
                [0.0, 0.0, -0.5],
                [0.0, 0.0, 0.5],
            ]
        ),
        np.array(
            [
                [0.25, 0.25, -0.5],
                [0.5, -0.25, -0.25],
                [0.25, -0.25, -0.5],
                [0.25, -0.25, 0.5],
                [-0.25, 0.25, 0.5],
                [0.25, -0.5, 0.25],
                [-0.25, 0.0, -0.25],
                [0.25, 0.25, 0.0],
                [-0.5, -0.25, -0.25],
                [-0.25, 0.5, -0.25],
                [0.0, -0.25, -0.25],
                [-0.5, 0.25, -0.25],
                [0.25, 0.5, -0.25],
                [0.25, 0.25, 0.5],
                [0.5, -0.25, 0.25],
                [-0.25, 0.25, 0.0],
                [0.25, -0.25, 0.0],
                [0.25, 0.0, 0.25],
                [-0.25, -0.5, -0.25],
                [0.0, 0.25, 0.25],
                [-0.5, -0.25, 0.25],
                [0.5, 0.25, 0.25],
                [-0.25, 0.5, 0.25],
                [0.25, -0.5, -0.25],
                [-0.5, 0.25, 0.25],
                [0.25, 0.0, -0.25],
                [-0.25, -0.25, 0.0],
                [0.0, -0.25, 0.25],
                [-0.25, -0.25, -0.5],
                [-0.25, 0.0, 0.25],
                [0.0, 0.25, -0.25],
                [-0.25, -0.25, 0.5],
                [-0.25, 0.25, -0.5],
                [-0.25, -0.5, 0.25],
                [0.25, 0.5, 0.25],
                [0.5, 0.25, -0.25],
            ]
        ),
        np.array(
            [
                [-0.70710678, -0.70710678, 0.0],
                [0.0, 0.70710678, 0.70710678],
                [-0.70710678, 0.70710678, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.70710678, -0.70710678, 0.0],
                [-0.70710678, 0.0, -0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.70710678, 0.0],
                [0.0, 0.70710678, 0.70710678],
                [0.70710678, 0.0, 0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [-0.70710678, -0.70710678, 0.0],
                [0.0, 0.70710678, -0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [-0.70710678, -0.70710678, 0.0],
                [-0.70710678, 0.0, 0.70710678],
                [0.70710678, 0.0, 0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [0.70710678, -0.70710678, 0.0],
                [0.0, 0.70710678, 0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [0.0, -0.70710678, 0.70710678],
            ]
        ),
    ),
    "RhombicCuboctahedron": LatticeData(
        np.array(
            [
                [-0.20710678, -0.5, -0.20710678],
                [-0.20710678, -0.5, 0.20710678],
                [-0.20710678, 0.5, -0.20710678],
                [-0.20710678, 0.5, 0.20710678],
                [0.20710678, -0.5, -0.20710678],
                [0.20710678, -0.5, 0.20710678],
                [0.20710678, 0.5, -0.20710678],
                [0.20710678, 0.5, 0.20710678],
                [-0.5, -0.20710678, -0.20710678],
                [-0.5, -0.20710678, 0.20710678],
                [-0.5, 0.20710678, -0.20710678],
                [-0.5, 0.20710678, 0.20710678],
                [0.5, -0.20710678, -0.20710678],
                [0.5, -0.20710678, 0.20710678],
                [0.5, 0.20710678, -0.20710678],
                [0.5, 0.20710678, 0.20710678],
                [-0.20710678, -0.20710678, -0.5],
                [-0.20710678, -0.20710678, 0.5],
                [-0.20710678, 0.20710678, -0.5],
                [-0.20710678, 0.20710678, 0.5],
                [0.20710678, -0.20710678, -0.5],
                [0.20710678, -0.20710678, 0.5],
                [0.20710678, 0.20710678, -0.5],
                [0.20710678, 0.20710678, 0.5],
            ]
        ),
        np.array(
            [
                [0.0, -0.20710678, -0.5],
                [0.20710678, 0.35355339, 0.35355339],
                [0.0, 0.5, 0.20710678],
                [0.35355339, -0.35355339, -0.20710678],
                [0.5, -0.20710678, 0.0],
                [0.35355339, -0.35355339, 0.20710678],
                [-0.20710678, 0.35355339, 0.35355339],
                [-0.5, -0.20710678, 0.0],
                [0.35355339, 0.20710678, -0.35355339],
                [0.0, -0.20710678, 0.5],
                [-0.5, 0.0, 0.20710678],
                [-0.35355339, -0.35355339, -0.20710678],
                [-0.35355339, -0.20710678, 0.35355339],
                [-0.35355339, -0.35355339, 0.20710678],
                [-0.35355339, 0.20710678, -0.35355339],
                [0.35355339, 0.35355339, -0.20710678],
                [0.35355339, 0.20710678, 0.35355339],
                [0.20710678, -0.5, 0.0],
                [0.0, 0.20710678, -0.5],
                [0.20710678, 0.0, -0.5],
                [0.5, 0.20710678, 0.0],
                [0.20710678, -0.35355339, -0.35355339],
                [-0.20710678, -0.5, 0.0],
                [0.20710678, -0.35355339, 0.35355339],
                [-0.5, 0.20710678, 0.0],
                [0.0, -0.5, -0.20710678],
                [-0.20710678, -0.35355339, -0.35355339],
                [0.0, -0.5, 0.20710678],
                [0.0, 0.20710678, 0.5],
                [-0.35355339, 0.35355339, -0.20710678],
                [-0.35355339, 0.20710678, 0.35355339],
                [-0.20710678, -0.35355339, 0.35355339],
                [0.20710678, 0.5, 0.0],
                [-0.20710678, 0.0, -0.5],
                [0.35355339, 0.35355339, 0.20710678],
                [0.20710678, 0.35355339, -0.35355339],
                [-0.35355339, 0.35355339, 0.20710678],
                [0.5, 0.0, -0.20710678],
                [0.20710678, 0.0, 0.5],
                [0.35355339, -0.20710678, -0.35355339],
                [-0.5, 0.0, -0.20710678],
                [-0.35355339, -0.20710678, -0.35355339],
                [-0.20710678, 0.0, 0.5],
                [-0.20710678, 0.5, 0.0],
                [0.0, 0.5, -0.20710678],
                [-0.20710678, 0.35355339, -0.35355339],
                [0.5, 0.0, 0.20710678],
                [0.35355339, -0.20710678, 0.35355339],
            ]
        ),
        np.array(
            [
                [1.0, 0.0, 0.0],
                [0.0, -0.70710678, 0.70710678],
                [1.0, 0.0, 0.0],
                [0.70710678, 0.70710678, 0.0],
                [0.0, 0.0, 1.0],
                [0.70710678, 0.70710678, 0.0],
                [0.0, -0.70710678, 0.70710678],
                [0.0, 0.0, 1.0],
                [-0.70710678, 0.0, -0.70710678],
                [1.0, 0.0, 0.0],
                [0.0, 1.0, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [-0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.0, -0.70710678],
                [0.70710678, -0.70710678, 0.0],
                [-0.70710678, 0.0, 0.70710678],
                [0.0, 0.0, 1.0],
                [1.0, 0.0, 0.0],
                [0.0, 1.0, 0.0],
                [0.0, 0.0, 1.0],
                [0.0, 0.70710678, -0.70710678],
                [0.0, 0.0, 1.0],
                [0.0, 0.70710678, 0.70710678],
                [0.0, 0.0, 1.0],
                [1.0, 0.0, 0.0],
                [0.0, 0.70710678, -0.70710678],
                [1.0, 0.0, 0.0],
                [1.0, 0.0, 0.0],
                [-0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [0.0, 0.70710678, 0.70710678],
                [0.0, 0.0, 1.0],
                [0.0, 1.0, 0.0],
                [0.70710678, -0.70710678, 0.0],
                [0.0, -0.70710678, -0.70710678],
                [-0.70710678, -0.70710678, 0.0],
                [0.0, 1.0, 0.0],
                [0.0, 1.0, 0.0],
                [-0.70710678, 0.0, -0.70710678],
                [0.0, 1.0, 0.0],
                [0.70710678, 0.0, -0.70710678],
                [0.0, 1.0, 0.0],
                [0.0, 0.0, 1.0],
                [1.0, 0.0, 0.0],
                [0.0, -0.70710678, -0.70710678],
                [0.0, 1.0, 0.0],
                [-0.70710678, 0.0, 0.70710678],
            ]
        ),
    ),
    "RhombicDodecahedron": LatticeData(
        np.array(
            [
                [-0.5, -0.5, -0.5],
                [-0.5, -0.5, 0.5],
                [-0.5, 0.5, -0.5],
                [-0.5, 0.5, 0.5],
                [0.5, -0.5, -0.5],
                [0.5, -0.5, 0.5],
                [0.5, 0.5, -0.5],
                [0.5, 0.5, 0.5],
                [-0.25, -0.25, -0.25],
                [-0.25, -0.25, 0.25],
                [-0.25, 0.25, -0.25],
                [-0.25, 0.25, 0.25],
                [0.25, -0.25, -0.25],
                [0.25, -0.25, 0.25],
                [0.25, 0.25, -0.25],
                [0.25, 0.25, 0.25],
                [-0.5, 0.0, 0.0],
                [0.5, 0.0, 0.0],
                [0.0, -0.5, 0.0],
                [0.0, 0.5, 0.0],
                [0.0, 0.0, -0.5],
                [0.0, 0.0, 0.5],
            ]
        ),
        np.array(
            [
                [0.125, 0.125, 0.375],
                [0.375, -0.375, -0.375],
                [0.375, -0.375, 0.375],
                [0.125, 0.375, -0.125],
                [-0.125, -0.375, -0.125],
                [-0.375, -0.375, -0.375],
                [-0.375, -0.375, 0.375],
                [0.375, -0.125, 0.125],
                [0.375, 0.125, 0.125],
                [0.375, 0.375, -0.375],
                [0.125, -0.375, -0.125],
                [-0.375, -0.125, 0.125],
                [-0.375, 0.125, 0.125],
                [-0.375, 0.375, -0.375],
                [-0.125, 0.375, 0.125],
                [-0.125, -0.125, -0.375],
                [-0.125, 0.125, -0.375],
                [0.125, 0.375, 0.125],
                [0.375, 0.375, 0.375],
                [-0.375, 0.375, 0.375],
                [0.375, -0.125, -0.125],
                [0.125, -0.125, -0.375],
                [0.375, 0.125, -0.125],
                [0.125, 0.125, -0.375],
                [-0.375, -0.125, -0.125],
                [-0.125, -0.125, 0.375],
                [-0.375, 0.125, -0.125],
                [-0.125, -0.375, 0.125],
                [-0.125, 0.125, 0.375],
                [-0.125, 0.375, -0.125],
                [0.125, -0.375, 0.125],
                [0.125, -0.125, 0.375],
            ]
        ),
        np.array(
            [
                [-0.57735027, -0.57735027, 0.57735027],
                [-0.57735027, 0.57735027, 0.57735027],
                [-0.57735027, 0.57735027, -0.57735027],
                [-0.57735027, 0.57735027, 0.57735027],
                [0.57735027, -0.57735027, 0.57735027],
                [0.57735027, 0.57735027, 0.57735027],
                [0.57735027, 0.57735027, -0.57735027],
                [0.57735027, 0.57735027, -0.57735027],
                [0.57735027, -0.57735027, -0.57735027],
                [-0.57735027, -0.57735027, 0.57735027],
                [-0.57735027, -0.57735027, 0.57735027],
                [-0.57735027, 0.57735027, -0.57735027],
                [-0.57735027, -0.57735027, -0.57735027],
                [0.57735027, -0.57735027, 0.57735027],
                [0.57735027, 0.57735027, -0.57735027],
                [0.57735027, 0.57735027, -0.57735027],
                [0.57735027, -0.57735027, -0.57735027],
                [-0.57735027, 0.57735027, -0.57735027],
                [-0.57735027, -0.57735027, -0.57735027],
                [0.57735027, -0.57735027, -0.57735027],
                [0.57735027, 0.57735027, 0.57735027],
                [-0.57735027, 0.57735027, -0.57735027],
                [0.57735027, -0.57735027, 0.57735027],
                [-0.57735027, -0.57735027, -0.57735027],
                [-0.57735027, 0.57735027, 0.57735027],
                [0.57735027, 0.57735027, 0.57735027],
                [-0.57735027, -0.57735027, 0.57735027],
                [0.57735027, -0.57735027, -0.57735027],
                [0.57735027, -0.57735027, 0.57735027],
                [0.57735027, 0.57735027, 0.57735027],
                [-0.57735027, -0.57735027, -0.57735027],
                [-0.57735027, 0.57735027, 0.57735027],
            ]
        ),
    ),
    "TruncatedCube": LatticeData(
        np.array(
            [
                [-0.5, 0.5, 0.20710678],
                [0.20710678, 0.5, -0.5],
                [0.5, 0.5, -0.20710678],
                [-0.5, -0.5, -0.20710678],
                [0.5, -0.20710678, -0.5],
                [0.5, -0.20710678, 0.5],
                [0.5, -0.5, 0.20710678],
                [0.5, 0.20710678, -0.5],
                [-0.20710678, -0.5, 0.5],
                [-0.20710678, -0.5, -0.5],
                [0.5, 0.20710678, 0.5],
                [0.20710678, -0.5, -0.5],
                [0.20710678, -0.5, 0.5],
                [-0.5, 0.5, -0.20710678],
                [0.5, 0.5, 0.20710678],
                [-0.5, -0.20710678, 0.5],
                [-0.5, -0.20710678, -0.5],
                [-0.5, -0.5, 0.20710678],
                [0.5, -0.5, -0.20710678],
                [-0.20710678, 0.5, 0.5],
                [-0.20710678, 0.5, -0.5],
                [-0.5, 0.20710678, -0.5],
                [-0.5, 0.20710678, 0.5],
                [0.20710678, 0.5, 0.5],
            ]
        ),
        np.array(
            [
                [0.35355339, -0.5, 0.35355339],
                [0.5, -0.5, 0.0],
                [-0.5, -0.35355339, -0.35355339],
                [0.5, 0.0, 0.5],
                [0.5, -0.35355339, -0.35355339],
                [0.0, -0.5, 0.5],
                [0.0, -0.5, -0.5],
                [-0.35355339, -0.35355339, 0.5],
                [0.5, 0.5, 0.0],
                [-0.35355339, 0.5, -0.35355339],
                [-0.5, -0.35355339, 0.35355339],
                [-0.35355339, -0.5, -0.35355339],
                [0.5, -0.35355339, 0.35355339],
                [0.35355339, -0.35355339, -0.5],
                [0.35355339, -0.35355339, 0.5],
                [-0.35355339, -0.35355339, -0.5],
                [0.35355339, 0.5, -0.35355339],
                [0.5, 0.35355339, -0.35355339],
                [-0.35355339, -0.5, 0.35355339],
                [0.5, 0.35355339, 0.35355339],
                [-0.5, 0.5, 0.0],
                [-0.35355339, 0.5, 0.35355339],
                [0.0, 0.5, 0.5],
                [0.35355339, 0.35355339, 0.5],
                [0.0, 0.5, -0.5],
                [-0.5, 0.35355339, 0.35355339],
                [-0.5, 0.0, -0.5],
                [-0.5, 0.0, 0.5],
                [0.5, 0.0, -0.5],
                [-0.35355339, 0.35355339, -0.5],
                [-0.5, -0.5, 0.0],
                [0.35355339, 0.5, 0.35355339],
                [0.35355339, 0.35355339, -0.5],
                [-0.35355339, 0.35355339, 0.5],
                [0.35355339, -0.5, -0.35355339],
                [-0.5, 0.35355339, -0.35355339],
            ]
        ),
        np.array(
            [
                [-0.70710678, 0.0, 0.70710678],
                [0.0, 0.0, -1.0],
                [0.0, 0.70710678, -0.70710678],
                [0.0, 1.0, 0.0],
                [0.0, -0.70710678, 0.70710678],
                [1.0, 0.0, 0.0],
                [1.0, 0.0, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.0, 0.0, 1.0],
                [0.70710678, 0.0, -0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [-0.70710678, -0.70710678, 0.0],
                [-0.70710678, -0.70710678, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.0, 0.0, -1.0],
                [0.70710678, 0.0, 0.70710678],
                [1.0, 0.0, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [-1.0, 0.0, 0.0],
                [0.0, -0.70710678, 0.70710678],
                [0.0, 1.0, 0.0],
                [0.0, 1.0, 0.0],
                [0.0, 1.0, 0.0],
                [-0.70710678, -0.70710678, 0.0],
                [0.0, 0.0, 1.0],
                [-0.70710678, 0.0, 0.70710678],
                [0.70710678, -0.70710678, 0.0],
                [-0.70710678, -0.70710678, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
            ]
        ),
    ),
    "TruncatedCuboctahedron": LatticeData(
        np.array(
            [
                [0.13060194, -0.31530097, -0.5],
                [0.13060194, -0.31530097, 0.5],
                [0.13060194, 0.31530097, -0.5],
                [0.13060194, 0.31530097, 0.5],
                [-0.13060194, -0.31530097, -0.5],
                [-0.13060194, -0.31530097, 0.5],
                [-0.13060194, 0.31530097, -0.5],
                [-0.13060194, 0.31530097, 0.5],
                [0.13060194, -0.5, -0.31530097],
                [0.13060194, -0.5, 0.31530097],
                [0.13060194, 0.5, -0.31530097],
                [0.13060194, 0.5, 0.31530097],
                [-0.13060194, -0.5, -0.31530097],
                [-0.13060194, -0.5, 0.31530097],
                [-0.13060194, 0.5, -0.31530097],
                [-0.13060194, 0.5, 0.31530097],
                [-0.31530097, 0.13060194, -0.5],
                [-0.31530097, 0.13060194, 0.5],
                [-0.31530097, -0.13060194, -0.5],
                [-0.31530097, -0.13060194, 0.5],
                [0.31530097, 0.13060194, -0.5],
                [0.31530097, 0.13060194, 0.5],
                [0.31530097, -0.13060194, -0.5],
                [0.31530097, -0.13060194, 0.5],
                [-0.31530097, -0.5, 0.13060194],
                [-0.31530097, -0.5, -0.13060194],
                [-0.31530097, 0.5, 0.13060194],
                [-0.31530097, 0.5, -0.13060194],
                [0.31530097, -0.5, 0.13060194],
                [0.31530097, -0.5, -0.13060194],
                [0.31530097, 0.5, 0.13060194],
                [0.31530097, 0.5, -0.13060194],
                [-0.5, 0.13060194, -0.31530097],
                [-0.5, 0.13060194, 0.31530097],
                [-0.5, -0.13060194, -0.31530097],
                [-0.5, -0.13060194, 0.31530097],
                [0.5, 0.13060194, -0.31530097],
                [0.5, 0.13060194, 0.31530097],
                [0.5, -0.13060194, -0.31530097],
                [0.5, -0.13060194, 0.31530097],
                [-0.5, -0.31530097, 0.13060194],
                [-0.5, -0.31530097, -0.13060194],
                [-0.5, 0.31530097, 0.13060194],
                [-0.5, 0.31530097, -0.13060194],
                [0.5, -0.31530097, 0.13060194],
                [0.5, -0.31530097, -0.13060194],
                [0.5, 0.31530097, 0.13060194],
                [0.5, 0.31530097, -0.13060194],
            ]
        ),
        np.array(
            [
                [0.0, -0.31530097, -0.5],
                [0.13060194, -0.40765048, -0.40765048],
                [0.22295145, -0.22295145, -0.5],
                [0.0, -0.31530097, 0.5],
                [0.22295145, -0.22295145, 0.5],
                [0.13060194, -0.40765048, 0.40765048],
                [0.0, 0.31530097, -0.5],
                [0.13060194, 0.40765048, -0.40765048],
                [0.22295145, 0.22295145, -0.5],
                [0.0, 0.31530097, 0.5],
                [0.13060194, 0.40765048, 0.40765048],
                [0.22295145, 0.22295145, 0.5],
                [-0.22295145, -0.22295145, -0.5],
                [-0.13060194, -0.40765048, -0.40765048],
                [-0.22295145, -0.22295145, 0.5],
                [-0.13060194, -0.40765048, 0.40765048],
                [-0.22295145, 0.22295145, -0.5],
                [-0.13060194, 0.40765048, -0.40765048],
                [-0.13060194, 0.40765048, 0.40765048],
                [-0.22295145, 0.22295145, 0.5],
                [0.0, -0.5, -0.31530097],
                [0.22295145, -0.5, -0.22295145],
                [0.0, -0.5, 0.31530097],
                [0.22295145, -0.5, 0.22295145],
                [0.0, 0.5, -0.31530097],
                [0.22295145, 0.5, -0.22295145],
                [0.0, 0.5, 0.31530097],
                [0.22295145, 0.5, 0.22295145],
                [-0.22295145, -0.5, -0.22295145],
                [-0.22295145, -0.5, 0.22295145],
                [-0.22295145, 0.5, -0.22295145],
                [-0.22295145, 0.5, 0.22295145],
                [-0.31530097, 0.0, -0.5],
                [-0.40765048, 0.13060194, -0.40765048],
                [-0.31530097, 0.0, 0.5],
                [-0.40765048, 0.13060194, 0.40765048],
                [-0.40765048, -0.13060194, -0.40765048],
                [-0.40765048, -0.13060194, 0.40765048],
                [0.31530097, 0.0, -0.5],
                [0.40765048, 0.13060194, -0.40765048],
                [0.31530097, 0.0, 0.5],
                [0.40765048, 0.13060194, 0.40765048],
                [0.40765048, -0.13060194, -0.40765048],
                [0.40765048, -0.13060194, 0.40765048],
                [-0.31530097, -0.5, 0.0],
                [-0.40765048, -0.40765048, 0.13060194],
                [-0.40765048, -0.40765048, -0.13060194],
                [-0.31530097, 0.5, 0.0],
                [-0.40765048, 0.40765048, 0.13060194],
                [-0.40765048, 0.40765048, -0.13060194],
                [0.31530097, -0.5, 0.0],
                [0.40765048, -0.40765048, 0.13060194],
                [0.40765048, -0.40765048, -0.13060194],
                [0.31530097, 0.5, 0.0],
                [0.40765048, 0.40765048, 0.13060194],
                [0.40765048, 0.40765048, -0.13060194],
                [-0.5, 0.0, -0.31530097],
                [-0.5, 0.22295145, -0.22295145],
                [-0.5, 0.0, 0.31530097],
                [-0.5, 0.22295145, 0.22295145],
                [-0.5, -0.22295145, -0.22295145],
                [-0.5, -0.22295145, 0.22295145],
                [0.5, 0.0, -0.31530097],
                [0.5, 0.22295145, -0.22295145],
                [0.5, 0.0, 0.31530097],
                [0.5, 0.22295145, 0.22295145],
                [0.5, -0.22295145, -0.22295145],
                [0.5, -0.22295145, 0.22295145],
                [-0.5, -0.31530097, 0.0],
                [-0.5, 0.31530097, 0.0],
                [0.5, -0.31530097, 0.0],
                [0.5, 0.31530097, 0.0],
            ]
        ),
        np.array(
            [
                [-1.0, 0.0, 0.0],
                [0.0, -0.70710678, 0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [-1.0, 0.0, 0.0],
                [0.70710678, 0.70710678, 0.0],
                [0.0, -0.70710678, -0.70710678],
                [-1.0, 0.0, 0.0],
                [0.0, 0.70710678, 0.70710678],
                [0.70710678, -0.70710678, 0.0],
                [-1.0, 0.0, 0.0],
                [0.0, 0.70710678, -0.70710678],
                [0.70710678, -0.70710678, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.0, -0.70710678, 0.70710678],
                [-0.70710678, 0.70710678, 0.0],
                [0.0, -0.70710678, -0.70710678],
                [-0.70710678, -0.70710678, 0.0],
                [0.0, 0.70710678, 0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [-0.70710678, -0.70710678, 0.0],
                [-1.0, 0.0, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [-1.0, 0.0, 0.0],
                [0.70710678, 0.0, -0.70710678],
                [-1.0, 0.0, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [-1.0, 0.0, 0.0],
                [0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [0.0, -1.0, 0.0],
                [-0.70710678, 0.0, 0.70710678],
                [0.0, -1.0, 0.0],
                [-0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [0.0, -1.0, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [0.0, -1.0, 0.0],
                [0.70710678, 0.0, -0.70710678],
                [0.70710678, 0.0, 0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [0.0, 0.0, -1.0],
                [-0.70710678, 0.70710678, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.0, 0.0, -1.0],
                [-0.70710678, -0.70710678, 0.0],
                [-0.70710678, -0.70710678, 0.0],
                [0.0, 0.0, -1.0],
                [0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.70710678, 0.0],
                [0.0, 0.0, -1.0],
                [0.70710678, -0.70710678, 0.0],
                [0.70710678, -0.70710678, 0.0],
                [0.0, -1.0, 0.0],
                [0.0, 0.70710678, 0.70710678],
                [0.0, -1.0, 0.0],
                [0.0, 0.70710678, -0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [0.0, -1.0, 0.0],
                [0.0, 0.70710678, 0.70710678],
                [0.0, -1.0, 0.0],
                [0.0, 0.70710678, -0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [0.0, 0.0, -1.0],
                [0.0, 0.0, -1.0],
                [0.0, 0.0, -1.0],
                [0.0, 0.0, -1.0],
            ]
        ),
    ),
    "TruncatedOctahedron": LatticeData(
        np.array(
            [
                [0.25, 0.5, 0.0],
                [0.0, -0.25, 0.5],
                [0.0, -0.25, -0.5],
                [-0.25, 0.0, -0.5],
                [-0.25, 0.0, 0.5],
                [0.5, 0.25, 0.0],
                [-0.5, 0.0, 0.25],
                [0.0, 0.5, 0.25],
                [-0.5, 0.0, -0.25],
                [0.0, 0.5, -0.25],
                [0.25, 0.0, -0.5],
                [0.25, 0.0, 0.5],
                [-0.25, -0.5, 0.0],
                [0.5, -0.25, 0.0],
                [-0.5, 0.25, 0.0],
                [0.25, -0.5, 0.0],
                [0.5, 0.0, -0.25],
                [0.5, 0.0, 0.25],
                [-0.25, 0.5, 0.0],
                [0.0, 0.25, 0.5],
                [0.0, 0.25, -0.5],
                [0.0, -0.5, -0.25],
                [0.0, -0.5, 0.25],
                [-0.5, -0.25, 0.0],
            ]
        ),
        np.array(
            [
                [0.125, -0.5, -0.125],
                [-0.375, 0.0, 0.375],
                [-0.125, -0.5, 0.125],
                [0.5, 0.125, -0.125],
                [0.375, 0.375, 0.0],
                [0.0, 0.375, -0.375],
                [0.375, 0.0, 0.375],
                [0.5, -0.125, 0.125],
                [-0.5, 0.125, 0.125],
                [0.0, 0.375, 0.375],
                [-0.5, -0.125, 0.125],
                [-0.125, -0.5, -0.125],
                [-0.375, 0.375, 0.0],
                [0.125, 0.5, 0.125],
                [-0.5, 0.125, -0.125],
                [-0.5, -0.125, -0.125],
                [0.125, -0.125, 0.5],
                [0.125, -0.125, -0.5],
                [0.125, 0.125, 0.5],
                [0.5, -0.125, -0.125],
                [0.125, 0.125, -0.5],
                [0.375, -0.375, 0.0],
                [0.125, -0.5, 0.125],
                [-0.125, 0.5, 0.125],
                [-0.375, 0.0, -0.375],
                [-0.375, -0.375, 0.0],
                [-0.125, 0.125, 0.5],
                [-0.125, 0.125, -0.5],
                [0.125, 0.5, -0.125],
                [0.5, 0.125, 0.125],
                [-0.125, -0.125, 0.5],
                [-0.125, -0.125, -0.5],
                [0.375, 0.0, -0.375],
                [-0.125, 0.5, -0.125],
                [0.0, -0.375, -0.375],
                [0.0, -0.375, 0.375],
            ]
        ),
        np.array(
            [
                [-0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [0.70710678, 0.0, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [0.70710678, -0.70710678, 0.0],
                [0.0, -0.70710678, -0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [0.0, 0.70710678, 0.70710678],
                [0.0, 0.70710678, -0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
                [0.70710678, 0.0, -0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [-0.70710678, 0.0, 0.70710678],
                [0.0, 0.70710678, 0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.70710678, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.0, 0.70710678, -0.70710678],
                [-0.70710678, 0.70710678, 0.0],
                [-0.70710678, -0.70710678, 0.0],
                [-0.70710678, 0.0, 0.70710678],
                [-0.70710678, 0.0, -0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [-0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.70710678, 0.0],
                [-0.70710678, 0.0, -0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [-0.70710678, 0.70710678, 0.0],
                [-0.70710678, 0.70710678, 0.0],
                [0.70710678, 0.0, 0.70710678],
                [-0.70710678, 0.0, 0.70710678],
                [0.0, -0.70710678, 0.70710678],
                [0.0, -0.70710678, -0.70710678],
            ]
        ),
    ),
}
