TACE 0.2.0__tar.gz → 0.2.1__tar.gz

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 (259) hide show
  1. {tace-0.2.0 → tace-0.2.1}/PKG-INFO +9 -2
  2. tace-0.2.1/README.md +201 -0
  3. {tace-0.2.0 → tace-0.2.1}/TACE.egg-info/PKG-INFO +9 -2
  4. {tace-0.2.0 → tace-0.2.1}/TACE.egg-info/SOURCES.txt +85 -48
  5. {tace-0.2.0 → tace-0.2.1}/TACE.egg-info/requires.txt +11 -1
  6. {tace-0.2.0 → tace-0.2.1}/TACE.egg-info/top_level.txt +1 -0
  7. tace-0.2.1/eqx/README.md +324 -0
  8. tace-0.2.1/eqx/__init__.py +3 -0
  9. tace-0.2.1/eqx/co3/__init__.py +21 -0
  10. tace-0.2.1/eqx/co3/cartesian_harmonics.py +75 -0
  11. tace-0.2.1/eqx/co3/gate.py +148 -0
  12. tace-0.2.1/eqx/co3/irreps.py +313 -0
  13. tace-0.2.1/eqx/co3/layout.py +79 -0
  14. tace-0.2.1/eqx/co3/linear.py +197 -0
  15. tace-0.2.1/eqx/co3/projector.py +39 -0
  16. tace-0.2.1/eqx/co3/tensor_product.py +336 -0
  17. tace-0.2.1/eqx/co3/utils.py +33 -0
  18. tace-0.2.1/eqx/docs/source/conf.py +45 -0
  19. tace-0.2.1/eqx/o2/__init__.py +24 -0
  20. tace-0.2.1/eqx/o2/asymmetric_contraction.py +411 -0
  21. tace-0.2.1/eqx/o2/circular_harmonics.py +89 -0
  22. tace-0.2.1/eqx/o2/gate.py +221 -0
  23. tace-0.2.1/eqx/o2/irreps.py +408 -0
  24. tace-0.2.1/eqx/o2/linear.py +419 -0
  25. tace-0.2.1/eqx/o2/local_frame.py +422 -0
  26. {tace-0.2.0/tace/models/so2 → tace-0.2.1/eqx/o2}/rotation_matrix.py +9 -5
  27. tace-0.2.1/eqx/o2/tensor_product.py +387 -0
  28. tace-0.2.1/eqx/o2/wigner.py +163 -0
  29. {tace-0.2.0 → tace-0.2.1}/pyproject.toml +45 -4
  30. {tace-0.2.0 → tace-0.2.1}/tace/__init__.py +1 -2
  31. {tace-0.2.0 → tace-0.2.1}/tace/dataset/dataloader.py +34 -31
  32. {tace-0.2.0 → tace-0.2.1}/tace/dataset/datamodule.py +73 -58
  33. {tace-0.2.0 → tace-0.2.1}/tace/dataset/element.py +4 -5
  34. {tace-0.2.0 → tace-0.2.1}/tace/dataset/graph.py +13 -17
  35. {tace-0.2.0 → tace-0.2.1}/tace/dataset/neighbour_list.py +5 -5
  36. {tace-0.2.0 → tace-0.2.1}/tace/dataset/quantity.py +170 -167
  37. {tace-0.2.0 → tace-0.2.1}/tace/dataset/read.py +57 -36
  38. {tace-0.2.0 → tace-0.2.1}/tace/dataset/sampler.py +8 -4
  39. {tace-0.2.0 → tace-0.2.1}/tace/dataset/split.py +6 -7
  40. {tace-0.2.0 → tace-0.2.1}/tace/dataset/statistics.py +181 -52
  41. {tace-0.2.0 → tace-0.2.1}/tace/dataset/utils.py +19 -16
  42. {tace-0.2.0 → tace-0.2.1}/tace/foundations/__init__.py +1 -1
  43. {tace-0.2.0 → tace-0.2.1}/tace/foundations/download_link.py +9 -18
  44. {tace-0.2.0 → tace-0.2.1}/tace/foundations/u_shift.py +4 -3
  45. tace-0.2.1/tace/interface/ase/__init__.py +10 -0
  46. {tace-0.2.0 → tace-0.2.1}/tace/interface/ase/calculator.py +29 -31
  47. tace-0.2.1/tace/interface/ase/general_calculator.py +81 -0
  48. tace-0.2.1/tace/interface/ase/optimizer.py +540 -0
  49. tace-0.2.1/tace/interface/nvalchemi/__init__.py +4 -0
  50. tace-0.2.1/tace/interface/nvalchemi/wrapper.py +404 -0
  51. {tace-0.2.0 → tace-0.2.1}/tace/interface/torchsim/__init__.py +1 -1
  52. {tace-0.2.0 → tace-0.2.1}/tace/interface/torchsim/torchsim.py +14 -16
  53. {tace-0.2.0 → tace-0.2.1}/tace/interface/uspex26/relax.py +5 -4
  54. {tace-0.2.0 → tace-0.2.1}/tace/lightning/__init__.py +1 -1
  55. {tace-0.2.0 → tace-0.2.1}/tace/lightning/lit_model.py +94 -89
  56. {tace-0.2.0 → tace-0.2.1}/tace/lightning/lora.py +0 -1
  57. tace-0.2.0/tace/lightning/los_skip.py → tace-0.2.1/tace/lightning/loss_skip.py +6 -9
  58. tace-0.2.1/tace/lightning/torch_model.py +114 -0
  59. {tace-0.2.0 → tace-0.2.1}/tace/lightning/trainer.py +29 -24
  60. tace-0.2.1/tace/lightning/u_shift.py +141 -0
  61. {tace-0.2.0 → tace-0.2.1}/tace/models/__init__.py +8 -3
  62. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/__init__.py +1 -1
  63. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/base.py +127 -83
  64. tace-0.2.1/tace/models/_e3nn/basis_change.py +48 -0
  65. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/default.py +74 -60
  66. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/dropout.py +76 -80
  67. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/edge.py +15 -20
  68. tace-0.2.1/tace/models/_e3nn/fused.py +280 -0
  69. tace-0.2.1/tace/models/_e3nn/inter.py +808 -0
  70. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/layer_norm.py +41 -33
  71. tace-0.2.1/tace/models/_e3nn/legacy_so2.py +982 -0
  72. tace-0.2.1/tace/models/_e3nn/les.py +395 -0
  73. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/node.py +65 -66
  74. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/nonlinear.py +111 -66
  75. tace-0.2.1/tace/models/_e3nn/o2.py +626 -0
  76. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/paths.py +11 -15
  77. {tace-0.2.0/tace/models/_cart → tace-0.2.1/tace/models/_e3nn}/prod.py +84 -49
  78. tace-0.2.1/tace/models/_e3nn/readout.py +309 -0
  79. {tace-0.2.0/tace/models/_cart → tace-0.2.1/tace/models/_e3nn}/representation.py +174 -64
  80. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/residual.py +10 -11
  81. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/scatter_norm.py +6 -6
  82. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/symmetric_contraction.py +3 -3
  83. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/tace.py +329 -256
  84. {tace-0.2.0 → tace-0.2.1}/tace/models/_e3nn/ue.py +19 -22
  85. tace-0.2.1/tace/models/_e3nn/wigner6j.py +445 -0
  86. {tace-0.2.0 → tace-0.2.1}/tace/models/adapter.py +89 -92
  87. {tace-0.2.0 → tace-0.2.1}/tace/models/angular.py +43 -15
  88. {tace-0.2.0 → tace-0.2.1}/tace/models/blocks.py +26 -37
  89. {tace-0.2.0 → tace-0.2.1}/tace/models/compile/aot.py +77 -48
  90. {tace-0.2.0 → tace-0.2.1}/tace/models/compile/compile.py +35 -6
  91. {tace-0.2.0 → tace-0.2.1}/tace/models/compile/wrapper.py +75 -23
  92. {tace-0.2.0/tace/models/_cue → tace-0.2.1/tace/models/cue}/__init__.py +2 -2
  93. {tace-0.2.0/tace/models/_cue → tace-0.2.1/tace/models/cue}/_tp_scatter.py +2 -4
  94. {tace-0.2.0/tace/models/_cue → tace-0.2.1/tace/models/cue}/paths.py +5 -4
  95. tace-0.2.1/tace/models/eqt/__init__.py +17 -0
  96. {tace-0.2.0/tace/models/_eqt → tace-0.2.1/tace/models/eqt}/_tp_uuu.py +3 -6
  97. {tace-0.2.0/tace/models/_eqt → tace-0.2.1/tace/models/eqt}/equitorch/nn/sparse_product.py +18 -12
  98. {tace-0.2.0/tace/models/_eqt → tace-0.2.1/tace/models/eqt}/equitorch/nn/tensor_products.py +36 -20
  99. {tace-0.2.0/tace/models/_eqt → tace-0.2.1/tace/models/eqt}/equitorch/structs/__init__.py +2 -1
  100. {tace-0.2.0 → tace-0.2.1}/tace/models/ictd.py +82 -83
  101. tace-0.2.1/tace/models/kspace.py +194 -0
  102. {tace-0.2.0 → tace-0.2.1}/tace/models/lammps.py +6 -10
  103. tace-0.2.1/tace/models/layout.py +140 -0
  104. {tace-0.2.0 → tace-0.2.1}/tace/models/linear.py +74 -52
  105. tace-0.2.1/tace/models/mag.py +157 -0
  106. tace-0.2.1/tace/models/mlp.py +191 -0
  107. {tace-0.2.0 → tace-0.2.1}/tace/models/normalizer.py +3 -3
  108. tace-0.2.1/tace/models/oeq/__init__.py +6 -0
  109. {tace-0.2.0/tace/models/_oeq → tace-0.2.1/tace/models/oeq}/_tp_scatter.py +21 -18
  110. {tace-0.2.0 → tace-0.2.1}/tace/models/radial.py +166 -190
  111. tace-0.2.1/tace/models/s2.py +377 -0
  112. tace-0.2.1/tace/models/scf/README.md +116 -0
  113. tace-0.2.1/tace/models/scf/__init__.py +34 -0
  114. tace-0.2.1/tace/models/scf/electrostatics.py +211 -0
  115. tace-0.2.1/tace/models/scf/energy_functional.py +170 -0
  116. tace-0.2.1/tace/models/scf/fixed_point.py +299 -0
  117. tace-0.2.1/tace/models/scf/local.py +188 -0
  118. tace-0.2.1/tace/models/scf/longrange/LICENSE.md +11 -0
  119. tace-0.2.1/tace/models/scf/longrange/NOTICE.md +6 -0
  120. tace-0.2.1/tace/models/scf/longrange/__init__.py +5 -0
  121. tace-0.2.1/tace/models/scf/longrange/__version__.py +1 -0
  122. tace-0.2.1/tace/models/scf/longrange/energy.py +194 -0
  123. tace-0.2.1/tace/models/scf/longrange/features.py +1013 -0
  124. tace-0.2.1/tace/models/scf/longrange/gto_utils.py +413 -0
  125. tace-0.2.1/tace/models/scf/longrange/kspace.py +256 -0
  126. tace-0.2.1/tace/models/scf/longrange/realspace_electrostatics.py +422 -0
  127. tace-0.2.1/tace/models/scf/longrange/realspace_grid_integrals.py +202 -0
  128. tace-0.2.1/tace/models/scf/longrange/slabs.py +246 -0
  129. tace-0.2.1/tace/models/scf/longrange/utils.py +123 -0
  130. tace-0.2.1/tace/models/scf/loss.py +84 -0
  131. tace-0.2.1/tace/models/scf/model.py +74 -0
  132. tace-0.2.1/tace/models/scf/qeq.py +132 -0
  133. tace-0.2.1/tace/models/scf/readout.py +147 -0
  134. tace-0.2.1/tace/models/scf/state.py +71 -0
  135. tace-0.2.1/tace/models/scf/utils.py +115 -0
  136. {tace-0.2.0 → tace-0.2.1}/tace/models/softmax.py +114 -122
  137. {tace-0.2.0 → tace-0.2.1}/tace/models/utils.py +26 -25
  138. {tace-0.2.0 → tace-0.2.1}/tace/models/zemin.py +61 -61
  139. {tace-0.2.0 → tace-0.2.1}/tace/scripts/average.py +8 -10
  140. {tace-0.2.0 → tace-0.2.1}/tace/scripts/clean.py +1 -3
  141. {tace-0.2.0 → tace-0.2.1}/tace/scripts/convert.py +15 -11
  142. {tace-0.2.0 → tace-0.2.1}/tace/scripts/eval.py +89 -35
  143. {tace-0.2.0 → tace-0.2.1}/tace/scripts/export_eval.py +10 -3
  144. {tace-0.2.0 → tace-0.2.1}/tace/scripts/export_lammps.py +1 -4
  145. {tace-0.2.0 → tace-0.2.1}/tace/scripts/export_train.py +3 -1
  146. {tace-0.2.0 → tace-0.2.1}/tace/scripts/finetune.py +25 -16
  147. {tace-0.2.0 → tace-0.2.1}/tace/scripts/split.py +1 -2
  148. {tace-0.2.0 → tace-0.2.1}/tace/scripts/train.py +73 -95
  149. {tace-0.2.0 → tace-0.2.1}/tace/scripts/update.py +21 -19
  150. tace-0.2.1/tace/scripts/utils/__init__.py +0 -0
  151. tace-0.2.1/tace/scripts/utils/check_equi.py +132 -0
  152. tace-0.2.1/tace/scripts/utils/check_soc.py +262 -0
  153. tace-0.2.1/tace/scripts/utils/convert_to_xyz.py +215 -0
  154. {tace-0.2.0 → tace-0.2.1}/tace/utils/__init__.py +2 -2
  155. {tace-0.2.0 → tace-0.2.1}/tace/utils/_global.py +4 -5
  156. {tace-0.2.0 → tace-0.2.1}/tace/utils/callbacks.py +5 -8
  157. {tace-0.2.0 → tace-0.2.1}/tace/utils/cfg.py +1 -3
  158. {tace-0.2.0 → tace-0.2.1}/tace/utils/ema.py +19 -19
  159. {tace-0.2.0 → tace-0.2.1}/tace/utils/env.py +17 -23
  160. {tace-0.2.0 → tace-0.2.1}/tace/utils/hydra_resolver.py +1 -2
  161. {tace-0.2.0 → tace-0.2.1}/tace/utils/logger.py +3 -8
  162. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/__init__.py +21 -22
  163. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/common.py +28 -1
  164. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/dens.py +561 -544
  165. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/huber_fn.py +571 -438
  166. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/l2mae_fn.py +119 -87
  167. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/mae_fn.py +161 -101
  168. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/mse_fn.py +161 -99
  169. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/normal.py +67 -76
  170. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/registry.py +41 -10
  171. {tace-0.2.0 → tace-0.2.1}/tace/utils/loss/special_fn.py +90 -91
  172. tace-0.2.1/tace/utils/loss/uncertainty.py +79 -0
  173. {tace-0.2.0 → tace-0.2.1}/tace/utils/lr_scheduler/__init__.py +1 -1
  174. {tace-0.2.0 → tace-0.2.1}/tace/utils/lr_scheduler/warmup.py +1 -2
  175. {tace-0.2.0 → tace-0.2.1}/tace/utils/lr_scheduler/wsd.py +33 -14
  176. {tace-0.2.0 → tace-0.2.1}/tace/utils/metrics.py +35 -28
  177. {tace-0.2.0 → tace-0.2.1}/tace/utils/metrics_bake.py +42 -28
  178. {tace-0.2.0 → tace-0.2.1}/tace/utils/optimizer/__init__.py +1 -1
  179. {tace-0.2.0 → tace-0.2.1}/tace/utils/optimizer/hybrid_muon.py +4 -4
  180. tace-0.2.1/tace/utils/optimizer/soap.py +1 -0
  181. {tace-0.2.0 → tace-0.2.1}/tace/utils/spectra.py +1 -2
  182. {tace-0.2.0 → tace-0.2.1}/tace/utils/strategy.py +4 -3
  183. {tace-0.2.0 → tace-0.2.1}/tace/utils/torch_scatter.py +56 -43
  184. {tace-0.2.0 → tace-0.2.1}/tace/utils/units.py +12 -12
  185. {tace-0.2.0 → tace-0.2.1}/tace/utils/utils.py +12 -19
  186. tace-0.2.1/tests/test_co3.py +289 -0
  187. tace-0.2.1/tests/test_compile.py +275 -0
  188. tace-0.2.1/tests/test_eqt.py +279 -0
  189. tace-0.2.1/tests/test_les.py +156 -0
  190. tace-0.2.1/tests/test_loss.py +164 -0
  191. tace-0.2.1/tests/test_magnetic_optimizer.py +122 -0
  192. tace-0.2.1/tests/test_o2.py +2685 -0
  193. tace-0.2.1/tests/test_scf.py +173 -0
  194. tace-0.2.1/tests/test_wigner6j.py +370 -0
  195. tace-0.2.0/README.rst +0 -171
  196. tace-0.2.0/tace/interface/ase/__init__.py +0 -3
  197. tace-0.2.0/tace/lightning/torch_model.py +0 -107
  198. tace-0.2.0/tace/lightning/u_shift.py +0 -59
  199. tace-0.2.0/tace/models/_cart/base.py +0 -24
  200. tace-0.2.0/tace/models/_cart/basis_change.py +0 -118
  201. tace-0.2.0/tace/models/_cart/cartesian.py +0 -150
  202. tace-0.2.0/tace/models/_cart/default.py +0 -216
  203. tace-0.2.0/tace/models/_cart/dropout.py +0 -8
  204. tace-0.2.0/tace/models/_cart/edge.py +0 -26
  205. tace-0.2.0/tace/models/_cart/fused.py +0 -531
  206. tace-0.2.0/tace/models/_cart/inter.py +0 -201
  207. tace-0.2.0/tace/models/_cart/layer_norm.py +0 -108
  208. tace-0.2.0/tace/models/_cart/node.py +0 -105
  209. tace-0.2.0/tace/models/_cart/nonlinear.py +0 -8
  210. tace-0.2.0/tace/models/_cart/paths.py +0 -65
  211. tace-0.2.0/tace/models/_cart/readout.py +0 -20
  212. tace-0.2.0/tace/models/_cart/residual.py +0 -8
  213. tace-0.2.0/tace/models/_cart/tace.py +0 -550
  214. tace-0.2.0/tace/models/_cart/ue.py +0 -8
  215. tace-0.2.0/tace/models/_e3nn/asymmetric_contraction.py +0 -1140
  216. tace-0.2.0/tace/models/_e3nn/basis_change.py +0 -113
  217. tace-0.2.0/tace/models/_e3nn/fused.py +0 -719
  218. tace-0.2.0/tace/models/_e3nn/inter.py +0 -683
  219. tace-0.2.0/tace/models/_e3nn/prod.py +0 -451
  220. tace-0.2.0/tace/models/_e3nn/readout.py +0 -200
  221. tace-0.2.0/tace/models/_e3nn/representation.py +0 -499
  222. tace-0.2.0/tace/models/_eqt/__init__.py +0 -4
  223. tace-0.2.0/tace/models/_oeq/__init__.py +0 -6
  224. tace-0.2.0/tace/models/layout.py +0 -84
  225. tace-0.2.0/tace/models/legacy.py +0 -2171
  226. tace-0.2.0/tace/models/mlp.py +0 -283
  227. tace-0.2.0/tace/models/precision.py +0 -82
  228. tace-0.2.0/tace/models/s2.py +0 -1006
  229. tace-0.2.0/tace/models/so2/__init__.py +0 -25
  230. tace-0.2.0/tace/models/so2/blocks.py +0 -1122
  231. tace-0.2.0/tace/models/so2/utils.py +0 -196
  232. tace-0.2.0/tace/models/so2/wigner.py +0 -365
  233. tace-0.2.0/tace/models/triton_ops/__init__.py +0 -9
  234. tace-0.2.0/tace/models/triton_ops/uu_so2_scatter.py +0 -837
  235. tace-0.2.0/tace/utils/loss/uncertainty.py +0 -89
  236. tace-0.2.0/tace/utils/optimizer/soap.py +0 -1
  237. tace-0.2.0/test/test_aoti_single_system.py +0 -207
  238. tace-0.2.0/test/test_neighbour_list.py +0 -188
  239. tace-0.2.0/test/test_solid_harmonics.py +0 -79
  240. tace-0.2.0/test/test_wigner6j.py +0 -214
  241. {tace-0.2.0 → tace-0.2.1}/LICENSE.md +0 -0
  242. {tace-0.2.0 → tace-0.2.1}/TACE.egg-info/dependency_links.txt +0 -0
  243. {tace-0.2.0 → tace-0.2.1}/TACE.egg-info/entry_points.txt +0 -0
  244. {tace-0.2.0 → tace-0.2.1}/setup.cfg +0 -0
  245. {tace-0.2.0 → tace-0.2.1}/tace/dataset/__init__.py +0 -0
  246. {tace-0.2.0 → tace-0.2.1}/tace/interface/__init__.py +0 -0
  247. {tace-0.2.0 → tace-0.2.1}/tace/interface/lammps/__init__.py +0 -0
  248. {tace-0.2.0 → tace-0.2.1}/tace/interface/lammps/mliap.py +0 -0
  249. {tace-0.2.0 → tace-0.2.1}/tace/interface/openmm/__init__.py +0 -0
  250. {tace-0.2.0 → tace-0.2.1}/tace/interface/uspex26/__init__.py +0 -0
  251. {tace-0.2.0 → tace-0.2.1}/tace/models/_cart/__init__.py +0 -0
  252. {tace-0.2.0 → tace-0.2.1}/tace/models/compile/__init__.py +2 -2
  253. {tace-0.2.0 → tace-0.2.1}/tace/models/compile/tace.py +0 -0
  254. {tace-0.2.0/tace/models/_cue → tace-0.2.1/tace/models/cue}/_tp_uuu.py +0 -0
  255. {tace-0.2.0/tace/models/_eqt → tace-0.2.1/tace/models/eqt}/equitorch/__init__.py +0 -0
  256. {tace-0.2.0/tace/models/_eqt → tace-0.2.1/tace/models/eqt}/equitorch/irreps/__init__.py +0 -0
  257. {tace-0.2.0/tace/models/_eqt → tace-0.2.1/tace/models/eqt}/equitorch/nn/__init__.py +0 -0
  258. {tace-0.2.0 → tace-0.2.1}/tace/scripts/__init__.py +0 -0
  259. {tace-0.2.0 → tace-0.2.1}/tace/utils/mask_metrics.py +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TACE
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: TACE - ST and ICT based equivariant atomistic model.
5
5
  Author-email: Zemin Xu <xv_chana@163.com>
