matterviz 0.3.1 → 0.3.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.
Files changed (358) hide show
  1. package/dist/EmptyState.svelte +10 -2
  2. package/dist/FilePicker.svelte +154 -96
  3. package/dist/Icon.svelte +20 -14
  4. package/dist/MillerIndexInput.svelte +27 -21
  5. package/dist/api/optimade.js +6 -6
  6. package/dist/app.css +216 -178
  7. package/dist/brillouin/BrillouinZone.svelte +299 -198
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
  9. package/dist/brillouin/BrillouinZoneControls.svelte +32 -5
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +74 -55
  11. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  12. package/dist/brillouin/BrillouinZoneInfoPane.svelte +99 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte +277 -165
  14. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  15. package/dist/brillouin/BrillouinZoneTooltip.svelte +17 -7
  16. package/dist/brillouin/compute.js +11 -6
  17. package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
  18. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  19. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +847 -0
  20. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  21. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3194 -0
  22. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  23. package/dist/chempot-diagram/ChemPotScene3D.svelte +11 -0
  24. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  25. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  26. package/dist/chempot-diagram/async-compute.svelte.js +77 -0
  27. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  28. package/dist/chempot-diagram/chempot-worker.js +11 -0
  29. package/dist/chempot-diagram/color.d.ts +10 -0
  30. package/dist/chempot-diagram/color.js +32 -0
  31. package/dist/chempot-diagram/compute.d.ts +48 -0
  32. package/dist/chempot-diagram/compute.js +812 -0
  33. package/dist/chempot-diagram/index.d.ts +6 -0
  34. package/dist/chempot-diagram/index.js +6 -0
  35. package/dist/chempot-diagram/pointer.d.ts +16 -0
  36. package/dist/chempot-diagram/pointer.js +40 -0
  37. package/dist/chempot-diagram/temperature.d.ts +15 -0
  38. package/dist/chempot-diagram/temperature.js +36 -0
  39. package/dist/chempot-diagram/types.d.ts +86 -0
  40. package/dist/chempot-diagram/types.js +28 -0
  41. package/dist/colors/index.d.ts +3 -1
  42. package/dist/colors/index.js +9 -3
  43. package/dist/composition/BarChart.svelte +141 -77
  44. package/dist/composition/BubbleChart.svelte +107 -52
  45. package/dist/composition/Composition.svelte +100 -79
  46. package/dist/composition/Formula.svelte +108 -62
  47. package/dist/composition/FormulaFilter.svelte +973 -353
  48. package/dist/composition/FormulaFilter.svelte.d.ts +35 -1
  49. package/dist/composition/PieChart.svelte +199 -99
  50. package/dist/composition/PieChart.svelte.d.ts +1 -1
  51. package/dist/composition/format.d.ts +5 -0
  52. package/dist/composition/format.js +20 -3
  53. package/dist/composition/parse.js +14 -9
  54. package/dist/convex-hull/ConvexHull.svelte +93 -38
  55. package/dist/convex-hull/ConvexHull2D.svelte +551 -393
  56. package/dist/convex-hull/ConvexHull3D.svelte +1303 -825
  57. package/dist/convex-hull/ConvexHull4D.svelte +1012 -686
  58. package/dist/convex-hull/ConvexHullControls.svelte +115 -28
  59. package/dist/convex-hull/ConvexHullInfoPane.svelte +29 -3
  60. package/dist/convex-hull/ConvexHullStats.svelte +821 -249
  61. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +6 -1
  62. package/dist/convex-hull/ConvexHullTooltip.svelte +41 -16
  63. package/dist/convex-hull/GasPressureControls.svelte +104 -61
  64. package/dist/convex-hull/StructurePopup.svelte +25 -4
  65. package/dist/convex-hull/TemperatureSlider.svelte +45 -25
  66. package/dist/convex-hull/barycentric-coords.js +13 -7
  67. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  68. package/dist/convex-hull/demo-temperature.js +40 -0
  69. package/dist/convex-hull/gas-thermodynamics.js +17 -12
  70. package/dist/convex-hull/helpers.d.ts +10 -1
  71. package/dist/convex-hull/helpers.js +79 -38
  72. package/dist/convex-hull/index.d.ts +1 -0
  73. package/dist/convex-hull/index.js +1 -0
  74. package/dist/convex-hull/thermodynamics.d.ts +8 -21
  75. package/dist/convex-hull/thermodynamics.js +163 -69
  76. package/dist/convex-hull/types.d.ts +12 -12
  77. package/dist/convex-hull/types.js +0 -12
  78. package/dist/coordination/CoordinationBarPlot.svelte +232 -176
  79. package/dist/element/BohrAtom.svelte +56 -13
  80. package/dist/element/ElementHeading.svelte +7 -2
  81. package/dist/element/ElementPhoto.svelte +15 -9
  82. package/dist/element/ElementStats.svelte +10 -4
  83. package/dist/element/ElementTile.svelte +137 -73
  84. package/dist/element/Nucleus.svelte +39 -11
  85. package/dist/element/data.js +2 -14
  86. package/dist/element/data.json.gz +0 -0
  87. package/dist/element/types.d.ts +1 -0
  88. package/dist/feedback/ClickFeedback.svelte +16 -5
  89. package/dist/feedback/DragOverlay.svelte +10 -2
  90. package/dist/feedback/Spinner.svelte +4 -2
  91. package/dist/feedback/StatusMessage.svelte +8 -2
  92. package/dist/fermi-surface/FermiSlice.svelte +118 -88
  93. package/dist/fermi-surface/FermiSurface.svelte +336 -239
  94. package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
  95. package/dist/fermi-surface/FermiSurfaceControls.svelte +113 -46
  96. package/dist/fermi-surface/FermiSurfaceScene.svelte +536 -343
  97. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  98. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +14 -5
  99. package/dist/fermi-surface/compute.js +16 -20
  100. package/dist/fermi-surface/parse.js +37 -33
  101. package/dist/fermi-surface/symmetry.js +2 -7
  102. package/dist/fermi-surface/types.d.ts +3 -5
  103. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1527 -0
  104. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  105. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  106. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  107. package/dist/heatmap-matrix/index.d.ts +53 -0
  108. package/dist/heatmap-matrix/index.js +100 -0
  109. package/dist/heatmap-matrix/shared.d.ts +2 -0
  110. package/dist/heatmap-matrix/shared.js +4 -0
  111. package/dist/icons.d.ts +111 -0
  112. package/dist/icons.js +158 -0
  113. package/dist/index.d.ts +5 -2
  114. package/dist/index.js +5 -2
  115. package/dist/io/decompress.js +1 -1
  116. package/dist/io/export.d.ts +3 -0
  117. package/dist/io/export.js +138 -140
  118. package/dist/io/file-drop.d.ts +7 -0
  119. package/dist/io/file-drop.js +43 -0
  120. package/dist/io/index.d.ts +2 -2
  121. package/dist/io/index.js +2 -112
  122. package/dist/io/is-binary.js +2 -3
  123. package/dist/io/types.d.ts +1 -0
  124. package/dist/io/url-drop.d.ts +2 -0
  125. package/dist/io/url-drop.js +117 -0
  126. package/dist/isosurface/Isosurface.svelte +220 -110
  127. package/dist/isosurface/IsosurfaceControls.svelte +65 -28
  128. package/dist/isosurface/parse.js +104 -56
  129. package/dist/isosurface/slice.d.ts +2 -1
  130. package/dist/isosurface/slice.js +8 -13
  131. package/dist/isosurface/types.d.ts +14 -1
  132. package/dist/isosurface/types.js +152 -5
  133. package/dist/labels.d.ts +2 -1
  134. package/dist/labels.js +12 -8
  135. package/dist/layout/FullscreenToggle.svelte +11 -2
  136. package/dist/layout/InfoCard.svelte +38 -6
  137. package/dist/layout/InfoTag.svelte +125 -94
  138. package/dist/layout/PropertyFilter.svelte +82 -37
  139. package/dist/layout/SettingsSection.svelte +85 -55
  140. package/dist/layout/SubpageGrid.svelte +82 -0
  141. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  142. package/dist/layout/index.d.ts +1 -0
  143. package/dist/layout/index.js +1 -0
  144. package/dist/layout/json-tree/JsonNode.svelte +266 -223
  145. package/dist/layout/json-tree/JsonTree.svelte +516 -429
  146. package/dist/layout/json-tree/JsonTree.svelte.d.ts +1 -1
  147. package/dist/layout/json-tree/JsonValue.svelte +281 -173
  148. package/dist/layout/json-tree/types.d.ts +10 -2
  149. package/dist/layout/json-tree/utils.d.ts +2 -0
  150. package/dist/layout/json-tree/utils.js +37 -2
  151. package/dist/marching-cubes.js +25 -2
  152. package/dist/math.d.ts +20 -17
  153. package/dist/math.js +474 -57
  154. package/dist/overlays/ContextMenu.svelte +66 -40
  155. package/dist/overlays/DraggablePane.svelte +331 -154
  156. package/dist/overlays/DraggablePane.svelte.d.ts +2 -0
  157. package/dist/periodic-table/PeriodicTable.svelte +278 -145
  158. package/dist/periodic-table/PeriodicTableControls.svelte +178 -128
  159. package/dist/periodic-table/PropertySelect.svelte +25 -7
  160. package/dist/periodic-table/TableInset.svelte +8 -3
  161. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +559 -267
  162. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -2
  163. package/dist/phase-diagram/PhaseDiagramControls.svelte +131 -51
  164. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +3 -2
  165. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  166. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  167. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +160 -110
  168. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +8 -1
  169. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +217 -86
  170. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +6 -3
  171. package/dist/phase-diagram/TdbInfoPanel.svelte +28 -4
  172. package/dist/phase-diagram/build-diagram.js +9 -9
  173. package/dist/phase-diagram/colors.js +1 -3
  174. package/dist/phase-diagram/index.d.ts +2 -0
  175. package/dist/phase-diagram/index.js +2 -0
  176. package/dist/phase-diagram/parse.js +10 -9
  177. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  178. package/dist/phase-diagram/svg-to-diagram.js +869 -0
  179. package/dist/phase-diagram/types.d.ts +10 -0
  180. package/dist/phase-diagram/utils.d.ts +8 -4
  181. package/dist/phase-diagram/utils.js +219 -74
  182. package/dist/plot/AxisLabel.svelte +51 -0
  183. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  184. package/dist/plot/BarPlot.svelte +1461 -768
  185. package/dist/plot/BarPlot.svelte.d.ts +3 -3
  186. package/dist/plot/BarPlotControls.svelte +33 -6
  187. package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
  188. package/dist/plot/ColorBar.svelte +533 -383
  189. package/dist/plot/ColorBar.svelte.d.ts +1 -1
  190. package/dist/plot/ColorScaleSelect.svelte +28 -7
  191. package/dist/plot/ElementScatter.svelte +38 -16
  192. package/dist/plot/FillArea.svelte +152 -92
  193. package/dist/plot/Histogram.svelte +1162 -709
  194. package/dist/plot/Histogram.svelte.d.ts +1 -1
  195. package/dist/plot/HistogramControls.svelte +81 -18
  196. package/dist/plot/HistogramControls.svelte.d.ts +6 -2
  197. package/dist/plot/InteractiveAxisLabel.svelte +34 -11
  198. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +1 -1
  199. package/dist/plot/Line.svelte +63 -28
  200. package/dist/plot/PlotControls.svelte +221 -96
  201. package/dist/plot/PlotControls.svelte.d.ts +1 -1
  202. package/dist/plot/PlotLegend.svelte +174 -91
  203. package/dist/plot/PlotTooltip.svelte +45 -6
  204. package/dist/plot/PortalSelect.svelte +175 -146
  205. package/dist/plot/ReferenceLine.svelte +77 -22
  206. package/dist/plot/ReferenceLine.svelte.d.ts +1 -0
  207. package/dist/plot/ReferenceLine3D.svelte +132 -107
  208. package/dist/plot/ReferencePlane.svelte +146 -123
  209. package/dist/plot/ScatterPlot.svelte +1880 -1156
  210. package/dist/plot/ScatterPlot.svelte.d.ts +3 -3
  211. package/dist/plot/ScatterPlot3D.svelte +256 -131
  212. package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
  213. package/dist/plot/ScatterPlot3DControls.svelte +300 -297
  214. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +2 -1
  215. package/dist/plot/ScatterPlot3DScene.svelte +608 -406
  216. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
  217. package/dist/plot/ScatterPlotControls.svelte +150 -70
  218. package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
  219. package/dist/plot/ScatterPoint.svelte +98 -26
  220. package/dist/plot/ScatterPoint.svelte.d.ts +1 -0
  221. package/dist/plot/SpacegroupBarPlot.svelte +142 -85
  222. package/dist/plot/Surface3D.svelte +159 -108
  223. package/dist/plot/ZeroLines.svelte +96 -0
  224. package/dist/plot/ZeroLines.svelte.d.ts +32 -0
  225. package/dist/plot/ZoomRect.svelte +23 -0
  226. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  227. package/dist/plot/axis-utils.d.ts +1 -1
  228. package/dist/plot/axis-utils.js +1 -3
  229. package/dist/plot/data-cleaning.js +12 -28
  230. package/dist/plot/data-transform.js +2 -1
  231. package/dist/plot/fill-utils.js +2 -0
  232. package/dist/plot/index.d.ts +6 -2
  233. package/dist/plot/index.js +6 -2
  234. package/dist/plot/interactions.d.ts +8 -10
  235. package/dist/plot/interactions.js +2 -3
  236. package/dist/plot/layout.d.ts +11 -2
  237. package/dist/plot/layout.js +44 -17
  238. package/dist/plot/reference-line.d.ts +5 -22
  239. package/dist/plot/reference-line.js +12 -84
  240. package/dist/plot/scales.js +24 -36
  241. package/dist/plot/types.d.ts +53 -40
  242. package/dist/plot/types.js +12 -7
  243. package/dist/plot/utils/label-placement.d.ts +32 -15
  244. package/dist/plot/utils/label-placement.js +227 -63
  245. package/dist/plot/utils/series-visibility.js +2 -3
  246. package/dist/plot/utils.d.ts +1 -0
  247. package/dist/plot/utils.js +14 -0
  248. package/dist/rdf/RdfPlot.svelte +173 -132
  249. package/dist/rdf/calc-rdf.js +4 -5
  250. package/dist/sanitize.d.ts +4 -0
  251. package/dist/sanitize.js +107 -0
  252. package/dist/settings.d.ts +21 -6
  253. package/dist/settings.js +63 -19
  254. package/dist/spectral/Bands.svelte +963 -412
  255. package/dist/spectral/Bands.svelte.d.ts +22 -2
  256. package/dist/spectral/BandsAndDos.svelte +90 -49
  257. package/dist/spectral/BrillouinBandsDos.svelte +151 -93
  258. package/dist/spectral/Dos.svelte +389 -258
  259. package/dist/spectral/helpers.d.ts +23 -1
  260. package/dist/spectral/helpers.js +119 -51
  261. package/dist/spectral/types.d.ts +2 -0
  262. package/dist/state.svelte.d.ts +1 -1
  263. package/dist/state.svelte.js +3 -2
  264. package/dist/structure/Arrow.svelte +59 -20
  265. package/dist/structure/AtomLegend.svelte +231 -129
  266. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  267. package/dist/structure/Bond.svelte +73 -47
  268. package/dist/structure/CanvasTooltip.svelte +10 -2
  269. package/dist/structure/CellSelect.svelte +148 -51
  270. package/dist/structure/Cylinder.svelte +33 -17
  271. package/dist/structure/Lattice.svelte +88 -33
  272. package/dist/structure/Structure.svelte +1077 -821
  273. package/dist/structure/Structure.svelte.d.ts +1 -1
  274. package/dist/structure/StructureControls.svelte +373 -139
  275. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  276. package/dist/structure/StructureExportPane.svelte +124 -89
  277. package/dist/structure/StructureExportPane.svelte.d.ts +1 -1
  278. package/dist/structure/StructureInfoPane.svelte +304 -231
  279. package/dist/structure/StructureScene.svelte +919 -445
  280. package/dist/structure/StructureScene.svelte.d.ts +16 -7
  281. package/dist/structure/atom-properties.d.ts +6 -2
  282. package/dist/structure/atom-properties.js +42 -29
  283. package/dist/structure/bonding.js +6 -7
  284. package/dist/structure/export.js +22 -34
  285. package/dist/structure/ferrox-wasm-types.d.ts +3 -2
  286. package/dist/structure/ferrox-wasm-types.js +0 -3
  287. package/dist/structure/ferrox-wasm.d.ts +3 -2
  288. package/dist/structure/ferrox-wasm.js +2 -3
  289. package/dist/structure/index.d.ts +16 -0
  290. package/dist/structure/index.js +88 -6
  291. package/dist/structure/measure.d.ts +2 -2
  292. package/dist/structure/measure.js +4 -44
  293. package/dist/structure/parse.js +130 -155
  294. package/dist/structure/partial-occupancy.d.ts +25 -0
  295. package/dist/structure/partial-occupancy.js +99 -0
  296. package/dist/structure/pbc.d.ts +1 -0
  297. package/dist/structure/pbc.js +16 -6
  298. package/dist/structure/supercell.d.ts +2 -2
  299. package/dist/structure/supercell.js +12 -22
  300. package/dist/structure/validation.js +5 -3
  301. package/dist/symmetry/SymmetryStats.svelte +94 -37
  302. package/dist/symmetry/WyckoffTable.svelte +42 -14
  303. package/dist/symmetry/cell-transform.js +5 -3
  304. package/dist/symmetry/index.d.ts +7 -4
  305. package/dist/symmetry/index.js +87 -21
  306. package/dist/symmetry/spacegroups.js +148 -148
  307. package/dist/table/HeatmapTable.svelte +1112 -516
  308. package/dist/table/HeatmapTable.svelte.d.ts +12 -1
  309. package/dist/table/ToggleMenu.svelte +125 -90
  310. package/dist/table/index.d.ts +2 -0
  311. package/dist/table/index.js +2 -4
  312. package/dist/theme/ThemeControl.svelte +21 -12
  313. package/dist/time.js +4 -1
  314. package/dist/tooltip/TooltipContent.svelte +33 -8
  315. package/dist/trajectory/Trajectory.svelte +889 -687
  316. package/dist/trajectory/TrajectoryError.svelte +14 -3
  317. package/dist/trajectory/TrajectoryExportPane.svelte +148 -90
  318. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +1 -1
  319. package/dist/trajectory/TrajectoryInfoPane.svelte +272 -143
  320. package/dist/trajectory/constants.d.ts +6 -0
  321. package/dist/trajectory/constants.js +7 -0
  322. package/dist/trajectory/extract.js +13 -31
  323. package/dist/trajectory/format-detect.d.ts +9 -0
  324. package/dist/trajectory/format-detect.js +76 -0
  325. package/dist/trajectory/frame-reader.d.ts +17 -0
  326. package/dist/trajectory/frame-reader.js +332 -0
  327. package/dist/trajectory/helpers.d.ts +14 -0
  328. package/dist/trajectory/helpers.js +172 -0
  329. package/dist/trajectory/index.d.ts +1 -0
  330. package/dist/trajectory/index.js +23 -14
  331. package/dist/trajectory/parse/ase.d.ts +2 -0
  332. package/dist/trajectory/parse/ase.js +77 -0
  333. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  334. package/dist/trajectory/parse/hdf5.js +129 -0
  335. package/dist/trajectory/parse/index.d.ts +12 -0
  336. package/dist/trajectory/parse/index.js +299 -0
  337. package/dist/trajectory/parse/lammps.d.ts +5 -0
  338. package/dist/trajectory/parse/lammps.js +179 -0
  339. package/dist/trajectory/parse/vasp.d.ts +2 -0
  340. package/dist/trajectory/parse/vasp.js +68 -0
  341. package/dist/trajectory/parse/xyz.d.ts +2 -0
  342. package/dist/trajectory/parse/xyz.js +110 -0
  343. package/dist/trajectory/plotting.js +13 -8
  344. package/dist/trajectory/types.d.ts +11 -0
  345. package/dist/trajectory/types.js +1 -0
  346. package/dist/utils.d.ts +3 -0
  347. package/dist/utils.js +17 -0
  348. package/dist/xrd/XrdPlot.svelte +337 -245
  349. package/dist/xrd/broadening.js +14 -9
  350. package/dist/xrd/calc-xrd.js +12 -19
  351. package/dist/xrd/parse.d.ts +1 -1
  352. package/dist/xrd/parse.js +17 -17
  353. package/package.json +103 -101
  354. package/readme.md +4 -4
  355. package/dist/trajectory/parse.d.ts +0 -42
  356. package/dist/trajectory/parse.js +0 -1267
  357. /package/dist/element/{data.json.d.ts → data.json.gz.d.ts} +0 -0
  358. /package/dist/theme/{themes.js → themes.mjs} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { ATOMIC_NUMBER_TO_SYMBOL, SYMBOL_TO_ATOMIC_NUMBER } from '../composition/parse';
