matsci-parse 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__vite-browser-external-DYxpcVy9.js +1 -0
- package/dist/__vite-browser-external-DYxpcVy9.js.map +1 -0
- package/dist/index.js +719 -0
- package/dist/index.js.map +1 -0
- package/dist/stats.html +4950 -0
- package/package.json +4 -1
- package/dist/main.js +0 -1422
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../lib/core/matrix/matrix.ts","../lib/core/lattice/lattice.ts","../lib/core/structure/json.ts","../lib/core/structure/operations/canonicalize.ts","../lib/core/structure/operations/hashStructure.ts","../lib/core/structure/operations/sites/appendSite.ts","../lib/core/structure/operations/sites/insertSite.ts","../lib/core/structure/operations/sites/removeSite.ts","../lib/core/structure/operations/sites/replaceSite.ts","../lib/core/matrix/operations/vector/dot.ts","../lib/core/matrix/operations/vector/norm.ts","../lib/core/lattice/angles.ts","../lib/core/matrix/operations/inverse/inverse3x3.ts","../lib/core/lattice/inverse.ts","../lib/core/lattice/lengths.ts","../lib/core/matrix/operations/transpose.ts","../lib/core/matrix/operations/mul.ts","../lib/core/lattice/metricTensor.ts","../lib/core/lattice/parameters.ts","../lib/core/lattice/reciprocalLattice.ts","../lib/core/lattice/reciprocalLatticeCrystallographic.ts","../lib/core/matrix/operations/determinant.ts","../lib/core/lattice/volume.ts","../lib/core/lattice/create/fromParameters.ts","../lib/core/lattice/create/cubic.ts","../lib/core/lattice/create/hexagonal.ts","../lib/core/lattice/create/monoclinic.ts","../lib/core/lattice/create/orthorhombic.ts","../lib/core/lattice/create/rhombohedral.ts","../lib/core/lattice/create/tetragonal.ts","../lib/core/structure/operations/symmetry/spglib.ts","../lib/core/structure/operations/supercell.ts","../lib/core/site/site.ts","../lib/core/site/cartesian.ts","../lib/core/site/fractional.ts","../lib/core/site/distance.ts","../lib/core/site/wrap.ts","../lib/core/species/species.ts","../lib/core/io/cif.ts","../lib/core/io/poscar.ts","../lib/core/io/structuredata.ts","../lib/core/io/xsf.ts","../lib/core/io/xyz.ts"],"sourcesContent":["export interface Matrix {\n readonly rows: number;\n readonly cols: number;\n readonly data: Float64Array;\n}\n\nexport function createMatrix(\n rows: number,\n cols: number,\n data?: Iterable<number>,\n): Matrix {\n const size = rows * cols;\n\n const buffer = data ? Float64Array.from(data) : new Float64Array(size);\n\n if (buffer.length !== size) {\n throw new Error(`Expected ${size} values, got ${buffer.length}`);\n }\n\n return {\n rows,\n cols,\n data: buffer,\n };\n}\n\nexport function identity(size: number): Matrix {\n const data = new Float64Array(size * size);\n\n for (let i = 0; i < size; i++) {\n data[i * size + i] = 1;\n }\n\n return {\n rows: size,\n cols: size,\n data,\n };\n}\n\nexport function clone(matrix: Matrix): Matrix {\n return {\n rows: matrix.rows,\n cols: matrix.cols,\n data: new Float64Array(matrix.data),\n };\n}\n\nexport function index(cols: number, row: number, col: number): number {\n return row * cols + col;\n}\n","import { createMatrix, Matrix } from \"../matrix/matrix\";\n\nconst EPS = 1e-12;\n\nfunction clean(x: number): number {\n return Math.abs(x) < EPS ? 0 : x;\n}\n\nexport interface Lattice {\n readonly basis: Matrix;\n}\n\nexport function createLattice(data: number[] | Matrix): Lattice {\n const values = \"data\" in data ? data.data : data;\n\n if (values.length !== 9) {\n throw new Error(\"Lattice requires 9 values (3x3)\");\n }\n\n const cleaned = new Float64Array(9);\n\n for (let i = 0; i < 9; i++) {\n cleaned[i] = clean(values[i]);\n }\n\n return {\n basis: createMatrix(3, 3, cleaned),\n };\n}\n","import { Structure } from \"./structure\";\nimport { createLattice } from \"../lattice/lattice\";\n\nexport function toJSON(structure: Structure) {\n return {\n lattice: structure.lattice.basis.data,\n sites: structure.sites.map((s) => ({\n species: s.species,\n frac: Array.from(s.frac),\n })),\n };\n}\n\nexport function fromJSON(data: any): Structure {\n return {\n lattice: createLattice(data.lattice),\n sites: data.sites.map((s: any) => ({\n species: s.species,\n frac: new Float64Array(s.frac),\n })),\n };\n}\n","import { Structure } from \"../../structure/structure\";\n\nconst EPS = 1e-12;\n\nfunction wrap(x: number): number {\n const v = x - Math.floor(x);\n return Math.abs(v) < EPS ? 0 : v;\n}\n\nfunction clean(x: number): number {\n return Math.abs(x) < EPS ? 0 : x;\n}\n\nexport function canonicalize(structure: Structure): Structure {\n return {\n ...structure,\n sites: structure.sites.map((site) => ({\n ...site,\n frac: new Float64Array([\n wrap(clean(site.frac[0])),\n wrap(clean(site.frac[1])),\n wrap(clean(site.frac[2])),\n ]),\n })),\n };\n}\n","import { Structure } from \"../structure\";\nimport { canonicalize } from \"./canonicalize\";\n\nfunction toFixedArray(v: Float64Array, precision = 8): string {\n return Array.from(v)\n .map((x) => x.toFixed(precision))\n .join(\",\");\n}\n\nfunction fnv1a(str: string): number {\n let hash = 2166136261;\n\n for (let i = 0; i < str.length; i++) {\n hash ^= str.charCodeAt(i);\n hash *= 16777619;\n }\n\n return hash >>> 0;\n}\n\nexport function hashStructure(structure: Structure): number {\n const s = canonicalize(structure);\n\n const lattice = s.lattice.basis.data;\n const latticeKey = toFixedArray(lattice);\n\n const sitesKey = s.sites\n .map((site) => {\n return site.species + \":\" + toFixedArray(site.frac);\n })\n .sort()\n .join(\"|\");\n\n const key = latticeKey + \"::\" + sitesKey;\n\n return fnv1a(key);\n}\n","import { Structure } from \"../../structure\";\nimport { Site } from \"../../../site/site\";\n\nexport function appendSite(structure: Structure, site: Site): Structure {\n return {\n ...structure,\n sites: [...structure.sites, site],\n };\n}\n","import { Structure } from \"../../structure\";\nimport { Site } from \"../../../site/site\";\n\nexport function insertSite(\n structure: Structure,\n index: number,\n site: Site,\n): Structure {\n return {\n ...structure,\n sites: [\n ...structure.sites.slice(0, index),\n site,\n ...structure.sites.slice(index),\n ],\n };\n}\n","import { Structure } from \"../../structure\";\nimport { Site } from \"../../../site/site\";\n\nexport function removeSite(structure: Structure, index: number): Structure {\n return {\n ...structure,\n sites: structure.sites.filter((_, i) => i !== index),\n };\n}\n","import { Structure } from \"../../structure\";\nimport { Site } from \"../../../site/site\";\n\nexport function replaceSite(\n structure: Structure,\n index: number,\n site: Site,\n): Structure {\n return {\n ...structure,\n sites: structure.sites.map((s, i) => (i === index ? site : s)),\n };\n}\n","import { Vector } from \"../../vector\";\n\nexport function dot(a: Vector, b: Vector): number {\n if (a.length !== b.length) {\n throw new Error(\"Dot product requires same-length vectors\");\n }\n\n let sum = 0;\n\n for (let i = 0; i < a.length; i++) {\n sum += a[i] * b[i];\n }\n\n return sum;\n}\n","import { Vector } from \"../../vector\";\n\nconst EPS = 1e-12;\n\nexport function norm(v: Vector): number {\n let sum = 0;\n\n for (let i = 0; i < v.length; i++) {\n const x = v[i];\n sum += x * x;\n }\n\n return Math.sqrt(sum);\n}\n","import { dot } from \"../matrix/operations/vector/dot\";\nimport { norm } from \"../matrix/operations/vector/norm\";\nimport { Lattice } from \"./lattice\";\n\nfunction angle(u: number[], v: number[]) {\n const denom = norm(u) * norm(v);\n if (denom === 0) throw new Error(\"Zero-length lattice vector\");\n\n const c = dot(u, v) / denom;\n const clamped = Math.max(-1, Math.min(1, c));\n\n return Math.acos(clamped);\n}\n\nexport function angles(lattice: Lattice): [number, number, number] {\n const m = lattice.basis.data;\n\n const a = [m[0], m[1], m[2]];\n const b = [m[3], m[4], m[5]];\n const c = [m[6], m[7], m[8]];\n\n const alpha = angle(b, c);\n const beta = angle(a, c);\n const gamma = angle(a, b);\n\n return [alpha, beta, gamma];\n}\n","import { Matrix, createMatrix } from \"../../matrix\";\n\nexport function inverse3x3(m: Matrix): Matrix {\n if (m.rows !== 3 || m.cols !== 3) {\n throw new Error(\"Expected 3x3 matrix\");\n }\n\n const a00 = m.data[0],\n a01 = m.data[1],\n a02 = m.data[2];\n const a10 = m.data[3],\n a11 = m.data[4],\n a12 = m.data[5];\n const a20 = m.data[6],\n a21 = m.data[7],\n a22 = m.data[8];\n\n const c00 = a11 * a22 - a12 * a21;\n const c01 = a12 * a20 - a10 * a22;\n const c02 = a10 * a21 - a11 * a20;\n\n const c10 = a02 * a21 - a01 * a22;\n const c11 = a00 * a22 - a02 * a20;\n const c12 = a01 * a20 - a00 * a21;\n\n const c20 = a01 * a12 - a02 * a11;\n const c21 = a02 * a10 - a00 * a12;\n const c22 = a00 * a11 - a01 * a10;\n\n const det = a00 * c00 + a01 * c01 + a02 * c02;\n\n if (det === 0) {\n throw new Error(\"Singular matrix\");\n }\n\n const invDet = 1 / det;\n\n const out = createMatrix(3, 3);\n\n out.data[0] = c00 * invDet;\n out.data[1] = c10 * invDet;\n out.data[2] = c20 * invDet;\n\n out.data[3] = c01 * invDet;\n out.data[4] = c11 * invDet;\n out.data[5] = c21 * invDet;\n\n out.data[6] = c02 * invDet;\n out.data[7] = c12 * invDet;\n out.data[8] = c22 * invDet;\n\n return out;\n}\n","import { Lattice } from \"./lattice\";\nimport { inverse3x3 } from \"../matrix/operations/inverse/inverse3x3\";\nimport { Matrix } from \"../matrix/matrix\";\n\nexport function inverse(lattice: Lattice): Matrix {\n return inverse3x3(lattice.basis);\n}\n","import { norm } from \"../matrix/operations/vector/norm\";\nimport { Lattice } from \"./lattice\";\n\nexport function lengths(lattice: Lattice): [number, number, number] {\n const m = lattice.basis.data;\n\n const a: Float64Array = new Float64Array([m[0], m[1], m[2]]);\n const b: Float64Array = new Float64Array([m[3], m[4], m[5]]);\n const c: Float64Array = new Float64Array([m[6], m[7], m[8]]);\n\n return [norm(a), norm(b), norm(c)];\n}\n","import { Matrix, createMatrix, index } from \"../matrix\";\n\nexport function transpose(matrix: Matrix): Matrix {\n const out = createMatrix(matrix.cols, matrix.rows);\n\n for (let row = 0; row < matrix.rows; row++) {\n for (let col = 0; col < matrix.cols; col++) {\n out.data[index(out.cols, col, row)] =\n matrix.data[index(matrix.cols, row, col)];\n }\n }\n\n return out;\n}\n","import { Matrix, createMatrix, index } from \"../matrix\";\n\nexport function mul(a: Matrix, b: Matrix): Matrix {\n if (a.cols !== b.rows) {\n throw new Error(\"Invalid matrix multiplication dimensions\");\n }\n\n const out = createMatrix(a.rows, b.cols);\n\n const aRows = a.rows;\n const aCols = a.cols;\n const bCols = b.cols;\n\n for (let row = 0; row < aRows; row++) {\n for (let col = 0; col < bCols; col++) {\n let sum = 0;\n\n for (let k = 0; k < aCols; k++) {\n sum += a.data[index(a.cols, row, k)] * b.data[index(b.cols, k, col)];\n }\n\n out.data[index(out.cols, row, col)] = sum;\n }\n }\n\n return out;\n}\n","import { transpose } from \"../matrix/operations/transpose\";\nimport { mul } from \"../matrix/operations/mul\";\nimport { Lattice } from \"./lattice\";\nimport { Matrix } from \"../matrix/matrix\";\n\nexport function metricTensor(lattice: Lattice): Matrix {\n const A = lattice.basis;\n\n const AT = transpose(A);\n return mul(AT, A);\n}\n","import { lengths } from \"./lengths\";\nimport { angles } from \"./angles\";\nimport { Lattice } from \"./lattice\";\n\nconst RAD2DEG = 180 / Math.PI;\n\nexport function parameters(\n lattice: Lattice,\n): [number, number, number, number, number, number] {\n const [a, b, c] = lengths(lattice);\n const [alpha, beta, gamma] = angles(lattice);\n\n return [a, b, c, alpha * RAD2DEG, beta * RAD2DEG, gamma * RAD2DEG];\n}\n","import { Lattice } from \"./lattice\";\nimport { inverse } from \"./inverse\";\nimport { transpose } from \"../matrix/operations/transpose\";\nimport { createMatrix } from \"../matrix/matrix\";\nimport { createLattice } from \"./lattice\";\n\nconst TWO_PI = 2 * Math.PI;\n\nexport function reciprocalLattice(lattice: Lattice): Lattice {\n const inv = inverse(lattice);\n const invT = transpose(inv);\n\n const data = invT.data.map((v) => v * TWO_PI);\n\n return createLattice(data);\n}\n","import { Lattice, createLattice } from \"./lattice\";\nimport { inverse } from \"./inverse\";\nimport { transpose } from \"../matrix/operations/transpose\";\n\nexport function reciprocalLatticeCrystallographic(lattice: Lattice): Lattice {\n const inv = inverse(lattice);\n const invT = transpose(inv);\n\n return createLattice(invT.data);\n}\n","import { Matrix, createMatrix, index } from \"../matrix\";\n\nfunction minor(matrix: Matrix, skipRow: number, skipCol: number): Matrix {\n const out = createMatrix(matrix.rows - 1, matrix.cols - 1);\n\n let ptr = 0;\n\n for (let row = 0; row < matrix.rows; row++) {\n if (row === skipRow) continue;\n\n for (let col = 0; col < matrix.cols; col++) {\n if (col === skipCol) continue;\n\n out.data[ptr++] = matrix.data[index(matrix.cols, row, col)];\n }\n }\n\n return out;\n}\n\nexport function determinant(matrix: Matrix): number {\n if (matrix.rows !== matrix.cols) {\n throw new Error(\"Determinant requires a square matrix\");\n }\n\n const n = matrix.rows;\n\n if (n === 1) {\n return matrix.data[0];\n }\n\n if (n === 2) {\n return matrix.data[0] * matrix.data[3] - matrix.data[1] * matrix.data[2];\n }\n\n let det = 0;\n\n for (let col = 0; col < n; col++) {\n const sign = col % 2 === 0 ? 1 : -1;\n\n det += sign * matrix.data[col] * determinant(minor(matrix, 0, col));\n }\n\n return det;\n}\n","import { determinant } from \"../matrix/operations/determinant\";\nimport { Lattice } from \"./lattice\";\n\nexport function volume(lattice: Lattice): number {\n return Math.abs(determinant(lattice.basis));\n}\n","import { createLattice } from \"../lattice\";\n\nconst DEG2RAD = Math.PI / 180;\nconst EPS = 1e-12;\n\nfunction clean(x: number) {\n return Math.abs(x) < EPS ? 0 : x;\n}\n\nexport function fromParameters(\n a: number,\n b: number,\n c: number,\n alpha: number,\n beta: number,\n gamma: number,\n) {\n const alphaR = alpha * DEG2RAD;\n const betaR = beta * DEG2RAD;\n const gammaR = gamma * DEG2RAD;\n\n const cosA = Math.cos(alphaR);\n const cosB = Math.cos(betaR);\n const cosG = Math.cos(gammaR);\n const sinG = Math.sin(gammaR);\n\n // lattice vectors\n const v1 = [a, 0, 0];\n\n const v2 = [b * cosG, b * sinG, 0];\n\n // guard against degenerate gamma\n if (Math.abs(sinG) < EPS) {\n throw new Error(\"Invalid lattice: gamma too close to 0 or 180 degrees\");\n }\n\n const cx = c * cosB;\n\n const cy = (c * (cosA - cosB * cosG)) / sinG;\n\n const czSquared = c * c - cx * cx - cy * cy;\n\n const cz = Math.sqrt(Math.max(0, czSquared));\n\n return createLattice([\n clean(v1[0]),\n clean(v1[1]),\n clean(v1[2]),\n clean(v2[0]),\n clean(v2[1]),\n clean(v2[2]),\n clean(cx),\n clean(cy),\n clean(cz),\n ]);\n}\n","import { fromParameters } from \"./fromParameters\";\n\nexport function cubic(a: number) {\n return fromParameters(a, a, a, 90, 90, 90);\n}\n","import { fromParameters } from \"./fromParameters\";\n\nexport function hexagonal(a: number, c: number) {\n return fromParameters(a, a, c, 90, 90, 120);\n}\n","import { fromParameters } from \"./fromParameters\";\n\nexport function monoclinic(a: number, b: number, c: number, beta: number) {\n return fromParameters(a, b, c, 90, beta, 90);\n}\n","import { fromParameters } from \"./fromParameters\";\n\nexport function orthorhombic(a: number, b: number, c: number) {\n return fromParameters(a, b, c, 90, 90, 90);\n}\n","import { fromParameters } from \"./fromParameters\";\n\nexport function rhombohedral(a: number, alpha: number) {\n return fromParameters(a, a, a, alpha, alpha, alpha);\n}\n","import { fromParameters } from \"./fromParameters\";\n\nexport function tetragonal(a: number, c: number) {\n return fromParameters(a, a, c, 90, 90, 90);\n}\n","import init, { analyze_cell, type MoyoDataset } from \"@spglib/moyo-wasm\";\n\nimport { createLattice } from \"@/core/lattice\";\nimport { Structure } from \"../../structure\";\n\nlet ready: Promise<void> | null = null;\n\n// Slightly awkward handling to manage node vs browser invocation (for tests...)\nexport function initMoyo() {\n if (!ready) {\n ready = (async () => {\n // In Node.js (tests), load from filesystem\n if (typeof process !== \"undefined\" && process.versions?.node) {\n try {\n const { readFileSync } = await import(\"fs\");\n const { join } = await import(\"path\");\n const wasmPath = join(\n process.cwd(),\n \"node_modules/@spglib/moyo-wasm/moyo_wasm_bg.wasm\",\n );\n const wasmBuffer = readFileSync(wasmPath);\n await init(wasmBuffer);\n } catch (e) {\n console.error(\"Failed to load WASM in Node:\", e);\n throw e;\n }\n } else {\n // In browser, use dynamic import to get the URL\n const wasmUrl = new URL(\n \"@spglib/moyo-wasm/moyo_wasm_bg.wasm\",\n import.meta.url,\n ).toString();\n\n await init(wasmUrl);\n }\n })();\n }\n return ready;\n}\n\nexport async function getSymmetry(\n structure: Structure,\n tolerance = 1e-4,\n setting = \"Standard\",\n): Promise<{\n primitive: Structure;\n conventional: Structure;\n calculationResults: any;\n}> {\n await initMoyo();\n\n // -----------------------------\n // 1. Build reversible mapping\n // -----------------------------\n const symbolToId = new Map<string, number>();\n const idToSymbol = new Map<number, string>();\n\n let counter = 0;\n\n const positions: number[][] = [];\n const numbers: number[] = [];\n\n for (const site of structure.sites) {\n const symbol = site.species.symbol;\n\n if (!symbolToId.has(symbol)) {\n symbolToId.set(symbol, counter);\n idToSymbol.set(counter, symbol);\n counter++;\n }\n\n positions.push(Array.from(site.frac));\n numbers.push(symbolToId.get(symbol)!);\n }\n\n // -----------------------------\n // 2. Build Moyo input\n // -----------------------------\n const moyoInput = {\n lattice: {\n basis: Array.from(structure.lattice.basis.data),\n },\n positions,\n numbers,\n };\n\n // -----------------------------\n // 3. Run symmetry engine\n // -----------------------------\n const results = await analyze_cell(\n JSON.stringify(moyoInput),\n tolerance,\n setting,\n );\n\n // -----------------------------\n // 4. Convert Moyo cell → Structure\n // -----------------------------\n function build(cell: any): Structure {\n const { lattice, positions, numbers } = cell;\n\n const species = [...new Set(numbers)].map((n: number) => ({\n symbol: idToSymbol.get(n)!,\n }));\n\n const sites = positions.map((pos: number[], i: number) => ({\n species: {\n symbol: idToSymbol.get(numbers[i])!,\n },\n frac: new Float64Array(pos),\n }));\n\n return {\n lattice: createLattice(lattice.basis),\n species,\n sites,\n };\n }\n\n // -----------------------------\n // 5. Return both structures\n // -----------------------------\n return {\n primitive: build(results.prim_std_cell),\n conventional: build(results.std_cell),\n calculationResults: results,\n };\n}\n","import { createLattice } from \"@/core/lattice/lattice\";\nimport type { Structure } from \"../structure\";\nimport type { Site } from \"@/core/site/site\";\n\ntype SupercellSize = number | [number, number, number];\n\nexport function supercell(\n structure: Structure,\n size: SupercellSize,\n): Structure {\n const [nx, ny, nz] = typeof size === \"number\" ? [size, size, size] : size;\n\n if (\n nx < 1 ||\n ny < 1 ||\n nz < 1 ||\n !Number.isInteger(nx) ||\n !Number.isInteger(ny) ||\n !Number.isInteger(nz)\n ) {\n throw new Error(\"Supercell dimensions must be positive integers\");\n }\n\n const m = structure.lattice.basis.data;\n\n // row-major scaling\n const newBasis = [\n m[0] * nx,\n m[1] * nx,\n m[2] * nx,\n\n m[3] * ny,\n m[4] * ny,\n m[5] * ny,\n\n m[6] * nz,\n m[7] * nz,\n m[8] * nz,\n ];\n\n const sites: Site[] = [];\n\n for (const site of structure.sites) {\n const [x, y, z] = site.frac;\n\n for (let i = 0; i < nx; i++) {\n for (let j = 0; j < ny; j++) {\n for (let k = 0; k < nz; k++) {\n sites.push({\n species: site.species,\n\n frac: new Float64Array([(x + i) / nx, (y + j) / ny, (z + k) / nz]),\n });\n }\n }\n }\n }\n\n return {\n lattice: createLattice(newBasis),\n sites,\n };\n}\n","import { Species } from \"../species/species\";\n\nexport type SiteProperties = Record<string, any>;\n\nexport type Site<P extends SiteProperties = SiteProperties> = {\n species: Species;\n frac: [number, number, number];\n properties?: P;\n};\n\nexport function createSite<P extends SiteProperties>(\n species: Species,\n frac: [number, number, number],\n properties?: P,\n): Site<P> {\n return {\n species,\n frac,\n properties,\n };\n}\n","import { mul } from \"../matrix/operations/mul\";\nimport { Site } from \"./site\";\nimport { Lattice } from \"../lattice/lattice\";\nimport { Vector } from \"../matrix/vector\";\nimport { Matrix } from \"@/math/matrix\";\n\nexport function cartesian(lattice: Lattice, site: Site): Vector {\n const [x, y, z] = site.frac;\n\n const frac = {\n rows: 3,\n cols: 1,\n data: new Float64Array([x, y, z]),\n };\n\n const result = mul(lattice.basis, frac);\n\n return new Float64Array([result.data[0], result.data[1], result.data[2]]);\n}\n","import { inverse } from \"../lattice/inverse\";\nimport { mul } from \"../matrix/operations/mul\";\nimport { Vector } from \"../matrix/vector\";\nimport { Lattice } from \"../lattice/lattice\";\n\nexport function fractional(lattice: Lattice, cart: Vector): Vector {\n const vec = {\n rows: 3,\n cols: 1,\n data: cart,\n };\n\n const inv = inverse(lattice);\n\n const result = mul(inv, vec);\n\n return new Float64Array([result.data[0], result.data[1], result.data[2]]);\n}\n","import { Lattice } from \"../lattice/lattice\";\nimport { Site } from \"./site\";\nimport { cartesian } from \"./cartesian\";\n\nimport { norm } from \"../matrix/operations/vector/norm\";\n\nexport function distance(lattice: Lattice, a: Site, b: Site): number {\n const dFrac: [number, number, number] = [\n b.frac[0] - a.frac[0],\n b.frac[1] - a.frac[1],\n b.frac[2] - a.frac[2],\n ];\n\n for (let i = 0; i < 3; i++) {\n dFrac[i] -= Math.round(dFrac[i]);\n }\n\n const displaced: Site = {\n species: a.species,\n frac: dFrac,\n };\n\n const dCart = cartesian(lattice, displaced);\n\n return norm(dCart);\n}\n","import { Site } from \"./site\";\n\nfunction wrapValue(x: number): number {\n return ((x % 1) + 1) % 1;\n}\n\nexport function wrap<T>(site: Site<T>): Site<T> {\n return {\n ...site,\n frac: [\n wrapValue(site.frac[0]),\n wrapValue(site.frac[1]),\n wrapValue(site.frac[2]),\n ],\n };\n}\n","export type Species<P extends Record<string, any> = Record<string, any>> = {\n symbol: string;\n properties?: P;\n};\n\nexport function createSpecies<P extends Record<string, any>>(\n symbol: string,\n properties?: P,\n): Species<P> {\n return { symbol, properties };\n}\n","import { fromParameters } from \"../lattice/create/fromParameters\";\nimport { parameters } from \"../lattice/parameters\";\nimport { Structure } from \"../structure/structure\";\n\nfunction cleanValue(value: string): number {\n // remove uncertainty notation:\n // 5.432(1) -> 5.432\n return Number(value.replace(/\\(.+\\)/, \"\"));\n}\n\nfunction tokenize(line: string): string[] {\n return line.match(/'[^']*'|\"[^\"]*\"|\\S+/g) ?? [];\n}\n\nfunction warnUnsupportedSymmetry(spaceGroup: string) {\n console.warn(\n `Space group \"${spaceGroup}\" detected. ` +\n `Symmetry operations are not currently applied; ` +\n `only asymmetric-unit sites will be parsed.`,\n );\n}\n\nexport function fromCIF(text: string): Structure {\n const lines = text\n .split(\"\\n\")\n .map((x) => x.trim())\n .filter(Boolean);\n\n let a = 0;\n let b = 0;\n let c = 0;\n\n let alpha = 0;\n let beta = 0;\n let gamma = 0;\n\n let spaceGroup = \"P1\";\n\n let atomHeaders: string[] = [];\n const atomRows: string[][] = [];\n\n let inLoop = false;\n let currentHeaders: string[] = [];\n let collectingAtoms = false;\n\n for (const line of lines) {\n if (line.startsWith(\"_symmetry_space_group_name_H-M\")) {\n const tokens = tokenize(line);\n spaceGroup = tokens.at(-1)?.replace(/['\"]/g, \"\") ?? \"P1\";\n } else if (line.startsWith(\"_space_group_name_H-M_alt\")) {\n const tokens = tokenize(line);\n spaceGroup = tokens.at(-1)?.replace(/['\"]/g, \"\") ?? \"P1\";\n } else if (line.startsWith(\"_cell_length_a\")) {\n a = cleanValue(tokenize(line)[1]);\n } else if (line.startsWith(\"_cell_length_b\")) {\n b = cleanValue(tokenize(line)[1]);\n } else if (line.startsWith(\"_cell_length_c\")) {\n c = cleanValue(tokenize(line)[1]);\n } else if (line.startsWith(\"_cell_angle_alpha\")) {\n alpha = cleanValue(tokenize(line)[1]);\n } else if (line.startsWith(\"_cell_angle_beta\")) {\n beta = cleanValue(tokenize(line)[1]);\n } else if (line.startsWith(\"_cell_angle_gamma\")) {\n gamma = cleanValue(tokenize(line)[1]);\n } else if (line === \"loop_\") {\n inLoop = true;\n currentHeaders = [];\n collectingAtoms = false;\n continue;\n }\n\n if (inLoop && line.startsWith(\"_\")) {\n currentHeaders.push(line);\n\n if (line.includes(\"_atom_site_\")) {\n collectingAtoms = true;\n }\n\n continue;\n }\n\n if (inLoop && collectingAtoms) {\n if (atomHeaders.length === 0) {\n atomHeaders = [...currentHeaders];\n }\n\n atomRows.push(tokenize(line));\n }\n }\n\n const isP1 = /^P\\s*1$/i.test(spaceGroup);\n\n if (!isP1) {\n warnUnsupportedSymmetry(spaceGroup);\n }\n\n const lattice = fromParameters(a, b, c, alpha, beta, gamma);\n\n const ix = atomHeaders.findIndex((x) => x.includes(\"fract_x\"));\n\n const iy = atomHeaders.findIndex((x) => x.includes(\"fract_y\"));\n\n const iz = atomHeaders.findIndex((x) => x.includes(\"fract_z\"));\n\n const ispecies = atomHeaders.findIndex((x) => x.includes(\"type_symbol\"));\n\n if (ix < 0 || iy < 0 || iz < 0 || ispecies < 0) {\n throw new Error(\"Missing required atom site columns\");\n }\n\n const sites = atomRows.map((row) => ({\n species: {\n symbol: row[ispecies],\n },\n\n frac: new Float64Array([\n cleanValue(row[ix]),\n cleanValue(row[iy]),\n cleanValue(row[iz]),\n ]),\n }));\n\n return {\n lattice,\n sites,\n };\n}\n\nexport function toCIF(structure: Structure, precision = 6): string {\n const p = parameters(structure.lattice);\n\n const lines: string[] = [];\n\n lines.push(\"data_matsci-parse\");\n lines.push(\"\");\n\n lines.push(\"_symmetry_space_group_name_H-M 'P 1'\");\n lines.push(\"_symmetry_Int_Tables_number 1\");\n\n lines.push(\"\");\n\n lines.push(`_cell_length_a ${p[0].toFixed(precision)}`);\n\n lines.push(`_cell_length_b ${p[1].toFixed(precision)}`);\n\n lines.push(`_cell_length_c ${p[2].toFixed(precision)}`);\n\n lines.push(`_cell_angle_alpha ${p[3].toFixed(precision)}`);\n\n lines.push(`_cell_angle_beta ${p[4].toFixed(precision)}`);\n\n lines.push(`_cell_angle_gamma ${p[5].toFixed(precision)}`);\n\n lines.push(\"\");\n\n lines.push(\"loop_\");\n lines.push(\"_atom_site_label\");\n lines.push(\"_atom_site_type_symbol\");\n lines.push(\"_atom_site_fract_x\");\n lines.push(\"_atom_site_fract_y\");\n lines.push(\"_atom_site_fract_z\");\n\n for (let i = 0; i < structure.sites.length; i++) {\n const site = structure.sites[i];\n\n lines.push(\n `${site.species.symbol}${i + 1} ` +\n `${site.species.symbol} ` +\n `${site.frac[0].toFixed(precision)} ` +\n `${site.frac[1].toFixed(precision)} ` +\n `${site.frac[2].toFixed(precision)}`,\n );\n }\n\n return lines.join(\"\\n\");\n}\n","import { createLattice } from \"../lattice/lattice\";\nimport { inverse } from \"../lattice/inverse\";\nimport { mul } from \"../matrix/operations/mul\";\nimport { createMatrix } from \"../matrix/matrix\";\nimport { Site } from \"../site/site\";\nimport { Structure } from \"../structure/structure\";\nimport { fractional } from \"../site/fractional\";\n\nfunction isSelective(line: string): boolean {\n return line.toLowerCase().startsWith(\"selective\");\n}\n\nfunction isDirect(line: string): boolean {\n const l = line.toLowerCase();\n return l.startsWith(\"direct\") || l.startsWith(\"fractional\");\n}\n\nfunction isCartesian(line: string): boolean {\n const l = line.toLowerCase();\n return l.startsWith(\"cart\");\n}\n\n// TODO: Currently nukes the selective dynamics flag from the input file.\n// It would be good to restore this.\n// TODO: would be good to ensure that the title is also optionally\n// maintained.\nexport function fromPOSCAR(text: string): Structure {\n const lines = text\n .split(\"\\n\")\n .map((x) => x.trim())\n .filter(Boolean);\n\n let cursor = 0;\n\n // comment/title\n cursor++;\n\n // scale factor\n const scale = Number(lines[cursor++]);\n\n // lattice vectors (row-major)\n const latticeData: number[] = [];\n\n for (let i = 0; i < 3; i++) {\n const v = lines[cursor++].split(/\\s+/).map(Number);\n\n if (v.length !== 3) {\n throw new Error(\"Invalid POSCAR lattice\");\n }\n\n latticeData.push(v[0] * scale, v[1] * scale, v[2] * scale);\n }\n\n const lattice = createLattice(latticeData);\n\n // VASP5 species names\n const symbols = lines[cursor++].split(/\\s+/);\n\n // atom counts\n const counts = lines[cursor++].split(/\\s+/).map(Number);\n\n if (symbols.length !== counts.length) {\n throw new Error(\"Species/count mismatch\");\n }\n\n // optional selective dynamics\n if (isSelective(lines[cursor])) {\n cursor++;\n }\n\n const direct = isDirect(lines[cursor]);\n const cartesian = isCartesian(lines[cursor]);\n\n if (!direct && !cartesian) {\n throw new Error(\"Expected Direct or Cartesian\");\n }\n\n cursor++;\n\n const sites: Site[] = [];\n\n let speciesIndex = 0;\n let remaining = counts[0];\n\n const latticeInv = cartesian ? inverse(lattice) : null;\n\n const totalAtoms = counts.reduce((a, b) => a + b, 0);\n\n for (let i = 0; i < totalAtoms; i++) {\n const tokens = lines[cursor++].split(/\\s+/);\n\n const coords = tokens.slice(0, 3).map(Number);\n\n const frac = direct\n ? new Float64Array(coords)\n : fractional(lattice, new Float64Array(coords));\n\n sites.push({\n species: {\n symbol: symbols[speciesIndex],\n },\n frac,\n });\n\n remaining--;\n\n if (remaining === 0 && speciesIndex < counts.length - 1) {\n speciesIndex++;\n remaining = counts[speciesIndex];\n }\n }\n\n return {\n lattice,\n sites,\n };\n}\n\nexport function toPOSCAR(\n structure: Structure,\n options?: {\n title?: string;\n scale?: number;\n direct?: boolean;\n },\n): string {\n const title = options?.title ?? \"Generated by matsci-parse\";\n const scale = options?.scale ?? 1.0;\n const direct = options?.direct ?? true;\n\n const lines: string[] = [];\n\n lines.push(title);\n lines.push(String(scale));\n\n // lattice\n const m = structure.lattice.basis.data;\n\n lines.push(`${m[0]} ${m[1]} ${m[2]}`);\n lines.push(`${m[3]} ${m[4]} ${m[5]}`);\n lines.push(`${m[6]} ${m[7]} ${m[8]}`);\n\n // preserve order of first appearance\n const grouped = new Map<string, typeof structure.sites>();\n\n for (const site of structure.sites) {\n const symbol = site.species.symbol;\n\n if (!grouped.has(symbol)) {\n grouped.set(symbol, []);\n }\n\n grouped.get(symbol)!.push(site);\n }\n\n const species = [...grouped.keys()];\n const sites = [...grouped.values()].flat();\n\n lines.push(species.join(\" \"));\n lines.push(species.map((s) => grouped.get(s)!.length).join(\" \"));\n\n lines.push(direct ? \"Direct\" : \"Cartesian\");\n\n for (const site of sites) {\n const coords = direct ? site.frac : cartesian(structure.lattice, site);\n\n lines.push(`${coords[0]} ${coords[1]} ${coords[2]}`);\n }\n\n return lines.join(\"\\n\");\n}\n","import { Structure } from \"../structure/structure\";\nimport { createLattice } from \"../lattice/lattice\";\n\nimport { cartesian } from \"../site/cartesian\";\nimport { fractional } from \"../site/fractional\";\n\nexport interface AiiDASite {\n position: [number, number, number];\n symbols: string[];\n}\n\nexport interface StructureData {\n cell: [\n [number, number, number],\n [number, number, number],\n [number, number, number],\n ];\n\n sites: AiiDASite[];\n}\n\nexport function fromStructureData(data: any): Structure {\n const lattice = createLattice([\n ...data.cell[0],\n ...data.cell[1],\n ...data.cell[2],\n ]);\n\n const kindMap = new Map(data.kinds.map((kind: any) => [kind.name, kind]));\n\n const sites = data.sites.map((site: any) => {\n const kind = kindMap.get(site.kind_name);\n\n if (!kind) {\n throw new Error(`Unknown kind \"${site.kind_name}\"`);\n }\n\n return {\n species: {\n symbol: kind.symbols[0],\n },\n\n frac: fractional(lattice, new Float64Array(site.position)),\n };\n });\n\n return {\n lattice,\n sites,\n };\n}\n\nexport function toStructureData(structure: Structure) {\n const m = structure.lattice.basis.data;\n\n const symbols = [...new Set(structure.sites.map((s) => s.species.symbol))];\n\n const kinds = symbols.map((symbol) => ({\n name: symbol,\n symbols: [symbol],\n }));\n\n return {\n cell: [\n [m[0], m[1], m[2]],\n [m[3], m[4], m[5]],\n [m[6], m[7], m[8]],\n ],\n\n kinds,\n\n sites: structure.sites.map((site) => ({\n kind_name: site.species.symbol,\n\n position: Array.from(cartesian(structure.lattice, site)),\n })),\n\n pbc1: true,\n pbc2: true,\n pbc3: true,\n };\n}\n","import { createLattice } from \"../lattice/lattice\";\nimport { fractional } from \"../site/fractional\";\nimport { cartesian } from \"../site/cartesian\";\nimport { Site } from \"../site/site\";\nimport { Structure } from \"../structure/structure\";\n\nfunction findSection(lines: string[], section: string): number {\n const idx = lines.findIndex((line) => line.trim().toUpperCase() === section);\n\n if (idx === -1) {\n throw new Error(`Missing ${section}`);\n }\n\n return idx;\n}\n\n// TODO: support atomic numbers instead of symbols in primvec.\n\nexport function fromXSF(text: string): Structure {\n const lines = text\n .split(\"\\n\")\n .map((x) => x.trim())\n .filter(Boolean);\n\n const vecStart = findSection(lines, \"PRIMVEC\");\n\n const lattice = createLattice([\n ...lines[vecStart + 1].split(/\\s+/).map(Number),\n ...lines[vecStart + 2].split(/\\s+/).map(Number),\n ...lines[vecStart + 3].split(/\\s+/).map(Number),\n ]);\n\n const coordStart = findSection(lines, \"PRIMCOORD\");\n\n const [nAtoms] = lines[coordStart + 1].split(/\\s+/).map(Number);\n\n const sites: Site[] = [];\n\n for (let i = 0; i < nAtoms; i++) {\n const tokens = lines[coordStart + 2 + i].split(/\\s+/);\n\n const symbol = tokens[0];\n\n const x = Number(tokens[1]);\n const y = Number(tokens[2]);\n const z = Number(tokens[3]);\n\n const frac = fractional(lattice, new Float64Array([x, y, z]));\n\n sites.push({\n species: { symbol },\n frac,\n });\n }\n\n return {\n lattice,\n sites,\n };\n}\n\nfunction formatVec(v: number[]): string {\n return `${v[0]} ${v[1]} ${v[2]}`;\n}\n\nfunction formatLattice(lattice: Structure[\"lattice\"]): string[] {\n const m = lattice.basis.data;\n\n return [\n formatVec([m[0], m[1], m[2]]),\n formatVec([m[3], m[4], m[5]]),\n formatVec([m[6], m[7], m[8]]),\n ];\n}\n\nexport function toXSF(structure: Structure): string {\n const lines: string[] = [];\n\n lines.push(\"CRYSTAL\");\n lines.push(\"PRIMVEC\");\n\n const latticeLines = formatLattice(structure.lattice);\n lines.push(...latticeLines);\n\n lines.push(\"\");\n lines.push(\"PRIMCOORD\");\n lines.push(`${structure.sites.length} 1`);\n\n for (const site of structure.sites) {\n const c = cartesian(structure.lattice, site);\n\n lines.push(`${site.species.symbol} ${c[0]} ${c[1]} ${c[2]}`);\n }\n\n return lines.join(\"\\n\");\n}\n","import { createLattice, Lattice } from \"../lattice/lattice\";\nimport { Site } from \"../site/site\";\nimport { Structure } from \"../structure/structure\";\n\ntype ExtendedXYZInfo = Record<string, string>;\n\nfunction parseHeader(comment: string): ExtendedXYZInfo {\n const info: ExtendedXYZInfo = {};\n const kvRegex = /(\\w+)=(\".*?\"|\\S+)/g;\n\n for (const match of comment.matchAll(kvRegex)) {\n let value = match[2];\n if (value.startsWith('\"')) value = value.slice(1, -1);\n info[match[1]] = value;\n }\n\n return info;\n}\n\nfunction parseLattice(info: ExtendedXYZInfo) {\n if (!info.Lattice) {\n throw new Error(\"Extended XYZ must contain Lattice\");\n }\n\n const v = info.Lattice.split(/\\s+/).map(Number);\n if (v.length !== 9) throw new Error(\"Invalid Lattice\");\n\n return createLattice([v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8]]);\n}\n\nexport function fromXYZ(text: string) {\n const lines = text.trim().split(\"\\n\");\n\n const n = Number(lines[0]);\n const comment = lines[1];\n\n const info = parseHeader(comment);\n const lattice = parseLattice(info);\n\n const sites: Site[] = [];\n\n for (let i = 0; i < n; i++) {\n const [symbol, x, y, z] = lines[2 + i].split(/\\s+/);\n\n sites.push({\n species: { symbol },\n frac: new Float64Array([+x, +y, +z]),\n });\n }\n\n return { lattice, sites };\n}\n\nfunction formatLattice(lattice: Lattice): string {\n const m = lattice.basis.data;\n\n // row-major flattening assumption (consistent with your matrix code)\n return `${m[0]} ${m[1]} ${m[2]} ${m[3]} ${m[4]} ${m[5]} ${m[6]} ${m[7]} ${m[8]}`;\n}\n\nexport function toXYZ(structure: Structure): string {\n const sites = structure.sites;\n\n const lines: string[] = [];\n\n lines.push(String(sites.length));\n\n const latticeStr = formatLattice(structure.lattice);\n\n lines.push(`Lattice=\"${latticeStr}\"`);\n\n for (const site of sites) {\n const f = site.frac;\n\n lines.push(`${site.species.symbol} ${f[0]} ${f[1]} ${f[2]}`);\n }\n\n return lines.join(\"\\n\");\n}\n"],"names":["createMatrix","rows","cols","data","size","buffer","index","row","col","EPS","clean","x","createLattice","values","cleaned","i","toJSON","structure","s","fromJSON","wrap","v","canonicalize","site","toFixedArray","precision","fnv1a","str","hash","hashStructure","lattice","latticeKey","sitesKey","key","appendSite","insertSite","removeSite","_","replaceSite","dot","a","b","sum","norm","angle","u","denom","c","clamped","angles","m","alpha","beta","gamma","inverse3x3","a00","a01","a02","a10","a11","a12","a20","a21","a22","c00","c01","c02","c10","c11","c12","c20","c21","c22","det","invDet","out","inverse","lengths","transpose","matrix","mul","aRows","aCols","bCols","k","metricTensor","AT","RAD2DEG","parameters","TWO_PI","reciprocalLattice","inv","reciprocalLatticeCrystallographic","invT","minor","skipRow","skipCol","ptr","determinant","n","sign","volume","DEG2RAD","fromParameters","alphaR","betaR","gammaR","cosA","cosB","cosG","sinG","v1","v2","cx","cy","czSquared","cz","cubic","hexagonal","monoclinic","orthorhombic","rhombohedral","tetragonal","ready","initMoyo","readFileSync","join","wasmPath","wasmBuffer","init","e","wasmUrl","getSymmetry","tolerance","setting","symbolToId","idToSymbol","counter","positions","numbers","symbol","moyoInput","results","analyze_cell","build","cell","species","sites","pos","supercell","nx","ny","nz","newBasis","y","z","j","createSite","frac","properties","cartesian","result","fractional","cart","vec","distance","dFrac","displaced","dCart","wrapValue","createSpecies","cleanValue","value","tokenize","line","warnUnsupportedSymmetry","spaceGroup","fromCIF","text","lines","atomHeaders","atomRows","inLoop","currentHeaders","collectingAtoms","ix","iy","iz","ispecies","toCIF","p","isSelective","isDirect","l","isCartesian","fromPOSCAR","cursor","scale","latticeData","symbols","counts","direct","speciesIndex","remaining","totalAtoms","coords","toPOSCAR","options","title","grouped","fromStructureData","kindMap","kind","toStructureData","kinds","findSection","section","idx","fromXSF","vecStart","coordStart","nAtoms","tokens","formatVec","formatLattice","toXSF","latticeLines","parseHeader","comment","info","kvRegex","match","parseLattice","fromXYZ","toXYZ","latticeStr","f"],"mappings":"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"}
|