6
6
  Project-URL: Homepage, https://github.com/xvzemin/tace
7
7
  Requires-Python: >=3.9
8
8
  License-File: LICENSE.md
9
- Requires-Dist: torch<=2.13,>=2.4
9
+ Requires-Dist: torch>=2.4
10
10
  Requires-Dist: torch_geometric>=2.4
11
11
  Requires-Dist: lightning
12
12
  Requires-Dist: omegaconf
@@ -20,10 +20,17 @@ Requires-Dist: configargparse
20
20
  Requires-Dist: pandas
21
21
  Requires-Dist: lmdb
22
22
  Requires-Dist: huggingface_hub
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest; extra == "dev"
25
+ Requires-Dist: ruff<0.17,>=0.16; extra == "dev"
23
26
  Provides-Extra: oeq
24
27
  Requires-Dist: openequivariance>=0.5.4; extra == "oeq"
25
28
  Provides-Extra: torchsim
26
29
  Requires-Dist: torch-sim-atomistic>=0.6.1; extra == "torchsim"
30
+ Provides-Extra: nvalchemi
31
+ Requires-Dist: nvalchemi-toolkit>=0.1.0; extra == "nvalchemi"
32
+ Requires-Dist: nvalchemi-toolkit-ops; extra == "nvalchemi"
33
+ Provides-Extra: scf
27
34
  Provides-Extra: cueq12