2
2
  import { DEFAULTS } from '../settings';
3
+ import { merge_split_partial_sites } from '../structure/partial-occupancy';
3
4
  import init, { analyze_cell } from '@spglib/moyo-wasm';
4
5
  import moyo_wasm_url from '@spglib/moyo-wasm/moyo_wasm_bg.wasm?url';
5
6
  export * from './cell-transform';
@@ -21,6 +22,7 @@ export const default_sym_settings = {
21
22
  algo: DEFAULTS.symmetry.algo,
22
23
  };
23
24
  let initialized = false;
25
+ const OCCUPANCY_EPS = 1e-8;
24
26
  export async function ensure_moyo_wasm_ready(wasm_url) {
25
27
  if (initialized)
26
28
  return;
@@ -29,34 +31,89 @@ export async function ensure_moyo_wasm_ready(wasm_url) {
29
31
  await init({ module_or_path: url });
30
32
  initialized = true;
31
33
  }
32
- export function to_cell_json(structure) {
34
+ function get_site_atomic_number(site, site_idx) {
35
+ const occupancy_by_element = new Map();
36
+ for (const { element, occu } of site.species) {
37
+ if (occu <= OCCUPANCY_EPS)
38
+ continue;
39
+ occupancy_by_element.set(element, (occupancy_by_element.get(element) ?? 0) + occu);
40
+ }
41
+ let selected_element = site.species[0]?.element;
42
+ let best_occupancy = -Infinity;
43
+ occupancy_by_element.forEach((occupancy, element) => {
44
+ if (occupancy > best_occupancy ||
45
+ (occupancy === best_occupancy && element.localeCompare(selected_element ?? ``) < 0)) {
46
+ selected_element = element;
47
+ best_occupancy = occupancy;
48
+ }
49
+ });
50
+ if (selected_element === undefined) {
51
+ throw new Error(`Unknown element at site ${site_idx}: ${selected_element}`);
52
+ }
53
+ const atomic_number = SYMBOL_TO_ATOMIC_NUMBER[selected_element];
54
+ if (atomic_number === undefined) {
55
+ throw new Error(`Unknown element at site ${site_idx}: ${selected_element}`);
56
+ }
57
+ return atomic_number;
58
+ }
59
+ function build_moyo_input_cell(structure) {
60
+ const merged_render_sites = merge_split_partial_sites(structure.sites);
61
+ return {
62
+ positions: merged_render_sites.map(({ site }) => site.abc),
63
+ numbers: merged_render_sites.map(({ site, site_idx }) => get_site_atomic_number(site, site_idx)),
64
+ orig_site_indices_by_input_idx: merged_render_sites.map(({ source_site_indices }) => source_site_indices),
65
+ };
66
+ }
67
+ function build_moyo_cell(structure, positions, numbers) {
33
68
  // nalgebra Matrix3 deserializes as a flat list in COLUMN-MAJOR of the internal basis B
34
69
  // Internal B = transpose(row-basis RB). column-major(B) == row-major(RB).
35
70
  // So supply row-major of the pymatgen lattice.matrix (RB).
36
71
  const [v_a, v_b, v_c] = structure.lattice.matrix;
37
- const basis = [...v_a, ...v_b, ...v_c];
38
- const positions = structure.sites.map((site) => site.abc);
39
- const numbers = structure.sites.map((site, idx) => {
40
- const sym = site.species?.[0]?.element;
41
- const num = sym !== null ? SYMBOL_TO_ATOMIC_NUMBER[sym] : undefined;
42
- if (typeof num !== `number`) {
43
- throw new Error(`Unknown element at site ${idx}: ${String(sym)}`);
72
+ return {
73
+ lattice: { basis: [...v_a, ...v_b, ...v_c] },
74
+ positions,
75
+ numbers,
76
+ };
77
+ }
78
+ export function to_cell_json(structure) {
79
+ const { positions, numbers } = build_moyo_input_cell(structure);
80
+ return JSON.stringify(build_moyo_cell(structure, positions, numbers));
81
+ }
82
+ const fractional_sq_dist = (pos_1, pos_2) => (pos_1[0] - pos_2[0] - Math.round(pos_1[0] - pos_2[0])) ** 2 +
83
+ (pos_1[1] - pos_2[1] - Math.round(pos_1[1] - pos_2[1])) ** 2 +
84
+ (pos_1[2] - pos_2[2] - Math.round(pos_1[2] - pos_2[2])) ** 2;
85
+ export function map_std_to_orig_site_indices(std_positions, std_numbers, input_positions, input_numbers, orig_site_indices_by_input_idx) {
86
+ return std_positions.map((std_pos, std_idx) => {
87
+ const std_number = std_numbers[std_idx];
88
+ let nearest_input_idx = -1;
89
+ let nearest_sq_dist = Infinity;
90
+ for (let input_idx = 0; input_idx < input_positions.length; input_idx += 1) {
91
+ if (input_numbers[input_idx] !== std_number)
92
+ continue;
93
+ const sq_dist = fractional_sq_dist(std_pos, input_positions[input_idx]);
94
+ if (sq_dist < nearest_sq_dist) {
95
+ nearest_sq_dist = sq_dist;
96
+ nearest_input_idx = input_idx;
97
+ }
44
98
  }
45
- return num;
99
+ if (nearest_input_idx === -1)
100
+ return [];
101
+ return orig_site_indices_by_input_idx[nearest_input_idx] ?? [];
46
102
  });
47
- const cell = { lattice: { basis }, positions, numbers };
48
- return JSON.stringify(cell);
49
103
  }
50
104
  export async function analyze_structure_symmetry(struct_or_mol, settings) {
51
105
  await ensure_moyo_wasm_ready();
52
106
  if (!(`lattice` in struct_or_mol)) {
53
107
  throw new Error(`Symmetry analysis requires a periodic structure with a lattice`);
54
108
  }
55
- const cell_json = to_cell_json(struct_or_mol);
109
+ const moyo_input_cell = build_moyo_input_cell(struct_or_mol);
110
+ const cell_json = JSON.stringify(build_moyo_cell(struct_or_mol, moyo_input_cell.positions, moyo_input_cell.numbers));
56
111
  const { symprec, algo } = { ...default_sym_settings, ...settings };
57
112
  // Map "Moyo" to "Standard" for moyo-wasm
58
113
  const moyo_algo = algo === `Moyo` ? `Standard` : algo;
59
- return analyze_cell(cell_json, symprec, moyo_algo);
114
+ const sym_data = analyze_cell(cell_json, symprec, moyo_algo);
115
+ const orig_site_indices_by_std_idx = map_std_to_orig_site_indices(sym_data.std_cell.positions, sym_data.std_cell.numbers, moyo_input_cell.positions, moyo_input_cell.numbers, moyo_input_cell.orig_site_indices_by_input_idx);
116
+ return { ...sym_data, orig_site_indices_by_std_idx };
60
117
  }
61
118
  // Helper function to score coordinate simplicity for Wyckoff table
62
119
  export function simplicity_score(vec) {
@@ -64,7 +121,9 @@ export function simplicity_score(vec) {
64
121
  const near_zero = (v) => Math.min(v, 1 - v);
65
122
  const near_half = (v) => Math.abs(v - 0.5);
66
123
  const [ax, ay, az] = vec?.map(to_unit) ?? [];
67
- return (near_zero(ax) + near_zero(ay) + near_zero(az) +
124
+ return (near_zero(ax) +
125
+ near_zero(ay) +
126
+ near_zero(az) +
68
127
  0.5 * (near_half(ax) + near_half(ay) + near_half(az)));
69
128
  }
70
129
  // Generate Wyckoff table rows from symmetry data
@@ -72,7 +131,7 @@ export function wyckoff_positions_from_moyo(sym_data) {
72
131
  if (!sym_data)
73
132
  return [];
74
133
  const { positions, numbers } = sym_data.std_cell;
75
- const { wyckoffs, orig_indices } = sym_data;
134
+ const { wyckoffs, orig_indices, orig_site_indices_by_std_idx } = sym_data;
76
135
  // Group sites by letter-element combination and track all indices
77
136
  const groups = new Map();
78
137
  // Process all atoms in the standardized cell
@@ -80,7 +139,7 @@ export function wyckoff_positions_from_moyo(sym_data) {
80
139
  for (let idx = 0; idx < numbers.length; idx++) {
81
140
  // Use wyckoff letter if available, otherwise mark as non-symmetric
82
141
  const full = idx < wyckoffs.length ? wyckoffs[idx] : null;
83
- const letter = (full?.match(/[a-z]+$/)?.[0] ?? full ?? ``).toString();
142
+ const letter = full?.match(/[a-z]+$/)?.[0] ?? full ?? ``;
84
143
  const atomic_num = numbers[idx];
85
144
  const elem = ATOMIC_NUMBER_TO_SYMBOL[atomic_num] ?? `?`;
86
145
  const position = positions[idx];
@@ -97,11 +156,18 @@ export function wyckoff_positions_from_moyo(sym_data) {
97
156
  return score < best.score ? { pos, score } : best;
98
157
  }, { pos: positions[0], score: simplicity_score(positions[0]) }).pos;
99
158
  // Map standardized cell indices back to original structure indices
100
- const orig_site_indices = orig_indices
101
- ? indices.map((i) => orig_indices[i]).filter((idx) => idx !== undefined)
102
- : indices;
159
+ const orig_site_indices = orig_site_indices_by_std_idx
160
+ ? indices.flatMap((std_idx) => orig_site_indices_by_std_idx[std_idx] ?? [])
161
+ : orig_indices
162
+ ? indices.map((std_idx) => orig_indices[std_idx]).filter((idx) => idx !== undefined)
163
+ : indices;
103
164
  const wyckoff = letter ? `${indices.length}${letter}` : `1`;
104
- return { wyckoff, elem, abc: best_pos, site_indices: orig_site_indices };
165
+ return {
166
+ wyckoff,
167
+ elem,
168
+ abc: best_pos,
169
+ site_indices: [...new Set(orig_site_indices)].sort((idx_a, idx_b) => idx_a - idx_b),
170
+ };
105
171
  });
106
172
  rows.sort((w1, w2) => {
107
173
  const [w1_mult, w2_mult] = [parseInt(w1.wyckoff), parseInt(w2.wyckoff)];
@@ -141,7 +207,7 @@ export function map_wyckoff_to_all_atoms(wyckoff_positions, displayed_structure,
141
207
  const periodic_distance = (pos1, pos2) => Math.sqrt(pos1.reduce((sum, coord, idx) => {
142
208
  // Wrap delta into [-0.5, 0.5) using safe modulo
143
209
  const delta = coord - pos2[idx];
144
- const wrapped = (((delta + 0.5) % 1) + 1) % 1 - 0.5;
210
+ const wrapped = ((((delta + 0.5) % 1) + 1) % 1) - 0.5;
145
211
  const d = Math.abs(wrapped);
146
212
  return sum + d * d;
147
213
  }, 0));
@@ -61,16 +61,16 @@ export function normalize_spacegroup(spacegroup) {
61
61
  }
62
62
  export const SPACEGROUP_SYMBOL_TO_NUM = {
63
63
  // Triclinic
64
- 'P1': 1,
64
+ P1: 1,
65
65
  'P-1': 2,
66
66
  // Monoclinic
67
- 'P2': 3,
68
- 'P2_1': 4,
69
- 'C2': 5,
70
- 'Pm': 6,
71
- 'Pc': 7,
72
- 'Cm': 8,
73
- 'Cc': 9,
67
+ P2: 3,
68
+ P2_1: 4,
69
+ C2: 5,
70
+ Pm: 6,
71
+ Pc: 7,
72
+ Cm: 8,
73
+ Cc: 9,
74
74
  'P2/m': 10,
75
75
  'P2_1/m': 11,
76
76
  'C2/m': 12,
@@ -78,72 +78,72 @@ export const SPACEGROUP_SYMBOL_TO_NUM = {
78
78
  'P2_1/c': 14,
79
79
  'C2/c': 15,
80
80
  // Orthorhombic
81
- 'P222': 16,
82
- 'P222_1': 17,
83
- 'P2_12_12': 18,
84
- 'P2_12_12_1': 19,
85
- 'C222_1': 20,
86
- 'C222': 21,
87
- 'F222': 22,
88
- 'I222': 23,
89
- 'I2_12_12_1': 24,
90
- 'Pmm2': 25,
91
- 'Pmc2_1': 26,
92
- 'Pcc2': 27,
93
- 'Pma2': 28,
94
- 'Pca2_1': 29,
95
- 'Pnc2': 30,
96
- 'Pmn2_1': 31,
97
- 'Pba2': 32,
98
- 'Pna2_1': 33,
99
- 'Pnn2': 34,
100
- 'Cmm2': 35,
101
- 'Cmc2_1': 36,
102
- 'Ccc2': 37,
103
- 'Amm2': 38,
104
- 'Aem2': 39,
105
- 'Ama2': 40,
106
- 'Aea2': 41,
107
- 'Fmm2': 42,
108
- 'Fdd2': 43,
109
- 'Imm2': 44,
110
- 'Iba2': 45,
111
- 'Ima2': 46,
112
- 'Pmmm': 47,
113
- 'Pnnn': 48,
114
- 'Pccm': 49,
115
- 'Pban': 50,
116
- 'Pmma': 51,
117
- 'Pnna': 52,
118
- 'Pmna': 53,
119
- 'Pcca': 54,
120
- 'Pbam': 55,
121
- 'Pccn': 56,
122
- 'Pbcm': 57,
123
- 'Pnnm': 58,
124
- 'Pmmn': 59,
125
- 'Pbcn': 60,
126
- 'Pbca': 61,
127
- 'Pnma': 62,
128
- 'Cmcm': 63,
129
- 'Cmce': 64,
130
- 'Cmmm': 65,
131
- 'Cccm': 66,
132
- 'Cmme': 67,
133
- 'Ccce': 68,
134
- 'Fmmm': 69,
135
- 'Fddd': 70,
136
- 'Immm': 71,
137
- 'Ibam': 72,
138
- 'Ibca': 73,
139
- 'Imma': 74,
81
+ P222: 16,
82
+ P222_1: 17,
83
+ P2_12_12: 18,
84
+ P2_12_12_1: 19,
85
+ C222_1: 20,
86
+ C222: 21,
87
+ F222: 22,
88
+ I222: 23,
89
+ I2_12_12_1: 24,
90
+ Pmm2: 25,
91
+ Pmc2_1: 26,
92
+ Pcc2: 27,
93
+ Pma2: 28,
94
+ Pca2_1: 29,
95
+ Pnc2: 30,
96
+ Pmn2_1: 31,
97
+ Pba2: 32,
98
+ Pna2_1: 33,
99
+ Pnn2: 34,
100
+ Cmm2: 35,
101
+ Cmc2_1: 36,
102
+ Ccc2: 37,
103
+ Amm2: 38,
104
+ Aem2: 39,
105
+ Ama2: 40,
106
+ Aea2: 41,
107
+ Fmm2: 42,
108
+ Fdd2: 43,
109
+ Imm2: 44,
110
+ Iba2: 45,
111
+ Ima2: 46,
112
+ Pmmm: 47,
113
+ Pnnn: 48,
114
+ Pccm: 49,
115
+ Pban: 50,
116
+ Pmma: 51,
117
+ Pnna: 52,
118
+ Pmna: 53,
119
+ Pcca: 54,
120
+ Pbam: 55,
121
+ Pccn: 56,
122
+ Pbcm: 57,
123
+ Pnnm: 58,
124
+ Pmmn: 59,
125
+ Pbcn: 60,
126
+ Pbca: 61,
127
+ Pnma: 62,
128
+ Cmcm: 63,
129
+ Cmce: 64,
130
+ Cmmm: 65,
131
+ Cccm: 66,
132
+ Cmme: 67,
133
+ Ccce: 68,
134
+ Fmmm: 69,
135
+ Fddd: 70,
136
+ Immm: 71,
137
+ Ibam: 72,
138
+ Ibca: 73,
139
+ Imma: 74,
140
140
  // Tetragonal
141
- 'P4': 75,
142
- 'P4_1': 76,
143
- 'P4_2': 77,
144
- 'P4_3': 78,
145
- 'I4': 79,
146
- 'I4_1': 80,
141
+ P4: 75,
142
+ P4_1: 76,
143
+ P4_2: 77,
144
+ P4_3: 78,
145
+ I4: 79,
146
+ I4_1: 80,
147
147
  'P-4': 81,
148
148
  'I-4': 82,
149
149
  'P4/m': 83,
@@ -152,28 +152,28 @@ export const SPACEGROUP_SYMBOL_TO_NUM = {
152
152
  'P4_2/n': 86,
153
153
  'I4/m': 87,
154
154
  'I4_1/a': 88,
155
- 'P422': 89,
156
- 'P42_12': 90,
157
- 'P4_122': 91,
158
- 'P4_12_12': 92,
159
- 'P4_222': 93,
160
- 'P4_22_12': 94,
161
- 'P4_322': 95,
162
- 'P4_32_12': 96,
163
- 'I422': 97,
164
- 'I4_122': 98,
165
- 'P4mm': 99,
166
- 'P4bm': 100,
167
- 'P4_2cm': 101,
168
- 'P4_2nm': 102,
169
- 'P4cc': 103,
170
- 'P4nc': 104,
171
- 'P4_2mc': 105,
172
- 'P4_2bc': 106,
173
- 'I4mm': 107,
174
- 'I4cm': 108,
175
- 'I4_1md': 109,
176
- 'I4_1cd': 110,
155
+ P422: 89,
156
+ P42_12: 90,
157
+ P4_122: 91,
158
+ P4_12_12: 92,
159
+ P4_222: 93,
160
+ P4_22_12: 94,
161
+ P4_322: 95,
162
+ P4_32_12: 96,
163
+ I422: 97,
164
+ I4_122: 98,
165
+ P4mm: 99,
166
+ P4bm: 100,
167
+ P4_2cm: 101,
168
+ P4_2nm: 102,
169
+ P4cc: 103,
170
+ P4nc: 104,
171
+ P4_2mc: 105,
172
+ P4_2bc: 106,
173
+ I4mm: 107,
174
+ I4cm: 108,
175
+ I4_1md: 109,
176
+ I4_1cd: 110,
177
177
  'P-42m': 111,
178
178
  'P-42c': 112,
179
179
  'P-42_1m': 113,
@@ -206,26 +206,26 @@ export const SPACEGROUP_SYMBOL_TO_NUM = {
206
206
  'I4/mcm': 140,
207
207
  'I4_1/amd': 141,
208
208
  'I4_1/acd': 142,
209
- 'P3': 143,
210
- 'P3_1': 144,
211
- 'P3_2': 145,
212
- 'R3': 146,
209
+ P3: 143,
210
+ P3_1: 144,
211
+ P3_2: 145,
212
+ R3: 146,
213
213
  'P-3': 147,
214
214
  'R-3': 148,
215
215
  // Trigonal
216
- 'P312': 149,
217
- 'P321': 150,
218
- 'P3_112': 151,
219
- 'P3_121': 152,
220
- 'P3_212': 153,
221
- 'P3_221': 154,
222
- 'R32': 155,
223
- 'P3m1': 156,
224
- 'P31m': 157,
225
- 'P3c1': 158,
226
- 'P31c': 159,
227
- 'R3m': 160,
228
- 'R3c': 161,
216
+ P312: 149,
217
+ P321: 150,
218
+ P3_112: 151,
219
+ P3_121: 152,
220
+ P3_212: 153,
221
+ P3_221: 154,
222
+ R32: 155,
223
+ P3m1: 156,
224
+ P31m: 157,
225
+ P3c1: 158,
226
+ P31c: 159,
227
+ R3m: 160,
228
+ R3c: 161,
229
229
  'P-31m': 162,
230
230
  'P-31c': 163,
231
231
  'P-3m1': 164,
@@ -233,25 +233,25 @@ export const SPACEGROUP_SYMBOL_TO_NUM = {
233
233
  'R-3m': 166,
234
234
  'R-3c': 167,
235
235
  // Hexagonal
236
- 'P6': 168,
237
- 'P6_1': 169,
238
- 'P6_5': 170,
239
- 'P6_2': 171,
240
- 'P6_4': 172,
241
- 'P6_3': 173,
236
+ P6: 168,
237
+ P6_1: 169,
238
+ P6_5: 170,
239
+ P6_2: 171,
240
+ P6_4: 172,
241
+ P6_3: 173,
242
242
  'P-6': 174,
243
243
  'P6/m': 175,
244
244
  'P6_3/m': 176,
245
- 'P622': 177,
246
- 'P6_122': 178,
247
- 'P6_522': 179,
248
- 'P6_222': 180,
249
- 'P6_422': 181,
250
- 'P6_322': 182,
251
- 'P6mm': 183,
252
- 'P6cc': 184,
253
- 'P6_3cm': 185,
254
- 'P6_3mc': 186,
245
+ P622: 177,
246
+ P6_122: 178,
247
+ P6_522: 179,
248
+ P6_222: 180,
249
+ P6_422: 181,
250
+ P6_322: 182,
251
+ P6mm: 183,
252
+ P6cc: 184,
253
+ P6_3cm: 185,
254
+ P6_3mc: 186,
255
255
  'P-6m2': 187,
256
256
  'P-6c2': 188,
257
257
  'P-62m': 189,
@@ -261,11 +261,11 @@ export const SPACEGROUP_SYMBOL_TO_NUM = {
261
261
  'P6_3/mcm': 193,
262
262
  'P6_3/mmc': 194,
263
263
  // Cubic
264
- 'P23': 195,
265
- 'F23': 196,
266
- 'I23': 197,
267
- 'P2_13': 198,
268
- 'I2_13': 199,
264
+ P23: 195,
265
+ F23: 196,
266
+ I23: 197,
267
+ P2_13: 198,
268
+ I2_13: 199,
269
269
  'Pm-3': 200,
270
270
  'Pn-3': 201,
271
271
  'Fm-3': 202,
@@ -273,14 +273,14 @@ export const SPACEGROUP_SYMBOL_TO_NUM = {
273
273
  'Im-3': 204,
274
274
  'Pa-3': 205,
275
275
  'Ia-3': 206,
276
- 'P432': 207,
277
- 'P4_232': 208,
278
- 'F432': 209,
279
- 'F4_132': 210,
280
- 'I432': 211,
281
- 'P4_332': 212,
282
- 'P4_132': 213,
283
- 'I4_132': 214,
276
+ P432: 207,
277
+ P4_232: 208,
278
+ F432: 209,
279
+ F4_132: 210,
280
+ I432: 211,
281
+ P4_332: 212,
282
+ P4_132: 213,
283
+ I4_132: 214,
284
284
  'P-43m': 215,
285
285
  'F-43m': 216,
286
286
  'I-43m': 217,
@@ -298,13 +298,13 @@ export const SPACEGROUP_SYMBOL_TO_NUM = {
298
298
  'Im-3m': 229,
299
299
  'Ia-3d': 230,
300
300
  // Special cases
301
- 'P121': 3,
302
- 'P12_11': 4,
303
- 'C121': 5,
304
- 'P1m1': 6,
305
- 'P1c1': 7,
306
- 'C1m1': 8,
307
- 'C1c1': 9,
301
+ P121: 3,
302
+ P12_11: 4,
303
+ C121: 5,
304
+ P1m1: 6,
305
+ P1c1: 7,
306
+ C1m1: 8,
307
+ C1c1: 9,
308
308
  'P12/m1': 10,
309
309
  'P12_1/m1': 11,
310
310
  'C12/m1': 12,