equiformer-v3 0.0.0__py3-none-any.whl

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 (456) hide show
  1. equiformer_v3/__init__.py +6 -0
  2. equiformer_v3/applications/AdsorbML/LICENSE.md +9 -0
  3. equiformer_v3/applications/AdsorbML/MODELS.md +13 -0
  4. equiformer_v3/applications/AdsorbML/README.md +65 -0
  5. equiformer_v3/applications/AdsorbML/__init__.py +0 -0
  6. equiformer_v3/applications/AdsorbML/adsorbml/2023_neurips_challenge/README.md +17 -0
  7. equiformer_v3/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval.py +195 -0
  8. equiformer_v3/applications/AdsorbML/adsorbml/2023_neurips_challenge/oc20dense_val_targets.pkl +0 -0
  9. equiformer_v3/applications/AdsorbML/adsorbml/configs/dpp.yml +61 -0
  10. equiformer_v3/applications/AdsorbML/adsorbml/configs/gemnet-oc-large.yml +109 -0
  11. equiformer_v3/applications/AdsorbML/adsorbml/configs/gemnet-oc.yml +109 -0
  12. equiformer_v3/applications/AdsorbML/adsorbml/configs/painn.yml +66 -0
  13. equiformer_v3/applications/AdsorbML/adsorbml/configs/schnet.yml +56 -0
  14. equiformer_v3/applications/AdsorbML/adsorbml/configs/scn_md_large.yml +77 -0
  15. equiformer_v3/applications/AdsorbML/adsorbml/scripts/README.md +37 -0
  16. equiformer_v3/applications/AdsorbML/adsorbml/scripts/dense_eval.py +335 -0
  17. equiformer_v3/applications/AdsorbML/adsorbml/scripts/process_mlrs.py +176 -0
  18. equiformer_v3/applications/AdsorbML/adsorbml/scripts/utils.py +75 -0
  19. equiformer_v3/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp.py +95 -0
  20. equiformer_v3/applications/AdsorbML/tutorials/adsorbml_walkthrough.ipynb +794 -0
  21. equiformer_v3/applications/cattsunami/DATASET.md +49 -0
  22. equiformer_v3/applications/cattsunami/README.md +44 -0
  23. equiformer_v3/applications/cattsunami/__init__.py +16 -0
  24. equiformer_v3/applications/cattsunami/core/__init__.py +6 -0
  25. equiformer_v3/applications/cattsunami/core/autoframe.py +1688 -0
  26. equiformer_v3/applications/cattsunami/core/ocpneb.py +307 -0
  27. equiformer_v3/applications/cattsunami/core/reaction.py +99 -0
  28. equiformer_v3/applications/cattsunami/databases/__init__.py +9 -0
  29. equiformer_v3/applications/cattsunami/databases/desorptions_9Aug23.pkl +0 -0
  30. equiformer_v3/applications/cattsunami/databases/dissociation_reactions_22May24.pkl +0 -0
  31. equiformer_v3/applications/cattsunami/databases/transfers_5Sept23.pkl +0 -0
  32. equiformer_v3/applications/cattsunami/run_validation/mapping_files/desorption_mapping.pkl +0 -0
  33. equiformer_v3/applications/cattsunami/run_validation/mapping_files/dissociation_mapping.pkl +0 -0
  34. equiformer_v3/applications/cattsunami/run_validation/mapping_files/transfer_mapping.pkl +0 -0
  35. equiformer_v3/applications/cattsunami/run_validation/run_validation.py +436 -0
  36. equiformer_v3/applications/cattsunami/run_validation/run_validation.sh +13 -0
  37. equiformer_v3/applications/cattsunami/summary_fig.png +0 -0
  38. equiformer_v3/applications/cattsunami/tutorial/adding_a_rxn_to_the_db.ipynb +607 -0
  39. equiformer_v3/applications/cattsunami/tutorial/cattsunami_tutorial.ipynb +362 -0
  40. equiformer_v3/applications/cattsunami/tutorial/dissociation_scheme.png +0 -0
  41. equiformer_v3/applications/cattsunami/tutorial/fairchem_models_for_nebs.ipynb +229 -0
  42. equiformer_v3/applications/cattsunami/tutorial/sample_traj.traj +0 -0
  43. equiformer_v3/applications/ocx/README.md +25 -0
  44. equiformer_v3/applications/ocx/__init__.py +16 -0
  45. equiformer_v3/applications/ocx/analysis/README.md +5 -0
  46. equiformer_v3/applications/ocx/analysis/ml_inference.py +332 -0
  47. equiformer_v3/applications/ocx/analysis/ml_train.py +275 -0
  48. equiformer_v3/applications/ocx/co2rr_summary_figure.png +0 -0
  49. equiformer_v3/applications/ocx/core/__init__.py +1 -0
  50. equiformer_v3/applications/ocx/core/data_handling.py +686 -0
  51. equiformer_v3/applications/ocx/core/features.py +47 -0
  52. equiformer_v3/applications/ocx/core/voltage.py +144 -0
  53. equiformer_v3/applications/ocx/core/wulff.py +44 -0
  54. equiformer_v3/applications/ocx/data/README.md +117 -0
  55. equiformer_v3/applications/ocx/data/computational_data/README.md +5 -0
  56. equiformer_v3/applications/ocx/data/computational_data/cod_matches_lookup.pkl +0 -0
  57. equiformer_v3/applications/ocx/data/computational_data/her_candidates.csv +3870 -0
  58. equiformer_v3/applications/ocx/data/experimental_data/ExpDataDump_241113.csv +5413 -0
  59. equiformer_v3/applications/ocx/data/experimental_data/ExpDataDump_241113_clean.csv +2605 -0
  60. equiformer_v3/applications/ocx/data/experimental_data/README.md +18 -0
  61. equiformer_v3/applications/ocx/data/experimental_data/XRDDataDump-241113.csv +579 -0
  62. equiformer_v3/applications/ocx/data/experimental_data/XRFDataDump-241113.csv +639 -0
  63. equiformer_v3/applications/ocx/data/experimental_data/supporting_data/batches_info.csv +34 -0
  64. equiformer_v3/applications/ocx/data/experimental_data/supporting_data/materials_id-241113.csv +979 -0
  65. equiformer_v3/applications/ocx/data/experimental_data/supporting_data/materials_postprocessing_id-241113.csv +2 -0
  66. equiformer_v3/applications/ocx/data/experimental_data/supporting_data/vsp_synthesis_params.csv +546 -0
  67. equiformer_v3/applications/ocx/data/processed_data/CO2R_40_70_all.csv +180 -0
  68. equiformer_v3/applications/ocx/data/processed_data/CO2R_40_70_matched.csv +44 -0
  69. equiformer_v3/applications/ocx/data/processed_data/HER_40_70_all.csv +180 -0
  70. equiformer_v3/applications/ocx/data/processed_data/HER_40_70_matched.csv +44 -0
  71. equiformer_v3/applications/ocx/data/processed_data/README.md +13 -0
  72. equiformer_v3/core/LICENSE.md +22 -0
  73. equiformer_v3/core/README.md +49 -0
  74. equiformer_v3/core/TRAIN.md +461 -0
  75. equiformer_v3/core/__init__.py +20 -0
  76. equiformer_v3/core/_cli.py +133 -0
  77. equiformer_v3/core/_cli_hydra.py +471 -0
  78. equiformer_v3/core/common/__init__.py +6 -0
  79. equiformer_v3/core/common/data_parallel.py +262 -0
  80. equiformer_v3/core/common/distutils.py +258 -0
  81. equiformer_v3/core/common/flags.py +137 -0
  82. equiformer_v3/core/common/gp_utils.py +388 -0
  83. equiformer_v3/core/common/hpo_utils.py +53 -0
  84. equiformer_v3/core/common/logger.py +290 -0
  85. equiformer_v3/core/common/profiler_utils.py +105 -0
  86. equiformer_v3/core/common/registry.py +355 -0
  87. equiformer_v3/core/common/relaxation/__init__.py +13 -0
  88. equiformer_v3/core/common/relaxation/ase_utils.py +311 -0
  89. equiformer_v3/core/common/relaxation/ml_relaxation.py +135 -0
  90. equiformer_v3/core/common/relaxation/optimizable.py +547 -0
  91. equiformer_v3/core/common/relaxation/optimizers/__init__.py +12 -0
  92. equiformer_v3/core/common/relaxation/optimizers/lbfgs_torch.py +203 -0
  93. equiformer_v3/core/common/slurm.py +30 -0
  94. equiformer_v3/core/common/test_utils.py +143 -0
  95. equiformer_v3/core/common/transforms.py +80 -0
  96. equiformer_v3/core/common/tutorial_utils.py +184 -0
  97. equiformer_v3/core/common/typing.py +19 -0
  98. equiformer_v3/core/common/utils.py +1563 -0
  99. equiformer_v3/core/components/reducer.py +76 -0
  100. equiformer_v3/core/components/runner.py +63 -0
  101. equiformer_v3/core/components/utils.py +39 -0
  102. equiformer_v3/core/datasets/__init__.py +21 -0
  103. equiformer_v3/core/datasets/_utils.py +44 -0
  104. equiformer_v3/core/datasets/ase_datasets.py +576 -0
  105. equiformer_v3/core/datasets/base_dataset.py +247 -0
  106. equiformer_v3/core/datasets/embeddings/__init__.py +13 -0
  107. equiformer_v3/core/datasets/embeddings/atomic_radii.py +111 -0
  108. equiformer_v3/core/datasets/embeddings/continuous_embeddings.py +1122 -0
  109. equiformer_v3/core/datasets/embeddings/khot_embeddings.py +9414 -0
  110. equiformer_v3/core/datasets/embeddings/qmof_khot_embeddings.py +7638 -0
  111. equiformer_v3/core/datasets/lmdb_dataset.py +194 -0
  112. equiformer_v3/core/datasets/oc22_lmdb_dataset.py +227 -0
  113. equiformer_v3/core/datasets/target_metadata_guesser.py +192 -0
  114. equiformer_v3/core/models/__init__.py +9 -0
  115. equiformer_v3/core/models/base.py +351 -0
  116. equiformer_v3/core/models/dimenet_plus_plus.py +542 -0
  117. equiformer_v3/core/models/equiformer_v2/Jd.pt +0 -0
  118. equiformer_v3/core/models/equiformer_v2/LICENSE +21 -0
  119. equiformer_v3/core/models/equiformer_v2/README.md +92 -0
  120. equiformer_v3/core/models/equiformer_v2/__init__.py +5 -0
  121. equiformer_v3/core/models/equiformer_v2/activation.py +186 -0
  122. equiformer_v3/core/models/equiformer_v2/drop.py +142 -0
  123. equiformer_v3/core/models/equiformer_v2/edge_rot_mat.py +55 -0
  124. equiformer_v3/core/models/equiformer_v2/equiformer_v2.py +611 -0
  125. equiformer_v3/core/models/equiformer_v2/equiformer_v2_dens.py +586 -0
  126. equiformer_v3/core/models/equiformer_v2/equiformer_v2_deprecated.py +680 -0
  127. equiformer_v3/core/models/equiformer_v2/eqv2_to_eqv2_hydra.py +96 -0
  128. equiformer_v3/core/models/equiformer_v2/gaussian_rbf.py +43 -0
  129. equiformer_v3/core/models/equiformer_v2/heads/__init__.py +7 -0
  130. equiformer_v3/core/models/equiformer_v2/heads/rank2.py +351 -0
  131. equiformer_v3/core/models/equiformer_v2/heads/scalar.py +66 -0
  132. equiformer_v3/core/models/equiformer_v2/heads/vector.py +84 -0
  133. equiformer_v3/core/models/equiformer_v2/input_block.py +130 -0
  134. equiformer_v3/core/models/equiformer_v2/layer_norm.py +438 -0
  135. equiformer_v3/core/models/equiformer_v2/module_list.py +12 -0
  136. equiformer_v3/core/models/equiformer_v2/radial_function.py +32 -0
  137. equiformer_v3/core/models/equiformer_v2/so2_ops.py +354 -0
  138. equiformer_v3/core/models/equiformer_v2/so3.py +699 -0
  139. equiformer_v3/core/models/equiformer_v2/trainers/__init__.py +0 -0
  140. equiformer_v3/core/models/equiformer_v2/trainers/dens_trainer.py +854 -0
  141. equiformer_v3/core/models/equiformer_v2/trainers/energy_trainer.py +55 -0
  142. equiformer_v3/core/models/equiformer_v2/trainers/forces_trainer.py +70 -0
  143. equiformer_v3/core/models/equiformer_v2/trainers/lr_scheduler.py +171 -0
  144. equiformer_v3/core/models/equiformer_v2/transformer_block.py +705 -0
  145. equiformer_v3/core/models/equiformer_v2/weight_initialization.py +37 -0
  146. equiformer_v3/core/models/equiformer_v2/wigner.py +42 -0
  147. equiformer_v3/core/models/escn/Jd.pt +0 -0
  148. equiformer_v3/core/models/escn/__init__.py +5 -0
  149. equiformer_v3/core/models/escn/escn.py +1105 -0
  150. equiformer_v3/core/models/escn/escn_exportable.py +928 -0
  151. equiformer_v3/core/models/escn/so3.py +526 -0
  152. equiformer_v3/core/models/escn/so3_exportable.py +341 -0
  153. equiformer_v3/core/models/esen/Jd.pt +0 -0
  154. equiformer_v3/core/models/esen/__init__.py +0 -0
  155. equiformer_v3/core/models/esen/common/__init__.py +0 -0
  156. equiformer_v3/core/models/esen/common/rotation.py +175 -0
  157. equiformer_v3/core/models/esen/common/so3.py +265 -0
  158. equiformer_v3/core/models/esen/esen.py +511 -0
  159. equiformer_v3/core/models/esen/esen_block.py +302 -0
  160. equiformer_v3/core/models/esen/esen_dens.py +579 -0
  161. equiformer_v3/core/models/esen/nn/__init__.py +0 -0
  162. equiformer_v3/core/models/esen/nn/activation.py +102 -0
  163. equiformer_v3/core/models/esen/nn/embedding.py +122 -0
  164. equiformer_v3/core/models/esen/nn/layer_norm.py +370 -0
  165. equiformer_v3/core/models/esen/nn/radial.py +141 -0
  166. equiformer_v3/core/models/esen/nn/rank2.py +375 -0
  167. equiformer_v3/core/models/esen/nn/so2_layers.py +322 -0
  168. equiformer_v3/core/models/esen/nn/so3_layers.py +52 -0
  169. equiformer_v3/core/models/esen/trainers/__init__.py +0 -0
  170. equiformer_v3/core/models/esen/trainers/lr_scheduler.py +178 -0
  171. equiformer_v3/core/models/esen/trainers/trainer.py +908 -0
  172. equiformer_v3/core/models/gemnet/__init__.py +5 -0
  173. equiformer_v3/core/models/gemnet/gemnet.py +708 -0
  174. equiformer_v3/core/models/gemnet/initializers.py +42 -0
  175. equiformer_v3/core/models/gemnet/layers/__init__.py +0 -0
  176. equiformer_v3/core/models/gemnet/layers/atom_update_block.py +201 -0
  177. equiformer_v3/core/models/gemnet/layers/base_layers.py +110 -0
  178. equiformer_v3/core/models/gemnet/layers/basis_utils.py +292 -0
  179. equiformer_v3/core/models/gemnet/layers/efficient.py +171 -0
  180. equiformer_v3/core/models/gemnet/layers/embedding_block.py +93 -0
  181. equiformer_v3/core/models/gemnet/layers/interaction_block.py +342 -0
  182. equiformer_v3/core/models/gemnet/layers/radial_basis.py +207 -0
  183. equiformer_v3/core/models/gemnet/layers/spherical_basis.py +97 -0
  184. equiformer_v3/core/models/gemnet/utils.py +277 -0
  185. equiformer_v3/core/models/gemnet_gp/README.md +30 -0
  186. equiformer_v3/core/models/gemnet_gp/__init__.py +5 -0
  187. equiformer_v3/core/models/gemnet_gp/gemnet.py +620 -0
  188. equiformer_v3/core/models/gemnet_gp/initializers.py +40 -0
  189. equiformer_v3/core/models/gemnet_gp/layers/__init__.py +0 -0
  190. equiformer_v3/core/models/gemnet_gp/layers/atom_update_block.py +247 -0
  191. equiformer_v3/core/models/gemnet_gp/layers/base_layers.py +119 -0
  192. equiformer_v3/core/models/gemnet_gp/layers/basis_utils.py +292 -0
  193. equiformer_v3/core/models/gemnet_gp/layers/efficient.py +171 -0
  194. equiformer_v3/core/models/gemnet_gp/layers/embedding_block.py +99 -0
  195. equiformer_v3/core/models/gemnet_gp/layers/interaction_block.py +360 -0
  196. equiformer_v3/core/models/gemnet_gp/layers/radial_basis.py +208 -0
  197. equiformer_v3/core/models/gemnet_gp/layers/spherical_basis.py +97 -0
  198. equiformer_v3/core/models/gemnet_gp/utils.py +275 -0
  199. equiformer_v3/core/models/gemnet_oc/README.md +29 -0
  200. equiformer_v3/core/models/gemnet_oc/__init__.py +5 -0
  201. equiformer_v3/core/models/gemnet_oc/gemnet_oc.py +1563 -0
  202. equiformer_v3/core/models/gemnet_oc/initializers.py +87 -0
  203. equiformer_v3/core/models/gemnet_oc/interaction_indices.py +299 -0
  204. equiformer_v3/core/models/gemnet_oc/layers/__init__.py +0 -0
  205. equiformer_v3/core/models/gemnet_oc/layers/atom_update_block.py +192 -0
  206. equiformer_v3/core/models/gemnet_oc/layers/base_layers.py +106 -0
  207. equiformer_v3/core/models/gemnet_oc/layers/basis_utils.py +330 -0
  208. equiformer_v3/core/models/gemnet_oc/layers/efficient.py +254 -0
  209. equiformer_v3/core/models/gemnet_oc/layers/embedding_block.py +95 -0
  210. equiformer_v3/core/models/gemnet_oc/layers/force_scaler.py +95 -0
  211. equiformer_v3/core/models/gemnet_oc/layers/interaction_block.py +754 -0
  212. equiformer_v3/core/models/gemnet_oc/layers/radial_basis.py +241 -0
  213. equiformer_v3/core/models/gemnet_oc/layers/spherical_basis.py +139 -0
  214. equiformer_v3/core/models/gemnet_oc/utils.py +407 -0
  215. equiformer_v3/core/models/model_registry.py +96 -0
  216. equiformer_v3/core/models/painn/README.md +39 -0
  217. equiformer_v3/core/models/painn/__init__.py +5 -0
  218. equiformer_v3/core/models/painn/painn.py +718 -0
  219. equiformer_v3/core/models/painn/utils.py +161 -0
  220. equiformer_v3/core/models/pretrained_models.json +335 -0
  221. equiformer_v3/core/models/schnet.py +135 -0
  222. equiformer_v3/core/models/scn/Jd.pt +0 -0
  223. equiformer_v3/core/models/scn/README.md +22 -0
  224. equiformer_v3/core/models/scn/__init__.py +5 -0
  225. equiformer_v3/core/models/scn/sampling.py +49 -0
  226. equiformer_v3/core/models/scn/scn.py +756 -0
  227. equiformer_v3/core/models/scn/smearing.py +84 -0
  228. equiformer_v3/core/models/scn/spherical_harmonics.py +361 -0
  229. equiformer_v3/core/models/utils/__init__.py +4 -0
  230. equiformer_v3/core/models/utils/activations.py +45 -0
  231. equiformer_v3/core/models/utils/basis.py +302 -0
  232. equiformer_v3/core/modules/__init__.py +6 -0
  233. equiformer_v3/core/modules/evaluator.py +382 -0
  234. equiformer_v3/core/modules/exponential_moving_average.py +191 -0
  235. equiformer_v3/core/modules/loss.py +183 -0
  236. equiformer_v3/core/modules/normalization/__init__.py +0 -0
  237. equiformer_v3/core/modules/normalization/_load_utils.py +116 -0
  238. equiformer_v3/core/modules/normalization/element_references.py +290 -0
  239. equiformer_v3/core/modules/normalization/normalizer.py +293 -0
  240. equiformer_v3/core/modules/scaling/__init__.py +5 -0
  241. equiformer_v3/core/modules/scaling/compat.py +81 -0
  242. equiformer_v3/core/modules/scaling/fit.py +233 -0
  243. equiformer_v3/core/modules/scaling/scale_factor.py +168 -0
  244. equiformer_v3/core/modules/scaling/util.py +25 -0
  245. equiformer_v3/core/modules/scheduler.py +93 -0
  246. equiformer_v3/core/modules/transforms.py +62 -0
  247. equiformer_v3/core/preprocessing/__init__.py +12 -0
  248. equiformer_v3/core/preprocessing/atoms_to_graphs.py +333 -0
  249. equiformer_v3/core/scripts/__init__.py +6 -0
  250. equiformer_v3/core/scripts/convert_hydra_to_release.py +94 -0
  251. equiformer_v3/core/scripts/download_data.py +182 -0
  252. equiformer_v3/core/scripts/download_large_files.py +156 -0
  253. equiformer_v3/core/scripts/eqv2_to_hydra_eqv2.py +36 -0
  254. equiformer_v3/core/scripts/fit_normalizers.py +119 -0
  255. equiformer_v3/core/scripts/fit_references.py +91 -0
  256. equiformer_v3/core/scripts/gif_maker_parallelized.py +118 -0
  257. equiformer_v3/core/scripts/hpo/README.md +54 -0
  258. equiformer_v3/core/scripts/hpo/__init__.py +6 -0
  259. equiformer_v3/core/scripts/hpo/run_tune.py +111 -0
  260. equiformer_v3/core/scripts/hpo/run_tune_pbt.py +108 -0
  261. equiformer_v3/core/scripts/hpo/slurm/start-head.sh +9 -0
  262. equiformer_v3/core/scripts/hpo/slurm/start-worker.sh +8 -0
  263. equiformer_v3/core/scripts/hpo/slurm/submit-ray-cluster.sbatch +50 -0
  264. equiformer_v3/core/scripts/make_challenge_submission_file.py +117 -0
  265. equiformer_v3/core/scripts/make_lmdb_sizes.py +85 -0
  266. equiformer_v3/core/scripts/make_submission_file.py +145 -0
  267. equiformer_v3/core/scripts/preprocess_ef.py +170 -0
  268. equiformer_v3/core/scripts/preprocess_relaxed.py +144 -0
  269. equiformer_v3/core/scripts/uncompress.py +67 -0
  270. equiformer_v3/core/tasks/__init__.py +9 -0
  271. equiformer_v3/core/tasks/task.py +121 -0
  272. equiformer_v3/core/trainers/__init__.py +13 -0
  273. equiformer_v3/core/trainers/base_trainer.py +1037 -0
  274. equiformer_v3/core/trainers/ocp_trainer.py +734 -0
  275. equiformer_v3/data/__init__.py +0 -0
  276. equiformer_v3/data/oc/.flake8 +5 -0
  277. equiformer_v3/data/oc/LICENSE.md +21 -0
  278. equiformer_v3/data/oc/README.md +191 -0
  279. equiformer_v3/data/oc/README_legacy_OC20.md +127 -0
  280. equiformer_v3/data/oc/__init__.py +16 -0
  281. equiformer_v3/data/oc/codecov.yml +9 -0
  282. equiformer_v3/data/oc/core/__init__.py +10 -0
  283. equiformer_v3/data/oc/core/adsorbate.py +158 -0
  284. equiformer_v3/data/oc/core/adsorbate_slab_config.py +553 -0
  285. equiformer_v3/data/oc/core/bulk.py +128 -0
  286. equiformer_v3/data/oc/core/interface_config.py +270 -0
  287. equiformer_v3/data/oc/core/ion.py +69 -0
  288. equiformer_v3/data/oc/core/multi_adsorbate_slab_config.py +235 -0
  289. equiformer_v3/data/oc/core/slab.py +638 -0
  290. equiformer_v3/data/oc/core/solvent.py +76 -0
  291. equiformer_v3/data/oc/databases/__init__.py +0 -0
  292. equiformer_v3/data/oc/databases/pkls/__init__.py +8 -0
  293. equiformer_v3/data/oc/databases/pkls/adsorbates.pkl +0 -0
  294. equiformer_v3/data/oc/databases/pkls/ions.pkl +0 -0
  295. equiformer_v3/data/oc/databases/pkls/solvents.pkl +0 -0
  296. equiformer_v3/data/oc/databases/update.py +105 -0
  297. equiformer_v3/data/oc/experimental/README.md +36 -0
  298. equiformer_v3/data/oc/experimental/get_energies.py +60 -0
  299. equiformer_v3/data/oc/experimental/merge_traj.py +96 -0
  300. equiformer_v3/data/oc/experimental/perturb_systems.py +58 -0
  301. equiformer_v3/data/oc/experimental/rattle_test.py +42 -0
  302. equiformer_v3/data/oc/experimental/utils.py +65 -0
  303. equiformer_v3/data/oc/ocdata_workflow.png +0 -0
  304. equiformer_v3/data/oc/scripts/precompute_sample_structures.py +177 -0
  305. equiformer_v3/data/oc/structure_generator.py +442 -0
  306. equiformer_v3/data/oc/utils/__init__.py +3 -0
  307. equiformer_v3/data/oc/utils/flag_anomaly.py +141 -0
  308. equiformer_v3/data/oc/utils/geometry.py +239 -0
  309. equiformer_v3/data/oc/utils/vasp.py +93 -0
  310. equiformer_v3/data/oc/utils/vasp_flags.py +94 -0
  311. equiformer_v3/data/oc/workflow_image.png +0 -0
  312. equiformer_v3/data/odac/LICENSE +21 -0
  313. equiformer_v3/data/odac/README.md +23 -0
  314. equiformer_v3/data/odac/__init__.py +0 -0
  315. equiformer_v3/data/odac/force_field/FF_analysis.py +301 -0
  316. equiformer_v3/data/odac/force_field/FF_calcs/CO2_example/Eint.out +1 -0
  317. equiformer_v3/data/odac/force_field/FF_calcs/CO2_example/ads.cif +28 -0
  318. equiformer_v3/data/odac/force_field/FF_calcs/CO2_example/data.ads +46 -0
  319. equiformer_v3/data/odac/force_field/FF_calcs/CO2_example/data.frame +771 -0
  320. equiformer_v3/data/odac/force_field/FF_calcs/CO2_example/forces.dump +100 -0
  321. equiformer_v3/data/odac/force_field/FF_calcs/CO2_example/frame.cif +114 -0
  322. equiformer_v3/data/odac/force_field/FF_calcs/CO2_example/in.lammps +29 -0
  323. equiformer_v3/data/odac/force_field/FF_calcs/CO2_example/log.lammps +150 -0
  324. equiformer_v3/data/odac/force_field/FF_calcs/H2O_example/Eint.out +1 -0
  325. equiformer_v3/data/odac/force_field/FF_calcs/H2O_example/ads.cif +28 -0
  326. equiformer_v3/data/odac/force_field/FF_calcs/H2O_example/data.ads +46 -0
  327. equiformer_v3/data/odac/force_field/FF_calcs/H2O_example/data.frame +2790 -0
  328. equiformer_v3/data/odac/force_field/FF_calcs/H2O_example/forces.dump +347 -0
  329. equiformer_v3/data/odac/force_field/FF_calcs/H2O_example/frame.cif +361 -0
  330. equiformer_v3/data/odac/force_field/FF_calcs/H2O_example/in.lammps +29 -0
  331. equiformer_v3/data/odac/force_field/FF_calcs/H2O_example/log.lammps +150 -0
  332. equiformer_v3/data/odac/force_field/FF_calcs/in.lammps +29 -0
  333. equiformer_v3/data/odac/force_field/Fig5a.png +0 -0
  334. equiformer_v3/data/odac/force_field/Fig5b.png +0 -0
  335. equiformer_v3/data/odac/force_field/Fig5c.png +0 -0
  336. equiformer_v3/data/odac/force_field/Fig5d.png +0 -0
  337. equiformer_v3/data/odac/force_field/README.md +15 -0
  338. equiformer_v3/data/odac/force_field/data_w_ml.json +18625 -0
  339. equiformer_v3/data/odac/promising_mof/promising_mof_energies/energy.py +904 -0
  340. equiformer_v3/data/odac/promising_mof/promising_mof_energies/missing_ddec.txt +284 -0
  341. equiformer_v3/data/odac/promising_mof/promising_mof_features/BIMDIL.cif +98 -0
  342. equiformer_v3/data/odac/promising_mof/promising_mof_features/DITYOW.cif +226 -0
  343. equiformer_v3/data/odac/promising_mof/promising_mof_features/ODIXEG.cif +136 -0
  344. equiformer_v3/data/odac/promising_mof/promising_mof_features/REDROI_0.08_0.cif +232 -0
  345. equiformer_v3/data/odac/promising_mof/promising_mof_features/features.txt +210 -0
  346. equiformer_v3/data/odac/promising_mof/promising_mof_features/list_MOF.txt +4 -0
  347. equiformer_v3/data/odac/promising_mof/promising_mof_features/output.txt +6 -0
  348. equiformer_v3/data/odac/promising_mof/promising_mof_features/readme +27 -0
  349. equiformer_v3/data/odac/promising_mof/promising_mof_structures/defective.zip +0 -0
  350. equiformer_v3/data/odac/promising_mof/promising_mof_structures/pristine.zip +0 -0
  351. equiformer_v3/data/odac/promising_mof/promising_mof_structures/promising_defective_MOFs.csv +108 -0
  352. equiformer_v3/data/odac/promising_mof/promising_mof_structures/promising_pristine_MOFs.csv +136 -0
  353. equiformer_v3/data/odac/setup_vasp.py +115 -0
  354. equiformer_v3/data/om/LICENSE.md +22 -0
  355. equiformer_v3/data/om/README.md +0 -0
  356. equiformer_v3/data/om/__init__.py +0 -0
  357. equiformer_v3/data/om/biomolecules/README.md +0 -0
  358. equiformer_v3/data/om/biomolecules/geom/sample_geom_drugs.py +96 -0
  359. equiformer_v3/data/om/biomolecules/geom/write_geom_drugs_structures.py +90 -0
  360. equiformer_v3/data/om/electrolytes/README.md +0 -0
  361. equiformer_v3/data/om/metal-organics/Architector_initial_examples.ipynb +1821 -0
  362. equiformer_v3/data/om/metal-organics/README.md +0 -0
  363. equiformer_v3/data/om/omdata/orca/__init__.py +0 -0
  364. equiformer_v3/data/om/omdata/orca/calc.py +63 -0
  365. equiformer_v3/data/om/omdata/orca/recipes.py +151 -0
  366. equiformer_v3/demo/ocpapi/.circleci/config.yml +44 -0
  367. equiformer_v3/demo/ocpapi/.isort.cfg +6 -0
  368. equiformer_v3/demo/ocpapi/LICENSE +21 -0
  369. equiformer_v3/demo/ocpapi/README.md +211 -0
  370. equiformer_v3/demo/ocpapi/__init__.py +20 -0
  371. equiformer_v3/demo/ocpapi/client/__init__.py +24 -0
  372. equiformer_v3/demo/ocpapi/client/client.py +449 -0
  373. equiformer_v3/demo/ocpapi/client/models.py +509 -0
  374. equiformer_v3/demo/ocpapi/client/ui.py +24 -0
  375. equiformer_v3/demo/ocpapi/version.py +3 -0
  376. equiformer_v3/demo/ocpapi/workflows/__init__.py +22 -0
  377. equiformer_v3/demo/ocpapi/workflows/adsorbates.py +910 -0
  378. equiformer_v3/demo/ocpapi/workflows/context.py +28 -0
  379. equiformer_v3/demo/ocpapi/workflows/filter.py +107 -0
  380. equiformer_v3/demo/ocpapi/workflows/log.py +5 -0
  381. equiformer_v3/demo/ocpapi/workflows/retry.py +131 -0
  382. equiformer_v3/experimental/configs/oc20/2M/equiformer_v3/experiments/base_N@8-L@6-C@128-attn-hidden@64-ffn@512-envelope-num-rbf@128_merge-layer-norm_gates2-gridmlp_use-gate-force-head_wd@1e-3-grad-clip@100_lin-ref-e@4.yml +186 -0
  383. equiformer_v3/experimental/configs/oc20/2M/reference_data/coeff_2M.npz +0 -0
  384. equiformer_v3/experimental/configs/oc20/2M/reference_data/oc20_ref.pkl +0 -0
  385. equiformer_v3/experimental/configs/omat24/mptrj/experiments/direct/equiformer_v3_N@7_L@4_attn-hidden@32_rbf@10_max-neighbors@300_attn-grid@14-8_ffn-grid@14_use-gate-force-head_merge-layer-norm_epochs@70-bs@512-wd@1e-3-beta2@0.95_dens-p@0.5-std@0.025-r@0.5-w@10-strict-max-r@0.75-no-stress.yml +229 -0
  386. equiformer_v3/experimental/configs/omat24/mptrj/experiments/gradient/equiformer_v3_grad-finetune_N@7_L@4_attn-hidden@32_rbf@10_max-neighbors@300_attn-grid@14-8_ffn-grid@14_pt-reg-dens-no-stress-strict-max-r@0.75-ft-no-reg_lr@0-5e-5-epochs@10-bs@64x8-wd@1e-3-beta2@0.95.yml +232 -0
  387. equiformer_v3/experimental/configs/omat24/mptrj/preprocessing/equiformer_v2_mptrj_element_references.pt +0 -0
  388. equiformer_v3/experimental/configs/omat24/mptrj/preprocessing/equiformer_v2_mptrj_energy_element_references.npz +0 -0
  389. equiformer_v3/experimental/configs/omat24/mptrj/preprocessing/equiformer_v2_mptrj_normalizer.pt +0 -0
  390. equiformer_v3/experimental/configs/omat24/omat24/experiments/direct/equiformer_v3_N@7_L@4_attn-hidden@32_rbf@64_max-neighbors@300_attn-grid@14-8_ffn-grid@14_use-gate-force-head_merge-layer-norm_epochs@4-bs@512-wd@1e-3-beta2@0.98-eps@1e-6_dens-p@0.5-std@0.025-r@0.5-0.75-w@1-no-stress-max-f@2.5_no-amp.yml +239 -0
  391. equiformer_v3/experimental/configs/omat24/omat24/experiments/direct/equiformer_v3_N@7_L@6_attn-hidden@32_rbf@64_max-neighbors@300_attn-grid@20-8_ffn-grid@20_use-gate-force-head_merge-layer-norm_epochs@4-bs@512-wd@1e-3-beta2@0.98-eps@1e-6_dens-p@0.5-std@0.025-r@0.5-0.75-w@1-no-stress-max-f@2.5_no-amp.yml +250 -0
  392. equiformer_v3/experimental/configs/omat24/omat24/experiments/gradient/equiformer_v3_grad-finetune_N@7_L@4_attn-hidden@32_rbf@64_max-neighbors@300_attn-grid@14-8_ffn-grid@14_merge-layer-norm_lr@0-1e-4-epochs@2-bs@512-wd@1e-3-beta2@0.98-eps@1e-6_pt-reg-dens-ft-no-reg.yml +241 -0
  393. equiformer_v3/experimental/configs/omat24/omat24/experiments/gradient/equiformer_v3_grad-finetune_N@7_L@6_attn-hidden@32_rbf@64_max-neighbors@300_attn-grid@20-8_ffn-grid@20_merge-layer-norm_lr@0-1e-4-epochs@2-bs@512-wd@1e-3-beta2@0.98-eps@1e-6_pt-reg-dens-ft-no-reg.yml +243 -0
  394. equiformer_v3/experimental/configs/omat24/omat24/preprocessing/omat24_energy_element_references.npz +0 -0
  395. equiformer_v3/experimental/configs/omat24/salex_mptrj/experiments/gradient/equiformer_v3_grad-finetune_N@7_L@4_attn-hidden@32_rbf@64_max-neighbors@300_attn-grid@14-8_ffn-grid@14_attn-eps@1e-8_lr@0-5e-5-warmup@0.1-epochs@2-mptrj-salex-ratio@8-bs@256-wd@1e-3-beta2@0.98-eps@1e-6_pt-reg-dens-ft-no-reg-lr@1e-4.yml +242 -0
  396. equiformer_v3/experimental/configs/omat24/salex_mptrj/preprocessing/salex_mptrj_energy_element_references.npz +0 -0
  397. equiformer_v3/experimental/datasets/create_expanded_structures_aselmdb.py +125 -0
  398. equiformer_v3/experimental/datasets/create_metadata_num_edges.py +72 -0
  399. equiformer_v3/experimental/datasets/matbench_discovery_create_aselmdb.py +25 -0
  400. equiformer_v3/experimental/datasets/mptrj_convert_json_to_aselmdb.py +153 -0
  401. equiformer_v3/experimental/datasets/mptrj_create_subset_aselmdb.py +42 -0
  402. equiformer_v3/experimental/docs/env_setup.md +30 -0
  403. equiformer_v3/experimental/models/__init__.py +0 -0
  404. equiformer_v3/experimental/models/equiformer_v3/Jd.pt +0 -0
  405. equiformer_v3/experimental/models/equiformer_v3/activation.py +517 -0
  406. equiformer_v3/experimental/models/equiformer_v3/drop.py +84 -0
  407. equiformer_v3/experimental/models/equiformer_v3/edge_rot_mat.py +90 -0
  408. equiformer_v3/experimental/models/equiformer_v3/envelope.py +34 -0
  409. equiformer_v3/experimental/models/equiformer_v3/equiformer_v3.py +763 -0
  410. equiformer_v3/experimental/models/equiformer_v3/equiformer_v3_dens.py +508 -0
  411. equiformer_v3/experimental/models/equiformer_v3/input_block.py +116 -0
  412. equiformer_v3/experimental/models/equiformer_v3/layer_norm.py +335 -0
  413. equiformer_v3/experimental/models/equiformer_v3/output_block.py +298 -0
  414. equiformer_v3/experimental/models/equiformer_v3/radial_function.py +97 -0
  415. equiformer_v3/experimental/models/equiformer_v3/so2_ops.py +156 -0
  416. equiformer_v3/experimental/models/equiformer_v3/so3.py +603 -0
  417. equiformer_v3/experimental/models/equiformer_v3/softmax.py +83 -0
  418. equiformer_v3/experimental/models/equiformer_v3/transformer_block.py +755 -0
  419. equiformer_v3/experimental/models/equiformer_v3/utils.py +11 -0
  420. equiformer_v3/experimental/models/equiformer_v3/wigner.py +38 -0
  421. equiformer_v3/experimental/scripts/eval/matbench_discovery/discovery.sh +15 -0
  422. equiformer_v3/experimental/scripts/eval/matbench_discovery/kappa.sh +4 -0
  423. equiformer_v3/experimental/scripts/eval/oc20/s2ef/equiformer_v3/equiformer_v3_splits@2M_g@8.sh +51 -0
  424. equiformer_v3/experimental/scripts/eval/omat24/equiformer_v3/equiformer_v3_g@8.sh +48 -0
  425. equiformer_v3/experimental/scripts/eval/omat24/equiformer_v3/equiformer_v3_omat24.sh +24 -0
  426. equiformer_v3/experimental/scripts/train/oc20/s2ef/equiformer_v3/equiformer_v3_splits@2M_g@8.sh +19 -0
  427. equiformer_v3/experimental/scripts/train/omat24/equiformer_v3/equiformer_v3_grad_mptrj.sh +79 -0
  428. equiformer_v3/experimental/scripts/train/omat24/equiformer_v3/equiformer_v3_grad_omat24.sh +79 -0
  429. equiformer_v3/experimental/scripts/train/omat24/equiformer_v3/equiformer_v3_grad_omat24_g@4nodes_mithril.sh +101 -0
  430. equiformer_v3/experimental/scripts/train/omat24/equiformer_v3/equiformer_v3_grad_salex-mptrj.sh +79 -0
  431. equiformer_v3/experimental/scripts/train/omat24/equiformer_v3/equiformer_v3_grad_salex-mptrj_g@4nodes_mithril.sh +101 -0
  432. equiformer_v3/experimental/scripts/train/omat24/equiformer_v3/equiformer_v3_mptrj.sh +79 -0
  433. equiformer_v3/experimental/scripts/train/omat24/equiformer_v3/equiformer_v3_omat24.sh +79 -0
  434. equiformer_v3/experimental/scripts/train/omat24/equiformer_v3/equiformer_v3_omat24_g@4nodes_mithril.sh +102 -0
  435. equiformer_v3/experimental/scripts/train/omat24/equiformer_v3/equiformer_v3_omat24_g@multi_mithril.sh +99 -0
  436. equiformer_v3/experimental/tasks/matbench_discovery/evaluate_discovery.py +320 -0
  437. equiformer_v3/experimental/tasks/matbench_discovery/join_preds.py +116 -0
  438. equiformer_v3/experimental/tasks/matbench_discovery/kappa_run_single_relaxation.py +343 -0
  439. equiformer_v3/experimental/tasks/matbench_discovery/test_discovery.py +290 -0
  440. equiformer_v3/experimental/tasks/remove_key_from_checkpoint.py +41 -0
  441. equiformer_v3/experimental/tasks/remove_torch_compile_from_checkpoint.py +26 -0
  442. equiformer_v3/experimental/tasks/test_equivariance/test_s2_grid_mul.py +68 -0
  443. equiformer_v3/experimental/tasks/test_equivariance/test_transformer_blocks.py +140 -0
  444. equiformer_v3/experimental/tasks/test_fashp_many_body/const_wigner2gaunt.pt +0 -0
  445. equiformer_v3/experimental/tasks/test_fashp_many_body/equiformer_v3_body_order_test.py +906 -0
  446. equiformer_v3/experimental/tasks/test_fashp_many_body/gaunt_self_tensor_product.py +67 -0
  447. equiformer_v3/experimental/tasks/test_fashp_many_body/test_body_order_neighborhood.py +414 -0
  448. equiformer_v3/experimental/tasks/test_fashp_many_body/test_self_tensor_product.py +124 -0
  449. equiformer_v3/experimental/trainers/__init__.py +0 -0
  450. equiformer_v3/experimental/trainers/dens_ase_dataset.py +149 -0
  451. equiformer_v3/experimental/trainers/equiformer_v3_dens_trainer.py +1191 -0
  452. equiformer_v3/experimental/trainers/exponential_moving_average_v2.py +213 -0
  453. equiformer_v3/experimental/trainers/oc20_total_energy_lmdb.py +227 -0
  454. equiformer_v3-0.0.0.dist-info/METADATA +398 -0
  455. equiformer_v3-0.0.0.dist-info/RECORD +456 -0
  456. equiformer_v3-0.0.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,6 @@