28
35
  Requires-Dist: cuequivariance; extra == "cueq12"
29
36
  Requires-Dist: cuequivariance-torch; extra == "cueq12"
tace-0.2.1/README.md ADDED
@@ -0,0 +1,201 @@
1
+ [![TACE](https://img.shields.io/pypi/v/tace?style=for-the-badge&label=TACE)](https://pypi.org/project/tace/)
2
+ [![Docs](https://img.shields.io/readthedocs/tace?style=for-the-badge&label=docs)](https://tace.readthedocs.io/en/latest/)
3
+ [![License](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
4
+ [![Matbench Discovery](https://img.shields.io/badge/Matbench%20Discovery-SOTA-brightgreen?style=for-the-badge)](https://matbench-discovery.materialsproject.org/)
5
+
6
+ # Tensor Atomic/Edge Cluster Expansion (TACE/TECE)
7
+
8
+ TACE is designed with physical priors and strong inductive biases to enhance extrapolation capability.
9
+ It performs Atomic Cluster Expansion and Edge Cluster Expansion based on spherical tensors
10
+ or irreducible Cartesian tensors, with an optional attention architecture.
11
+
12
+ ## Cartesian Architecture
13
+
14
+ <img src="fig/cartesian_arch.png" width="100%" align="center">
15
+
16
+ ## Spherical/SO(2) Architecture
17
+
18
+ The architecture of the spherical model is largely the same as that of the Cartesian space.
19
+ For details on the SO(2) component, please refer to our paper and code.
20
+
21
+ ## Wigner6j/O(2) Architecture
22
+
23
+ The current implementation is still subject to change, and backward compatibility is not guaranteed. Please refer to our paper and code for details.
24
+
25
+ ## Documentation
26
+
27
+ [TACE DOCS](https://tace.readthedocs.io/en/latest/index.html)
28
+
29
+ ## SOTA Foundation Model
30
+
31
+ [TACE FOUNDATION](https://github.com/xvzemin/tace-foundations)
32
+
33
+ Default Ranking on Matbench as of July 8, 2026
34
+
35
+ <img src="fig/matbench_tece_rra.png" width="100%" align="center">
36
+
37
+ ## Install, Train and Tutorial
38
+
39
+ The docs contain a complete tutorial.
40
+
41
+ We also provide complete input files and example scripts for training, ASE,
42
+ TorchSim, LAMMPS, and other workflows in the
43
+ [TACE examples](https://github.com/xvzemin/tace/tree/main/example).
44
+
45
+ ```bash
46
+ # Minimal install and training example
47
+ git clone https://github.com/xvzemin/tace
48
+ cd tace
49
+ pip install . # or pip install tace
50
+ cd example/train
51
+ tace-train -cn tace.yaml
52
+ ```
53
+
54
+ ## Fine-tuning
55
+
56
+ - ✅ Full-parameter.
57
+
58
+ - ✅ Freeze-parameter.
59
+
60
+ - ✅ LoRA.
61
+
62
+ ## Overview
63
+
64
+ Currently, the officially supported properties include:
65
+
66
+ - Energy
67
+ - Forces (conservative | direct)
68
+ - Hessian (conservative, predict only)
69
+ - Stress (conservative | direct)
70
+ - Virials (conservative | direct)
71
+ - Charges (lagrangian or uniform_distribution)
72
+ - Dipole moment (conservative | direct)
73
+ - Polarization (conservative, multi-value for PBC systems)
74
+ - Polarizability (conservative | direct)
75
+ - Born effective charges (conservative, under electric field)
76
+ - Atomic stresses (conservative, predict only)
77
+ - Atomic virials (conservative, predict only)
78
+ - Absolute final collinear magmoms
79
+ - Noncollinear magnetic forces (SOC, full O(3))
80
+
81
+ For embedding property, we support:
82
+
83
+ - fidelity_idx (different computational levels)
84
+ - charges
85
+ - total charge
86
+ - electric field
87
+ - initial noncollinear magmoms (SOC, full O(3))
88
+
89
+ ## Plugins
90
+
91
+ TACE currently supports the following plugin:
92
+
93
+ - **TACE-LES** (Latent Ewald Summation)
94
+ - **TACE-QEq** (Lagrangian)
95
+ - **mTACE** (Magnetic, Spin-Orbit Coupling)
96
+
97
+ ## Interfaces
98
+
99
+ - ✅ Supports integration with [ASE Calculator](https://wiki.fysik.dtu.dk/ase/).
100
+
101
+ - ✅ Supports integration with [LAMMPS-ML-IAP](https://github.com/lammps/lammps).
102
+
103
+ - ✅ Supports integration with [TorchSim](https://torchsim.github.io/torch-sim/).
104
+
105
+ - ✅ Supports integration with [NVIDIA NValCHEMI](https://github.com/NVIDIA/nvalchemi-toolkit).
106
+
107
+ - ✅ Supports integration with [OpenMM-ML](https://github.com/openmm/openmm-ml) (OpenMM-ML -> ASE -> TACE).
108
+
109
+ - ✅ Supports integration with [USPEX](https://uspex-team.org/)
110
+ (USPEX -> LAMMPS-ML-IAP -> TACE) (Python=3.9).
111
+
112
+ ## Contact
113
+
114
+ For bugs or feature requests, please use the
115
+ [TACE issue](https://github.com/xvzemin/tace/issues).
116
+
117
+ <!-- For usage discussions, you can join the TACE community through QQ or Discord.
118
+
119
+ <table>
120
+ <tr>
121
+ <th>QQ</th>
122
+ <th>Discord</th>
123
+ </tr>
124
+ <tr>
125
+ <td align="center">
126
+ <img src="fig/qq.jpg" alt="TACE QQ QR code" width="260">
127
+ </td>
128
+ <td align="center">
129
+ <img src="fig/discord.jpg" alt="TACE Discord QR code" width="260">
130
+ </td>
131
+ </tr>
132
+ </table> -->
133
+
134
+ ## Citing
135
+
136
+ If you use TACE, please cite our papers:
137
+
138
+ ```bibtex
139
+ @misc{xu2026spectralspatialtensoratomiccluster,
140
+ title={Spectral/Spatial Tensor Atomic Cluster Expansion with Universal Embeddings in Cartesian Space},
141
+ author={Zemin Xu and Wenbo Xie and P. Hu},
142
+ year={2026},
143
+ eprint={2509.14961},
144
+ archivePrefix={arXiv},
145
+ primaryClass={stat.ML},
146
+ url={https://arxiv.org/abs/2509.14961},
147
+ }
148
+
149
+ @misc{xu2026edgeclusterexpansionradial,
150
+ title={Edge Cluster Expansion with Radial Rotary Attention for Interatomic Potentials},
151
+ author={Zemin Xu and Wenbo Xie and P. Hu},
152
+ year={2026},
153
+ eprint={2607.10664},
154
+ archivePrefix={arXiv},
155
+ primaryClass={stat.ML},
156
+ url={https://arxiv.org/abs/2607.10664},
157
+ }
158
+ ```
159
+
160
+ If you use Local O(2) Frame or Generalized Wigner-6j Convlution, please cite our papers:
161
+
162
+ ```bibtex
163
+ @misc{xu2026completeo3interactionswigner6j,
164
+ title={Complete O(3) Interactions from Wigner-6j Recoupling to Local O(2) Frames},
165
+ author={Zemin Xu and Peijun Hu and Wenbo Xie},
166
+ year={2026},
167
+ eprint={2608.16592},
168
+ archivePrefix={arXiv},
169
+ primaryClass={physics.chem-ph},
170
+ url={https://arxiv.org/abs/2608.16592},
171
+ }
172
+ ```
173
+
174
+ If you use cartnn, Cartesian-3j, cMACE, cNequIP, cAllegro, please cite our papers:
175
+
176
+ ```bibtex
177
+ @inproceedings{xu2026a,
178
+ title={A Cartesian-3j Framework for Machine Learning Interatomic Potentials},
179
+ author={Zemin Xu and Chenyu Wu and Wenbo Xie and Peijun Hu},
180
+ booktitle={Forty-third International Conference on Machine Learning},
181
+ year={2026},
182
+ url={https://openreview.net/forum?id=9ZWK6gneWq}
183
+ }
184
+ ```
185
+
186
+ ## Development
187
+
188
+ Install the development tools and run the same formatting and lint checks used by
189
+ pre-commit:
190
+
191
+ ```bash
192
+ pip install -e ".[dev]"
193
+ ruff check --fix tace
194
+ ruff format tace
195
+ ruff check tace
196
+ ruff format --check tace
197
+ ```
198
+
199
+ ## License
200
+
201
+ The TACE code is published and distributed under the MIT License.
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TACE
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: TACE - ST and ICT based equivariant atomistic model.
5
5
  Author-email: Zemin Xu <xv_chana@163.com>
6
6
  Project-URL: Homepage, https://github.com/xvzemin/tace
7
7
  Requires-Python: >=3.9
8
8
  License-File: LICENSE.md
9
- Requires-Dist: torch<=2.13,>=2.4
9
+ Requires-Dist: torch>=2.4
10
10
  Requires-Dist: torch_geometric>=2.4
11
11
  Requires-Dist: lightning
12
12
  Requires-Dist: omegaconf
@@ -20,10 +20,17 @@ Requires-Dist: configargparse
20
20
  Requires-Dist: pandas
21
21
  Requires-Dist: lmdb
22
22
  Requires-Dist: huggingface_hub
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest; extra == "dev"
25
+ Requires-Dist: ruff<0.17,>=0.16; extra == "dev"
23
26
  Provides-Extra: oeq
24
27
  Requires-Dist: openequivariance>=0.5.4; extra == "oeq"
25
28
  Provides-Extra: torchsim
26
29
  Requires-Dist: torch-sim-atomistic>=0.6.1; extra == "torchsim"
30
+ Provides-Extra: nvalchemi
31
+ Requires-Dist: nvalchemi-toolkit>=0.1.0; extra == "nvalchemi"
32
+ Requires-Dist: nvalchemi-toolkit-ops; extra == "nvalchemi"
33
+ Provides-Extra: scf
27
34
  Provides-Extra: cueq12
28
35
  Requires-Dist: cuequivariance; extra == "cueq12"
29
36
  Requires-Dist: cuequivariance-torch; extra == "cueq12"
@@ -1,5 +1,5 @@
1
1
  LICENSE.md
2
- README.rst
2
+ README.md
3
3
  pyproject.toml
4
4
  TACE.egg-info/PKG-INFO
5
5
  TACE.egg-info/SOURCES.txt
@@ -7,6 +7,28 @@ TACE.egg-info/dependency_links.txt
7
7
  TACE.egg-info/entry_points.txt
8
8
  TACE.egg-info/requires.txt
9
9
  TACE.egg-info/top_level.txt
10
+ eqx/README.md
11
+ eqx/__init__.py
12
+ eqx/co3/__init__.py
13
+ eqx/co3/cartesian_harmonics.py
14
+ eqx/co3/gate.py
15
+ eqx/co3/irreps.py
16
+ eqx/co3/layout.py
17
+ eqx/co3/linear.py
18
+ eqx/co3/projector.py
19
+ eqx/co3/tensor_product.py
20
+ eqx/co3/utils.py
21
+ eqx/docs/source/conf.py
22
+ eqx/o2/__init__.py
23
+ eqx/o2/asymmetric_contraction.py
24
+ eqx/o2/circular_harmonics.py
25
+ eqx/o2/gate.py
26
+ eqx/o2/irreps.py
27
+ eqx/o2/linear.py
28
+ eqx/o2/local_frame.py
29
+ eqx/o2/rotation_matrix.py
30
+ eqx/o2/tensor_product.py
31
+ eqx/o2/wigner.py
10
32
  tace/__init__.py
11
33
  tace/dataset/__init__.py
12
34
  tace/dataset/dataloader.py
@@ -26,8 +48,12 @@ tace/foundations/u_shift.py
26
48
  tace/interface/__init__.py
27
49
  tace/interface/ase/__init__.py
28
50
  tace/interface/ase/calculator.py
51
+ tace/interface/ase/general_calculator.py
52
+ tace/interface/ase/optimizer.py
29
53
  tace/interface/lammps/__init__.py
30
54
  tace/interface/lammps/mliap.py
55
+ tace/interface/nvalchemi/__init__.py
56
+ tace/interface/nvalchemi/wrapper.py
31
57
  tace/interface/openmm/__init__.py
32
58
  tace/interface/torchsim/__init__.py
33
59
  tace/interface/torchsim/torchsim.py
@@ -36,7 +62,7 @@ tace/interface/uspex26/relax.py
36
62
  tace/lightning/__init__.py
37
63
  tace/lightning/lit_model.py
38
64
  tace/lightning/lora.py
39
- tace/lightning/los_skip.py
65
+ tace/lightning/loss_skip.py
40
66
  tace/lightning/torch_model.py
41
67
  tace/lightning/trainer.py
42
68
  tace/lightning/u_shift.py
@@ -45,43 +71,20 @@ tace/models/adapter.py
45
71
  tace/models/angular.py
46
72
  tace/models/blocks.py
47
73
  tace/models/ictd.py
74
+ tace/models/kspace.py
48
75
  tace/models/lammps.py
49
76
  tace/models/layout.py
50
- tace/models/legacy.py
51
77
  tace/models/linear.py
78
+ tace/models/mag.py
52
79
  tace/models/mlp.py
53
80
  tace/models/normalizer.py
54
- tace/models/precision.py
55
81
  tace/models/radial.py
56
82
  tace/models/s2.py
57
83
  tace/models/softmax.py
58
84
  tace/models/utils.py
59
85
  tace/models/zemin.py
60
86
  tace/models/_cart/__init__.py
61
- tace/models/_cart/base.py
62
- tace/models/_cart/basis_change.py
63
- tace/models/_cart/cartesian.py
64
- tace/models/_cart/default.py
65
- tace/models/_cart/dropout.py
66
- tace/models/_cart/edge.py
67
- tace/models/_cart/fused.py
68
- tace/models/_cart/inter.py
69
- tace/models/_cart/layer_norm.py
70
- tace/models/_cart/node.py
71
- tace/models/_cart/nonlinear.py
72
- tace/models/_cart/paths.py
73
- tace/models/_cart/prod.py
74
- tace/models/_cart/readout.py
75
- tace/models/_cart/representation.py
76
- tace/models/_cart/residual.py
77
- tace/models/_cart/tace.py
78
- tace/models/_cart/ue.py
79
- tace/models/_cue/__init__.py
80
- tace/models/_cue/_tp_scatter.py
81
- tace/models/_cue/_tp_uuu.py
82
- tace/models/_cue/paths.py
83
87
  tace/models/_e3nn/__init__.py
84
- tace/models/_e3nn/asymmetric_contraction.py
85
88
  tace/models/_e3nn/base.py
86
89
  tace/models/_e3nn/basis_change.py
87
90
  tace/models/_e3nn/default.py
@@ -90,8 +93,11 @@ tace/models/_e3nn/edge.py
90
93
  tace/models/_e3nn/fused.py
91
94
  tace/models/_e3nn/inter.py
92
95
  tace/models/_e3nn/layer_norm.py
96
+ tace/models/_e3nn/legacy_so2.py
97
+ tace/models/_e3nn/les.py
93
98
  tace/models/_e3nn/node.py
94
99
  tace/models/_e3nn/nonlinear.py
100
+ tace/models/_e3nn/o2.py
95
101
  tace/models/_e3nn/paths.py
96
102
  tace/models/_e3nn/prod.py
97
103
  tace/models/_e3nn/readout.py
@@ -101,28 +107,50 @@ tace/models/_e3nn/scatter_norm.py
101
107
  tace/models/_e3nn/symmetric_contraction.py
102
108
  tace/models/_e3nn/tace.py
103
109
  tace/models/_e3nn/ue.py
104
- tace/models/_eqt/__init__.py
105
- tace/models/_eqt/_tp_uuu.py
106
- tace/models/_eqt/equitorch/__init__.py
107
- tace/models/_eqt/equitorch/irreps/__init__.py
108
- tace/models/_eqt/equitorch/nn/__init__.py
109
- tace/models/_eqt/equitorch/nn/sparse_product.py
110
- tace/models/_eqt/equitorch/nn/tensor_products.py
111
- tace/models/_eqt/equitorch/structs/__init__.py
112
- tace/models/_oeq/__init__.py
113
- tace/models/_oeq/_tp_scatter.py
110
+ tace/models/_e3nn/wigner6j.py
114
111
  tace/models/compile/__init__.py
115
112
  tace/models/compile/aot.py
116
113
  tace/models/compile/compile.py
117
114
  tace/models/compile/tace.py
118
115
  tace/models/compile/wrapper.py
119
- tace/models/so2/__init__.py
120
- tace/models/so2/blocks.py
121
- tace/models/so2/rotation_matrix.py
122
- tace/models/so2/utils.py
123
- tace/models/so2/wigner.py
124
- tace/models/triton_ops/__init__.py
125
- tace/models/triton_ops/uu_so2_scatter.py
116
+ tace/models/cue/__init__.py
117
+ tace/models/cue/_tp_scatter.py
118
+ tace/models/cue/_tp_uuu.py
119
+ tace/models/cue/paths.py
120
+ tace/models/eqt/__init__.py
121
+ tace/models/eqt/_tp_uuu.py
122
+ tace/models/eqt/equitorch/__init__.py
123
+ tace/models/eqt/equitorch/irreps/__init__.py
124
+ tace/models/eqt/equitorch/nn/__init__.py
125
+ tace/models/eqt/equitorch/nn/sparse_product.py
126
+ tace/models/eqt/equitorch/nn/tensor_products.py
127
+ tace/models/eqt/equitorch/structs/__init__.py
128
+ tace/models/oeq/__init__.py
129
+ tace/models/oeq/_tp_scatter.py
130
+ tace/models/scf/README.md
131
+ tace/models/scf/__init__.py
132
+ tace/models/scf/electrostatics.py
133
+ tace/models/scf/energy_functional.py
134
+ tace/models/scf/fixed_point.py
135
+ tace/models/scf/local.py
136
+ tace/models/scf/loss.py
137
+ tace/models/scf/model.py
138
+ tace/models/scf/qeq.py
139
+ tace/models/scf/readout.py
140
+ tace/models/scf/state.py
141
+ tace/models/scf/utils.py
142
+ tace/models/scf/longrange/LICENSE.md
143
+ tace/models/scf/longrange/NOTICE.md
144
+ tace/models/scf/longrange/__init__.py
145
+ tace/models/scf/longrange/__version__.py
146
+ tace/models/scf/longrange/energy.py
147
+ tace/models/scf/longrange/features.py
148
+ tace/models/scf/longrange/gto_utils.py
149
+ tace/models/scf/longrange/kspace.py
150
+ tace/models/scf/longrange/realspace_electrostatics.py
151
+ tace/models/scf/longrange/realspace_grid_integrals.py
152
+ tace/models/scf/longrange/slabs.py
153
+ tace/models/scf/longrange/utils.py
126
154
  tace/scripts/__init__.py
127
155
  tace/scripts/average.py
128
156
  tace/scripts/clean.py
@@ -135,6 +163,10 @@ tace/scripts/finetune.py
135
163
  tace/scripts/split.py
136
164
  tace/scripts/train.py
137
165
  tace/scripts/update.py
166
+ tace/scripts/utils/__init__.py
167
+ tace/scripts/utils/check_equi.py
168
+ tace/scripts/utils/check_soc.py
169
+ tace/scripts/utils/convert_to_xyz.py
138
170
  tace/utils/__init__.py
139
171
  tace/utils/_global.py
140
172
  tace/utils/callbacks.py
@@ -168,7 +200,12 @@ tace/utils/lr_scheduler/wsd.py
168
200
  tace/utils/optimizer/__init__.py
169
201
  tace/utils/optimizer/hybrid_muon.py
170
202
  tace/utils/optimizer/soap.py
171
- test/test_aoti_single_system.py
172
- test/test_neighbour_list.py
173
- test/test_solid_harmonics.py
174
- test/test_wigner6j.py
203
+ tests/test_co3.py
204
+ tests/test_compile.py
205
+ tests/test_eqt.py
206
+ tests/test_les.py
207
+ tests/test_loss.py
208
+ tests/test_magnetic_optimizer.py
209
+ tests/test_o2.py
210
+ tests/test_scf.py
211
+ tests/test_wigner6j.py
@@ -1,4 +1,4 @@
1
- torch<=2.13,>=2.4
1
+ torch>=2.4
2
2
  torch_geometric>=2.4
3
3
  lightning
4
4
  omegaconf
@@ -26,6 +26,10 @@ cuequivariance-ops-torch-cu13
26
26
  [d3]
27
27
  torch_dftd
28
28
 
29
+ [dev]
30
+ pytest
31
+ ruff<0.17,>=0.16
32
+
29
33
  [lammps12]
30
34
  cython
31
35
  cupy-cuda12x
@@ -39,6 +43,10 @@ ase
39
43
  matscipy
40
44
  vesin
41
45
 
46
+ [nvalchemi]
47
+ nvalchemi-toolkit>=0.1.0
48
+ nvalchemi-toolkit-ops
49
+
42
50
  [oeq]
43
51
  openequivariance>=0.5.4
44
52
 
@@ -47,5 +55,7 @@ openmm
47
55
  openmm-ml
48
56
  openmmtorch
49
57
 
58
+ [scf]
59
+
50
60
  [torchsim]
51
61
  torch-sim-atomistic>=0.6.1
@@ -1 +1,2 @@
1
+ eqx
1
2
  tace