1
+ # Register equiformer_v3 models and trainers with fairchem registry
2
+ import equiformer_v3.experimental.models.equiformer_v3.equiformer_v3
3
+ import equiformer_v3.experimental.models.equiformer_v3.equiformer_v3_dens
4
+ import equiformer_v3.experimental.trainers.equiformer_v3_dens_trainer
5
+ import equiformer_v3.experimental.trainers.dens_ase_dataset
6
+ import equiformer_v3.experimental.trainers.oc20_total_energy_lmdb
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright (c) Facebook, Inc. and its affiliates.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,13 @@
1
+ All pre-trained model checkpoints were obtained directly from [ocp](../core/model_checkpoints). For convenience, we provide a pointer to the checkpoints used in this work below:
2
+
3
+ |Model |Download | ML+SP Success Rate @k=5 |
4
+ | - | - | - |
5
+ |SchNet |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_all_large.pt) |5.04% |
6
+ |DimeNet++ |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_all.pt) |10.79% |
7
+ |PaiNN | [checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_05/s2ef/painn_h512_s2ef_all.pt) |39.57% |
8
+ |GemNet-OC | [checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_07/s2ef/gemnet_oc_base_s2ef_all.pt) |82.94% |
9
+ |GemNet-OC All+MD | [checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/data/gemnet_oc_s2ef_all_md.pt) |84.38% |
10
+ |GemNet-OC-Large All+MD | [checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_07/s2ef/gemnet_oc_large_s2ef_all_md.pt) |86.02% |
11
+ |SCN-Large All+MD | [checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/data/scn_all_md_s2ef.pt) |87.77% |
12
+
13
+ For more details please visit ../core/model_checkpoints.
@@ -0,0 +1,65 @@
1
+ ## AdsorbML: Accelerating Adsorption Energy Calculations with Machine Learning
2
+
3
+ ![adsorbml](https://user-images.githubusercontent.com/45150244/213025581-498b459e-9077-42ac-84e1-65ef331555d2.png)
4
+
5
+ `AdsorbML` is an algorithm to calculating the minima adsorbate binding energy (adsorption energy) for a unique adsorbate+surface combination. All ML models are obtained from [`ocp`](https://github.com/Open-Catalyst-Project/ocp) to perform corresponding structure relaxations.
6
+
7
+ This repository holds the dataset, scripts, and downloads for the accompanying [paper](https://arxiv.org/abs/2211.16486).
8
+
9
+ ### OC20-Dense Dataset (OC20-Dense)
10
+
11
+ OC20-Dense contains a dense sampling of adsorbate configurations on ~1,000 randomly selected adsorbate+surface materials from the [OC20](https://arxiv.org/abs/2010.09990) dataset. The dataset comprises a total of 85,658 unique input configurations.
12
+
13
+ The dataset is stored in an LMDB file and ready to be used in `ocp` upon download. Additionally, ground truth DFT relaxations are store in ASE trajectories and provided for all converged systems used for evaluation.
14
+
15
+ NOTE - ASE trajectories exclude systems that were not converged or had invalid configurations as defined by the constraints in the `AdsorbML` manuscript. This resulted in 65,073 relaxations available for evaluation and are provided here.
16
+
17
+
18
+ |Splits |Size of compressed version (in bytes) |Size of uncompressed version (in bytes) | MD5 checksum (download link) |
19
+ |--- |--- |--- |--- |
20
+ |LMDB |654M |9.8G | [0163b0e8c4df6d9c426b875a28d9178a](https://dl.fbaipublicfiles.com/opencatalystproject/data/adsorbml/oc20_dense_data.tar.gz) |
21
+ |ASE Trajectories |29G |112G | [ee937e5290f8f720c914dc9a56e0281f](https://dl.fbaipublicfiles.com/opencatalystproject/data/adsorbml/oc20_dense_trajectories.tar.gz) |
22
+
23
+ The following files are also provided to be used for evaluation and general information:
24
+ * `oc20dense_mapping.pkl` : Mapping of the LMDB `sid` to general metadata information. If this file is not present, run the command `python src/fairchem/core/scripts/download_large_files.py adsorbml` from the root of the fairchem repo to download it. -
25
+ * `system_id`: Unique system identifier for an adsorbate, bulk, surface combination.
26
+ * `config_id`: Unique configuration identifier, where `rand` and `heur` correspond to random and heuristic initial configurations, respectively.
27
+ * `mpid`: Materials Project bulk identifier.
28
+ * `miller_idx`: 3-tuple of integers indicating the Miller indices of the surface.
29
+ * `shift`: C-direction shift used to determine cutoff for the surface (c-direction is following the nomenclature from Pymatgen).
30
+ * `top`: Boolean indicating whether the chosen surface was at the top or bottom of the originally enumerated surface.
31
+ * `adsorbate`: Chemical composition of the adsorbate.
32
+ * `adsorption_site`: A tuple of 3-tuples containing the Cartesian coordinates of each binding adsorbate atom
33
+ * `oc20dense_targets.pkl` : DFT adsorption energies across different system and placement ids.
34
+ * `oc20dense_compute.pkl` : DFT compute as measured in the number of ionic and scf steps for each evaluated relaxation.
35
+ * `oc20dense_ref_energies.pkl` : Reference energy used for a specified `system_id`. This energy includes the relaxed clean surface and the gas phase adsorbate energy to ensure consistency across calculations.
36
+ * `oc20dense_tags.pkl` : Tag information used for a specified `system_id`. Where 0 = subsurface, 1 = surface, 2 = adsorbate.
37
+
38
+ All mappings can be obtained at the following downloadable link: https://dl.fbaipublicfiles.com/opencatalystproject/data/adsorbml/oc20_dense_mappings.tar.gz
39
+
40
+ MD5 checksums:
41
+ ```
42
+ c18735c405ce6ce5761432b07287d8d9 oc20_dense_mappings.tar.gz
43
+ 3e26c3bcef01ccfc9b001931065ea6e6 oc20dense_mapping.pkl
44
+ fd589b013b72e62e11a6b2a5bd1d323c oc20dense_targets.pkl
45
+ 78d25997e0aaf754df526ab37276bb89 oc20dense_compute.pkl
46
+ b07c64158e4bfa5f7b9bf6263753ecc5 oc20dense_ref_energies.pkl
47
+ 1ba0bc266130f186850f5faa547b6a02 oc20dense_tags.pkl
48
+ ```
49
+
50
+ ### Running `AdsorbML`
51
+
52
+ Please see the [README](adsorbml/scripts/README.md) inside the `scripts` directory for instructions.
53
+
54
+ ### Citing `AdsorbML`
55
+
56
+ If you use this codebase in your work, please consider citing:
57
+
58
+ ```bibtex
59
+ @article{lan2022adsorbml,
60
+ title={AdsorbML: Accelerating Adsorption Energy Calculations with Machine Learning},
61
+ author={Lan*, Janice and Palizhati*, Aini and Shuaibi*, Muhammed and Wood*, Brandon M and Wander, Brook and Das, Abhishek and Uyttendaele, Matt and Zitnick, C Lawrence and Ulissi, Zachary W},
62
+ journal={arXiv preprint arXiv:2211.16486},
63
+ year={2022}
64
+ }
65
+ ```
File without changes
@@ -0,0 +1,17 @@
1
+ ## Validating energy predictions for 2023 Open Catalyst Challenge
2
+
3
+ The `challenge_eval.py` script takes in your prediction npz file and the model used to generate the ML relaxed strcutures (gemnet-oc-2M, scn-2M, or escn-2M) and returns the success rate. More details on how to run energy predictions on ML relaxed strcutures can be found on the [challenge website](https://opencatalystproject.org/challenge.html) under the evaluation section.
4
+
5
+ 1. Git clone this repository:
6
+ ```
7
+ git clone https://github.com/Open-Catalyst-Project/AdsorbML.git
8
+ ```
9
+ 2. Change into the 2023_neurips_challenge directory:
10
+ ```
11
+ cd AdsorbML/adsorbml/2023_neurips_challenge
12
+ ```
13
+ 3. Run script:
14
+ ```
15
+ python challenge_eval.py --model model_used_for_MLRS --results-file /path/to/predictions.npz
16
+ ```
17
+ The `--model` variable should be set to either `gemnet-oc-2M`, `scn-2M`, or `escn-2M` depending on which LMDB you chose.
@@ -0,0 +1,195 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import pickle
5
+ from collections import defaultdict
6
+ from pathlib import Path
7
+
8
+ import numpy as np
9
+
10
+ from fairchem.core.scripts import download_large_files
11
+
12
+
13
+ def is_successful(best_pred_energy, best_dft_energy, SUCCESS_THRESHOLD=0.1):
14
+ """
15
+ Computes the success rate given the best predicted energy
16
+ and the best ground truth DFT energy.
17
+
18
+ success_parity: The standard definition for success, where ML needs to be
19
+ within the SUCCESS_THRESHOLD, or lower, of the DFT energy.
20
+
21
+ Returns: Bool
22
+ """
23
+ # Given best ML and DFT energy, compute various success metrics:
24
+ # success_parity: base success metric (ML - DFT <= SUCCESS_THRESHOLD)
25
+ diff = best_pred_energy - best_dft_energy
26
+ return diff <= SUCCESS_THRESHOLD
27
+
28
+
29
+ def compute_valid_ml_success(ml_data, dft_data):
30
+ """
31
+ Computes validated ML success rates.
32
+ Here, results are generated only from ML. DFT single-points are used to
33
+ validate whether the ML energy is within 0.1eV of the DFT energy of the
34
+ predicted structure. If valid, the ML energy is compared to the ground
35
+ truth DFT energy, otherwise it is discarded.
36
+
37
+ Return validated ML success rates.
38
+ """
39
+
40
+ success_rate = 0.0
41
+
42
+ for system in dft_data:
43
+ # For `system`, collect all ML adslabs and their corresponding energies
44
+ ml_adslabs, ml_energies = [], []
45
+ for config in ml_data[system]:
46
+ ml_adslabs.append(config)
47
+ ml_energies.append(ml_data[system][config]["ml_energy"])
48
+
49
+ min_ml_idx = np.argmin(ml_energies)
50
+ min_adslab = ml_adslabs[min_ml_idx]
51
+ best_ml_energy = ml_energies[min_ml_idx]
52
+ # If the best ML energy is not within 0.1eV
53
+ # of its DFT energy evaluation, discard.
54
+ ml_dft_energy = ml_data[system][min_adslab]["ml+dft_energy"]
55
+ diff = abs(ml_dft_energy - best_ml_energy)
56
+ if diff > 0.1:
57
+ continue
58
+
59
+ best_dft_energy = min(list(dft_data[system].values()))
60
+
61
+ success = is_successful(best_ml_energy, best_dft_energy)
62
+ success_rate += success
63
+
64
+ success_rate /= len(dft_data)
65
+
66
+ print("=" * 50)
67
+ print(f"Success Rate (%): {100*success_rate}")
68
+
69
+
70
+ def get_dft_data(targets):
71
+ """
72
+ Organizes the released target mapping for evaluation lookup.
73
+
74
+ Returns: Dict:
75
+ {
76
+ 'system_id 1': {'config_id 1': dft_ads_energy, 'config_id 2': dft_ads_energy},
77
+ 'system_id 2': {'config_id 1': dft_ads_energy, 'config_id 2': dft_ads_energy},
78
+ ...
79
+ }
80
+ """
81
+ dft_data = defaultdict(dict)
82
+ for system in targets:
83
+ for adslab in targets[system]:
84
+ dft_data[system][adslab[0]] = adslab[1]
85
+
86
+ return dft_data
87
+
88
+
89
+ def process_ml_data(results_file, model, metadata, ml_dft_targets, dft_data):
90
+ """
91
+ For ML systems in which no configurations made it through the physical
92
+ constraint checks, set energies to an arbitrarily high value to ensure
93
+ a failure case in evaluation.
94
+
95
+ Returns: Dict:
96
+ {
97
+ 'system_id 1': {'config_id 1': {'ml_energy': predicted energy, 'ml+dft_energy': dft energy of ML structure} ...},
98
+ 'system_id 2': {'config_id 1': {'ml_energy': predicted energy, 'ml+dft_energy': dft energy of ML structure} ...},
99
+ ...
100
+ }
101
+ """
102
+ preds = np.load(results_file)
103
+ ml_data = defaultdict(dict)
104
+
105
+ for _id, energy in zip(preds["ids"], preds["energy"]):
106
+ sid, _ = _id.split("_")
107
+
108
+ info = metadata[int(sid)]
109
+ sysid = info["system_id"]
110
+ config = info["config_id"]
111
+
112
+ ml_dft_energy = ml_dft_targets[model][sysid][config]
113
+ ml_data[sysid][config] = {"ml_energy": energy, "ml+dft_energy": ml_dft_energy}
114
+
115
+ # set missing systems to high energy
116
+ # set missing systems to 0 DFT compute
117
+ for system in dft_data:
118
+ if system not in ml_data:
119
+ ml_data[system] = defaultdict(dict)
120
+ for config in dft_data[system]:
121
+ if config not in ml_data[system]:
122
+ _dict = {
123
+ "ml_energy": 1e10,
124
+ "ml+dft_energy": 1e10,
125
+ }
126
+ ml_data[system][config] = _dict
127
+
128
+ # for ML systems with no available ml+dft datapoints, set to an arbitrarily
129
+ # high energy value
130
+ for system in ml_data:
131
+ for config in ml_data[system]:
132
+ if not ml_data[system][config]["ml+dft_energy"]:
133
+ ml_data[system][config]["ml+dft_energy"] = 1e10
134
+
135
+ return ml_data
136
+
137
+
138
+ def parse_args():
139
+ parser = argparse.ArgumentParser()
140
+ parser.add_argument(
141
+ "--model",
142
+ required=True,
143
+ choices=["gemnet-oc-2M", "escn-2M", "scn-2M"],
144
+ )
145
+ parser.add_argument(
146
+ "--results-file",
147
+ required=True,
148
+ help="Path to predictions to evaluate. NPZ format.",
149
+ )
150
+
151
+ return parser.parse_args()
152
+
153
+
154
+ def main():
155
+ """
156
+ This script takes in your prediction file (npz format)
157
+ and the ML model name used for ML relaxations.
158
+ Then using a mapping file, dft ground truth energy,
159
+ and ML relaxed dft energy returns the success rate of your predictions.
160
+ """
161
+
162
+ args = parse_args()
163
+
164
+ # targets and metadata are expected to be in
165
+ # the same directory as this script
166
+ if (
167
+ not Path(__file__).with_name("oc20dense_val_targets.pkl").exists()
168
+ or not Path(__file__).with_name("ml_relaxed_dft_targets.pkl").exists()
169
+ ):
170
+ download_large_files.download_file_group("adsorbml")
171
+ targets = pickle.load(
172
+ open(Path(__file__).with_name("oc20dense_val_targets.pkl"), "rb")
173
+ )
174
+ ml_dft_targets = pickle.load(
175
+ open(Path(__file__).with_name("ml_relaxed_dft_targets.pkl"), "rb")
176
+ )
177
+ metadata = pickle.load(
178
+ open(Path(__file__).with_name("oc20dense_mapping.pkl"), "rb")
179
+ )
180
+
181
+ ###### Process DFT Data ######
182
+ dft_data = get_dft_data(targets)
183
+
184
+ ###### Process ML Data ######
185
+ ml_data = process_ml_data(
186
+ args.results_file, args.model, metadata, ml_dft_targets, dft_data
187
+ )
188
+
189
+ ###### Compute Metrics ######
190
+ print(f"Prediction file: {args.results_file}")
191
+ compute_valid_ml_success(ml_data, dft_data)
192
+
193
+
194
+ if __name__ == "__main__":
195
+ main()
@@ -0,0 +1,61 @@
1
+ trainer: forces
2
+
3
+ dataset:
4
+ - src: data/s2ef/all/train/
5
+ normalize_labels: True
6
+ target_mean: -0.7554450631141663
7
+ target_std: 2.887317180633545
8
+ grad_target_mean: 0.0
9
+ grad_target_std: 2.887317180633545
10
+ - src: data/s2ef/all/val_id_30k/
11
+
12
+ logger: wandb
13
+
14
+ task:
15
+ dataset: trajectory_lmdb
16
+ primary_metric: forces_mae
17
+ train_on_free_atoms: True
18
+ eval_on_free_atoms: True
19
+ eval_relaxations: True
20
+ relaxation_steps: 300
21
+ relaxation_fmax: 0.02
22
+ write_pos: False
23
+ relax_dataset:
24
+ src: path/to/oc20-dense/dataset #TODO
25
+ relax_opt:
26
+ name: lbfgs
27
+ maxstep: 0.04
28
+ memory: 50
29
+ damping: 1.0
30
+ alpha: 70.0
31
+ traj_dir: path/to/save/ml/relaxations #TODO
32
+
33
+ model:
34
+ name: dimenetplusplus
35
+ hidden_channels: 192
36
+ out_emb_channels: 192
37
+ num_blocks: 3
38
+ cutoff: 6.0
39
+ num_radial: 6
40
+ num_spherical: 7
41
+ num_before_skip: 1
42
+ num_after_skip: 2
43
+ num_output_layers: 3
44
+ regress_forces: True
45
+ use_pbc: True
46
+
47
+ optim:
48
+ batch_size: 8
49
+ eval_batch_size: 8
50
+ eval_every: 10000
51
+ num_workers: 8
52
+ lr_initial: 0.0001
53
+ lr_gamma: 0.1
54
+ lr_milestones: # steps at which lr_initial <- lr_initial * lr_gamma
55
+ - 130794
56
+ - 196192
57
+ - 261589
58
+ warmup_steps: 130794
59
+ warmup_factor: 0.2
60
+ max_epochs: 7
61
+ force_coefficient: 50
@@ -0,0 +1,109 @@
1
+ trainer: forces
2
+
3
+ dataset:
4
+ - src: data/s2ef/all/train/
5
+ normalize_labels: True
6
+ target_mean: -0.7554450631141663
7
+ target_std: 2.887317180633545
8
+ grad_target_mean: 0.0
9
+ grad_target_std: 2.887317180633545
10
+ - src: data/s2ef/all/val_id_30k/
11
+
12
+ logger: wandb
13
+
14
+ task:
15
+ dataset: trajectory_lmdb
16
+ primary_metric: forces_mae
17
+ train_on_free_atoms: True
18
+ eval_on_free_atoms: True
19
+ eval_relaxations: True
20
+ relaxation_steps: 300
21
+ relaxation_fmax: 0.02
22
+ write_pos: False
23
+ relax_dataset:
24
+ src: path/to/oc20-dense/dataset #TODO
25
+ relax_opt:
26
+ name: lbfgs
27
+ maxstep: 0.04
28
+ memory: 50
29
+ damping: 1.0
30
+ alpha: 70.0
31
+ traj_dir: path/to/save/ml/relaxations #TODO
32
+
33
+ model:
34
+ name: gemnet_oc
35
+ num_spherical: 7
36
+ num_radial: 128
37
+ num_blocks: 6
38
+ emb_size_atom: 256
39
+ emb_size_edge: 1024
40
+ emb_size_trip_in: 64
41
+ emb_size_trip_out: 128
42
+ emb_size_quad_in: 64
43
+ emb_size_quad_out: 32
44
+ emb_size_aint_in: 64
45
+ emb_size_aint_out: 64
46
+ emb_size_rbf: 32
47
+ emb_size_cbf: 16
48
+ emb_size_sbf: 64
49
+ num_before_skip: 2
50
+ num_after_skip: 2
51
+ num_concat: 4
52
+ num_atom: 3
53
+ num_output_afteratom: 3
54
+ cutoff: 12.0
55
+ cutoff_qint: 12.0
56
+ cutoff_aeaint: 12.0
57
+ cutoff_aint: 12.0
58
+ max_neighbors: 30
59
+ max_neighbors_qint: 8
60
+ max_neighbors_aeaint: 20
61
+ max_neighbors_aint: 1000
62
+ rbf:
63
+ name: gaussian
64
+ envelope:
65
+ name: polynomial
66
+ exponent: 5
67
+ cbf:
68
+ name: spherical_harmonics
69
+ sbf:
70
+ name: legendre_outer
71
+ extensive: True
72
+ output_init: HeOrthogonal
73
+ activation: silu
74
+ scale_file: configs/s2ef/all/gemnet/scaling_factors/gemnet-oc-large.pt
75
+
76
+ regress_forces: True
77
+ direct_forces: True
78
+ forces_coupled: False
79
+
80
+ quad_interaction: True
81
+ atom_edge_interaction: True
82
+ edge_atom_interaction: True
83
+ atom_interaction: True
84
+
85
+ num_atom_emb_layers: 2
86
+ num_global_out_layers: 2
87
+ qint_tags: [1, 2]
88
+
89
+ optim:
90
+ batch_size: 4
91
+ eval_batch_size: 4
92
+ load_balancing: atoms
93
+ eval_every: 5000
94
+ num_workers: 2
95
+ lr_initial: 2.e-4
96
+ optimizer: AdamW
97
+ optimizer_params: {"amsgrad": True}
98
+ scheduler: ReduceLROnPlateau
99
+ mode: min
100
+ factor: 0.8
101
+ patience: 3
102
+ max_epochs: 80
103
+ force_coefficient: 100
104
+ energy_coefficient: 1
105
+ ema_decay: 0.999
106
+ clip_grad_norm: 10
107
+ loss_energy: mae
108
+ loss_force: l2mae
109
+ weight_decay: 0
@@ -0,0 +1,109 @@
1
+ trainer: forces
2
+
3
+ dataset:
4
+ - src: data/s2ef/all/train/
5
+ normalize_labels: True
6
+ target_mean: -0.7554450631141663
7
+ target_std: 2.887317180633545
8
+ grad_target_mean: 0.0
9
+ grad_target_std: 2.887317180633545
10
+ - src: data/s2ef/all/val_id_30k/
11
+
12
+ logger: wandb
13
+
14
+ task:
15
+ dataset: trajectory_lmdb
16
+ primary_metric: forces_mae
17
+ train_on_free_atoms: True
18
+ eval_on_free_atoms: True
19
+ eval_relaxations: True
20
+ relaxation_steps: 300
21
+ relaxation_fmax: 0.02
22
+ write_pos: False
23
+ relax_dataset:
24
+ src: path/to/oc20-dense/dataset #TODO
25
+ relax_opt:
26
+ name: lbfgs
27
+ maxstep: 0.04
28
+ memory: 50
29
+ damping: 1.0
30
+ alpha: 70.0
31
+ traj_dir: path/to/save/ml/relaxations #TODO
32
+
33
+ model:
34
+ name: gemnet_oc
35
+ num_spherical: 7
36
+ num_radial: 128
37
+ num_blocks: 4
38
+ emb_size_atom: 256
39
+ emb_size_edge: 512
40
+ emb_size_trip_in: 64
41
+ emb_size_trip_out: 64
42
+ emb_size_quad_in: 32
43
+ emb_size_quad_out: 32
44
+ emb_size_aint_in: 64
45
+ emb_size_aint_out: 64
46
+ emb_size_rbf: 16
47
+ emb_size_cbf: 16
48
+ emb_size_sbf: 32
49
+ num_before_skip: 2
50
+ num_after_skip: 2
51
+ num_concat: 1
52
+ num_atom: 3
53
+ num_output_afteratom: 3
54
+ cutoff: 12.0
55
+ cutoff_qint: 12.0
56
+ cutoff_aeaint: 12.0
57
+ cutoff_aint: 12.0
58
+ max_neighbors: 30
59
+ max_neighbors_qint: 8
60
+ max_neighbors_aeaint: 20
61
+ max_neighbors_aint: 1000
62
+ rbf:
63
+ name: gaussian
64
+ envelope:
65
+ name: polynomial
66
+ exponent: 5
67
+ cbf:
68
+ name: spherical_harmonics
69
+ sbf:
70
+ name: legendre_outer
71
+ extensive: True
72
+ output_init: HeOrthogonal
73
+ activation: silu
74
+ scale_file: configs/s2ef/all/gemnet/scaling_factors/gemnet-oc.pt
75
+
76
+ regress_forces: True
77
+ direct_forces: True
78
+ forces_coupled: False
79
+
80
+ quad_interaction: True
81
+ atom_edge_interaction: True
82
+ edge_atom_interaction: True
83
+ atom_interaction: True
84
+
85
+ num_atom_emb_layers: 2
86
+ num_global_out_layers: 2
87
+ qint_tags: [1, 2]
88
+
89
+ optim:
90
+ batch_size: 16
91
+ eval_batch_size: 16
92
+ load_balancing: atoms
93
+ eval_every: 5000
94
+ num_workers: 2
95
+ lr_initial: 5.e-4
96
+ optimizer: AdamW
97
+ optimizer_params: {"amsgrad": True}
98
+ scheduler: ReduceLROnPlateau
99
+ mode: min
100
+ factor: 0.8
101
+ patience: 3
102
+ max_epochs: 80
103
+ force_coefficient: 100
104
+ energy_coefficient: 1
105
+ ema_decay: 0.999
106
+ clip_grad_norm: 10
107
+ loss_energy: mae
108
+ loss_force: l2mae
109
+ weight_decay: 0
@@ -0,0 +1,66 @@
1
+ trainer: forces
2
+
3
+ dataset:
4
+ - src: data/s2ef/all/train/
5
+ normalize_labels: True
6
+ target_mean: -0.7554450631141663
7
+ target_std: 2.887317180633545
8
+ grad_target_mean: 0.0
9
+ grad_target_std: 2.887317180633545
10
+ - src: data/s2ef/all/val_id_30k/
11
+
12
+ logger: wandb
13
+
14
+ task:
15
+ dataset: trajectory_lmdb
16
+ primary_metric: forces_mae
17
+ train_on_free_atoms: True
18
+ eval_on_free_atoms: True
19
+ eval_relaxations: True
20
+ relaxation_steps: 300
21
+ relaxation_fmax: 0.02
22
+ write_pos: False
23
+ relax_dataset:
24
+ src: path/to/oc20-dense/dataset #TODO
25
+ relax_opt:
26
+ name: lbfgs
27
+ maxstep: 0.04
28
+ memory: 50
29
+ damping: 1.0
30
+ alpha: 70.0
31
+ traj_dir: path/to/save/ml/relaxations #TODO
32
+
33
+ model:
34
+ name: painn
35
+ hidden_channels: 512
36
+ num_layers: 6
37
+ num_rbf: 128
38
+ cutoff: 12.0
39
+ max_neighbors: 50
40
+ scale_file: configs/s2ef/all/painn/painn_nb6_scaling_factors.pt
41
+ regress_forces: True
42
+ direct_forces: True
43
+ use_pbc: True
44
+
45
+ optim:
46
+ batch_size: 32
47
+ eval_batch_size: 32
48
+ load_balancing: atoms
49
+ eval_every: 5000
50
+ num_workers: 2
51
+ optimizer: AdamW
52
+ optimizer_params: {"amsgrad": True}
53
+ lr_initial: 1.e-4
54
+ lr_gamma: 0.8
55
+ scheduler: ReduceLROnPlateau
56
+ mode: min
57
+ factor: 0.8
58
+ patience: 3
59
+ max_epochs: 80
60
+ force_coefficient: 100
61
+ energy_coefficient: 1
62
+ ema_decay: 0.999
63
+ clip_grad_norm: 10
64
+ loss_energy: mae
65
+ loss_force: l2mae
66
+ weight_decay: 0 # 2e-6 (TF weight decay) / 1e-4 (lr) = 2e-2