From 9953845450da6e62e49ad8f7175f1c79f9897d0a Mon Sep 17 00:00:00 2001 From: misko Date: Wed, 8 May 2024 17:52:41 +0000 Subject: [PATCH] deploy: 6b9ee5a5f8119c264e1e0122d0bd1987ae1d5f82 --- .buildinfo | 2 +- .../train.txt | 1 + ...22325fae1d7b98e150839405d0c583fc558890.png | Bin 0 -> 18100 bytes ...d6181d9b7dc0330f894982e3e7d5fc1e1c14e2.png | Bin 0 -> 16263 bytes ...b471c5b3bdd07e6e86f649611890e40bb8eb54.png | Bin 0 -> 19799 bytes ...145d62461518cfbd975941604782b92002f649.png | Bin 0 -> 34905 bytes ...aef6813e5b46342e1bcd68f000211ae06cef95.png | Bin 0 -> 20803 bytes ...33467296c7c1ce5ddb6c0e7daffc68d22cf2f8.png | Bin 0 -> 35005 bytes ...a1e20f60472ed1fbcf8520c41ee4e842a0fb07.png | Bin 0 -> 22192 bytes ...90cd23fada1ff98e8dc907657e2eb109af0402.png | Bin 0 -> 84011 bytes ...502025691c6a130c88e07728e1797c128651fb.png | Bin 0 -> 22544 bytes ...33aa9a969d3fcfd9d5e00eb523ba2ea9c48a32.png | Bin 0 -> 47647 bytes ...96909771b53c44a5d2aff0c98237d9fa037636.png | Bin 0 -> 29838 bytes .../scripts/write_top_k_vasp/index.rst | 17 - .../CatTSunami/ocpneb/core/index.rst | 17 - .../CatTSunami/ocpneb/databases/index.rst | 21 - .../common/relaxation/optimizers/index.rst | 15 - .../embeddings/atomic_radii/index.rst | 20 - .../target_metadata_guesser/index.rst | 42 - .../equiformer_v2/edge_rot_mat/index.rst | 22 - .../models/equiformer_v2/trainers/index.rst | 17 - .../core/modules/scaling/util/index.rst | 22 - .../core/scripts/hpo/run_tune/index.rst | 26 - .../core/scripts/hpo/run_tune_pbt/index.rst | 26 - .../index.rst | 112 - .../tests/common/test_yaml_loader/index.rst | 34 - .../datasets/test_ase_datasets/index.rst | 63 - .../tests/datasets/test_ase_lmdb/index.rst | 82 - .../core/tests/datasets/test_utils/index.rst | 26 - .../core/tests/models/test_escn/index.rst | 26 - .../autoapi/data/oc/databases/pkls/index.rst | 17 - .../oc/experimental/get_energies/index.rst | 39 - .../oc/experimental/rattle_test/index.rst | 25 - .../compare_inputs_and_trajectory/index.rst | 53 - .../old_tests/verify_correctness/index.rst | 42 - .../geom/sample_geom_drugs/index.rst | 30 - .../write_geom_drugs_structures/index.rst | 26 - .../autoapi/data/om/omdata/orca/index.rst | 16 - .../ocpapi/tests/integration/client/index.rst | 16 - .../demo/ocpapi/tests/integration/index.rst | 16 - .../tests/integration/workflows/index.rst | 15 - .../demo/ocpapi/tests/unit/client/index.rst | 17 - .../autoapi/demo/ocpapi/tests/unit/index.rst | 16 - .../autoapi/demo/ocpapi/version/index.rst | 14 - .../demo/ocpapi/workflows/log/index.rst | 13 - .../challenge_eval/index.rst | 18 +- .../adsorbml/scripts/dense_eval/index.rst | 22 +- .../adsorbml/scripts/process_mlrs/index.rst | 18 +- .../AdsorbML/adsorbml/scripts/utils/index.rst | 10 +- .../scripts/write_top_k_vasp/index.rst | 17 + .../ocpneb/core/autoframe/index.rst | 38 +- .../CatTSunami/ocpneb/core/index.rst | 17 + .../CatTSunami/ocpneb/core/ocpneb/index.rst | 8 +- .../CatTSunami/ocpneb/core/reaction/index.rst | 8 +- .../CatTSunami/ocpneb/databases/index.rst | 21 + .../run_validation/run_validation/index.rst | 26 +- .../{ => fairchem}/core/_cli/index.rst | 10 +- .../core/common/data_parallel/index.rst | 16 +- .../core/common/distutils/index.rst | 32 +- .../core/common/flags/index.rst | 10 +- .../core/common/gp_utils/index.rst | 62 +- .../core/common/hpo_utils/index.rst | 10 +- .../{ => fairchem}/core/common/index.rst | 6 +- .../core/common/logger/index.rst | 12 +- .../core/common/registry/index.rst | 16 +- .../common/relaxation/ase_utils/index.rst | 10 +- .../core/common/relaxation/index.rst | 6 +- .../common/relaxation/ml_relaxation/index.rst | 8 +- .../common/relaxation/optimizers/index.rst | 15 + .../optimizers/lbfgs_torch/index.rst | 10 +- .../core/common/transforms/index.rst | 8 +- .../core/common/tutorial_utils/index.rst | 16 +- .../core/common/typing/index.rst | 12 +- .../core/common/utils/index.rst | 86 +- .../core/datasets/_utils/index.rst | 8 +- .../core/datasets/ase_datasets/index.rst | 16 +- .../embeddings/atomic_radii/index.rst | 20 + .../continuous_embeddings/index.rst | 6 +- .../core/datasets/embeddings/index.rst | 6 +- .../embeddings/khot_embeddings/index.rst | 6 +- .../embeddings/qmof_khot_embeddings/index.rst | 6 +- .../{ => fairchem}/core/datasets/index.rst | 24 +- .../core/datasets/lmdb_database/index.rst | 10 +- .../core/datasets/lmdb_dataset/index.rst | 16 +- .../core/datasets/oc22_lmdb_dataset/index.rst | 8 +- .../target_metadata_guesser/index.rst | 42 + .../autoapi/{ => fairchem}/core/index.rst | 6 +- .../{ => fairchem}/core/models/base/index.rst | 8 +- .../core/models/dimenet_plus_plus/index.rst | 16 +- .../models/equiformer_v2/activation/index.rst | 24 +- .../core/models/equiformer_v2/drop/index.rst | 18 +- .../equiformer_v2/edge_rot_mat/index.rst | 22 + .../equiformer_v2_oc20/index.rst | 12 +- .../equiformer_v2/gaussian_rbf/index.rst | 10 +- .../core/models/equiformer_v2/index.rst | 8 +- .../equiformer_v2/input_block/index.rst | 8 +- .../models/equiformer_v2/layer_norm/index.rst | 20 +- .../equiformer_v2/module_list/index.rst | 8 +- .../equiformer_v2/radial_function/index.rst | 8 +- .../models/equiformer_v2/so2_ops/index.rst | 12 +- .../core/models/equiformer_v2/so3/index.rst | 18 +- .../trainers/energy_trainer/index.rst | 8 +- .../trainers/forces_trainer/index.rst | 8 +- .../models/equiformer_v2/trainers/index.rst | 17 + .../trainers/lr_scheduler/index.rst | 18 +- .../equiformer_v2/transformer_block/index.rst | 12 +- .../models/equiformer_v2/wigner/index.rst | 12 +- .../core/models/escn/escn/index.rst | 22 +- .../{ => fairchem}/core/models/escn/index.rst | 8 +- .../core/models/escn/so3/index.rst | 16 +- .../core/models/gemnet/gemnet/index.rst | 8 +- .../core/models/gemnet/index.rst | 8 +- .../core/models/gemnet/initializers/index.rst | 10 +- .../gemnet/layers/atom_update_block/index.rst | 10 +- .../gemnet/layers/base_layers/index.rst | 14 +- .../gemnet/layers/basis_utils/index.rst | 20 +- .../models/gemnet/layers/efficient/index.rst | 10 +- .../gemnet/layers/embedding_block/index.rst | 10 +- .../core/models/gemnet/layers/index.rst | 6 +- .../gemnet/layers/interaction_block/index.rst | 10 +- .../gemnet/layers/radial_basis/index.rst | 16 +- .../gemnet/layers/spherical_basis/index.rst | 10 +- .../core/models/gemnet/utils/index.rst | 24 +- .../core/models/gemnet_gp/gemnet/index.rst | 8 +- .../core/models/gemnet_gp/index.rst | 8 +- .../models/gemnet_gp/initializers/index.rst | 10 +- .../layers/atom_update_block/index.rst | 18 +- .../gemnet_gp/layers/base_layers/index.rst | 14 +- .../gemnet_gp/layers/basis_utils/index.rst | 20 +- .../gemnet_gp/layers/efficient/index.rst | 10 +- .../layers/embedding_block/index.rst | 10 +- .../core/models/gemnet_gp/layers/index.rst | 6 +- .../layers/interaction_block/index.rst | 10 +- .../gemnet_gp/layers/radial_basis/index.rst | 16 +- .../layers/spherical_basis/index.rst | 10 +- .../core/models/gemnet_gp/utils/index.rst | 24 +- .../core/models/gemnet_oc/gemnet_oc/index.rst | 8 +- .../core/models/gemnet_oc/index.rst | 8 +- .../models/gemnet_oc/initializers/index.rst | 16 +- .../gemnet_oc/interaction_indices/index.rst | 12 +- .../layers/atom_update_block/index.rst | 10 +- .../gemnet_oc/layers/base_layers/index.rst | 12 +- .../gemnet_oc/layers/basis_utils/index.rst | 22 +- .../gemnet_oc/layers/efficient/index.rst | 10 +- .../layers/embedding_block/index.rst | 10 +- .../gemnet_oc/layers/force_scaler/index.rst | 8 +- .../core/models/gemnet_oc/layers/index.rst | 6 +- .../layers/interaction_block/index.rst | 14 +- .../gemnet_oc/layers/radial_basis/index.rst | 18 +- .../layers/spherical_basis/index.rst | 14 +- .../core/models/gemnet_oc/utils/index.rst | 30 +- .../{ => fairchem}/core/models/index.rst | 10 +- .../core/models/model_registry/index.rst | 12 +- .../core/models/painn/index.rst | 8 +- .../core/models/painn/painn/index.rst | 16 +- .../core/models/painn/utils/index.rst | 10 +- .../core/models/schnet/index.rst | 8 +- .../{ => fairchem}/core/models/scn/index.rst | 8 +- .../core/models/scn/sampling/index.rst | 10 +- .../core/models/scn/scn/index.rst | 14 +- .../core/models/scn/smearing/index.rst | 14 +- .../models/scn/spherical_harmonics/index.rst | 14 +- .../core/models/utils/activations/index.rst | 8 +- .../core/models/utils/basis/index.rst | 20 +- .../core/models/utils/index.rst | 6 +- .../core/modules/evaluator/index.rst | 38 +- .../exponential_moving_average/index.rst | 8 +- .../{ => fairchem}/core/modules/index.rst | 6 +- .../core/modules/loss/index.rst | 12 +- .../core/modules/normalizer/index.rst | 8 +- .../core/modules/scaling/compat/index.rst | 12 +- .../core/modules/scaling/fit/index.rst | 12 +- .../core/modules/scaling/index.rst | 8 +- .../modules/scaling/scale_factor/index.rst | 14 +- .../core/modules/scaling/util/index.rst | 22 + .../core/modules/scheduler/index.rst | 8 +- .../core/modules/transforms/index.rst | 10 +- .../preprocessing/atoms_to_graphs/index.rst | 12 +- .../core/preprocessing/index.rst | 8 +- .../core/scripts/download_data/index.rst | 24 +- .../scripts/gif_maker_parallelized/index.rst | 14 +- .../{ => fairchem}/core/scripts/hpo/index.rst | 6 +- .../core/scripts/hpo/run_tune/index.rst | 26 + .../core/scripts/hpo/run_tune_pbt/index.rst | 26 + .../{ => fairchem}/core/scripts/index.rst | 6 +- .../make_challenge_submission_file/index.rst | 14 +- .../core/scripts/make_lmdb_sizes/index.rst | 12 +- .../scripts/make_submission_file/index.rst | 16 +- .../core/scripts/preprocess_ef/index.rst | 14 +- .../core/scripts/preprocess_relaxed/index.rst | 12 +- .../core/scripts/uncompress/index.rst | 16 +- .../{ => fairchem}/core/tasks/index.rst | 14 +- .../{ => fairchem}/core/tasks/task/index.rst | 16 +- .../common/test_ase_calculator/index.rst | 16 +- .../index.rst | 112 + .../tests/common/test_yaml_loader/index.rst | 34 + .../core/tests/conftest/index.rst | 20 +- .../datasets/test_ase_datasets/index.rst | 63 + .../tests/datasets/test_ase_lmdb/index.rst | 82 + .../core/tests/datasets/test_utils/index.rst | 26 + .../tests/evaluator/test_evaluator/index.rst | 20 +- .../{ => fairchem}/core/tests/index.rst | 6 +- .../tests/models/test_dimenetpp/index.rst | 12 +- .../tests/models/test_equiformer_v2/index.rst | 14 +- .../core/tests/models/test_escn/index.rst | 26 + .../core/tests/models/test_gemnet/index.rst | 12 +- .../tests/models/test_gemnet_oc/index.rst | 12 +- .../test_gemnet_oc_scaling_mismatch/index.rst | 8 +- .../core/tests/models/test_schnet/index.rst | 12 +- .../core/tests/preprocessing/index.rst | 6 +- .../test_atoms_to_graphs/index.rst | 10 +- .../tests/preprocessing/test_pbc/index.rst | 10 +- .../test_radius_graph_pbc/index.rst | 12 +- .../core/trainers/base_trainer/index.rst | 8 +- .../{ => fairchem}/core/trainers/index.rst | 10 +- .../core/trainers/ocp_trainer/index.rst | 8 +- .../data/oc/core/adsorbate/index.rst | 10 +- .../oc/core/adsorbate_slab_config/index.rst | 16 +- .../data/oc/core/bulk/index.rst | 8 +- .../{ => fairchem}/data/oc/core/index.rst | 16 +- .../multi_adsorbate_slab_config/index.rst | 10 +- .../data/oc/core/slab/index.rst | 32 +- .../data/oc/databases/index.rst | 6 +- .../fairchem/data/oc/databases/pkls/index.rst | 17 + .../data/oc/databases/update/index.rst | 14 +- .../oc/experimental/get_energies/index.rst | 39 + .../data/oc/experimental/merge_traj/index.rst | 10 +- .../oc/experimental/perturb_systems/index.rst | 8 +- .../oc/experimental/rattle_test/index.rst | 25 + .../data/oc/experimental/utils/index.rst | 12 +- .../autoapi/{ => fairchem}/data/oc/index.rst | 6 +- .../precompute_sample_structures/index.rst | 22 +- .../data/oc/structure_generator/index.rst | 18 +- .../check_energy_and_forces/index.rst | 22 +- .../oc/tests/old_tests/check_inputs/index.rst | 18 +- .../compare_inputs_and_trajectory/index.rst | 53 + .../old_tests/verify_correctness/index.rst | 42 + .../data/oc/tests/test_adsorbate/index.rst | 12 +- .../test_adsorbate_slab_config/index.rst | 10 +- .../data/oc/tests/test_bulk/index.rst | 12 +- .../data/oc/tests/test_inputs/index.rst | 10 +- .../index.rst | 10 +- .../data/oc/tests/test_slab/index.rst | 8 +- .../data/oc/utils/flag_anomaly/index.rst | 8 +- .../{ => fairchem}/data/oc/utils/index.rst | 8 +- .../data/oc/utils/vasp/index.rst | 20 +- .../odac/force_field/FF_analysis/index.rst | 26 +- .../promising_mof_energies/energy/index.rst | 6 +- .../geom/sample_geom_drugs/index.rst | 30 + .../write_geom_drugs_structures/index.rst | 26 + .../data/om/omdata/orca/calc/index.rst | 20 +- .../fairchem/data/om/omdata/orca/index.rst | 16 + .../data/om/omdata/orca/recipes/index.rst | 10 +- .../demo/ocpapi/client/client/index.rst | 24 +- .../demo/ocpapi/client/index.rst | 56 +- .../demo/ocpapi/client/models/index.rst | 38 +- .../demo/ocpapi/client/ui/index.rst | 10 +- .../{ => fairchem}/demo/ocpapi/index.rst | 82 +- .../demo/ocpapi/tests/index.rst | 6 +- .../ocpapi/tests/integration/client/index.rst | 16 + .../integration/client/test_client/index.rst | 12 +- .../integration/client/test_ui/index.rst | 8 +- .../demo/ocpapi/tests/integration/index.rst | 16 + .../tests/integration/workflows/index.rst | 15 + .../workflows/test_adsorbates/index.rst | 8 +- .../demo/ocpapi/tests/unit/client/index.rst | 17 + .../tests/unit/client/test_client/index.rst | 8 +- .../tests/unit/client/test_models/index.rst | 42 +- .../tests/unit/client/test_ui/index.rst | 8 +- .../fairchem/demo/ocpapi/tests/unit/index.rst | 16 + .../ocpapi/tests/unit/workflows/index.rst | 6 +- .../unit/workflows/test_adsorbates/index.rst | 12 +- .../unit/workflows/test_context/index.rst | 8 +- .../unit/workflows/test_filter/index.rst | 10 +- .../tests/unit/workflows/test_retry/index.rst | 14 +- .../fairchem/demo/ocpapi/version/index.rst | 14 + .../ocpapi/workflows/adsorbates/index.rst | 56 +- .../demo/ocpapi/workflows/context/index.rst | 8 +- .../demo/ocpapi/workflows/filter/index.rst | 12 +- .../demo/ocpapi/workflows/index.rst | 32 +- .../demo/ocpapi/workflows/log/index.rst | 13 + .../demo/ocpapi/workflows/retry/index.rst | 16 +- _sources/autoapi/index.rst | 1 - _sources/core/datasets/oc20.md | 4 +- .../core/fine-tuning/fine-tuning-oxides.md | 2 +- _sources/core/gotchas.md | 12 +- _sources/core/install.md | 2 +- _sources/core/lmdb_dataset_creation.md | 9 +- _sources/core/model_checkpoints.md | 130 +- _sources/core/model_faq.md | 16 +- _sources/core/model_training.md | 18 +- _sources/core/quickstart.md | 4 +- _sources/index.md | 64 +- _sources/legacy_tutorials/OCP_Tutorial.md | 26 +- _sources/tutorials/NRR/NRR_example.md | 2 +- _sources/tutorials/OCP-introduction.md | 2 +- _sources/tutorials/adsorbml_walkthrough.md | 4 +- _sources/tutorials/advanced/embeddings.md | 2 +- .../advanced/fine-tuning-in-python.md | 2 +- _sources/tutorials/cattsunami_walkthrough.md | 2 +- _sources/tutorials/intro.md | 2 +- .../challenge_eval/index.html | 816 --- .../adsorbml/scripts/dense_eval/index.html | 917 --- .../adsorbml/scripts/process_mlrs/index.html | 806 --- .../CatTSunami/ocpneb/core/ocpneb/index.html | 766 --- .../CatTSunami/ocpneb/databases/index.html | 725 -- .../run_validation/run_validation/index.html | 961 --- autoapi/core/_cli/index.html | 798 --- autoapi/core/common/data_parallel/index.html | 951 --- autoapi/core/common/distutils/index.html | 878 --- autoapi/core/common/flags/index.html | 785 --- autoapi/core/common/gp_utils/index.html | 1448 ---- autoapi/core/common/hpo_utils/index.html | 771 --- autoapi/core/common/index.html | 756 --- autoapi/core/common/logger/index.html | 879 --- autoapi/core/common/registry/index.html | 1048 --- .../common/relaxation/ase_utils/index.html | 838 --- autoapi/core/common/relaxation/index.html | 737 -- .../relaxation/ml_relaxation/index.html | 768 --- .../optimizers/lbfgs_torch/index.html | 822 --- autoapi/core/common/transforms/index.html | 782 --- autoapi/core/common/tutorial_utils/index.html | 804 --- autoapi/core/common/typing/index.html | 774 --- autoapi/core/common/utils/index.html | 1259 ---- autoapi/core/datasets/_utils/index.html | 757 --- autoapi/core/datasets/ase_datasets/index.html | 1142 ---- .../embeddings/atomic_radii/index.html | 731 -- .../continuous_embeddings/index.html | 743 -- autoapi/core/datasets/embeddings/index.html | 763 --- .../embeddings/khot_embeddings/index.html | 733 -- .../qmof_khot_embeddings/index.html | 735 -- .../core/datasets/lmdb_database/index.html | 885 --- autoapi/core/datasets/lmdb_dataset/index.html | 920 --- .../datasets/oc22_lmdb_dataset/index.html | 798 --- .../target_metadata_guesser/index.html | 795 --- autoapi/core/index.html | 912 --- autoapi/core/models/base/index.html | 813 --- .../core/models/dimenet_plus_plus/index.html | 1030 --- .../core/models/equiformer_v2/drop/index.html | 1011 --- .../equiformer_v2/edge_rot_mat/index.html | 745 -- .../equiformer_v2_oc20/index.html | 879 --- autoapi/core/models/equiformer_v2/index.html | 887 --- .../equiformer_v2/input_block/index.html | 778 --- .../equiformer_v2/layer_norm/index.html | 981 --- .../equiformer_v2/module_list/index.html | 780 --- .../equiformer_v2/radial_function/index.html | 758 --- .../models/equiformer_v2/so2_ops/index.html | 842 --- .../core/models/equiformer_v2/so3/index.html | 1133 ---- .../trainers/energy_trainer/index.html | 799 --- .../trainers/forces_trainer/index.html | 799 --- .../models/equiformer_v2/trainers/index.html | 725 -- .../trainers/lr_scheduler/index.html | 900 --- .../transformer_block/index.html | 890 --- .../models/equiformer_v2/wigner/index.html | 774 --- autoapi/core/models/escn/escn/index.html | 1045 --- autoapi/core/models/escn/index.html | 807 --- autoapi/core/models/escn/so3/index.html | 1038 --- autoapi/core/models/gemnet/index.html | 885 --- .../models/gemnet/initializers/index.html | 765 --- .../layers/atom_update_block/index.html | 840 --- .../gemnet/layers/basis_utils/index.html | 887 --- .../models/gemnet/layers/efficient/index.html | 847 --- .../gemnet/layers/embedding_block/index.html | 821 --- autoapi/core/models/gemnet/layers/index.html | 730 -- .../layers/interaction_block/index.html | 830 --- .../gemnet/layers/radial_basis/index.html | 896 --- .../gemnet/layers/spherical_basis/index.html | 771 --- autoapi/core/models/gemnet/utils/index.html | 890 --- .../core/models/gemnet_gp/gemnet/index.html | 856 --- .../models/gemnet_gp/initializers/index.html | 765 --- .../layers/atom_update_block/index.html | 881 --- .../gemnet_gp/layers/basis_utils/index.html | 887 --- .../gemnet_gp/layers/efficient/index.html | 847 --- .../layers/embedding_block/index.html | 821 --- .../core/models/gemnet_gp/layers/index.html | 730 -- .../layers/interaction_block/index.html | 833 --- .../gemnet_gp/layers/radial_basis/index.html | 896 --- .../layers/spherical_basis/index.html | 771 --- .../core/models/gemnet_gp/utils/index.html | 890 --- autoapi/core/models/gemnet_oc/index.html | 1013 --- .../models/gemnet_oc/initializers/index.html | 797 --- .../gemnet_oc/interaction_indices/index.html | 876 --- .../layers/atom_update_block/index.html | 833 --- .../gemnet_oc/layers/base_layers/index.html | 864 --- .../gemnet_oc/layers/basis_utils/index.html | 904 --- .../gemnet_oc/layers/efficient/index.html | 868 --- .../layers/embedding_block/index.html | 823 --- .../gemnet_oc/layers/force_scaler/index.html | 790 --- .../core/models/gemnet_oc/layers/index.html | 731 -- .../layers/interaction_block/index.html | 941 --- .../gemnet_oc/layers/radial_basis/index.html | 950 --- .../layers/spherical_basis/index.html | 804 --- .../core/models/gemnet_oc/utils/index.html | 974 --- autoapi/core/models/index.html | 900 --- autoapi/core/models/painn/index.html | 824 --- autoapi/core/models/painn/utils/index.html | 788 --- autoapi/core/models/schnet/index.html | 824 --- autoapi/core/models/scn/index.html | 870 --- autoapi/core/models/scn/sampling/index.html | 758 --- autoapi/core/models/scn/scn/index.html | 1019 --- autoapi/core/models/scn/smearing/index.html | 950 --- .../models/scn/spherical_harmonics/index.html | 888 --- autoapi/core/modules/evaluator/index.html | 948 --- .../exponential_moving_average/index.html | 861 --- autoapi/core/modules/index.html | 747 -- autoapi/core/modules/loss/index.html | 894 --- autoapi/core/modules/normalizer/index.html | 788 --- .../core/modules/scaling/compat/index.html | 778 --- autoapi/core/modules/scaling/fit/index.html | 765 --- autoapi/core/modules/scaling/index.html | 885 --- .../modules/scaling/scale_factor/index.html | 961 --- autoapi/core/modules/scaling/util/index.html | 745 -- autoapi/core/modules/scheduler/index.html | 784 --- autoapi/core/modules/transforms/index.html | 775 --- autoapi/core/preprocessing/index.html | 1010 --- autoapi/core/scripts/download_data/index.html | 834 --- .../scripts/gif_maker_parallelized/index.html | 791 --- autoapi/core/scripts/hpo/run_tune/index.html | 755 --- .../core/scripts/hpo/run_tune_pbt/index.html | 755 --- autoapi/core/scripts/index.html | 747 -- .../make_challenge_submission_file/index.html | 789 --- .../core/scripts/make_lmdb_sizes/index.html | 776 --- .../scripts/make_submission_file/index.html | 797 --- autoapi/core/scripts/preprocess_ef/index.html | 786 --- .../scripts/preprocess_relaxed/index.html | 776 --- autoapi/core/scripts/uncompress/index.html | 796 --- autoapi/core/tasks/index.html | 840 --- autoapi/core/tasks/task/index.html | 861 --- .../common/test_ase_calculator/index.html | 770 --- .../index.html | 926 --- .../tests/common/test_yaml_loader/index.html | 757 --- autoapi/core/tests/conftest/index.html | 881 --- .../datasets/test_ase_datasets/index.html | 816 --- .../tests/datasets/test_ase_lmdb/index.html | 856 --- .../tests/evaluator/test_evaluator/index.html | 850 --- autoapi/core/tests/index.html | 741 -- .../tests/models/test_dimenetpp/index.html | 777 --- .../core/tests/models/test_gemnet/index.html | 777 --- .../tests/models/test_gemnet_oc/index.html | 777 --- .../index.html | 762 --- .../core/tests/models/test_schnet/index.html | 777 --- autoapi/core/tests/preprocessing/index.html | 728 -- .../test_atoms_to_graphs/index.html | 792 --- .../tests/preprocessing/test_pbc/index.html | 778 --- .../test_radius_graph_pbc/index.html | 802 --- autoapi/core/trainers/index.html | 1008 --- autoapi/core/trainers/ocp_trainer/index.html | 835 --- autoapi/data/oc/core/adsorbate/index.html | 809 --- .../oc/core/adsorbate_slab_config/index.html | 1003 --- autoapi/data/oc/core/bulk/index.html | 805 --- autoapi/data/oc/core/index.html | 1271 ---- .../multi_adsorbate_slab_config/index.html | 813 --- autoapi/data/oc/core/slab/index.html | 1165 ---- autoapi/data/oc/databases/update/index.html | 757 --- .../oc/experimental/merge_traj/index.html | 739 -- autoapi/data/oc/experimental/utils/index.html | 764 --- autoapi/data/oc/index.html | 732 -- .../precompute_sample_structures/index.html | 881 --- .../data/oc/structure_generator/index.html | 859 --- .../check_energy_and_forces/index.html | 815 --- .../tests/old_tests/check_inputs/index.html | 843 --- .../compare_inputs_and_trajectory/index.html | 788 --- .../data/oc/tests/test_adsorbate/index.html | 816 --- .../test_adsorbate_slab_config/index.html | 786 --- autoapi/data/oc/tests/test_bulk/index.html | 839 --- autoapi/data/oc/tests/test_inputs/index.html | 764 --- .../index.html | 773 --- autoapi/data/oc/utils/flag_anomaly/index.html | 819 --- autoapi/data/oc/utils/index.html | 830 --- autoapi/data/oc/utils/vasp/index.html | 838 --- .../odac/force_field/FF_analysis/index.html | 826 --- .../promising_mof_energies/energy/index.html | 1047 --- autoapi/data/om/omdata/orca/calc/index.html | 796 --- .../data/om/omdata/orca/recipes/index.html | 774 --- autoapi/demo/ocpapi/client/client/index.html | 1061 --- autoapi/demo/ocpapi/client/index.html | 1789 ----- autoapi/demo/ocpapi/client/models/index.html | 1422 ---- autoapi/demo/ocpapi/client/ui/index.html | 758 --- autoapi/demo/ocpapi/index.html | 2290 ------- autoapi/demo/ocpapi/tests/index.html | 730 -- .../integration/client/test_client/index.html | 855 --- .../workflows/test_adsorbates/index.html | 766 --- .../tests/unit/client/test_client/index.html | 822 --- .../tests/unit/client/test_models/index.html | 1000 --- autoapi/demo/ocpapi/tests/unit/index.html | 715 -- .../unit/workflows/test_adsorbates/index.html | 888 --- .../unit/workflows/test_filter/index.html | 805 --- .../unit/workflows/test_retry/index.html | 834 --- .../ocpapi/workflows/adsorbates/index.html | 1407 ---- .../demo/ocpapi/workflows/context/index.html | 736 -- .../demo/ocpapi/workflows/filter/index.html | 793 --- autoapi/demo/ocpapi/workflows/index.html | 1203 ---- .../demo/ocpapi/workflows/retry/index.html | 838 --- .../challenge_eval/index.html | 732 ++ .../adsorbml/scripts/dense_eval/index.html | 833 +++ .../adsorbml/scripts/process_mlrs/index.html | 722 ++ .../adsorbml/scripts/utils/index.html | 680 ++ .../scripts/write_top_k_vasp/index.html | 634 ++ .../ocpneb/core/autoframe/index.html | 514 +- .../CatTSunami/ocpneb/core}/index.html | 127 +- .../CatTSunami/ocpneb/core/ocpneb/index.html | 682 ++ .../ocpneb/core/reaction/index.html | 654 ++ .../CatTSunami/ocpneb/databases/index.html | 641 ++ .../run_validation/run_validation/index.html | 877 +++ .../version => fairchem/core/_cli}/index.html | 197 +- .../core/common/data_parallel/index.html | 847 +++ .../core/common/distutils}/index.html | 256 +- autoapi/fairchem/core/common/flags/index.html | 681 ++ .../fairchem/core/common/gp_utils/index.html | 1344 ++++ .../fairchem/core/common/hpo_utils/index.html | 667 ++ .../core/common}/index.html | 145 +- .../core/common/logger}/index.html | 267 +- .../fairchem/core/common/registry/index.html | 944 +++ .../common/relaxation/ase_utils/index.html | 734 ++ .../core/common/relaxation/index.html | 633 ++ .../relaxation/ml_relaxation/index.html | 664 ++ .../common/relaxation/optimizers/index.html | 619 ++ .../optimizers/lbfgs_torch/index.html | 718 ++ .../core/common/transforms/index.html | 678 ++ .../core/common/tutorial_utils}/index.html | 194 +- .../fairchem/core/common/typing/index.html | 670 ++ autoapi/fairchem/core/common/utils/index.html | 1155 ++++ .../fairchem/core/datasets/_utils/index.html | 653 ++ .../core/datasets/ase_datasets/index.html | 1038 +++ .../embeddings/atomic_radii/index.html | 627 ++ .../continuous_embeddings/index.html | 639 ++ .../core/datasets/embeddings}/index.html | 161 +- .../embeddings/khot_embeddings/index.html | 629 ++ .../qmof_khot_embeddings/index.html | 631 ++ .../{ => fairchem}/core/datasets/index.html | 698 +- .../core/datasets/lmdb_database/index.html | 781 +++ .../core/datasets/lmdb_dataset}/index.html | 319 +- .../datasets/oc22_lmdb_dataset/index.html | 694 ++ .../target_metadata_guesser}/index.html | 180 +- autoapi/fairchem/core/index.html | 810 +++ autoapi/fairchem/core/models/base/index.html | 709 ++ .../core/models/dimenet_plus_plus/index.html | 926 +++ .../equiformer_v2/activation/index.html | 460 +- .../models/equiformer_v2/drop}/index.html | 364 +- .../equiformer_v2/edge_rot_mat/index.html | 641 ++ .../equiformer_v2_oc20/index.html | 775 +++ .../equiformer_v2/gaussian_rbf/index.html | 714 ++ .../core/models/equiformer_v2/index.html | 783 +++ .../equiformer_v2/input_block/index.html | 674 ++ .../equiformer_v2/layer_norm/index.html | 877 +++ .../equiformer_v2/module_list/index.html | 676 ++ .../equiformer_v2/radial_function/index.html | 654 ++ .../models/equiformer_v2/so2_ops}/index.html | 226 +- .../core/models/equiformer_v2/so3/index.html | 1029 +++ .../trainers/energy_trainer/index.html | 695 ++ .../trainers/forces_trainer/index.html | 695 ++ .../models/equiformer_v2/trainers/index.html | 621 ++ .../trainers/lr_scheduler}/index.html | 304 +- .../transformer_block/index.html | 786 +++ .../models/equiformer_v2/wigner/index.html | 670 ++ .../fairchem/core/models/escn/escn/index.html | 941 +++ .../core/models/escn}/index.html | 208 +- .../fairchem/core/models/escn/so3/index.html | 934 +++ .../core/models/gemnet/gemnet}/index.html | 383 +- .../core/models}/gemnet/index.html | 251 +- .../models/gemnet/initializers/index.html | 661 ++ .../layers/atom_update_block/index.html | 736 ++ .../gemnet/layers/base_layers}/index.html | 323 +- .../gemnet/layers/basis_utils/index.html | 783 +++ .../models/gemnet/layers/efficient/index.html | 743 ++ .../gemnet/layers/embedding_block/index.html | 717 ++ .../core/models/gemnet/layers}/index.html | 127 +- .../layers/interaction_block/index.html | 726 ++ .../gemnet/layers/radial_basis/index.html | 792 +++ .../gemnet/layers/spherical_basis/index.html | 667 ++ .../core/models/gemnet}/utils/index.html | 286 +- .../core/models/gemnet_gp/gemnet/index.html | 752 +++ .../fairchem/core/models/gemnet_gp/index.html | 781 +++ .../models/gemnet_gp/initializers/index.html | 661 ++ .../layers/atom_update_block/index.html | 777 +++ .../gemnet_gp/layers/base_layers/index.html | 811 +++ .../gemnet_gp/layers/basis_utils/index.html | 783 +++ .../gemnet_gp/layers/efficient/index.html | 743 ++ .../layers/embedding_block/index.html | 717 ++ .../core/models/gemnet_gp/layers/index.html | 626 ++ .../layers/interaction_block/index.html | 729 ++ .../gemnet_gp/layers/radial_basis}/index.html | 286 +- .../layers/spherical_basis/index.html | 667 ++ .../core/models/gemnet_gp/utils}/index.html | 275 +- .../models/gemnet_oc/gemnet_oc/index.html | 878 +++ .../core/models}/gemnet_oc/index.html | 309 +- .../models/gemnet_oc/initializers/index.html | 693 ++ .../gemnet_oc/interaction_indices/index.html | 772 +++ .../layers/atom_update_block/index.html | 729 ++ .../gemnet_oc/layers/base_layers/index.html | 760 +++ .../gemnet_oc/layers/basis_utils/index.html | 800 +++ .../gemnet_oc/layers/efficient/index.html | 764 +++ .../layers/embedding_block/index.html | 719 ++ .../gemnet_oc/layers/force_scaler/index.html | 686 ++ .../core/models/gemnet_oc/layers/index.html | 627 ++ .../layers/interaction_block/index.html | 837 +++ .../gemnet_oc/layers/radial_basis/index.html | 846 +++ .../layers/spherical_basis/index.html | 700 ++ .../core/models/gemnet_oc/utils/index.html | 870 +++ .../core/models}/index.html | 302 +- .../core/models/model_registry/index.html | 688 ++ autoapi/fairchem/core/models/painn/index.html | 720 ++ .../core/models/painn/painn/index.html | 472 +- .../core/models/painn/utils/index.html | 684 ++ .../core/models/schnet}/index.html | 210 +- autoapi/fairchem/core/models/scn/index.html | 766 +++ .../core/models/scn/sampling/index.html | 654 ++ .../fairchem/core/models/scn/scn/index.html | 915 +++ .../core/models/scn/smearing}/index.html | 293 +- .../models/scn/spherical_harmonics/index.html | 784 +++ .../core/models/utils/activations/index.html | 687 ++ .../core/models/utils/basis/index.html | 424 +- autoapi/fairchem/core/models/utils/index.html | 620 ++ .../core/modules/evaluator/index.html | 844 +++ .../exponential_moving_average/index.html | 757 +++ autoapi/fairchem/core/modules/index.html | 643 ++ .../core/modules/loss}/index.html | 267 +- .../core/modules/normalizer/index.html | 684 ++ .../core/modules/scaling/compat/index.html | 674 ++ .../core/modules/scaling/fit/index.html | 661 ++ .../core/modules/scaling}/index.html | 293 +- .../modules/scaling/scale_factor/index.html | 857 +++ .../core/modules/scaling/util/index.html | 641 ++ .../core/modules/scheduler/index.html | 680 ++ .../core/modules/transforms/index.html | 671 ++ .../preprocessing/atoms_to_graphs/index.html | 925 +++ .../core/preprocessing}/index.html | 313 +- .../core/scripts/download_data/index.html | 730 ++ .../scripts/gif_maker_parallelized/index.html | 687 ++ autoapi/fairchem/core/scripts/hpo/index.html | 623 ++ .../core/scripts/hpo/run_tune/index.html | 651 ++ .../core/scripts/hpo/run_tune_pbt/index.html | 651 ++ autoapi/fairchem/core/scripts/index.html | 643 ++ .../make_challenge_submission_file/index.html | 685 ++ .../core/scripts/make_lmdb_sizes/index.html | 672 ++ .../scripts/make_submission_file/index.html | 693 ++ .../core/scripts/preprocess_ef}/index.html | 183 +- .../scripts/preprocess_relaxed/index.html | 672 ++ .../core/scripts/uncompress}/index.html | 191 +- .../utils => fairchem/core/tasks}/index.html | 260 +- autoapi/fairchem/core/tasks/task/index.html | 757 +++ .../common/test_ase_calculator/index.html | 686 ++ .../index.html | 842 +++ .../tests/common/test_yaml_loader/index.html | 673 ++ .../fairchem/core/tests/conftest/index.html | 777 +++ .../datasets/test_ase_datasets/index.html | 732 ++ .../tests/datasets/test_ase_lmdb}/index.html | 250 +- .../core/tests/datasets/test_utils/index.html | 653 ++ .../evaluator/test_evaluator}/index.html | 251 +- autoapi/fairchem/core/tests/index.html | 637 ++ .../tests/models/test_dimenetpp/index.html | 693 ++ .../models/test_equiformer_v2/index.html | 707 ++ .../core/tests/models/test_escn/index.html | 654 ++ .../core/tests/models/test_gemnet/index.html | 693 ++ .../tests/models/test_gemnet_oc/index.html | 693 ++ .../index.html | 678 ++ .../core/tests/models/test_schnet/index.html | 693 ++ .../core/tests/preprocessing}/index.html | 147 +- .../test_atoms_to_graphs/index.html | 688 ++ .../tests/preprocessing/test_pbc/index.html | 674 ++ .../test_radius_graph_pbc/index.html | 698 ++ .../core/trainers/base_trainer/index.html | 799 +++ .../core/trainers}/index.html | 437 +- .../core/trainers/ocp_trainer/index.html | 731 ++ .../data/oc/core/adsorbate/index.html | 725 ++ .../oc/core/adsorbate_slab_config/index.html | 919 +++ autoapi/fairchem/data/oc/core/bulk/index.html | 721 ++ autoapi/fairchem/data/oc/core/index.html | 1187 ++++ .../multi_adsorbate_slab_config/index.html | 729 ++ autoapi/fairchem/data/oc/core/slab/index.html | 1081 +++ autoapi/fairchem/data/oc/databases/index.html | 629 ++ .../data/oc/databases/pkls/index.html | 632 ++ .../data/oc/databases/update/index.html | 673 ++ .../oc/experimental/get_energies/index.html | 672 ++ .../oc/experimental/merge_traj/index.html | 655 ++ .../experimental/perturb_systems/index.html | 646 ++ .../oc/experimental/rattle_test/index.html | 645 ++ .../data/oc/experimental/utils/index.html | 680 ++ .../hpo => fairchem/data/oc}/index.html | 175 +- .../precompute_sample_structures}/index.html | 297 +- .../data/oc/structure_generator/index.html | 775 +++ .../check_energy_and_forces/index.html | 731 ++ .../tests/old_tests/check_inputs/index.html | 759 +++ .../compare_inputs_and_trajectory/index.html | 704 ++ .../old_tests/verify_correctness/index.html | 682 ++ .../data/oc/tests/test_adsorbate/index.html | 732 ++ .../test_adsorbate_slab_config/index.html | 702 ++ .../data/oc/tests/test_bulk/index.html | 755 +++ .../data/oc/tests/test_inputs/index.html | 680 ++ .../index.html | 689 ++ .../data/oc/tests/test_slab/index.html | 668 ++ .../data/oc/utils/flag_anomaly/index.html | 735 ++ .../data/oc/utils}/index.html | 250 +- .../fairchem/data/oc/utils/vasp/index.html | 754 +++ .../odac/force_field/FF_analysis/index.html | 742 ++ .../promising_mof_energies/energy/index.html | 963 +++ .../geom/sample_geom_drugs/index.html | 663 ++ .../write_geom_drugs_structures/index.html | 653 ++ .../data/om/omdata/orca/calc/index.html | 712 ++ .../data/om/omdata/orca}/index.html | 125 +- .../data/om/omdata/orca/recipes/index.html | 690 ++ .../demo/ocpapi/client/client/index.html | 977 +++ .../fairchem/demo/ocpapi/client/index.html | 1705 +++++ .../demo/ocpapi/client/models/index.html | 1338 ++++ .../fairchem/demo/ocpapi/client/ui/index.html | 674 ++ autoapi/fairchem/demo/ocpapi/index.html | 2206 ++++++ .../demo/ocpapi/tests}/index.html | 147 +- .../tests/integration/client/index.html | 620 ++ .../integration/client/test_client/index.html | 771 +++ .../integration/client/test_ui/index.html | 668 ++ .../demo/ocpapi/tests/integration/index.html | 627 ++ .../tests/integration/workflows/index.html | 619 ++ .../workflows/test_adsorbates/index.html | 682 ++ .../demo/ocpapi/tests/unit/client/index.html | 621 ++ .../tests/unit/client/test_client/index.html | 738 ++ .../tests/unit/client/test_models/index.html | 916 +++ .../tests/unit/client/test_ui/index.html | 688 ++ .../demo/ocpapi/tests/unit/index.html | 631 ++ .../ocpapi/tests/unit/workflows/index.html | 622 ++ .../unit/workflows/test_adsorbates/index.html | 804 +++ .../unit/workflows/test_context/index.html | 688 ++ .../unit/workflows/test_filter/index.html | 721 ++ .../unit/workflows/test_retry/index.html | 750 +++ .../fairchem/demo/ocpapi/version/index.html | 625 ++ .../ocpapi/workflows/adsorbates/index.html | 1323 ++++ .../demo/ocpapi/workflows/context/index.html | 652 ++ .../demo/ocpapi/workflows/filter/index.html | 709 ++ .../fairchem/demo/ocpapi/workflows/index.html | 1119 +++ .../demo/ocpapi/workflows/log/index.html | 625 ++ .../demo/ocpapi/workflows/retry}/index.html | 270 +- autoapi/index.html | 314 +- core/ase_dataset_creation.html | 106 +- core/datasets/oc20.html | 106 +- core/datasets/oc22.html | 102 +- core/datasets/odac.html | 102 +- core/fine-tuning/fine-tuning-oxides.html | 441 +- core/gotchas.html | 338 +- core/inference.html | 186 +- core/install.html | 110 +- core/intro_series.html | 116 +- core/license.html | 108 +- core/lmdb_dataset_creation.html | 149 +- core/model_checkpoints.html | 232 +- core/model_faq.html | 124 +- core/model_training.html | 124 +- core/ocpapi.html | 5832 +--------------- core/papers_using_models.html | 116 +- core/quickstart.html | 200 +- execution_time.html | 182 +- genindex.html | 5984 ++++++++--------- index.html | 190 +- legacy_tutorials/OCP_Tutorial.html | 332 +- legacy_tutorials/data_preprocessing.html | 102 +- legacy_tutorials/data_visualization.html | 304 +- legacy_tutorials/legacy_tutorials.html | 102 +- objects.inv | Bin 23428 -> 23863 bytes py-modindex.html | 1061 ++- .../fine-tuning/fine-tuning-oxides.err.log | 29 +- reports/core/gotchas.err.log | 29 +- reports/core/quickstart.err.log | 47 - reports/tutorials/NRR/NRR_example.err.log | 32 +- reports/tutorials/OCP-introduction.err.log | 46 - .../tutorials/adsorbml_walkthrough.err.log | 63 - reports/tutorials/advanced/embeddings.err.log | 54 - .../advanced/fine-tuning-in-python.err.log | 42 +- reports/tutorials/intro.err.log | 48 - search.html | 102 +- searchindex.js | 2 +- tutorials/NRR/NRR_example.html | 137 +- tutorials/NRR/NRR_toc.html | 102 +- tutorials/OCP-introduction.html | 463 +- tutorials/adsorbml_walkthrough.html | 856 ++- tutorials/advanced/advanced_toc.html | 102 +- tutorials/advanced/embeddings.html | 211 +- tutorials/advanced/fine-tuning-in-python.html | 325 +- tutorials/cattsunami_walkthrough.html | 110 +- tutorials/intro.html | 153 +- videos/technical_talks.html | 114 +- 778 files changed, 159305 insertions(+), 189004 deletions(-) create mode 100644 _downloads/5fdddbed2260616231dbf7b0d94bb665/train.txt create mode 100644 _images/0137774ef0c1e003acde80ee8122325fae1d7b98e150839405d0c583fc558890.png create mode 100644 _images/140d4a5aab829080d320b5d6fdd6181d9b7dc0330f894982e3e7d5fc1e1c14e2.png create mode 100644 _images/1b7fb09ce1e5ac100f517699cdb471c5b3bdd07e6e86f649611890e40bb8eb54.png create mode 100644 _images/1d08a38a81c31a0d2ca3b4e6eb145d62461518cfbd975941604782b92002f649.png create mode 100644 _images/43f7b0333a1ebef7c72f09a1a2aef6813e5b46342e1bcd68f000211ae06cef95.png create mode 100644 _images/46af7bb4be5c461aa6cf96d4a533467296c7c1ce5ddb6c0e7daffc68d22cf2f8.png create mode 100644 _images/8842bf65e339013ac7f54f0200a1e20f60472ed1fbcf8520c41ee4e842a0fb07.png create mode 100644 _images/92bd7f94dd548c8cfc2744eb5890cd23fada1ff98e8dc907657e2eb109af0402.png create mode 100644 _images/a48e3424d76817240816a0b914502025691c6a130c88e07728e1797c128651fb.png create mode 100644 _images/ba7c5f946d30982463f593371433aa9a969d3fcfd9d5e00eb523ba2ea9c48a32.png create mode 100644 _images/e4720a012318fa20cc620fafb196909771b53c44a5d2aff0c98237d9fa037636.png delete mode 100644 _sources/autoapi/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp/index.rst delete mode 100644 _sources/autoapi/applications/CatTSunami/ocpneb/core/index.rst delete mode 100644 _sources/autoapi/applications/CatTSunami/ocpneb/databases/index.rst delete mode 100644 _sources/autoapi/core/common/relaxation/optimizers/index.rst delete mode 100644 _sources/autoapi/core/datasets/embeddings/atomic_radii/index.rst delete mode 100644 _sources/autoapi/core/datasets/target_metadata_guesser/index.rst delete mode 100644 _sources/autoapi/core/models/equiformer_v2/edge_rot_mat/index.rst delete mode 100644 _sources/autoapi/core/models/equiformer_v2/trainers/index.rst delete mode 100644 _sources/autoapi/core/modules/scaling/util/index.rst delete mode 100644 _sources/autoapi/core/scripts/hpo/run_tune/index.rst delete mode 100644 _sources/autoapi/core/scripts/hpo/run_tune_pbt/index.rst delete mode 100644 _sources/autoapi/core/tests/common/test_data_parallel_batch_sampler/index.rst delete mode 100644 _sources/autoapi/core/tests/common/test_yaml_loader/index.rst delete mode 100644 _sources/autoapi/core/tests/datasets/test_ase_datasets/index.rst delete mode 100644 _sources/autoapi/core/tests/datasets/test_ase_lmdb/index.rst delete mode 100644 _sources/autoapi/core/tests/datasets/test_utils/index.rst delete mode 100644 _sources/autoapi/core/tests/models/test_escn/index.rst delete mode 100644 _sources/autoapi/data/oc/databases/pkls/index.rst delete mode 100644 _sources/autoapi/data/oc/experimental/get_energies/index.rst delete mode 100644 _sources/autoapi/data/oc/experimental/rattle_test/index.rst delete mode 100644 _sources/autoapi/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.rst delete mode 100644 _sources/autoapi/data/oc/tests/old_tests/verify_correctness/index.rst delete mode 100644 _sources/autoapi/data/om/biomolecules/geom/sample_geom_drugs/index.rst delete mode 100644 _sources/autoapi/data/om/biomolecules/geom/write_geom_drugs_structures/index.rst delete mode 100644 _sources/autoapi/data/om/omdata/orca/index.rst delete mode 100644 _sources/autoapi/demo/ocpapi/tests/integration/client/index.rst delete mode 100644 _sources/autoapi/demo/ocpapi/tests/integration/index.rst delete mode 100644 _sources/autoapi/demo/ocpapi/tests/integration/workflows/index.rst delete mode 100644 _sources/autoapi/demo/ocpapi/tests/unit/client/index.rst delete mode 100644 _sources/autoapi/demo/ocpapi/tests/unit/index.rst delete mode 100644 _sources/autoapi/demo/ocpapi/version/index.rst delete mode 100644 _sources/autoapi/demo/ocpapi/workflows/log/index.rst rename _sources/autoapi/{ => fairchem}/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.rst (73%) rename _sources/autoapi/{ => fairchem}/applications/AdsorbML/adsorbml/scripts/dense_eval/index.rst (85%) rename _sources/autoapi/{ => fairchem}/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.rst (63%) rename _sources/autoapi/{ => fairchem}/applications/AdsorbML/adsorbml/scripts/utils/index.rst (71%) create mode 100644 _sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp/index.rst rename _sources/autoapi/{ => fairchem}/applications/CatTSunami/ocpneb/core/autoframe/index.rst (93%) create mode 100644 _sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/index.rst rename _sources/autoapi/{ => fairchem}/applications/CatTSunami/ocpneb/core/ocpneb/index.rst (75%) rename _sources/autoapi/{ => fairchem}/applications/CatTSunami/ocpneb/core/reaction/index.rst (58%) create mode 100644 _sources/autoapi/fairchem/applications/CatTSunami/ocpneb/databases/index.rst rename _sources/autoapi/{ => fairchem}/applications/CatTSunami/ocpneb/run_validation/run_validation/index.rst (79%) rename _sources/autoapi/{ => fairchem}/core/_cli/index.rst (89%) rename _sources/autoapi/{ => fairchem}/core/common/data_parallel/index.rst (91%) rename _sources/autoapi/{ => fairchem}/core/common/distutils/index.rst (62%) rename _sources/autoapi/{ => fairchem}/core/common/flags/index.rst (71%) rename _sources/autoapi/{ => fairchem}/core/common/gp_utils/index.rst (92%) rename _sources/autoapi/{ => fairchem}/core/common/hpo_utils/index.rst (83%) rename _sources/autoapi/{ => fairchem}/core/common/index.rst (86%) rename _sources/autoapi/{ => fairchem}/core/common/logger/index.rst (86%) rename _sources/autoapi/{ => fairchem}/core/common/registry/index.rst (93%) rename _sources/autoapi/{ => fairchem}/core/common/relaxation/ase_utils/index.rst (91%) rename _sources/autoapi/{ => fairchem}/core/common/relaxation/index.rst (62%) rename _sources/autoapi/{ => fairchem}/core/common/relaxation/ml_relaxation/index.rst (81%) create mode 100644 _sources/autoapi/fairchem/core/common/relaxation/optimizers/index.rst rename _sources/autoapi/{ => fairchem}/core/common/relaxation/optimizers/lbfgs_torch/index.rst (78%) rename _sources/autoapi/{ => fairchem}/core/common/transforms/index.rst (83%) rename _sources/autoapi/{ => fairchem}/core/common/tutorial_utils/index.rst (76%) rename _sources/autoapi/{ => fairchem}/core/common/typing/index.rst (54%) rename _sources/autoapi/{ => fairchem}/core/common/utils/index.rst (78%) rename _sources/autoapi/{ => fairchem}/core/datasets/_utils/index.rst (76%) rename _sources/autoapi/{ => fairchem}/core/datasets/ase_datasets/index.rst (96%) create mode 100644 _sources/autoapi/fairchem/core/datasets/embeddings/atomic_radii/index.rst rename _sources/autoapi/{ => fairchem}/core/datasets/embeddings/continuous_embeddings/index.rst (68%) rename _sources/autoapi/{ => fairchem}/core/datasets/embeddings/index.rst (73%) rename _sources/autoapi/{ => fairchem}/core/datasets/embeddings/khot_embeddings/index.rst (63%) rename _sources/autoapi/{ => fairchem}/core/datasets/embeddings/qmof_khot_embeddings/index.rst (69%) rename _sources/autoapi/{ => fairchem}/core/datasets/index.rst (97%) rename _sources/autoapi/{ => fairchem}/core/datasets/lmdb_database/index.rst (90%) rename _sources/autoapi/{ => fairchem}/core/datasets/lmdb_dataset/index.rst (91%) rename _sources/autoapi/{ => fairchem}/core/datasets/oc22_lmdb_dataset/index.rst (85%) create mode 100644 _sources/autoapi/fairchem/core/datasets/target_metadata_guesser/index.rst rename _sources/autoapi/{ => fairchem}/core/index.rst (89%) rename _sources/autoapi/{ => fairchem}/core/models/base/index.rst (92%) rename _sources/autoapi/{ => fairchem}/core/models/dimenet_plus_plus/index.rst (95%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/activation/index.rst (93%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/drop/index.rst (91%) create mode 100644 _sources/autoapi/fairchem/core/models/equiformer_v2/edge_rot_mat/index.rst rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/equiformer_v2_oc20/index.rst (94%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/gaussian_rbf/index.rst (84%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/index.rst (97%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/input_block/index.rst (85%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/layer_norm/index.rst (84%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/module_list/index.rst (81%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/radial_function/index.rst (53%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/so2_ops/index.rst (90%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/so3/index.rst (92%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/trainers/energy_trainer/index.rst (90%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/trainers/forces_trainer/index.rst (90%) create mode 100644 _sources/autoapi/fairchem/core/models/equiformer_v2/trainers/index.rst rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/trainers/lr_scheduler/index.rst (72%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/transformer_block/index.rst (95%) rename _sources/autoapi/{ => fairchem}/core/models/equiformer_v2/wigner/index.rst (51%) rename _sources/autoapi/{ => fairchem}/core/models/escn/escn/index.rst (94%) rename _sources/autoapi/{ => fairchem}/core/models/escn/index.rst (95%) rename _sources/autoapi/{ => fairchem}/core/models/escn/so3/index.rst (91%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/gemnet/index.rst (96%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/index.rst (97%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/initializers/index.rst (76%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/layers/atom_update_block/index.rst (87%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/layers/base_layers/index.rst (89%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/layers/basis_utils/index.rst (84%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/layers/efficient/index.rst (85%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/layers/embedding_block/index.rst (80%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/layers/index.rst (67%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/layers/interaction_block/index.rst (90%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/layers/radial_basis/index.rst (83%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/layers/spherical_basis/index.rst (69%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet/utils/index.rst (84%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/gemnet/index.rst (96%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/index.rst (96%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/initializers/index.rst (75%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/layers/atom_update_block/index.rst (82%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/layers/base_layers/index.rst (89%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/layers/basis_utils/index.rst (84%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/layers/efficient/index.rst (86%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/layers/embedding_block/index.rst (80%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/layers/index.rst (66%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/layers/interaction_block/index.rst (90%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/layers/radial_basis/index.rst (82%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/layers/spherical_basis/index.rst (68%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_gp/utils/index.rst (83%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/gemnet_oc/index.rst (98%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/index.rst (98%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/initializers/index.rst (75%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/interaction_indices/index.rst (92%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/atom_update_block/index.rst (87%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/base_layers/index.rst (87%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/basis_utils/index.rst (83%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/efficient/index.rst (93%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/embedding_block/index.rst (83%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/force_scaler/index.rst (76%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/index.rst (68%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/interaction_block/index.rst (93%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/radial_basis/index.rst (87%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/layers/spherical_basis/index.rst (72%) rename _sources/autoapi/{ => fairchem}/core/models/gemnet_oc/utils/index.rst (85%) rename _sources/autoapi/{ => fairchem}/core/models/index.rst (83%) rename _sources/autoapi/{ => fairchem}/core/models/model_registry/index.rst (71%) rename _sources/autoapi/{ => fairchem}/core/models/painn/index.rst (92%) rename _sources/autoapi/{ => fairchem}/core/models/painn/painn/index.rst (96%) rename _sources/autoapi/{ => fairchem}/core/models/painn/utils/index.rst (88%) rename _sources/autoapi/{ => fairchem}/core/models/schnet/index.rst (95%) rename _sources/autoapi/{ => fairchem}/core/models/scn/index.rst (96%) rename _sources/autoapi/{ => fairchem}/core/models/scn/sampling/index.rst (64%) rename _sources/autoapi/{ => fairchem}/core/models/scn/scn/index.rst (96%) rename _sources/autoapi/{ => fairchem}/core/models/scn/smearing/index.rst (93%) rename _sources/autoapi/{ => fairchem}/core/models/scn/spherical_harmonics/index.rst (80%) rename _sources/autoapi/{ => fairchem}/core/models/utils/activations/index.rst (88%) rename _sources/autoapi/{ => fairchem}/core/models/utils/basis/index.rst (95%) rename _sources/autoapi/{ => fairchem}/core/models/utils/index.rst (50%) rename _sources/autoapi/{ => fairchem}/core/modules/evaluator/index.rst (76%) rename _sources/autoapi/{ => fairchem}/core/modules/exponential_moving_average/index.rst (92%) rename _sources/autoapi/{ => fairchem}/core/modules/index.rst (83%) rename _sources/autoapi/{ => fairchem}/core/modules/loss/index.rst (94%) rename _sources/autoapi/{ => fairchem}/core/modules/normalizer/index.rst (79%) rename _sources/autoapi/{ => fairchem}/core/modules/scaling/compat/index.rst (65%) rename _sources/autoapi/{ => fairchem}/core/modules/scaling/fit/index.rst (53%) rename _sources/autoapi/{ => fairchem}/core/modules/scaling/index.rst (93%) rename _sources/autoapi/{ => fairchem}/core/modules/scaling/scale_factor/index.rst (88%) create mode 100644 _sources/autoapi/fairchem/core/modules/scaling/util/index.rst rename _sources/autoapi/{ => fairchem}/core/modules/scheduler/index.rst (81%) rename _sources/autoapi/{ => fairchem}/core/modules/transforms/index.rst (54%) rename _sources/autoapi/{ => fairchem}/core/preprocessing/atoms_to_graphs/index.rst (94%) rename _sources/autoapi/{ => fairchem}/core/preprocessing/index.rst (97%) rename _sources/autoapi/{ => fairchem}/core/scripts/download_data/index.rst (53%) rename _sources/autoapi/{ => fairchem}/core/scripts/gif_maker_parallelized/index.rst (64%) rename _sources/autoapi/{ => fairchem}/core/scripts/hpo/index.rst (74%) create mode 100644 _sources/autoapi/fairchem/core/scripts/hpo/run_tune/index.rst create mode 100644 _sources/autoapi/fairchem/core/scripts/hpo/run_tune_pbt/index.rst rename _sources/autoapi/{ => fairchem}/core/scripts/index.rst (86%) rename _sources/autoapi/{ => fairchem}/core/scripts/make_challenge_submission_file/index.rst (59%) rename _sources/autoapi/{ => fairchem}/core/scripts/make_lmdb_sizes/index.rst (56%) rename _sources/autoapi/{ => fairchem}/core/scripts/make_submission_file/index.rst (54%) rename _sources/autoapi/{ => fairchem}/core/scripts/preprocess_ef/index.rst (58%) rename _sources/autoapi/{ => fairchem}/core/scripts/preprocess_relaxed/index.rst (54%) rename _sources/autoapi/{ => fairchem}/core/scripts/uncompress/index.rst (61%) rename _sources/autoapi/{ => fairchem}/core/tasks/index.rst (72%) rename _sources/autoapi/{ => fairchem}/core/tasks/task/index.rst (73%) rename _sources/autoapi/{ => fairchem}/core/tests/common/test_ase_calculator/index.rst (52%) create mode 100644 _sources/autoapi/fairchem/core/tests/common/test_data_parallel_batch_sampler/index.rst create mode 100644 _sources/autoapi/fairchem/core/tests/common/test_yaml_loader/index.rst rename _sources/autoapi/{ => fairchem}/core/tests/conftest/index.rst (82%) create mode 100644 _sources/autoapi/fairchem/core/tests/datasets/test_ase_datasets/index.rst create mode 100644 _sources/autoapi/fairchem/core/tests/datasets/test_ase_lmdb/index.rst create mode 100644 _sources/autoapi/fairchem/core/tests/datasets/test_utils/index.rst rename _sources/autoapi/{ => fairchem}/core/tests/evaluator/test_evaluator/index.rst (58%) rename _sources/autoapi/{ => fairchem}/core/tests/index.rst (80%) rename _sources/autoapi/{ => fairchem}/core/tests/models/test_dimenetpp/index.rst (63%) rename _sources/autoapi/{ => fairchem}/core/tests/models/test_equiformer_v2/index.rst (57%) create mode 100644 _sources/autoapi/fairchem/core/tests/models/test_escn/index.rst rename _sources/autoapi/{ => fairchem}/core/tests/models/test_gemnet/index.rst (64%) rename _sources/autoapi/{ => fairchem}/core/tests/models/test_gemnet_oc/index.rst (63%) rename _sources/autoapi/{ => fairchem}/core/tests/models/test_gemnet_oc_scaling_mismatch/index.rst (64%) rename _sources/autoapi/{ => fairchem}/core/tests/models/test_schnet/index.rst (64%) rename _sources/autoapi/{ => fairchem}/core/tests/preprocessing/index.rst (73%) rename _sources/autoapi/{ => fairchem}/core/tests/preprocessing/test_atoms_to_graphs/index.rst (61%) rename _sources/autoapi/{ => fairchem}/core/tests/preprocessing/test_pbc/index.rst (62%) rename _sources/autoapi/{ => fairchem}/core/tests/preprocessing/test_radius_graph_pbc/index.rst (60%) rename _sources/autoapi/{ => fairchem}/core/trainers/base_trainer/index.rst (92%) rename _sources/autoapi/{ => fairchem}/core/trainers/index.rst (96%) rename _sources/autoapi/{ => fairchem}/core/trainers/ocp_trainer/index.rst (94%) rename _sources/autoapi/{ => fairchem}/data/oc/core/adsorbate/index.rst (88%) rename _sources/autoapi/{ => fairchem}/data/oc/core/adsorbate_slab_config/index.rst (94%) rename _sources/autoapi/{ => fairchem}/data/oc/core/bulk/index.rst (90%) rename _sources/autoapi/{ => fairchem}/data/oc/core/index.rst (98%) rename _sources/autoapi/{ => fairchem}/data/oc/core/multi_adsorbate_slab_config/index.rst (92%) rename _sources/autoapi/{ => fairchem}/data/oc/core/slab/index.rst (93%) rename _sources/autoapi/{ => fairchem}/data/oc/databases/index.rst (61%) create mode 100644 _sources/autoapi/fairchem/data/oc/databases/pkls/index.rst rename _sources/autoapi/{ => fairchem}/data/oc/databases/update/index.rst (51%) create mode 100644 _sources/autoapi/fairchem/data/oc/experimental/get_energies/index.rst rename _sources/autoapi/{ => fairchem}/data/oc/experimental/merge_traj/index.rst (55%) rename _sources/autoapi/{ => fairchem}/data/oc/experimental/perturb_systems/index.rst (57%) create mode 100644 _sources/autoapi/fairchem/data/oc/experimental/rattle_test/index.rst rename _sources/autoapi/{ => fairchem}/data/oc/experimental/utils/index.rst (79%) rename _sources/autoapi/{ => fairchem}/data/oc/index.rst (73%) rename _sources/autoapi/{ => fairchem}/data/oc/scripts/precompute_sample_structures/index.rst (82%) rename _sources/autoapi/{ => fairchem}/data/oc/structure_generator/index.rst (81%) rename _sources/autoapi/{ => fairchem}/data/oc/tests/old_tests/check_energy_and_forces/index.rst (60%) rename _sources/autoapi/{ => fairchem}/data/oc/tests/old_tests/check_inputs/index.rst (85%) create mode 100644 _sources/autoapi/fairchem/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.rst create mode 100644 _sources/autoapi/fairchem/data/oc/tests/old_tests/verify_correctness/index.rst rename _sources/autoapi/{ => fairchem}/data/oc/tests/test_adsorbate/index.rst (68%) rename _sources/autoapi/{ => fairchem}/data/oc/tests/test_adsorbate_slab_config/index.rst (61%) rename _sources/autoapi/{ => fairchem}/data/oc/tests/test_bulk/index.rst (73%) rename _sources/autoapi/{ => fairchem}/data/oc/tests/test_inputs/index.rst (52%) rename _sources/autoapi/{ => fairchem}/data/oc/tests/test_multi_adsorbate_slab_config/index.rst (57%) rename _sources/autoapi/{ => fairchem}/data/oc/tests/test_slab/index.rst (58%) rename _sources/autoapi/{ => fairchem}/data/oc/utils/flag_anomaly/index.rst (89%) rename _sources/autoapi/{ => fairchem}/data/oc/utils/index.rst (92%) rename _sources/autoapi/{ => fairchem}/data/oc/utils/vasp/index.rst (81%) rename _sources/autoapi/{ => fairchem}/data/odac/force_field/FF_analysis/index.rst (52%) rename _sources/autoapi/{ => fairchem}/data/odac/promising_mof/promising_mof_energies/energy/index.rst (90%) create mode 100644 _sources/autoapi/fairchem/data/om/biomolecules/geom/sample_geom_drugs/index.rst create mode 100644 _sources/autoapi/fairchem/data/om/biomolecules/geom/write_geom_drugs_structures/index.rst rename _sources/autoapi/{ => fairchem}/data/om/omdata/orca/calc/index.rst (63%) create mode 100644 _sources/autoapi/fairchem/data/om/omdata/orca/index.rst rename _sources/autoapi/{ => fairchem}/data/om/omdata/orca/recipes/index.rst (90%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/client/client/index.rst (89%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/client/index.rst (91%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/client/models/index.rst (91%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/client/ui/index.rst (71%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/index.rst (92%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/index.rst (50%) create mode 100644 _sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/index.rst rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/integration/client/test_client/index.rst (79%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/integration/client/test_ui/index.rst (65%) create mode 100644 _sources/autoapi/fairchem/demo/ocpapi/tests/integration/index.rst create mode 100644 _sources/autoapi/fairchem/demo/ocpapi/tests/integration/workflows/index.rst rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.rst (75%) create mode 100644 _sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/index.rst rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/unit/client/test_client/index.rst (86%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/unit/client/test_models/index.rst (73%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/unit/client/test_ui/index.rst (88%) create mode 100644 _sources/autoapi/fairchem/demo/ocpapi/tests/unit/index.rst rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/unit/workflows/index.rst (52%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.rst (90%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/unit/workflows/test_context/index.rst (87%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/unit/workflows/test_filter/index.rst (86%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/tests/unit/workflows/test_retry/index.rst (82%) create mode 100644 _sources/autoapi/fairchem/demo/ocpapi/version/index.rst rename _sources/autoapi/{ => fairchem}/demo/ocpapi/workflows/adsorbates/index.rst (89%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/workflows/context/index.rst (70%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/workflows/filter/index.rst (79%) rename _sources/autoapi/{ => fairchem}/demo/ocpapi/workflows/index.rst (92%) create mode 100644 _sources/autoapi/fairchem/demo/ocpapi/workflows/log/index.rst rename _sources/autoapi/{ => fairchem}/demo/ocpapi/workflows/retry/index.rst (83%) delete mode 100644 autoapi/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.html delete mode 100644 autoapi/applications/AdsorbML/adsorbml/scripts/dense_eval/index.html delete mode 100644 autoapi/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.html delete mode 100644 autoapi/applications/CatTSunami/ocpneb/core/ocpneb/index.html delete mode 100644 autoapi/applications/CatTSunami/ocpneb/databases/index.html delete mode 100644 autoapi/applications/CatTSunami/ocpneb/run_validation/run_validation/index.html delete mode 100644 autoapi/core/_cli/index.html delete mode 100644 autoapi/core/common/data_parallel/index.html delete mode 100644 autoapi/core/common/distutils/index.html delete mode 100644 autoapi/core/common/flags/index.html delete mode 100644 autoapi/core/common/gp_utils/index.html delete mode 100644 autoapi/core/common/hpo_utils/index.html delete mode 100644 autoapi/core/common/index.html delete mode 100644 autoapi/core/common/logger/index.html delete mode 100644 autoapi/core/common/registry/index.html delete mode 100644 autoapi/core/common/relaxation/ase_utils/index.html delete mode 100644 autoapi/core/common/relaxation/index.html delete mode 100644 autoapi/core/common/relaxation/ml_relaxation/index.html delete mode 100644 autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.html delete mode 100644 autoapi/core/common/transforms/index.html delete mode 100644 autoapi/core/common/tutorial_utils/index.html delete mode 100644 autoapi/core/common/typing/index.html delete mode 100644 autoapi/core/common/utils/index.html delete mode 100644 autoapi/core/datasets/_utils/index.html delete mode 100644 autoapi/core/datasets/ase_datasets/index.html delete mode 100644 autoapi/core/datasets/embeddings/atomic_radii/index.html delete mode 100644 autoapi/core/datasets/embeddings/continuous_embeddings/index.html delete mode 100644 autoapi/core/datasets/embeddings/index.html delete mode 100644 autoapi/core/datasets/embeddings/khot_embeddings/index.html delete mode 100644 autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.html delete mode 100644 autoapi/core/datasets/lmdb_database/index.html delete mode 100644 autoapi/core/datasets/lmdb_dataset/index.html delete mode 100644 autoapi/core/datasets/oc22_lmdb_dataset/index.html delete mode 100644 autoapi/core/datasets/target_metadata_guesser/index.html delete mode 100644 autoapi/core/index.html delete mode 100644 autoapi/core/models/base/index.html delete mode 100644 autoapi/core/models/dimenet_plus_plus/index.html delete mode 100644 autoapi/core/models/equiformer_v2/drop/index.html delete mode 100644 autoapi/core/models/equiformer_v2/edge_rot_mat/index.html delete mode 100644 autoapi/core/models/equiformer_v2/equiformer_v2_oc20/index.html delete mode 100644 autoapi/core/models/equiformer_v2/index.html delete mode 100644 autoapi/core/models/equiformer_v2/input_block/index.html delete mode 100644 autoapi/core/models/equiformer_v2/layer_norm/index.html delete mode 100644 autoapi/core/models/equiformer_v2/module_list/index.html delete mode 100644 autoapi/core/models/equiformer_v2/radial_function/index.html delete mode 100644 autoapi/core/models/equiformer_v2/so2_ops/index.html delete mode 100644 autoapi/core/models/equiformer_v2/so3/index.html delete mode 100644 autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.html delete mode 100644 autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.html delete mode 100644 autoapi/core/models/equiformer_v2/trainers/index.html delete mode 100644 autoapi/core/models/equiformer_v2/trainers/lr_scheduler/index.html delete mode 100644 autoapi/core/models/equiformer_v2/transformer_block/index.html delete mode 100644 autoapi/core/models/equiformer_v2/wigner/index.html delete mode 100644 autoapi/core/models/escn/escn/index.html delete mode 100644 autoapi/core/models/escn/index.html delete mode 100644 autoapi/core/models/escn/so3/index.html delete mode 100644 autoapi/core/models/gemnet/index.html delete mode 100644 autoapi/core/models/gemnet/initializers/index.html delete mode 100644 autoapi/core/models/gemnet/layers/atom_update_block/index.html delete mode 100644 autoapi/core/models/gemnet/layers/basis_utils/index.html delete mode 100644 autoapi/core/models/gemnet/layers/efficient/index.html delete mode 100644 autoapi/core/models/gemnet/layers/embedding_block/index.html delete mode 100644 autoapi/core/models/gemnet/layers/index.html delete mode 100644 autoapi/core/models/gemnet/layers/interaction_block/index.html delete mode 100644 autoapi/core/models/gemnet/layers/radial_basis/index.html delete mode 100644 autoapi/core/models/gemnet/layers/spherical_basis/index.html delete mode 100644 autoapi/core/models/gemnet/utils/index.html delete mode 100644 autoapi/core/models/gemnet_gp/gemnet/index.html delete mode 100644 autoapi/core/models/gemnet_gp/initializers/index.html delete mode 100644 autoapi/core/models/gemnet_gp/layers/atom_update_block/index.html delete mode 100644 autoapi/core/models/gemnet_gp/layers/basis_utils/index.html delete mode 100644 autoapi/core/models/gemnet_gp/layers/efficient/index.html delete mode 100644 autoapi/core/models/gemnet_gp/layers/embedding_block/index.html delete mode 100644 autoapi/core/models/gemnet_gp/layers/index.html delete mode 100644 autoapi/core/models/gemnet_gp/layers/interaction_block/index.html delete mode 100644 autoapi/core/models/gemnet_gp/layers/radial_basis/index.html delete mode 100644 autoapi/core/models/gemnet_gp/layers/spherical_basis/index.html delete mode 100644 autoapi/core/models/gemnet_gp/utils/index.html delete mode 100644 autoapi/core/models/gemnet_oc/index.html delete mode 100644 autoapi/core/models/gemnet_oc/initializers/index.html delete mode 100644 autoapi/core/models/gemnet_oc/interaction_indices/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/atom_update_block/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/base_layers/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/basis_utils/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/efficient/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/embedding_block/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/force_scaler/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/interaction_block/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/radial_basis/index.html delete mode 100644 autoapi/core/models/gemnet_oc/layers/spherical_basis/index.html delete mode 100644 autoapi/core/models/gemnet_oc/utils/index.html delete mode 100644 autoapi/core/models/index.html delete mode 100644 autoapi/core/models/painn/index.html delete mode 100644 autoapi/core/models/painn/utils/index.html delete mode 100644 autoapi/core/models/schnet/index.html delete mode 100644 autoapi/core/models/scn/index.html delete mode 100644 autoapi/core/models/scn/sampling/index.html delete mode 100644 autoapi/core/models/scn/scn/index.html delete mode 100644 autoapi/core/models/scn/smearing/index.html delete mode 100644 autoapi/core/models/scn/spherical_harmonics/index.html delete mode 100644 autoapi/core/modules/evaluator/index.html delete mode 100644 autoapi/core/modules/exponential_moving_average/index.html delete mode 100644 autoapi/core/modules/index.html delete mode 100644 autoapi/core/modules/loss/index.html delete mode 100644 autoapi/core/modules/normalizer/index.html delete mode 100644 autoapi/core/modules/scaling/compat/index.html delete mode 100644 autoapi/core/modules/scaling/fit/index.html delete mode 100644 autoapi/core/modules/scaling/index.html delete mode 100644 autoapi/core/modules/scaling/scale_factor/index.html delete mode 100644 autoapi/core/modules/scaling/util/index.html delete mode 100644 autoapi/core/modules/scheduler/index.html delete mode 100644 autoapi/core/modules/transforms/index.html delete mode 100644 autoapi/core/preprocessing/index.html delete mode 100644 autoapi/core/scripts/download_data/index.html delete mode 100644 autoapi/core/scripts/gif_maker_parallelized/index.html delete mode 100644 autoapi/core/scripts/hpo/run_tune/index.html delete mode 100644 autoapi/core/scripts/hpo/run_tune_pbt/index.html delete mode 100644 autoapi/core/scripts/index.html delete mode 100644 autoapi/core/scripts/make_challenge_submission_file/index.html delete mode 100644 autoapi/core/scripts/make_lmdb_sizes/index.html delete mode 100644 autoapi/core/scripts/make_submission_file/index.html delete mode 100644 autoapi/core/scripts/preprocess_ef/index.html delete mode 100644 autoapi/core/scripts/preprocess_relaxed/index.html delete mode 100644 autoapi/core/scripts/uncompress/index.html delete mode 100644 autoapi/core/tasks/index.html delete mode 100644 autoapi/core/tasks/task/index.html delete mode 100644 autoapi/core/tests/common/test_ase_calculator/index.html delete mode 100644 autoapi/core/tests/common/test_data_parallel_batch_sampler/index.html delete mode 100644 autoapi/core/tests/common/test_yaml_loader/index.html delete mode 100644 autoapi/core/tests/conftest/index.html delete mode 100644 autoapi/core/tests/datasets/test_ase_datasets/index.html delete mode 100644 autoapi/core/tests/datasets/test_ase_lmdb/index.html delete mode 100644 autoapi/core/tests/evaluator/test_evaluator/index.html delete mode 100644 autoapi/core/tests/index.html delete mode 100644 autoapi/core/tests/models/test_dimenetpp/index.html delete mode 100644 autoapi/core/tests/models/test_gemnet/index.html delete mode 100644 autoapi/core/tests/models/test_gemnet_oc/index.html delete mode 100644 autoapi/core/tests/models/test_gemnet_oc_scaling_mismatch/index.html delete mode 100644 autoapi/core/tests/models/test_schnet/index.html delete mode 100644 autoapi/core/tests/preprocessing/index.html delete mode 100644 autoapi/core/tests/preprocessing/test_atoms_to_graphs/index.html delete mode 100644 autoapi/core/tests/preprocessing/test_pbc/index.html delete mode 100644 autoapi/core/tests/preprocessing/test_radius_graph_pbc/index.html delete mode 100644 autoapi/core/trainers/index.html delete mode 100644 autoapi/core/trainers/ocp_trainer/index.html delete mode 100644 autoapi/data/oc/core/adsorbate/index.html delete mode 100644 autoapi/data/oc/core/adsorbate_slab_config/index.html delete mode 100644 autoapi/data/oc/core/bulk/index.html delete mode 100644 autoapi/data/oc/core/index.html delete mode 100644 autoapi/data/oc/core/multi_adsorbate_slab_config/index.html delete mode 100644 autoapi/data/oc/core/slab/index.html delete mode 100644 autoapi/data/oc/databases/update/index.html delete mode 100644 autoapi/data/oc/experimental/merge_traj/index.html delete mode 100644 autoapi/data/oc/experimental/utils/index.html delete mode 100644 autoapi/data/oc/index.html delete mode 100644 autoapi/data/oc/scripts/precompute_sample_structures/index.html delete mode 100644 autoapi/data/oc/structure_generator/index.html delete mode 100644 autoapi/data/oc/tests/old_tests/check_energy_and_forces/index.html delete mode 100644 autoapi/data/oc/tests/old_tests/check_inputs/index.html delete mode 100644 autoapi/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.html delete mode 100644 autoapi/data/oc/tests/test_adsorbate/index.html delete mode 100644 autoapi/data/oc/tests/test_adsorbate_slab_config/index.html delete mode 100644 autoapi/data/oc/tests/test_bulk/index.html delete mode 100644 autoapi/data/oc/tests/test_inputs/index.html delete mode 100644 autoapi/data/oc/tests/test_multi_adsorbate_slab_config/index.html delete mode 100644 autoapi/data/oc/utils/flag_anomaly/index.html delete mode 100644 autoapi/data/oc/utils/index.html delete mode 100644 autoapi/data/oc/utils/vasp/index.html delete mode 100644 autoapi/data/odac/force_field/FF_analysis/index.html delete mode 100644 autoapi/data/odac/promising_mof/promising_mof_energies/energy/index.html delete mode 100644 autoapi/data/om/omdata/orca/calc/index.html delete mode 100644 autoapi/data/om/omdata/orca/recipes/index.html delete mode 100644 autoapi/demo/ocpapi/client/client/index.html delete mode 100644 autoapi/demo/ocpapi/client/index.html delete mode 100644 autoapi/demo/ocpapi/client/models/index.html delete mode 100644 autoapi/demo/ocpapi/client/ui/index.html delete mode 100644 autoapi/demo/ocpapi/index.html delete mode 100644 autoapi/demo/ocpapi/tests/index.html delete mode 100644 autoapi/demo/ocpapi/tests/integration/client/test_client/index.html delete mode 100644 autoapi/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.html delete mode 100644 autoapi/demo/ocpapi/tests/unit/client/test_client/index.html delete mode 100644 autoapi/demo/ocpapi/tests/unit/client/test_models/index.html delete mode 100644 autoapi/demo/ocpapi/tests/unit/index.html delete mode 100644 autoapi/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.html delete mode 100644 autoapi/demo/ocpapi/tests/unit/workflows/test_filter/index.html delete mode 100644 autoapi/demo/ocpapi/tests/unit/workflows/test_retry/index.html delete mode 100644 autoapi/demo/ocpapi/workflows/adsorbates/index.html delete mode 100644 autoapi/demo/ocpapi/workflows/context/index.html delete mode 100644 autoapi/demo/ocpapi/workflows/filter/index.html delete mode 100644 autoapi/demo/ocpapi/workflows/index.html delete mode 100644 autoapi/demo/ocpapi/workflows/retry/index.html create mode 100644 autoapi/fairchem/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.html create mode 100644 autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/dense_eval/index.html create mode 100644 autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.html create mode 100644 autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/utils/index.html create mode 100644 autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp/index.html rename autoapi/{ => fairchem}/applications/CatTSunami/ocpneb/core/autoframe/index.html (50%) rename autoapi/{demo/ocpapi/tests/unit/workflows => fairchem/applications/CatTSunami/ocpneb/core}/index.html (53%) create mode 100644 autoapi/fairchem/applications/CatTSunami/ocpneb/core/ocpneb/index.html create mode 100644 autoapi/fairchem/applications/CatTSunami/ocpneb/core/reaction/index.html create mode 100644 autoapi/fairchem/applications/CatTSunami/ocpneb/databases/index.html create mode 100644 autoapi/fairchem/applications/CatTSunami/ocpneb/run_validation/run_validation/index.html rename autoapi/{demo/ocpapi/version => fairchem/core/_cli}/index.html (54%) create mode 100644 autoapi/fairchem/core/common/data_parallel/index.html rename autoapi/{data/oc/experimental/get_energies => fairchem/core/common/distutils}/index.html (52%) create mode 100644 autoapi/fairchem/core/common/flags/index.html create mode 100644 autoapi/fairchem/core/common/gp_utils/index.html create mode 100644 autoapi/fairchem/core/common/hpo_utils/index.html rename autoapi/{data/oc/databases => fairchem/core/common}/index.html (55%) rename autoapi/{data/oc/tests/test_slab => fairchem/core/common/logger}/index.html (53%) create mode 100644 autoapi/fairchem/core/common/registry/index.html create mode 100644 autoapi/fairchem/core/common/relaxation/ase_utils/index.html create mode 100644 autoapi/fairchem/core/common/relaxation/index.html create mode 100644 autoapi/fairchem/core/common/relaxation/ml_relaxation/index.html create mode 100644 autoapi/fairchem/core/common/relaxation/optimizers/index.html create mode 100644 autoapi/fairchem/core/common/relaxation/optimizers/lbfgs_torch/index.html create mode 100644 autoapi/fairchem/core/common/transforms/index.html rename autoapi/{data/oc/experimental/perturb_systems => fairchem/core/common/tutorial_utils}/index.html (54%) create mode 100644 autoapi/fairchem/core/common/typing/index.html create mode 100644 autoapi/fairchem/core/common/utils/index.html create mode 100644 autoapi/fairchem/core/datasets/_utils/index.html create mode 100644 autoapi/fairchem/core/datasets/ase_datasets/index.html create mode 100644 autoapi/fairchem/core/datasets/embeddings/atomic_radii/index.html create mode 100644 autoapi/fairchem/core/datasets/embeddings/continuous_embeddings/index.html rename autoapi/{data/oc/databases/pkls => fairchem/core/datasets/embeddings}/index.html (53%) create mode 100644 autoapi/fairchem/core/datasets/embeddings/khot_embeddings/index.html create mode 100644 autoapi/fairchem/core/datasets/embeddings/qmof_khot_embeddings/index.html rename autoapi/{ => fairchem}/core/datasets/index.html (53%) create mode 100644 autoapi/fairchem/core/datasets/lmdb_database/index.html rename autoapi/{core/tests/models/test_equiformer_v2 => fairchem/core/datasets/lmdb_dataset}/index.html (50%) create mode 100644 autoapi/fairchem/core/datasets/oc22_lmdb_dataset/index.html rename autoapi/{core/tests/datasets/test_utils => fairchem/core/datasets/target_metadata_guesser}/index.html (54%) create mode 100644 autoapi/fairchem/core/index.html create mode 100644 autoapi/fairchem/core/models/base/index.html create mode 100644 autoapi/fairchem/core/models/dimenet_plus_plus/index.html rename autoapi/{ => fairchem}/core/models/equiformer_v2/activation/index.html (55%) rename autoapi/{core/models/gemnet_gp/layers/base_layers => fairchem/core/models/equiformer_v2/drop}/index.html (52%) create mode 100644 autoapi/fairchem/core/models/equiformer_v2/edge_rot_mat/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/equiformer_v2_oc20/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/gaussian_rbf/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/input_block/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/layer_norm/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/module_list/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/radial_function/index.html rename autoapi/{applications/CatTSunami/ocpneb/core/reaction => fairchem/core/models/equiformer_v2/so2_ops}/index.html (52%) create mode 100644 autoapi/fairchem/core/models/equiformer_v2/so3/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/trainers/energy_trainer/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/trainers/forces_trainer/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/trainers/index.html rename autoapi/{demo/ocpapi/tests/unit/client/test_ui => fairchem/core/models/equiformer_v2/trainers/lr_scheduler}/index.html (51%) create mode 100644 autoapi/fairchem/core/models/equiformer_v2/transformer_block/index.html create mode 100644 autoapi/fairchem/core/models/equiformer_v2/wigner/index.html create mode 100644 autoapi/fairchem/core/models/escn/escn/index.html rename autoapi/{applications/CatTSunami/ocpneb/core => fairchem/core/models/escn}/index.html (54%) create mode 100644 autoapi/fairchem/core/models/escn/so3/index.html rename autoapi/{core/models/gemnet_gp => fairchem/core/models/gemnet/gemnet}/index.html (50%) rename autoapi/{core/models/gemnet => fairchem/core/models}/gemnet/index.html (50%) create mode 100644 autoapi/fairchem/core/models/gemnet/initializers/index.html create mode 100644 autoapi/fairchem/core/models/gemnet/layers/atom_update_block/index.html rename autoapi/{demo/ocpapi/tests/unit/workflows/test_context => fairchem/core/models/gemnet/layers/base_layers}/index.html (51%) create mode 100644 autoapi/fairchem/core/models/gemnet/layers/basis_utils/index.html create mode 100644 autoapi/fairchem/core/models/gemnet/layers/efficient/index.html create mode 100644 autoapi/fairchem/core/models/gemnet/layers/embedding_block/index.html rename autoapi/{demo/ocpapi/tests/integration/workflows => fairchem/core/models/gemnet/layers}/index.html (54%) create mode 100644 autoapi/fairchem/core/models/gemnet/layers/interaction_block/index.html create mode 100644 autoapi/fairchem/core/models/gemnet/layers/radial_basis/index.html create mode 100644 autoapi/fairchem/core/models/gemnet/layers/spherical_basis/index.html rename autoapi/{applications/AdsorbML/adsorbml/scripts => fairchem/core/models/gemnet}/utils/index.html (51%) create mode 100644 autoapi/fairchem/core/models/gemnet_gp/gemnet/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_gp/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_gp/initializers/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_gp/layers/atom_update_block/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_gp/layers/base_layers/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_gp/layers/basis_utils/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_gp/layers/efficient/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_gp/layers/embedding_block/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_gp/layers/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_gp/layers/interaction_block/index.html rename autoapi/{demo/ocpapi/tests/integration/client/test_ui => fairchem/core/models/gemnet_gp/layers/radial_basis}/index.html (51%) create mode 100644 autoapi/fairchem/core/models/gemnet_gp/layers/spherical_basis/index.html rename autoapi/{data/om/biomolecules/geom/sample_geom_drugs => fairchem/core/models/gemnet_gp/utils}/index.html (52%) create mode 100644 autoapi/fairchem/core/models/gemnet_oc/gemnet_oc/index.html rename autoapi/{core/models/gemnet_oc => fairchem/core/models}/gemnet_oc/index.html (51%) create mode 100644 autoapi/fairchem/core/models/gemnet_oc/initializers/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/interaction_indices/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/atom_update_block/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/base_layers/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/basis_utils/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/efficient/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/embedding_block/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/force_scaler/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/interaction_block/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/radial_basis/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/layers/spherical_basis/index.html create mode 100644 autoapi/fairchem/core/models/gemnet_oc/utils/index.html rename autoapi/{core/models/model_registry => fairchem/core/models}/index.html (50%) create mode 100644 autoapi/fairchem/core/models/model_registry/index.html create mode 100644 autoapi/fairchem/core/models/painn/index.html rename autoapi/{ => fairchem}/core/models/painn/painn/index.html (51%) create mode 100644 autoapi/fairchem/core/models/painn/utils/index.html rename autoapi/{core/tests/models/test_escn => fairchem/core/models/schnet}/index.html (54%) create mode 100644 autoapi/fairchem/core/models/scn/index.html create mode 100644 autoapi/fairchem/core/models/scn/sampling/index.html create mode 100644 autoapi/fairchem/core/models/scn/scn/index.html rename autoapi/{core/models/gemnet/layers/base_layers => fairchem/core/models/scn/smearing}/index.html (52%) create mode 100644 autoapi/fairchem/core/models/scn/spherical_harmonics/index.html create mode 100644 autoapi/fairchem/core/models/utils/activations/index.html rename autoapi/{ => fairchem}/core/models/utils/basis/index.html (53%) create mode 100644 autoapi/fairchem/core/models/utils/index.html create mode 100644 autoapi/fairchem/core/modules/evaluator/index.html create mode 100644 autoapi/fairchem/core/modules/exponential_moving_average/index.html create mode 100644 autoapi/fairchem/core/modules/index.html rename autoapi/{core/models/utils/activations => fairchem/core/modules/loss}/index.html (56%) create mode 100644 autoapi/fairchem/core/modules/normalizer/index.html create mode 100644 autoapi/fairchem/core/modules/scaling/compat/index.html create mode 100644 autoapi/fairchem/core/modules/scaling/fit/index.html rename autoapi/{core/models/equiformer_v2/gaussian_rbf => fairchem/core/modules/scaling}/index.html (50%) create mode 100644 autoapi/fairchem/core/modules/scaling/scale_factor/index.html create mode 100644 autoapi/fairchem/core/modules/scaling/util/index.html create mode 100644 autoapi/fairchem/core/modules/scheduler/index.html create mode 100644 autoapi/fairchem/core/modules/transforms/index.html create mode 100644 autoapi/fairchem/core/preprocessing/atoms_to_graphs/index.html rename autoapi/{core/preprocessing/atoms_to_graphs => fairchem/core/preprocessing}/index.html (51%) create mode 100644 autoapi/fairchem/core/scripts/download_data/index.html create mode 100644 autoapi/fairchem/core/scripts/gif_maker_parallelized/index.html create mode 100644 autoapi/fairchem/core/scripts/hpo/index.html create mode 100644 autoapi/fairchem/core/scripts/hpo/run_tune/index.html create mode 100644 autoapi/fairchem/core/scripts/hpo/run_tune_pbt/index.html create mode 100644 autoapi/fairchem/core/scripts/index.html create mode 100644 autoapi/fairchem/core/scripts/make_challenge_submission_file/index.html create mode 100644 autoapi/fairchem/core/scripts/make_lmdb_sizes/index.html create mode 100644 autoapi/fairchem/core/scripts/make_submission_file/index.html rename autoapi/{demo/ocpapi/workflows/log => fairchem/core/scripts/preprocess_ef}/index.html (55%) create mode 100644 autoapi/fairchem/core/scripts/preprocess_relaxed/index.html rename autoapi/{data/oc/experimental/rattle_test => fairchem/core/scripts/uncompress}/index.html (55%) rename autoapi/{core/models/utils => fairchem/core/tasks}/index.html (53%) create mode 100644 autoapi/fairchem/core/tasks/task/index.html create mode 100644 autoapi/fairchem/core/tests/common/test_ase_calculator/index.html create mode 100644 autoapi/fairchem/core/tests/common/test_data_parallel_batch_sampler/index.html create mode 100644 autoapi/fairchem/core/tests/common/test_yaml_loader/index.html create mode 100644 autoapi/fairchem/core/tests/conftest/index.html create mode 100644 autoapi/fairchem/core/tests/datasets/test_ase_datasets/index.html rename autoapi/{data/oc/tests/old_tests/verify_correctness => fairchem/core/tests/datasets/test_ase_lmdb}/index.html (52%) create mode 100644 autoapi/fairchem/core/tests/datasets/test_utils/index.html rename autoapi/{data/om/biomolecules/geom/write_geom_drugs_structures => fairchem/core/tests/evaluator/test_evaluator}/index.html (53%) create mode 100644 autoapi/fairchem/core/tests/index.html create mode 100644 autoapi/fairchem/core/tests/models/test_dimenetpp/index.html create mode 100644 autoapi/fairchem/core/tests/models/test_equiformer_v2/index.html create mode 100644 autoapi/fairchem/core/tests/models/test_escn/index.html create mode 100644 autoapi/fairchem/core/tests/models/test_gemnet/index.html create mode 100644 autoapi/fairchem/core/tests/models/test_gemnet_oc/index.html create mode 100644 autoapi/fairchem/core/tests/models/test_gemnet_oc_scaling_mismatch/index.html create mode 100644 autoapi/fairchem/core/tests/models/test_schnet/index.html rename autoapi/{core/common/relaxation/optimizers => fairchem/core/tests/preprocessing}/index.html (53%) create mode 100644 autoapi/fairchem/core/tests/preprocessing/test_atoms_to_graphs/index.html create mode 100644 autoapi/fairchem/core/tests/preprocessing/test_pbc/index.html create mode 100644 autoapi/fairchem/core/tests/preprocessing/test_radius_graph_pbc/index.html create mode 100644 autoapi/fairchem/core/trainers/base_trainer/index.html rename autoapi/{core/trainers/base_trainer => fairchem/core/trainers}/index.html (52%) create mode 100644 autoapi/fairchem/core/trainers/ocp_trainer/index.html create mode 100644 autoapi/fairchem/data/oc/core/adsorbate/index.html create mode 100644 autoapi/fairchem/data/oc/core/adsorbate_slab_config/index.html create mode 100644 autoapi/fairchem/data/oc/core/bulk/index.html create mode 100644 autoapi/fairchem/data/oc/core/index.html create mode 100644 autoapi/fairchem/data/oc/core/multi_adsorbate_slab_config/index.html create mode 100644 autoapi/fairchem/data/oc/core/slab/index.html create mode 100644 autoapi/fairchem/data/oc/databases/index.html create mode 100644 autoapi/fairchem/data/oc/databases/pkls/index.html create mode 100644 autoapi/fairchem/data/oc/databases/update/index.html create mode 100644 autoapi/fairchem/data/oc/experimental/get_energies/index.html create mode 100644 autoapi/fairchem/data/oc/experimental/merge_traj/index.html create mode 100644 autoapi/fairchem/data/oc/experimental/perturb_systems/index.html create mode 100644 autoapi/fairchem/data/oc/experimental/rattle_test/index.html create mode 100644 autoapi/fairchem/data/oc/experimental/utils/index.html rename autoapi/{core/scripts/hpo => fairchem/data/oc}/index.html (53%) rename autoapi/{applications/AdsorbML/adsorbml/scripts/write_top_k_vasp => fairchem/data/oc/scripts/precompute_sample_structures}/index.html (53%) create mode 100644 autoapi/fairchem/data/oc/structure_generator/index.html create mode 100644 autoapi/fairchem/data/oc/tests/old_tests/check_energy_and_forces/index.html create mode 100644 autoapi/fairchem/data/oc/tests/old_tests/check_inputs/index.html create mode 100644 autoapi/fairchem/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.html create mode 100644 autoapi/fairchem/data/oc/tests/old_tests/verify_correctness/index.html create mode 100644 autoapi/fairchem/data/oc/tests/test_adsorbate/index.html create mode 100644 autoapi/fairchem/data/oc/tests/test_adsorbate_slab_config/index.html create mode 100644 autoapi/fairchem/data/oc/tests/test_bulk/index.html create mode 100644 autoapi/fairchem/data/oc/tests/test_inputs/index.html create mode 100644 autoapi/fairchem/data/oc/tests/test_multi_adsorbate_slab_config/index.html create mode 100644 autoapi/fairchem/data/oc/tests/test_slab/index.html create mode 100644 autoapi/fairchem/data/oc/utils/flag_anomaly/index.html rename autoapi/{data/om/omdata/orca => fairchem/data/oc/utils}/index.html (55%) create mode 100644 autoapi/fairchem/data/oc/utils/vasp/index.html create mode 100644 autoapi/fairchem/data/odac/force_field/FF_analysis/index.html create mode 100644 autoapi/fairchem/data/odac/promising_mof/promising_mof_energies/energy/index.html create mode 100644 autoapi/fairchem/data/om/biomolecules/geom/sample_geom_drugs/index.html create mode 100644 autoapi/fairchem/data/om/biomolecules/geom/write_geom_drugs_structures/index.html create mode 100644 autoapi/fairchem/data/om/omdata/orca/calc/index.html rename autoapi/{demo/ocpapi/tests/unit/client => fairchem/data/om/omdata/orca}/index.html (54%) create mode 100644 autoapi/fairchem/data/om/omdata/orca/recipes/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/client/client/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/client/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/client/models/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/client/ui/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/index.html rename autoapi/{demo/ocpapi/tests/integration => fairchem/demo/ocpapi/tests}/index.html (53%) create mode 100644 autoapi/fairchem/demo/ocpapi/tests/integration/client/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/integration/client/test_client/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/integration/client/test_ui/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/integration/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/integration/workflows/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/client/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/client/test_client/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/client/test_models/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/client/test_ui/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/workflows/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_context/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_filter/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_retry/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/version/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/workflows/adsorbates/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/workflows/context/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/workflows/filter/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/workflows/index.html create mode 100644 autoapi/fairchem/demo/ocpapi/workflows/log/index.html rename autoapi/{demo/ocpapi/tests/integration/client => fairchem/demo/ocpapi/workflows/retry}/index.html (54%) delete mode 100644 reports/core/quickstart.err.log delete mode 100644 reports/tutorials/OCP-introduction.err.log delete mode 100644 reports/tutorials/adsorbml_walkthrough.err.log delete mode 100644 reports/tutorials/advanced/embeddings.err.log delete mode 100644 reports/tutorials/intro.err.log diff --git a/.buildinfo b/.buildinfo index 13847cfde..853cdb2ae 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 75ed34fcfa5d590f4235db7daff07697 +config: ad184163ed18f9ae867121d9a28f54ab tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_downloads/5fdddbed2260616231dbf7b0d94bb665/train.txt b/_downloads/5fdddbed2260616231dbf7b0d94bb665/train.txt new file mode 100644 index 000000000..49ba55daf --- /dev/null +++ b/_downloads/5fdddbed2260616231dbf7b0d94bb665/train.txt @@ -0,0 +1 @@ +python: can't open file '/home/runner/work/fairchem/fairchem/src/fairchem/main.py': [Errno 2] No such file or directory diff --git a/_images/0137774ef0c1e003acde80ee8122325fae1d7b98e150839405d0c583fc558890.png b/_images/0137774ef0c1e003acde80ee8122325fae1d7b98e150839405d0c583fc558890.png new file mode 100644 index 0000000000000000000000000000000000000000..e70df19a51d3c88cedfcbad15d30513c62a9b980 GIT binary patch literal 18100 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 X8G6^GVA^LCeyOQwDQ7Aj_5FVU_4em2 literal 0 HcmV?d00001 diff --git a/_images/140d4a5aab829080d320b5d6fdd6181d9b7dc0330f894982e3e7d5fc1e1c14e2.png b/_images/140d4a5aab829080d320b5d6fdd6181d9b7dc0330f894982e3e7d5fc1e1c14e2.png new file mode 100644 index 0000000000000000000000000000000000000000..ca94a63bb8fb7d8104afb1e1d82bd1a0792925c6 GIT binary patch literal 16263 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 O7(!Z6szgH1_x}T6a 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 O8Rg&szJIxIWb!{7Nd6@N literal 0 HcmV?d00001 diff --git a/_images/1d08a38a81c31a0d2ca3b4e6eb145d62461518cfbd975941604782b92002f649.png b/_images/1d08a38a81c31a0d2ca3b4e6eb145d62461518cfbd975941604782b92002f649.png new file mode 100644 index 0000000000000000000000000000000000000000..7339cde98e8a4178cd679cf749e54cd16f14f9c0 GIT binary patch literal 34905 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 literal 0 HcmV?d00001 diff --git a/_images/43f7b0333a1ebef7c72f09a1a2aef6813e5b46342e1bcd68f000211ae06cef95.png b/_images/43f7b0333a1ebef7c72f09a1a2aef6813e5b46342e1bcd68f000211ae06cef95.png new file mode 100644 index 0000000000000000000000000000000000000000..1e38d1bdf38f87fac4776e2abdab178fb961240b GIT binary patch literal 20803 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 z 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 EzXFfG1ONa4 literal 0 HcmV?d00001 diff --git a/_images/92bd7f94dd548c8cfc2744eb5890cd23fada1ff98e8dc907657e2eb109af0402.png b/_images/92bd7f94dd548c8cfc2744eb5890cd23fada1ff98e8dc907657e2eb109af0402.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe57c00d618fb97d5e21081c5456216a1a93246 GIT binary patch literal 84011 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 literal 0 HcmV?d00001 diff --git a/_images/a48e3424d76817240816a0b914502025691c6a130c88e07728e1797c128651fb.png b/_images/a48e3424d76817240816a0b914502025691c6a130c88e07728e1797c128651fb.png new file mode 100644 index 0000000000000000000000000000000000000000..c168e19eef79faf2b9cf6046c0ed97f4192917e1 GIT binary patch literal 22544 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

cH+wsgL&W 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 bool - - -.. py:function:: target_constant_shape(atoms_lens, target_samples) -> bool - - -.. py:function:: target_per_atom(atoms_lens, target_samples) -> bool - - -.. py:function:: target_extensive(atoms_lens, target_samples, threshold: float = 0.2) - - -.. py:function:: guess_target_metadata(atoms_len, target_samples) - - -.. py:function:: guess_property_metadata(atoms_list) - - diff --git a/_sources/autoapi/core/models/equiformer_v2/edge_rot_mat/index.rst b/_sources/autoapi/core/models/equiformer_v2/edge_rot_mat/index.rst deleted file mode 100644 index 364942232..000000000 --- a/_sources/autoapi/core/models/equiformer_v2/edge_rot_mat/index.rst +++ /dev/null @@ -1,22 +0,0 @@ -:py:mod:`core.models.equiformer_v2.edge_rot_mat` -================================================ - -.. py:module:: core.models.equiformer_v2.edge_rot_mat - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - core.models.equiformer_v2.edge_rot_mat.init_edge_rot_mat - - - -.. py:function:: init_edge_rot_mat(edge_distance_vec) - - diff --git a/_sources/autoapi/core/models/equiformer_v2/trainers/index.rst b/_sources/autoapi/core/models/equiformer_v2/trainers/index.rst deleted file mode 100644 index 563f298e7..000000000 --- a/_sources/autoapi/core/models/equiformer_v2/trainers/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -:py:mod:`core.models.equiformer_v2.trainers` -============================================ - -.. py:module:: core.models.equiformer_v2.trainers - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - energy_trainer/index.rst - forces_trainer/index.rst - lr_scheduler/index.rst - - diff --git a/_sources/autoapi/core/modules/scaling/util/index.rst b/_sources/autoapi/core/modules/scaling/util/index.rst deleted file mode 100644 index d159f79c7..000000000 --- a/_sources/autoapi/core/modules/scaling/util/index.rst +++ /dev/null @@ -1,22 +0,0 @@ -:py:mod:`core.modules.scaling.util` -=================================== - -.. py:module:: core.modules.scaling.util - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - core.modules.scaling.util.ensure_fitted - - - -.. py:function:: ensure_fitted(module: torch.nn.Module, warn: bool = False) -> None - - diff --git a/_sources/autoapi/core/scripts/hpo/run_tune/index.rst b/_sources/autoapi/core/scripts/hpo/run_tune/index.rst deleted file mode 100644 index c14fbfeb0..000000000 --- a/_sources/autoapi/core/scripts/hpo/run_tune/index.rst +++ /dev/null @@ -1,26 +0,0 @@ -:py:mod:`core.scripts.hpo.run_tune` -=================================== - -.. py:module:: core.scripts.hpo.run_tune - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - core.scripts.hpo.run_tune.ocp_trainable - core.scripts.hpo.run_tune.main - - - -.. py:function:: ocp_trainable(config, checkpoint_dir=None) -> None - - -.. py:function:: main() -> None - - diff --git a/_sources/autoapi/core/scripts/hpo/run_tune_pbt/index.rst b/_sources/autoapi/core/scripts/hpo/run_tune_pbt/index.rst deleted file mode 100644 index b2a150e80..000000000 --- a/_sources/autoapi/core/scripts/hpo/run_tune_pbt/index.rst +++ /dev/null @@ -1,26 +0,0 @@ -:py:mod:`core.scripts.hpo.run_tune_pbt` -======================================= - -.. py:module:: core.scripts.hpo.run_tune_pbt - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - core.scripts.hpo.run_tune_pbt.ocp_trainable - core.scripts.hpo.run_tune_pbt.main - - - -.. py:function:: ocp_trainable(config, checkpoint_dir=None) -> None - - -.. py:function:: main() -> None - - diff --git a/_sources/autoapi/core/tests/common/test_data_parallel_batch_sampler/index.rst b/_sources/autoapi/core/tests/common/test_data_parallel_batch_sampler/index.rst deleted file mode 100644 index 3e3b6f608..000000000 --- a/_sources/autoapi/core/tests/common/test_data_parallel_batch_sampler/index.rst +++ /dev/null @@ -1,112 +0,0 @@ -:py:mod:`core.tests.common.test_data_parallel_batch_sampler` -============================================================ - -.. py:module:: core.tests.common.test_data_parallel_batch_sampler - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - core.tests.common.test_data_parallel_batch_sampler._temp_file - core.tests.common.test_data_parallel_batch_sampler.valid_path_dataset - core.tests.common.test_data_parallel_batch_sampler.invalid_path_dataset - core.tests.common.test_data_parallel_batch_sampler.invalid_dataset - core.tests.common.test_data_parallel_batch_sampler.test_lowercase - core.tests.common.test_data_parallel_batch_sampler.test_invalid_mode - core.tests.common.test_data_parallel_batch_sampler.test_invalid_dataset - core.tests.common.test_data_parallel_batch_sampler.test_invalid_path_dataset - core.tests.common.test_data_parallel_batch_sampler.test_valid_dataset - core.tests.common.test_data_parallel_batch_sampler.test_disabled - core.tests.common.test_data_parallel_batch_sampler.test_single_node - core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_noshuffle - core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_vs_distributed_sampler - core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler - core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_numreplicas - core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_numreplicas_drop_last - - - -Attributes -~~~~~~~~~~ - -.. autoapisummary:: - - core.tests.common.test_data_parallel_batch_sampler.DATA - core.tests.common.test_data_parallel_batch_sampler.SIZE_ATOMS - core.tests.common.test_data_parallel_batch_sampler.SIZE_NEIGHBORS - core.tests.common.test_data_parallel_batch_sampler.T_co - - -.. py:data:: DATA - :value: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - - - -.. py:data:: SIZE_ATOMS - :value: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - - - -.. py:data:: SIZE_NEIGHBORS - :value: [4, 4, 4, 4, 4, 4, 4, 4, 4, 4] - - - -.. py:data:: T_co - - - -.. py:function:: _temp_file(name: str) - - -.. py:function:: valid_path_dataset() - - -.. py:function:: invalid_path_dataset() - - -.. py:function:: invalid_dataset() - - -.. py:function:: test_lowercase(invalid_dataset) -> None - - -.. py:function:: test_invalid_mode(invalid_dataset) -> None - - -.. py:function:: test_invalid_dataset(invalid_dataset) -> None - - -.. py:function:: test_invalid_path_dataset(invalid_path_dataset) -> None - - -.. py:function:: test_valid_dataset(valid_path_dataset) -> None - - -.. py:function:: test_disabled(valid_path_dataset) -> None - - -.. py:function:: test_single_node(valid_path_dataset) -> None - - -.. py:function:: test_stateful_distributed_sampler_noshuffle(valid_path_dataset) -> None - - -.. py:function:: test_stateful_distributed_sampler_vs_distributed_sampler(valid_path_dataset) -> None - - -.. py:function:: test_stateful_distributed_sampler(valid_path_dataset) -> None - - -.. py:function:: test_stateful_distributed_sampler_numreplicas(valid_path_dataset) -> None - - -.. py:function:: test_stateful_distributed_sampler_numreplicas_drop_last(valid_path_dataset) -> None - - diff --git a/_sources/autoapi/core/tests/common/test_yaml_loader/index.rst b/_sources/autoapi/core/tests/common/test_yaml_loader/index.rst deleted file mode 100644 index 70eb354b9..000000000 --- a/_sources/autoapi/core/tests/common/test_yaml_loader/index.rst +++ /dev/null @@ -1,34 +0,0 @@ -:py:mod:`core.tests.common.test_yaml_loader` -============================================ - -.. py:module:: core.tests.common.test_yaml_loader - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - core.tests.common.test_yaml_loader.invalid_yaml_config - core.tests.common.test_yaml_loader.valid_yaml_config - core.tests.common.test_yaml_loader.test_invalid_config - core.tests.common.test_yaml_loader.test_valid_config - - - -.. py:function:: invalid_yaml_config() - - -.. py:function:: valid_yaml_config() - - -.. py:function:: test_invalid_config(invalid_yaml_config) - - -.. py:function:: test_valid_config(valid_yaml_config) - - diff --git a/_sources/autoapi/core/tests/datasets/test_ase_datasets/index.rst b/_sources/autoapi/core/tests/datasets/test_ase_datasets/index.rst deleted file mode 100644 index 05ac8824a..000000000 --- a/_sources/autoapi/core/tests/datasets/test_ase_datasets/index.rst +++ /dev/null @@ -1,63 +0,0 @@ -:py:mod:`core.tests.datasets.test_ase_datasets` -=============================================== - -.. py:module:: core.tests.datasets.test_ase_datasets - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - core.tests.datasets.test_ase_datasets.ase_dataset - core.tests.datasets.test_ase_datasets.test_ase_dataset - core.tests.datasets.test_ase_datasets.test_ase_read_dataset - core.tests.datasets.test_ase_datasets.test_ase_metadata_guesser - core.tests.datasets.test_ase_datasets.test_db_add_delete - core.tests.datasets.test_ase_datasets.test_ase_multiread_dataset - core.tests.datasets.test_ase_datasets.test_empty_dataset - - - -Attributes -~~~~~~~~~~ - -.. autoapisummary:: - - core.tests.datasets.test_ase_datasets.structures - core.tests.datasets.test_ase_datasets.calc - - -.. py:data:: structures - - - -.. py:data:: calc - - - -.. py:function:: ase_dataset(request, tmp_path_factory) - - -.. py:function:: test_ase_dataset(ase_dataset) - - -.. py:function:: test_ase_read_dataset(tmp_path) -> None - - -.. py:function:: test_ase_metadata_guesser(ase_dataset) -> None - - -.. py:function:: test_db_add_delete(tmp_path) -> None - - -.. py:function:: test_ase_multiread_dataset(tmp_path) -> None - - -.. py:function:: test_empty_dataset(tmp_path) - - diff --git a/_sources/autoapi/core/tests/datasets/test_ase_lmdb/index.rst b/_sources/autoapi/core/tests/datasets/test_ase_lmdb/index.rst deleted file mode 100644 index 9f3c97814..000000000 --- a/_sources/autoapi/core/tests/datasets/test_ase_lmdb/index.rst +++ /dev/null @@ -1,82 +0,0 @@ -:py:mod:`core.tests.datasets.test_ase_lmdb` -=========================================== - -.. py:module:: core.tests.datasets.test_ase_lmdb - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - core.tests.datasets.test_ase_lmdb.generate_random_structure - core.tests.datasets.test_ase_lmdb.ase_lmbd_path - core.tests.datasets.test_ase_lmdb.test_aselmdb_write - core.tests.datasets.test_ase_lmdb.test_aselmdb_count - core.tests.datasets.test_ase_lmdb.test_aselmdb_delete - core.tests.datasets.test_ase_lmdb.test_aselmdb_randomreads - core.tests.datasets.test_ase_lmdb.test_aselmdb_constraintread - core.tests.datasets.test_ase_lmdb.test_update_keyvalue_pair - core.tests.datasets.test_ase_lmdb.test_update_atoms - core.tests.datasets.test_ase_lmdb.test_metadata - - - -Attributes -~~~~~~~~~~ - -.. autoapisummary:: - - core.tests.datasets.test_ase_lmdb.N_WRITES - core.tests.datasets.test_ase_lmdb.N_READS - core.tests.datasets.test_ase_lmdb.test_structures - - -.. py:data:: N_WRITES - :value: 100 - - - -.. py:data:: N_READS - :value: 200 - - - -.. py:data:: test_structures - - - -.. py:function:: generate_random_structure() - - -.. py:function:: ase_lmbd_path(tmp_path_factory) - - -.. py:function:: test_aselmdb_write(ase_lmbd_path) -> None - - -.. py:function:: test_aselmdb_count(ase_lmbd_path) -> None - - -.. py:function:: test_aselmdb_delete(ase_lmbd_path) -> None - - -.. py:function:: test_aselmdb_randomreads(ase_lmbd_path) -> None - - -.. py:function:: test_aselmdb_constraintread(ase_lmbd_path) -> None - - -.. py:function:: test_update_keyvalue_pair(ase_lmbd_path) -> None - - -.. py:function:: test_update_atoms(ase_lmbd_path) -> None - - -.. py:function:: test_metadata(ase_lmbd_path) -> None - - diff --git a/_sources/autoapi/core/tests/datasets/test_utils/index.rst b/_sources/autoapi/core/tests/datasets/test_utils/index.rst deleted file mode 100644 index ac66a2c6c..000000000 --- a/_sources/autoapi/core/tests/datasets/test_utils/index.rst +++ /dev/null @@ -1,26 +0,0 @@ -:py:mod:`core.tests.datasets.test_utils` -======================================== - -.. py:module:: core.tests.datasets.test_utils - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - core.tests.datasets.test_utils.pyg_data - core.tests.datasets.test_utils.test_rename_data_object_keys - - - -.. py:function:: pyg_data() - - -.. py:function:: test_rename_data_object_keys(pyg_data) - - diff --git a/_sources/autoapi/core/tests/models/test_escn/index.rst b/_sources/autoapi/core/tests/models/test_escn/index.rst deleted file mode 100644 index 0fcd327a5..000000000 --- a/_sources/autoapi/core/tests/models/test_escn/index.rst +++ /dev/null @@ -1,26 +0,0 @@ -:py:mod:`core.tests.models.test_escn` -===================================== - -.. py:module:: core.tests.models.test_escn - - -Module Contents ---------------- - -Classes -~~~~~~~ - -.. autoapisummary:: - - core.tests.models.test_escn.TestMPrimaryLPrimary - - - - -.. py:class:: TestMPrimaryLPrimary - - - .. py:method:: test_mprimary_lprimary_mappings() - - - diff --git a/_sources/autoapi/data/oc/databases/pkls/index.rst b/_sources/autoapi/data/oc/databases/pkls/index.rst deleted file mode 100644 index f0e2a6a9d..000000000 --- a/_sources/autoapi/data/oc/databases/pkls/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -:py:mod:`data.oc.databases.pkls` -================================ - -.. py:module:: data.oc.databases.pkls - - -Package Contents ----------------- - -.. py:data:: BULK_PKL_PATH - - - -.. py:data:: ADSORBATES_PKL_PATH - - - diff --git a/_sources/autoapi/data/oc/experimental/get_energies/index.rst b/_sources/autoapi/data/oc/experimental/get_energies/index.rst deleted file mode 100644 index 0b7d64f02..000000000 --- a/_sources/autoapi/data/oc/experimental/get_energies/index.rst +++ /dev/null @@ -1,39 +0,0 @@ -:py:mod:`data.oc.experimental.get_energies` -=========================================== - -.. py:module:: data.oc.experimental.get_energies - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - data.oc.experimental.get_energies.extract_file - data.oc.experimental.get_energies.process_func - - - -Attributes -~~~~~~~~~~ - -.. autoapisummary:: - - data.oc.experimental.get_energies.input_folder - - -.. py:function:: extract_file(zipname, file_to_unzip, extract_to) - - -.. py:function:: process_func(indices, dirlist, ans) - - -.. py:data:: input_folder - :value: 'temp_download/' - - - diff --git a/_sources/autoapi/data/oc/experimental/rattle_test/index.rst b/_sources/autoapi/data/oc/experimental/rattle_test/index.rst deleted file mode 100644 index 4d837262b..000000000 --- a/_sources/autoapi/data/oc/experimental/rattle_test/index.rst +++ /dev/null @@ -1,25 +0,0 @@ -:py:mod:`data.oc.experimental.rattle_test` -========================================== - -.. py:module:: data.oc.experimental.rattle_test - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - data.oc.experimental.rattle_test.main - - - -.. py:function:: main() - - Checks whether ASE's rattle modifies fixed atoms. - ' - - diff --git a/_sources/autoapi/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.rst b/_sources/autoapi/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.rst deleted file mode 100644 index a22794b04..000000000 --- a/_sources/autoapi/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.rst +++ /dev/null @@ -1,53 +0,0 @@ -:py:mod:`data.oc.tests.old_tests.compare_inputs_and_trajectory` -=============================================================== - -.. py:module:: data.oc.tests.old_tests.compare_inputs_and_trajectory - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - data.oc.tests.old_tests.compare_inputs_and_trajectory.get_starting_structure_from_input_dir - data.oc.tests.old_tests.compare_inputs_and_trajectory.min_diff - data.oc.tests.old_tests.compare_inputs_and_trajectory.compare - data.oc.tests.old_tests.compare_inputs_and_trajectory.read_pkl - data.oc.tests.old_tests.compare_inputs_and_trajectory.create_parser - - - -Attributes -~~~~~~~~~~ - -.. autoapisummary:: - - data.oc.tests.old_tests.compare_inputs_and_trajectory.parser - - -.. py:function:: get_starting_structure_from_input_dir(input_dir) - - -.. py:function:: min_diff(atoms_init, atoms_final) - - Calculate atom wise distances of two atoms object, - taking into account periodic boundary conditions. - - -.. py:function:: compare(args) - - -.. py:function:: read_pkl(fname) - - -.. py:function:: create_parser() - - -.. py:data:: parser - - - diff --git a/_sources/autoapi/data/oc/tests/old_tests/verify_correctness/index.rst b/_sources/autoapi/data/oc/tests/old_tests/verify_correctness/index.rst deleted file mode 100644 index d9b51929b..000000000 --- a/_sources/autoapi/data/oc/tests/old_tests/verify_correctness/index.rst +++ /dev/null @@ -1,42 +0,0 @@ -:py:mod:`data.oc.tests.old_tests.verify_correctness` -==================================================== - -.. py:module:: data.oc.tests.old_tests.verify_correctness - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - data.oc.tests.old_tests.verify_correctness.compare_runs - data.oc.tests.old_tests.verify_correctness.create_parser - data.oc.tests.old_tests.verify_correctness.main - - - -Attributes -~~~~~~~~~~ - -.. autoapisummary:: - - data.oc.tests.old_tests.verify_correctness.parser - - -.. py:function:: compare_runs(path1, path2, reference_type, tol) - - -.. py:function:: create_parser() - - -.. py:function:: main(args) - - -.. py:data:: parser - - - diff --git a/_sources/autoapi/data/om/biomolecules/geom/sample_geom_drugs/index.rst b/_sources/autoapi/data/om/biomolecules/geom/sample_geom_drugs/index.rst deleted file mode 100644 index 5f4233c69..000000000 --- a/_sources/autoapi/data/om/biomolecules/geom/sample_geom_drugs/index.rst +++ /dev/null @@ -1,30 +0,0 @@ -:py:mod:`data.om.biomolecules.geom.sample_geom_drugs` -===================================================== - -.. py:module:: data.om.biomolecules.geom.sample_geom_drugs - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - data.om.biomolecules.geom.sample_geom_drugs.write_pickle - data.om.biomolecules.geom.sample_geom_drugs.parse_args - data.om.biomolecules.geom.sample_geom_drugs.main - - - -.. py:function:: write_pickle(data, path) - - -.. py:function:: parse_args() - - -.. py:function:: main() - - diff --git a/_sources/autoapi/data/om/biomolecules/geom/write_geom_drugs_structures/index.rst b/_sources/autoapi/data/om/biomolecules/geom/write_geom_drugs_structures/index.rst deleted file mode 100644 index 15ca16683..000000000 --- a/_sources/autoapi/data/om/biomolecules/geom/write_geom_drugs_structures/index.rst +++ /dev/null @@ -1,26 +0,0 @@ -:py:mod:`data.om.biomolecules.geom.write_geom_drugs_structures` -=============================================================== - -.. py:module:: data.om.biomolecules.geom.write_geom_drugs_structures - - -Module Contents ---------------- - - -Functions -~~~~~~~~~ - -.. autoapisummary:: - - data.om.biomolecules.geom.write_geom_drugs_structures.parse_args - data.om.biomolecules.geom.write_geom_drugs_structures.main - - - -.. py:function:: parse_args() - - -.. py:function:: main() - - diff --git a/_sources/autoapi/data/om/omdata/orca/index.rst b/_sources/autoapi/data/om/omdata/orca/index.rst deleted file mode 100644 index cf1133587..000000000 --- a/_sources/autoapi/data/om/omdata/orca/index.rst +++ /dev/null @@ -1,16 +0,0 @@ -:py:mod:`data.om.omdata.orca` -============================= - -.. py:module:: data.om.omdata.orca - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - calc/index.rst - recipes/index.rst - - diff --git a/_sources/autoapi/demo/ocpapi/tests/integration/client/index.rst b/_sources/autoapi/demo/ocpapi/tests/integration/client/index.rst deleted file mode 100644 index 758e03851..000000000 --- a/_sources/autoapi/demo/ocpapi/tests/integration/client/index.rst +++ /dev/null @@ -1,16 +0,0 @@ -:py:mod:`demo.ocpapi.tests.integration.client` -============================================== - -.. py:module:: demo.ocpapi.tests.integration.client - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - test_client/index.rst - test_ui/index.rst - - diff --git a/_sources/autoapi/demo/ocpapi/tests/integration/index.rst b/_sources/autoapi/demo/ocpapi/tests/integration/index.rst deleted file mode 100644 index f9d2877ef..000000000 --- a/_sources/autoapi/demo/ocpapi/tests/integration/index.rst +++ /dev/null @@ -1,16 +0,0 @@ -:py:mod:`demo.ocpapi.tests.integration` -======================================= - -.. py:module:: demo.ocpapi.tests.integration - - -Subpackages ------------ -.. toctree:: - :titlesonly: - :maxdepth: 3 - - client/index.rst - workflows/index.rst - - diff --git a/_sources/autoapi/demo/ocpapi/tests/integration/workflows/index.rst b/_sources/autoapi/demo/ocpapi/tests/integration/workflows/index.rst deleted file mode 100644 index e7b09682e..000000000 --- a/_sources/autoapi/demo/ocpapi/tests/integration/workflows/index.rst +++ /dev/null @@ -1,15 +0,0 @@ -:py:mod:`demo.ocpapi.tests.integration.workflows` -================================================= - -.. py:module:: demo.ocpapi.tests.integration.workflows - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - test_adsorbates/index.rst - - diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/client/index.rst b/_sources/autoapi/demo/ocpapi/tests/unit/client/index.rst deleted file mode 100644 index 70e1eb9b3..000000000 --- a/_sources/autoapi/demo/ocpapi/tests/unit/client/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -:py:mod:`demo.ocpapi.tests.unit.client` -======================================= - -.. py:module:: demo.ocpapi.tests.unit.client - - -Submodules ----------- -.. toctree:: - :titlesonly: - :maxdepth: 1 - - test_client/index.rst - test_models/index.rst - test_ui/index.rst - - diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/index.rst b/_sources/autoapi/demo/ocpapi/tests/unit/index.rst deleted file mode 100644 index 5473da0fb..000000000 --- a/_sources/autoapi/demo/ocpapi/tests/unit/index.rst +++ /dev/null @@ -1,16 +0,0 @@ -:py:mod:`demo.ocpapi.tests.unit` -================================ - -.. py:module:: demo.ocpapi.tests.unit - - -Subpackages ------------ -.. toctree:: - :titlesonly: - :maxdepth: 3 - - client/index.rst - workflows/index.rst - - diff --git a/_sources/autoapi/demo/ocpapi/version/index.rst b/_sources/autoapi/demo/ocpapi/version/index.rst deleted file mode 100644 index f4fca04f3..000000000 --- a/_sources/autoapi/demo/ocpapi/version/index.rst +++ /dev/null @@ -1,14 +0,0 @@ -:py:mod:`demo.ocpapi.version` -============================= - -.. py:module:: demo.ocpapi.version - - -Module Contents ---------------- - -.. py:data:: VERSION - :value: '1.0.0' - - - diff --git a/_sources/autoapi/demo/ocpapi/workflows/log/index.rst b/_sources/autoapi/demo/ocpapi/workflows/log/index.rst deleted file mode 100644 index 129151757..000000000 --- a/_sources/autoapi/demo/ocpapi/workflows/log/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -:py:mod:`demo.ocpapi.workflows.log` -=================================== - -.. py:module:: demo.ocpapi.workflows.log - - -Module Contents ---------------- - -.. py:data:: log - - - diff --git a/_sources/autoapi/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.rst b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.rst similarity index 73% rename from _sources/autoapi/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.rst rename to _sources/autoapi/fairchem/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.rst index 1d35c98d1..a1374a53b 100644 --- a/_sources/autoapi/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.rst +++ b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.rst @@ -1,7 +1,7 @@ -:py:mod:`applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval` -============================================================================== +:py:mod:`fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval` +======================================================================================= -.. py:module:: applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval +.. py:module:: fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval Module Contents @@ -13,12 +13,12 @@ Functions .. autoapisummary:: - applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.is_successful - applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.compute_valid_ml_success - applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.get_dft_data - applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.process_ml_data - applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.parse_args - applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.main + fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.is_successful + fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.compute_valid_ml_success + fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.get_dft_data + fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.process_ml_data + fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.parse_args + fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.main diff --git a/_sources/autoapi/applications/AdsorbML/adsorbml/scripts/dense_eval/index.rst b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/dense_eval/index.rst similarity index 85% rename from _sources/autoapi/applications/AdsorbML/adsorbml/scripts/dense_eval/index.rst rename to _sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/dense_eval/index.rst index 505358732..26d1631f6 100644 --- a/_sources/autoapi/applications/AdsorbML/adsorbml/scripts/dense_eval/index.rst +++ b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/dense_eval/index.rst @@ -1,7 +1,7 @@ -:py:mod:`applications.AdsorbML.adsorbml.scripts.dense_eval` -=========================================================== +:py:mod:`fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval` +==================================================================== -.. py:module:: applications.AdsorbML.adsorbml.scripts.dense_eval +.. py:module:: fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval .. autoapi-nested-parse:: @@ -83,12 +83,12 @@ Functions .. autoapisummary:: - applications.AdsorbML.adsorbml.scripts.dense_eval.is_successful - applications.AdsorbML.adsorbml.scripts.dense_eval.compute_hybrid_success - applications.AdsorbML.adsorbml.scripts.dense_eval.compute_valid_ml_success - applications.AdsorbML.adsorbml.scripts.dense_eval.get_dft_data - applications.AdsorbML.adsorbml.scripts.dense_eval.get_dft_compute - applications.AdsorbML.adsorbml.scripts.dense_eval.filter_ml_data + fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.is_successful + fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.compute_hybrid_success + fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.compute_valid_ml_success + fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.get_dft_data + fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.get_dft_compute + fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.filter_ml_data @@ -97,8 +97,8 @@ Attributes .. autoapisummary:: - applications.AdsorbML.adsorbml.scripts.dense_eval.SUCCESS_THRESHOLD - applications.AdsorbML.adsorbml.scripts.dense_eval.parser + fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.SUCCESS_THRESHOLD + fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.parser .. py:data:: SUCCESS_THRESHOLD diff --git a/_sources/autoapi/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.rst b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.rst similarity index 63% rename from _sources/autoapi/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.rst rename to _sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.rst index 479964b7b..ebb3362fb 100644 --- a/_sources/autoapi/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.rst +++ b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.rst @@ -1,7 +1,7 @@ -:py:mod:`applications.AdsorbML.adsorbml.scripts.process_mlrs` -============================================================= +:py:mod:`fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs` +====================================================================== -.. py:module:: applications.AdsorbML.adsorbml.scripts.process_mlrs +.. py:module:: fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs .. autoapi-nested-parse:: @@ -31,9 +31,9 @@ Functions .. autoapisummary:: - applications.AdsorbML.adsorbml.scripts.process_mlrs.parse_args - applications.AdsorbML.adsorbml.scripts.process_mlrs.min_diff - applications.AdsorbML.adsorbml.scripts.process_mlrs.process_mlrs + fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.parse_args + fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.min_diff + fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.process_mlrs @@ -42,9 +42,9 @@ Attributes .. autoapisummary:: - applications.AdsorbML.adsorbml.scripts.process_mlrs.SURFACE_CHANGE_CUTOFF_MULTIPLIER - applications.AdsorbML.adsorbml.scripts.process_mlrs.DESORPTION_CUTOFF_MULTIPLIER - applications.AdsorbML.adsorbml.scripts.process_mlrs.args + fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.SURFACE_CHANGE_CUTOFF_MULTIPLIER + fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.DESORPTION_CUTOFF_MULTIPLIER + fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.args .. py:data:: SURFACE_CHANGE_CUTOFF_MULTIPLIER diff --git a/_sources/autoapi/applications/AdsorbML/adsorbml/scripts/utils/index.rst b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/utils/index.rst similarity index 71% rename from _sources/autoapi/applications/AdsorbML/adsorbml/scripts/utils/index.rst rename to _sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/utils/index.rst index d8e91fa6d..5801f7bbe 100644 --- a/_sources/autoapi/applications/AdsorbML/adsorbml/scripts/utils/index.rst +++ b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`applications.AdsorbML.adsorbml.scripts.utils` -====================================================== +:py:mod:`fairchem.applications.AdsorbML.adsorbml.scripts.utils` +=============================================================== -.. py:module:: applications.AdsorbML.adsorbml.scripts.utils +.. py:module:: fairchem.applications.AdsorbML.adsorbml.scripts.utils Module Contents @@ -13,8 +13,8 @@ Functions .. autoapisummary:: - applications.AdsorbML.adsorbml.scripts.utils.converged_oszicar - applications.AdsorbML.adsorbml.scripts.utils.count_scf + fairchem.applications.AdsorbML.adsorbml.scripts.utils.converged_oszicar + fairchem.applications.AdsorbML.adsorbml.scripts.utils.count_scf diff --git a/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp/index.rst b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp/index.rst new file mode 100644 index 000000000..55c17b46e --- /dev/null +++ b/_sources/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp/index.rst @@ -0,0 +1,17 @@ +:py:mod:`fairchem.applications.AdsorbML.adsorbml.scripts.write_top_k_vasp` +========================================================================== + +.. py:module:: fairchem.applications.AdsorbML.adsorbml.scripts.write_top_k_vasp + + +Module Contents +--------------- + +.. py:data:: VASP_FLAGS + + + +.. py:data:: parser + + + diff --git a/_sources/autoapi/applications/CatTSunami/ocpneb/core/autoframe/index.rst b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/autoframe/index.rst similarity index 93% rename from _sources/autoapi/applications/CatTSunami/ocpneb/core/autoframe/index.rst rename to _sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/autoframe/index.rst index cc3b8a217..2b83468fb 100644 --- a/_sources/autoapi/applications/CatTSunami/ocpneb/core/autoframe/index.rst +++ b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/autoframe/index.rst @@ -1,7 +1,7 @@ -:py:mod:`applications.CatTSunami.ocpneb.core.autoframe` -======================================================= +:py:mod:`fairchem.applications.CatTSunami.ocpneb.core.autoframe` +================================================================ -.. py:module:: applications.CatTSunami.ocpneb.core.autoframe +.. py:module:: fairchem.applications.CatTSunami.ocpneb.core.autoframe .. autoapi-nested-parse:: @@ -18,10 +18,10 @@ Classes .. autoapisummary:: - applications.CatTSunami.ocpneb.core.autoframe.AutoFrame - applications.CatTSunami.ocpneb.core.autoframe.AutoFrameDissociation - applications.CatTSunami.ocpneb.core.autoframe.AutoFrameTransfer - applications.CatTSunami.ocpneb.core.autoframe.AutoFrameDesorption + fairchem.applications.CatTSunami.ocpneb.core.autoframe.AutoFrame + fairchem.applications.CatTSunami.ocpneb.core.autoframe.AutoFrameDissociation + fairchem.applications.CatTSunami.ocpneb.core.autoframe.AutoFrameTransfer + fairchem.applications.CatTSunami.ocpneb.core.autoframe.AutoFrameDesorption @@ -30,18 +30,18 @@ Functions .. autoapisummary:: - applications.CatTSunami.ocpneb.core.autoframe.interpolate_and_correct_frames - applications.CatTSunami.ocpneb.core.autoframe.get_shortest_path - applications.CatTSunami.ocpneb.core.autoframe.traverse_adsorbate_transfer - applications.CatTSunami.ocpneb.core.autoframe.traverse_adsorbate_dissociation - applications.CatTSunami.ocpneb.core.autoframe.traverse_adsorbate_desorption - applications.CatTSunami.ocpneb.core.autoframe.get_product2_idx - applications.CatTSunami.ocpneb.core.autoframe.traverse_adsorbate_general - applications.CatTSunami.ocpneb.core.autoframe.unwrap_atoms - applications.CatTSunami.ocpneb.core.autoframe.interpolate - applications.CatTSunami.ocpneb.core.autoframe.is_edge_list_respected - applications.CatTSunami.ocpneb.core.autoframe.reorder_edge_list - applications.CatTSunami.ocpneb.core.autoframe.is_adsorbate_adsorbed + fairchem.applications.CatTSunami.ocpneb.core.autoframe.interpolate_and_correct_frames + fairchem.applications.CatTSunami.ocpneb.core.autoframe.get_shortest_path + fairchem.applications.CatTSunami.ocpneb.core.autoframe.traverse_adsorbate_transfer + fairchem.applications.CatTSunami.ocpneb.core.autoframe.traverse_adsorbate_dissociation + fairchem.applications.CatTSunami.ocpneb.core.autoframe.traverse_adsorbate_desorption + fairchem.applications.CatTSunami.ocpneb.core.autoframe.get_product2_idx + fairchem.applications.CatTSunami.ocpneb.core.autoframe.traverse_adsorbate_general + fairchem.applications.CatTSunami.ocpneb.core.autoframe.unwrap_atoms + fairchem.applications.CatTSunami.ocpneb.core.autoframe.interpolate + fairchem.applications.CatTSunami.ocpneb.core.autoframe.is_edge_list_respected + fairchem.applications.CatTSunami.ocpneb.core.autoframe.reorder_edge_list + fairchem.applications.CatTSunami.ocpneb.core.autoframe.is_adsorbate_adsorbed diff --git a/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/index.rst b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/index.rst new file mode 100644 index 000000000..f6e77d5f6 --- /dev/null +++ b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/index.rst @@ -0,0 +1,17 @@ +:py:mod:`fairchem.applications.CatTSunami.ocpneb.core` +====================================================== + +.. py:module:: fairchem.applications.CatTSunami.ocpneb.core + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + autoframe/index.rst + ocpneb/index.rst + reaction/index.rst + + diff --git a/_sources/autoapi/applications/CatTSunami/ocpneb/core/ocpneb/index.rst b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/ocpneb/index.rst similarity index 75% rename from _sources/autoapi/applications/CatTSunami/ocpneb/core/ocpneb/index.rst rename to _sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/ocpneb/index.rst index 30d9c3bf2..480e7c668 100644 --- a/_sources/autoapi/applications/CatTSunami/ocpneb/core/ocpneb/index.rst +++ b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/ocpneb/index.rst @@ -1,7 +1,7 @@ -:py:mod:`applications.CatTSunami.ocpneb.core.ocpneb` -==================================================== +:py:mod:`fairchem.applications.CatTSunami.ocpneb.core.ocpneb` +============================================================= -.. py:module:: applications.CatTSunami.ocpneb.core.ocpneb +.. py:module:: fairchem.applications.CatTSunami.ocpneb.core.ocpneb Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - applications.CatTSunami.ocpneb.core.ocpneb.OCPNEB + fairchem.applications.CatTSunami.ocpneb.core.ocpneb.OCPNEB diff --git a/_sources/autoapi/applications/CatTSunami/ocpneb/core/reaction/index.rst b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/reaction/index.rst similarity index 58% rename from _sources/autoapi/applications/CatTSunami/ocpneb/core/reaction/index.rst rename to _sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/reaction/index.rst index 41712a305..2e19e99d0 100644 --- a/_sources/autoapi/applications/CatTSunami/ocpneb/core/reaction/index.rst +++ b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/core/reaction/index.rst @@ -1,7 +1,7 @@ -:py:mod:`applications.CatTSunami.ocpneb.core.reaction` -====================================================== +:py:mod:`fairchem.applications.CatTSunami.ocpneb.core.reaction` +=============================================================== -.. py:module:: applications.CatTSunami.ocpneb.core.reaction +.. py:module:: fairchem.applications.CatTSunami.ocpneb.core.reaction Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - applications.CatTSunami.ocpneb.core.reaction.Reaction + fairchem.applications.CatTSunami.ocpneb.core.reaction.Reaction diff --git a/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/databases/index.rst b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/databases/index.rst new file mode 100644 index 000000000..027a22b0e --- /dev/null +++ b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/databases/index.rst @@ -0,0 +1,21 @@ +:py:mod:`fairchem.applications.CatTSunami.ocpneb.databases` +=========================================================== + +.. py:module:: fairchem.applications.CatTSunami.ocpneb.databases + + +Package Contents +---------------- + +.. py:data:: DISSOCIATION_REACTION_DB_PATH + + + +.. py:data:: DESORPTION_REACTION_DB_PATH + + + +.. py:data:: TRANSFER_REACTION_DB_PATH + + + diff --git a/_sources/autoapi/applications/CatTSunami/ocpneb/run_validation/run_validation/index.rst b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/run_validation/run_validation/index.rst similarity index 79% rename from _sources/autoapi/applications/CatTSunami/ocpneb/run_validation/run_validation/index.rst rename to _sources/autoapi/fairchem/applications/CatTSunami/ocpneb/run_validation/run_validation/index.rst index b1454757c..3f0d5f4dd 100644 --- a/_sources/autoapi/applications/CatTSunami/ocpneb/run_validation/run_validation/index.rst +++ b/_sources/autoapi/fairchem/applications/CatTSunami/ocpneb/run_validation/run_validation/index.rst @@ -1,7 +1,7 @@ -:py:mod:`applications.CatTSunami.ocpneb.run_validation.run_validation` -====================================================================== +:py:mod:`fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation` +=============================================================================== -.. py:module:: applications.CatTSunami.ocpneb.run_validation.run_validation +.. py:module:: fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation .. autoapi-nested-parse:: @@ -19,15 +19,15 @@ Functions .. autoapisummary:: - applications.CatTSunami.ocpneb.run_validation.run_validation.get_results_sp - applications.CatTSunami.ocpneb.run_validation.run_validation.get_results_ml - applications.CatTSunami.ocpneb.run_validation.run_validation.all_converged - applications.CatTSunami.ocpneb.run_validation.run_validation.both_barrierless - applications.CatTSunami.ocpneb.run_validation.run_validation.both_barriered - applications.CatTSunami.ocpneb.run_validation.run_validation.barrierless_converged - applications.CatTSunami.ocpneb.run_validation.run_validation.is_failed_sp - applications.CatTSunami.ocpneb.run_validation.run_validation.parse_neb_info - applications.CatTSunami.ocpneb.run_validation.run_validation.get_single_point + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.get_results_sp + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.get_results_ml + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.all_converged + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.both_barrierless + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.both_barriered + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.barrierless_converged + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.is_failed_sp + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.parse_neb_info + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.get_single_point @@ -36,7 +36,7 @@ Attributes .. autoapisummary:: - applications.CatTSunami.ocpneb.run_validation.run_validation.parser + fairchem.applications.CatTSunami.ocpneb.run_validation.run_validation.parser .. py:function:: get_results_sp(df2: pandas.DataFrame) diff --git a/_sources/autoapi/core/_cli/index.rst b/_sources/autoapi/fairchem/core/_cli/index.rst similarity index 89% rename from _sources/autoapi/core/_cli/index.rst rename to _sources/autoapi/fairchem/core/_cli/index.rst index f3a00224f..f5a57dc50 100644 --- a/_sources/autoapi/core/_cli/index.rst +++ b/_sources/autoapi/fairchem/core/_cli/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core._cli` -=================== +:py:mod:`fairchem.core._cli` +============================ -.. py:module:: core._cli +.. py:module:: fairchem.core._cli .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core._cli.Runner + fairchem.core._cli.Runner @@ -29,7 +29,7 @@ Functions .. autoapisummary:: - core._cli.main + fairchem.core._cli.main diff --git a/_sources/autoapi/core/common/data_parallel/index.rst b/_sources/autoapi/fairchem/core/common/data_parallel/index.rst similarity index 91% rename from _sources/autoapi/core/common/data_parallel/index.rst rename to _sources/autoapi/fairchem/core/common/data_parallel/index.rst index d0d2b201f..14ea5fb18 100644 --- a/_sources/autoapi/core/common/data_parallel/index.rst +++ b/_sources/autoapi/fairchem/core/common/data_parallel/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.data_parallel` -=================================== +:py:mod:`fairchem.core.common.data_parallel` +============================================ -.. py:module:: core.common.data_parallel +.. py:module:: fairchem.core.common.data_parallel .. autoapi-nested-parse:: @@ -20,10 +20,10 @@ Classes .. autoapisummary:: - core.common.data_parallel.OCPCollater - core.common.data_parallel._HasMetadata - core.common.data_parallel.StatefulDistributedSampler - core.common.data_parallel.BalancedBatchSampler + fairchem.core.common.data_parallel.OCPCollater + fairchem.core.common.data_parallel._HasMetadata + fairchem.core.common.data_parallel.StatefulDistributedSampler + fairchem.core.common.data_parallel.BalancedBatchSampler @@ -32,7 +32,7 @@ Functions .. autoapisummary:: - core.common.data_parallel.balanced_partition + fairchem.core.common.data_parallel.balanced_partition diff --git a/_sources/autoapi/core/common/distutils/index.rst b/_sources/autoapi/fairchem/core/common/distutils/index.rst similarity index 62% rename from _sources/autoapi/core/common/distutils/index.rst rename to _sources/autoapi/fairchem/core/common/distutils/index.rst index 271f2e842..1f72945f9 100644 --- a/_sources/autoapi/core/common/distutils/index.rst +++ b/_sources/autoapi/fairchem/core/common/distutils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.distutils` -=============================== +:py:mod:`fairchem.core.common.distutils` +======================================== -.. py:module:: core.common.distutils +.. py:module:: fairchem.core.common.distutils .. autoapi-nested-parse:: @@ -21,18 +21,18 @@ Functions .. autoapisummary:: - core.common.distutils.os_environ_get_or_throw - core.common.distutils.setup - core.common.distutils.cleanup - core.common.distutils.initialized - core.common.distutils.get_rank - core.common.distutils.get_world_size - core.common.distutils.is_master - core.common.distutils.synchronize - core.common.distutils.broadcast - core.common.distutils.all_reduce - core.common.distutils.all_gather - core.common.distutils.gather_objects + fairchem.core.common.distutils.os_environ_get_or_throw + fairchem.core.common.distutils.setup + fairchem.core.common.distutils.cleanup + fairchem.core.common.distutils.initialized + fairchem.core.common.distutils.get_rank + fairchem.core.common.distutils.get_world_size + fairchem.core.common.distutils.is_master + fairchem.core.common.distutils.synchronize + fairchem.core.common.distutils.broadcast + fairchem.core.common.distutils.all_reduce + fairchem.core.common.distutils.all_gather + fairchem.core.common.distutils.gather_objects @@ -41,7 +41,7 @@ Attributes .. autoapisummary:: - core.common.distutils.T + fairchem.core.common.distutils.T .. py:data:: T diff --git a/_sources/autoapi/core/common/flags/index.rst b/_sources/autoapi/fairchem/core/common/flags/index.rst similarity index 71% rename from _sources/autoapi/core/common/flags/index.rst rename to _sources/autoapi/fairchem/core/common/flags/index.rst index b0c123919..c1cc09f54 100644 --- a/_sources/autoapi/core/common/flags/index.rst +++ b/_sources/autoapi/fairchem/core/common/flags/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.flags` -=========================== +:py:mod:`fairchem.core.common.flags` +==================================== -.. py:module:: core.common.flags +.. py:module:: fairchem.core.common.flags .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.common.flags.Flags + fairchem.core.common.flags.Flags @@ -30,7 +30,7 @@ Attributes .. autoapisummary:: - core.common.flags.flags + fairchem.core.common.flags.flags .. py:class:: Flags diff --git a/_sources/autoapi/core/common/gp_utils/index.rst b/_sources/autoapi/fairchem/core/common/gp_utils/index.rst similarity index 92% rename from _sources/autoapi/core/common/gp_utils/index.rst rename to _sources/autoapi/fairchem/core/common/gp_utils/index.rst index 342636b59..5f50daf10 100644 --- a/_sources/autoapi/core/common/gp_utils/index.rst +++ b/_sources/autoapi/fairchem/core/common/gp_utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.gp_utils` -============================== +:py:mod:`fairchem.core.common.gp_utils` +======================================= -.. py:module:: core.common.gp_utils +.. py:module:: fairchem.core.common.gp_utils .. autoapi-nested-parse:: @@ -20,10 +20,10 @@ Classes .. autoapisummary:: - core.common.gp_utils.CopyToModelParallelRegion - core.common.gp_utils.ReduceFromModelParallelRegion - core.common.gp_utils.ScatterToModelParallelRegion - core.common.gp_utils.GatherFromModelParallelRegion + fairchem.core.common.gp_utils.CopyToModelParallelRegion + fairchem.core.common.gp_utils.ReduceFromModelParallelRegion + fairchem.core.common.gp_utils.ScatterToModelParallelRegion + fairchem.core.common.gp_utils.GatherFromModelParallelRegion @@ -32,28 +32,28 @@ Functions .. autoapisummary:: - core.common.gp_utils.ensure_div - core.common.gp_utils.divide_and_check_no_remainder - core.common.gp_utils.setup_gp - core.common.gp_utils.cleanup_gp - core.common.gp_utils.initialized - core.common.gp_utils.get_dp_group - core.common.gp_utils.get_gp_group - core.common.gp_utils.get_dp_rank - core.common.gp_utils.get_gp_rank - core.common.gp_utils.get_dp_world_size - core.common.gp_utils.get_gp_world_size - core.common.gp_utils.pad_tensor - core.common.gp_utils.trim_tensor - core.common.gp_utils._split_tensor - core.common.gp_utils._reduce - core.common.gp_utils._split - core.common.gp_utils._gather - core.common.gp_utils._gather_with_padding - core.common.gp_utils.copy_to_model_parallel_region - core.common.gp_utils.reduce_from_model_parallel_region - core.common.gp_utils.scatter_to_model_parallel_region - core.common.gp_utils.gather_from_model_parallel_region + fairchem.core.common.gp_utils.ensure_div + fairchem.core.common.gp_utils.divide_and_check_no_remainder + fairchem.core.common.gp_utils.setup_gp + fairchem.core.common.gp_utils.cleanup_gp + fairchem.core.common.gp_utils.initialized + fairchem.core.common.gp_utils.get_dp_group + fairchem.core.common.gp_utils.get_gp_group + fairchem.core.common.gp_utils.get_dp_rank + fairchem.core.common.gp_utils.get_gp_rank + fairchem.core.common.gp_utils.get_dp_world_size + fairchem.core.common.gp_utils.get_gp_world_size + fairchem.core.common.gp_utils.pad_tensor + fairchem.core.common.gp_utils.trim_tensor + fairchem.core.common.gp_utils._split_tensor + fairchem.core.common.gp_utils._reduce + fairchem.core.common.gp_utils._split + fairchem.core.common.gp_utils._gather + fairchem.core.common.gp_utils._gather_with_padding + fairchem.core.common.gp_utils.copy_to_model_parallel_region + fairchem.core.common.gp_utils.reduce_from_model_parallel_region + fairchem.core.common.gp_utils.scatter_to_model_parallel_region + fairchem.core.common.gp_utils.gather_from_model_parallel_region @@ -62,8 +62,8 @@ Attributes .. autoapisummary:: - core.common.gp_utils._GRAPH_PARALLEL_GROUP - core.common.gp_utils._DATA_PARALLEL_GROUP + fairchem.core.common.gp_utils._GRAPH_PARALLEL_GROUP + fairchem.core.common.gp_utils._DATA_PARALLEL_GROUP .. py:data:: _GRAPH_PARALLEL_GROUP diff --git a/_sources/autoapi/core/common/hpo_utils/index.rst b/_sources/autoapi/fairchem/core/common/hpo_utils/index.rst similarity index 83% rename from _sources/autoapi/core/common/hpo_utils/index.rst rename to _sources/autoapi/fairchem/core/common/hpo_utils/index.rst index 50b5178b7..534cd87da 100644 --- a/_sources/autoapi/core/common/hpo_utils/index.rst +++ b/_sources/autoapi/fairchem/core/common/hpo_utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.hpo_utils` -=============================== +:py:mod:`fairchem.core.common.hpo_utils` +======================================== -.. py:module:: core.common.hpo_utils +.. py:module:: fairchem.core.common.hpo_utils .. autoapi-nested-parse:: @@ -21,8 +21,8 @@ Functions .. autoapisummary:: - core.common.hpo_utils.tune_reporter - core.common.hpo_utils.label_metric_dict + fairchem.core.common.hpo_utils.tune_reporter + fairchem.core.common.hpo_utils.label_metric_dict diff --git a/_sources/autoapi/core/common/index.rst b/_sources/autoapi/fairchem/core/common/index.rst similarity index 86% rename from _sources/autoapi/core/common/index.rst rename to _sources/autoapi/fairchem/core/common/index.rst index 412aa24f0..37ade38b6 100644 --- a/_sources/autoapi/core/common/index.rst +++ b/_sources/autoapi/fairchem/core/common/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common` -===================== +:py:mod:`fairchem.core.common` +============================== -.. py:module:: core.common +.. py:module:: fairchem.core.common .. autoapi-nested-parse:: diff --git a/_sources/autoapi/core/common/logger/index.rst b/_sources/autoapi/fairchem/core/common/logger/index.rst similarity index 86% rename from _sources/autoapi/core/common/logger/index.rst rename to _sources/autoapi/fairchem/core/common/logger/index.rst index 5beb6e62f..fa5b56ede 100644 --- a/_sources/autoapi/core/common/logger/index.rst +++ b/_sources/autoapi/fairchem/core/common/logger/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.logger` -============================ +:py:mod:`fairchem.core.common.logger` +===================================== -.. py:module:: core.common.logger +.. py:module:: fairchem.core.common.logger .. autoapi-nested-parse:: @@ -20,9 +20,9 @@ Classes .. autoapisummary:: - core.common.logger.Logger - core.common.logger.WandBLogger - core.common.logger.TensorboardLogger + fairchem.core.common.logger.Logger + fairchem.core.common.logger.WandBLogger + fairchem.core.common.logger.TensorboardLogger diff --git a/_sources/autoapi/core/common/registry/index.rst b/_sources/autoapi/fairchem/core/common/registry/index.rst similarity index 93% rename from _sources/autoapi/core/common/registry/index.rst rename to _sources/autoapi/fairchem/core/common/registry/index.rst index e926f05d1..b998f7ac6 100644 --- a/_sources/autoapi/core/common/registry/index.rst +++ b/_sources/autoapi/fairchem/core/common/registry/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.registry` -============================== +:py:mod:`fairchem.core.common.registry` +======================================= -.. py:module:: core.common.registry +.. py:module:: fairchem.core.common.registry .. autoapi-nested-parse:: @@ -36,7 +36,7 @@ Classes .. autoapisummary:: - core.common.registry.Registry + fairchem.core.common.registry.Registry @@ -45,7 +45,7 @@ Functions .. autoapisummary:: - core.common.registry._get_absolute_mapping + fairchem.core.common.registry._get_absolute_mapping @@ -54,9 +54,9 @@ Attributes .. autoapisummary:: - core.common.registry.R - core.common.registry.NestedDict - core.common.registry.registry + fairchem.core.common.registry.R + fairchem.core.common.registry.NestedDict + fairchem.core.common.registry.registry .. py:data:: R diff --git a/_sources/autoapi/core/common/relaxation/ase_utils/index.rst b/_sources/autoapi/fairchem/core/common/relaxation/ase_utils/index.rst similarity index 91% rename from _sources/autoapi/core/common/relaxation/ase_utils/index.rst rename to _sources/autoapi/fairchem/core/common/relaxation/ase_utils/index.rst index 31ed7d88a..daa30b637 100644 --- a/_sources/autoapi/core/common/relaxation/ase_utils/index.rst +++ b/_sources/autoapi/fairchem/core/common/relaxation/ase_utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.relaxation.ase_utils` -========================================== +:py:mod:`fairchem.core.common.relaxation.ase_utils` +=================================================== -.. py:module:: core.common.relaxation.ase_utils +.. py:module:: fairchem.core.common.relaxation.ase_utils .. autoapi-nested-parse:: @@ -25,7 +25,7 @@ Classes .. autoapisummary:: - core.common.relaxation.ase_utils.OCPCalculator + fairchem.core.common.relaxation.ase_utils.OCPCalculator @@ -34,7 +34,7 @@ Functions .. autoapisummary:: - core.common.relaxation.ase_utils.batch_to_atoms + fairchem.core.common.relaxation.ase_utils.batch_to_atoms diff --git a/_sources/autoapi/core/common/relaxation/index.rst b/_sources/autoapi/fairchem/core/common/relaxation/index.rst similarity index 62% rename from _sources/autoapi/core/common/relaxation/index.rst rename to _sources/autoapi/fairchem/core/common/relaxation/index.rst index 467dcf222..5fe59d0af 100644 --- a/_sources/autoapi/core/common/relaxation/index.rst +++ b/_sources/autoapi/fairchem/core/common/relaxation/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.relaxation` -================================ +:py:mod:`fairchem.core.common.relaxation` +========================================= -.. py:module:: core.common.relaxation +.. py:module:: fairchem.core.common.relaxation Subpackages diff --git a/_sources/autoapi/core/common/relaxation/ml_relaxation/index.rst b/_sources/autoapi/fairchem/core/common/relaxation/ml_relaxation/index.rst similarity index 81% rename from _sources/autoapi/core/common/relaxation/ml_relaxation/index.rst rename to _sources/autoapi/fairchem/core/common/relaxation/ml_relaxation/index.rst index bde58704f..de9b4350b 100644 --- a/_sources/autoapi/core/common/relaxation/ml_relaxation/index.rst +++ b/_sources/autoapi/fairchem/core/common/relaxation/ml_relaxation/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.relaxation.ml_relaxation` -============================================== +:py:mod:`fairchem.core.common.relaxation.ml_relaxation` +======================================================= -.. py:module:: core.common.relaxation.ml_relaxation +.. py:module:: fairchem.core.common.relaxation.ml_relaxation .. autoapi-nested-parse:: @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - core.common.relaxation.ml_relaxation.ml_relax + fairchem.core.common.relaxation.ml_relaxation.ml_relax diff --git a/_sources/autoapi/fairchem/core/common/relaxation/optimizers/index.rst b/_sources/autoapi/fairchem/core/common/relaxation/optimizers/index.rst new file mode 100644 index 000000000..fe1b79cc7 --- /dev/null +++ b/_sources/autoapi/fairchem/core/common/relaxation/optimizers/index.rst @@ -0,0 +1,15 @@ +:py:mod:`fairchem.core.common.relaxation.optimizers` +==================================================== + +.. py:module:: fairchem.core.common.relaxation.optimizers + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + lbfgs_torch/index.rst + + diff --git a/_sources/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.rst b/_sources/autoapi/fairchem/core/common/relaxation/optimizers/lbfgs_torch/index.rst similarity index 78% rename from _sources/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.rst rename to _sources/autoapi/fairchem/core/common/relaxation/optimizers/lbfgs_torch/index.rst index c8606dd66..1d70b89b3 100644 --- a/_sources/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.rst +++ b/_sources/autoapi/fairchem/core/common/relaxation/optimizers/lbfgs_torch/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.relaxation.optimizers.lbfgs_torch` -======================================================= +:py:mod:`fairchem.core.common.relaxation.optimizers.lbfgs_torch` +================================================================ -.. py:module:: core.common.relaxation.optimizers.lbfgs_torch +.. py:module:: fairchem.core.common.relaxation.optimizers.lbfgs_torch .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.common.relaxation.optimizers.lbfgs_torch.LBFGS - core.common.relaxation.optimizers.lbfgs_torch.TorchCalc + fairchem.core.common.relaxation.optimizers.lbfgs_torch.LBFGS + fairchem.core.common.relaxation.optimizers.lbfgs_torch.TorchCalc diff --git a/_sources/autoapi/core/common/transforms/index.rst b/_sources/autoapi/fairchem/core/common/transforms/index.rst similarity index 83% rename from _sources/autoapi/core/common/transforms/index.rst rename to _sources/autoapi/fairchem/core/common/transforms/index.rst index 432b4868a..e99ece550 100644 --- a/_sources/autoapi/core/common/transforms/index.rst +++ b/_sources/autoapi/fairchem/core/common/transforms/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.transforms` -================================ +:py:mod:`fairchem.core.common.transforms` +========================================= -.. py:module:: core.common.transforms +.. py:module:: fairchem.core.common.transforms .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.common.transforms.RandomRotate + fairchem.core.common.transforms.RandomRotate diff --git a/_sources/autoapi/core/common/tutorial_utils/index.rst b/_sources/autoapi/fairchem/core/common/tutorial_utils/index.rst similarity index 76% rename from _sources/autoapi/core/common/tutorial_utils/index.rst rename to _sources/autoapi/fairchem/core/common/tutorial_utils/index.rst index 666d15069..4c744a1df 100644 --- a/_sources/autoapi/core/common/tutorial_utils/index.rst +++ b/_sources/autoapi/fairchem/core/common/tutorial_utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.tutorial_utils` -==================================== +:py:mod:`fairchem.core.common.tutorial_utils` +============================================= -.. py:module:: core.common.tutorial_utils +.. py:module:: fairchem.core.common.tutorial_utils Module Contents @@ -13,11 +13,11 @@ Functions .. autoapisummary:: - core.common.tutorial_utils.ocp_root - core.common.tutorial_utils.ocp_main - core.common.tutorial_utils.describe_ocp - core.common.tutorial_utils.train_test_val_split - core.common.tutorial_utils.generate_yml_config + fairchem.core.common.tutorial_utils.ocp_root + fairchem.core.common.tutorial_utils.ocp_main + fairchem.core.common.tutorial_utils.describe_ocp + fairchem.core.common.tutorial_utils.train_test_val_split + fairchem.core.common.tutorial_utils.generate_yml_config diff --git a/_sources/autoapi/core/common/typing/index.rst b/_sources/autoapi/fairchem/core/common/typing/index.rst similarity index 54% rename from _sources/autoapi/core/common/typing/index.rst rename to _sources/autoapi/fairchem/core/common/typing/index.rst index 1b9a4a5cc..ad85b2489 100644 --- a/_sources/autoapi/core/common/typing/index.rst +++ b/_sources/autoapi/fairchem/core/common/typing/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.typing` -============================ +:py:mod:`fairchem.core.common.typing` +===================================== -.. py:module:: core.common.typing +.. py:module:: fairchem.core.common.typing Module Contents @@ -13,8 +13,8 @@ Functions .. autoapisummary:: - core.common.typing.assert_is_instance - core.common.typing.none_throws + fairchem.core.common.typing.assert_is_instance + fairchem.core.common.typing.none_throws @@ -23,7 +23,7 @@ Attributes .. autoapisummary:: - core.common.typing._T + fairchem.core.common.typing._T .. py:data:: _T diff --git a/_sources/autoapi/core/common/utils/index.rst b/_sources/autoapi/fairchem/core/common/utils/index.rst similarity index 78% rename from _sources/autoapi/core/common/utils/index.rst rename to _sources/autoapi/fairchem/core/common/utils/index.rst index 629dfcda4..e2f623143 100644 --- a/_sources/autoapi/core/common/utils/index.rst +++ b/_sources/autoapi/fairchem/core/common/utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.common.utils` -=========================== +:py:mod:`fairchem.core.common.utils` +==================================== -.. py:module:: core.common.utils +.. py:module:: fairchem.core.common.utils .. autoapi-nested-parse:: @@ -20,9 +20,9 @@ Classes .. autoapisummary:: - core.common.utils.UniqueKeyLoader - core.common.utils.Complete - core.common.utils.SeverityLevelBetween + fairchem.core.common.utils.UniqueKeyLoader + fairchem.core.common.utils.Complete + fairchem.core.common.utils.SeverityLevelBetween @@ -31,43 +31,43 @@ Functions .. autoapisummary:: - core.common.utils.pyg2_data_transform - core.common.utils.save_checkpoint - core.common.utils.warmup_lr_lambda - core.common.utils.print_cuda_usage - core.common.utils.conditional_grad - core.common.utils.plot_histogram - core.common.utils.collate - core.common.utils.add_edge_distance_to_graph - core.common.utils._import_local_file - core.common.utils.setup_experimental_imports - core.common.utils._get_project_root - core.common.utils.setup_imports - core.common.utils.dict_set_recursively - core.common.utils.parse_value - core.common.utils.create_dict_from_args - core.common.utils.load_config - core.common.utils.build_config - core.common.utils.create_grid - core.common.utils.save_experiment_log - core.common.utils.get_pbc_distances - core.common.utils.radius_graph_pbc - core.common.utils.get_max_neighbors_mask - core.common.utils.get_pruned_edge_idx - core.common.utils.merge_dicts - core.common.utils.setup_logging - core.common.utils.compute_neighbors - core.common.utils.check_traj_files - core.common.utils.new_trainer_context - core.common.utils._resolve_scale_factor_submodule - core.common.utils._report_incompat_keys - core.common.utils.load_state_dict - core.common.utils.scatter_det - core.common.utils.get_commit_hash - core.common.utils.cg_change_mat - core.common.utils.irreps_sum - core.common.utils.update_config - core.common.utils.get_loss_module + fairchem.core.common.utils.pyg2_data_transform + fairchem.core.common.utils.save_checkpoint + fairchem.core.common.utils.warmup_lr_lambda + fairchem.core.common.utils.print_cuda_usage + fairchem.core.common.utils.conditional_grad + fairchem.core.common.utils.plot_histogram + fairchem.core.common.utils.collate + fairchem.core.common.utils.add_edge_distance_to_graph + fairchem.core.common.utils._import_local_file + fairchem.core.common.utils.setup_experimental_imports + fairchem.core.common.utils._get_project_root + fairchem.core.common.utils.setup_imports + fairchem.core.common.utils.dict_set_recursively + fairchem.core.common.utils.parse_value + fairchem.core.common.utils.create_dict_from_args + fairchem.core.common.utils.load_config + fairchem.core.common.utils.build_config + fairchem.core.common.utils.create_grid + fairchem.core.common.utils.save_experiment_log + fairchem.core.common.utils.get_pbc_distances + fairchem.core.common.utils.radius_graph_pbc + fairchem.core.common.utils.get_max_neighbors_mask + fairchem.core.common.utils.get_pruned_edge_idx + fairchem.core.common.utils.merge_dicts + fairchem.core.common.utils.setup_logging + fairchem.core.common.utils.compute_neighbors + fairchem.core.common.utils.check_traj_files + fairchem.core.common.utils.new_trainer_context + fairchem.core.common.utils._resolve_scale_factor_submodule + fairchem.core.common.utils._report_incompat_keys + fairchem.core.common.utils.load_state_dict + fairchem.core.common.utils.scatter_det + fairchem.core.common.utils.get_commit_hash + fairchem.core.common.utils.cg_change_mat + fairchem.core.common.utils.irreps_sum + fairchem.core.common.utils.update_config + fairchem.core.common.utils.get_loss_module diff --git a/_sources/autoapi/core/datasets/_utils/index.rst b/_sources/autoapi/fairchem/core/datasets/_utils/index.rst similarity index 76% rename from _sources/autoapi/core/datasets/_utils/index.rst rename to _sources/autoapi/fairchem/core/datasets/_utils/index.rst index d01a3c880..414ac1b76 100644 --- a/_sources/autoapi/core/datasets/_utils/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/_utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets._utils` -============================== +:py:mod:`fairchem.core.datasets._utils` +======================================= -.. py:module:: core.datasets._utils +.. py:module:: fairchem.core.datasets._utils .. autoapi-nested-parse:: @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - core.datasets._utils.rename_data_object_keys + fairchem.core.datasets._utils.rename_data_object_keys diff --git a/_sources/autoapi/core/datasets/ase_datasets/index.rst b/_sources/autoapi/fairchem/core/datasets/ase_datasets/index.rst similarity index 96% rename from _sources/autoapi/core/datasets/ase_datasets/index.rst rename to _sources/autoapi/fairchem/core/datasets/ase_datasets/index.rst index 2e7b438a4..3985790af 100644 --- a/_sources/autoapi/core/datasets/ase_datasets/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/ase_datasets/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets.ase_datasets` -==================================== +:py:mod:`fairchem.core.datasets.ase_datasets` +============================================= -.. py:module:: core.datasets.ase_datasets +.. py:module:: fairchem.core.datasets.ase_datasets .. autoapi-nested-parse:: @@ -20,10 +20,10 @@ Classes .. autoapisummary:: - core.datasets.ase_datasets.AseAtomsDataset - core.datasets.ase_datasets.AseReadDataset - core.datasets.ase_datasets.AseReadMultiStructureDataset - core.datasets.ase_datasets.AseDBDataset + fairchem.core.datasets.ase_datasets.AseAtomsDataset + fairchem.core.datasets.ase_datasets.AseReadDataset + fairchem.core.datasets.ase_datasets.AseReadMultiStructureDataset + fairchem.core.datasets.ase_datasets.AseDBDataset @@ -32,7 +32,7 @@ Functions .. autoapisummary:: - core.datasets.ase_datasets.apply_one_tags + fairchem.core.datasets.ase_datasets.apply_one_tags diff --git a/_sources/autoapi/fairchem/core/datasets/embeddings/atomic_radii/index.rst b/_sources/autoapi/fairchem/core/datasets/embeddings/atomic_radii/index.rst new file mode 100644 index 000000000..db8a19cbb --- /dev/null +++ b/_sources/autoapi/fairchem/core/datasets/embeddings/atomic_radii/index.rst @@ -0,0 +1,20 @@ +:py:mod:`fairchem.core.datasets.embeddings.atomic_radii` +======================================================== + +.. py:module:: fairchem.core.datasets.embeddings.atomic_radii + +.. autoapi-nested-parse:: + + Atomic radii in picometers + + NaN stored for unavailable parameters. + + + +Module Contents +--------------- + +.. py:data:: ATOMIC_RADII + + + diff --git a/_sources/autoapi/core/datasets/embeddings/continuous_embeddings/index.rst b/_sources/autoapi/fairchem/core/datasets/embeddings/continuous_embeddings/index.rst similarity index 68% rename from _sources/autoapi/core/datasets/embeddings/continuous_embeddings/index.rst rename to _sources/autoapi/fairchem/core/datasets/embeddings/continuous_embeddings/index.rst index 09fbe260a..acec8a51a 100644 --- a/_sources/autoapi/core/datasets/embeddings/continuous_embeddings/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/embeddings/continuous_embeddings/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets.embeddings.continuous_embeddings` -======================================================== +:py:mod:`fairchem.core.datasets.embeddings.continuous_embeddings` +================================================================= -.. py:module:: core.datasets.embeddings.continuous_embeddings +.. py:module:: fairchem.core.datasets.embeddings.continuous_embeddings .. autoapi-nested-parse:: diff --git a/_sources/autoapi/core/datasets/embeddings/index.rst b/_sources/autoapi/fairchem/core/datasets/embeddings/index.rst similarity index 73% rename from _sources/autoapi/core/datasets/embeddings/index.rst rename to _sources/autoapi/fairchem/core/datasets/embeddings/index.rst index 60d6b3877..ddb829125 100644 --- a/_sources/autoapi/core/datasets/embeddings/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/embeddings/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets.embeddings` -================================== +:py:mod:`fairchem.core.datasets.embeddings` +=========================================== -.. py:module:: core.datasets.embeddings +.. py:module:: fairchem.core.datasets.embeddings Submodules diff --git a/_sources/autoapi/core/datasets/embeddings/khot_embeddings/index.rst b/_sources/autoapi/fairchem/core/datasets/embeddings/khot_embeddings/index.rst similarity index 63% rename from _sources/autoapi/core/datasets/embeddings/khot_embeddings/index.rst rename to _sources/autoapi/fairchem/core/datasets/embeddings/khot_embeddings/index.rst index fb5181d46..123b707ad 100644 --- a/_sources/autoapi/core/datasets/embeddings/khot_embeddings/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/embeddings/khot_embeddings/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets.embeddings.khot_embeddings` -================================================== +:py:mod:`fairchem.core.datasets.embeddings.khot_embeddings` +=========================================================== -.. py:module:: core.datasets.embeddings.khot_embeddings +.. py:module:: fairchem.core.datasets.embeddings.khot_embeddings .. autoapi-nested-parse:: diff --git a/_sources/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.rst b/_sources/autoapi/fairchem/core/datasets/embeddings/qmof_khot_embeddings/index.rst similarity index 69% rename from _sources/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.rst rename to _sources/autoapi/fairchem/core/datasets/embeddings/qmof_khot_embeddings/index.rst index 0ce017258..37b8c99c0 100644 --- a/_sources/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/embeddings/qmof_khot_embeddings/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets.embeddings.qmof_khot_embeddings` -======================================================= +:py:mod:`fairchem.core.datasets.embeddings.qmof_khot_embeddings` +================================================================ -.. py:module:: core.datasets.embeddings.qmof_khot_embeddings +.. py:module:: fairchem.core.datasets.embeddings.qmof_khot_embeddings .. autoapi-nested-parse:: diff --git a/_sources/autoapi/core/datasets/index.rst b/_sources/autoapi/fairchem/core/datasets/index.rst similarity index 97% rename from _sources/autoapi/core/datasets/index.rst rename to _sources/autoapi/fairchem/core/datasets/index.rst index 02ebbf156..4d47947ed 100644 --- a/_sources/autoapi/core/datasets/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets` -======================= +:py:mod:`fairchem.core.datasets` +================================ -.. py:module:: core.datasets +.. py:module:: fairchem.core.datasets Subpackages @@ -35,14 +35,14 @@ Classes .. autoapisummary:: - core.datasets.AseDBDataset - core.datasets.AseReadDataset - core.datasets.AseReadMultiStructureDataset - core.datasets.LMDBDatabase - core.datasets.LmdbDataset - core.datasets.SinglePointLmdbDataset - core.datasets.TrajectoryLmdbDataset - core.datasets.OC22LmdbDataset + fairchem.core.datasets.AseDBDataset + fairchem.core.datasets.AseReadDataset + fairchem.core.datasets.AseReadMultiStructureDataset + fairchem.core.datasets.LMDBDatabase + fairchem.core.datasets.LmdbDataset + fairchem.core.datasets.SinglePointLmdbDataset + fairchem.core.datasets.TrajectoryLmdbDataset + fairchem.core.datasets.OC22LmdbDataset @@ -51,7 +51,7 @@ Functions .. autoapisummary:: - core.datasets.data_list_collater + fairchem.core.datasets.data_list_collater diff --git a/_sources/autoapi/core/datasets/lmdb_database/index.rst b/_sources/autoapi/fairchem/core/datasets/lmdb_database/index.rst similarity index 90% rename from _sources/autoapi/core/datasets/lmdb_database/index.rst rename to _sources/autoapi/fairchem/core/datasets/lmdb_database/index.rst index 141122c97..1def5ab2e 100644 --- a/_sources/autoapi/core/datasets/lmdb_database/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/lmdb_database/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets.lmdb_database` -===================================== +:py:mod:`fairchem.core.datasets.lmdb_database` +============================================== -.. py:module:: core.datasets.lmdb_database +.. py:module:: fairchem.core.datasets.lmdb_database .. autoapi-nested-parse:: @@ -23,7 +23,7 @@ Classes .. autoapisummary:: - core.datasets.lmdb_database.LMDBDatabase + fairchem.core.datasets.lmdb_database.LMDBDatabase @@ -33,7 +33,7 @@ Attributes .. autoapisummary:: - core.datasets.lmdb_database.RESERVED_KEYS + fairchem.core.datasets.lmdb_database.RESERVED_KEYS .. py:data:: RESERVED_KEYS diff --git a/_sources/autoapi/core/datasets/lmdb_dataset/index.rst b/_sources/autoapi/fairchem/core/datasets/lmdb_dataset/index.rst similarity index 91% rename from _sources/autoapi/core/datasets/lmdb_dataset/index.rst rename to _sources/autoapi/fairchem/core/datasets/lmdb_dataset/index.rst index eeb091a11..516cbc1d8 100644 --- a/_sources/autoapi/core/datasets/lmdb_dataset/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/lmdb_dataset/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets.lmdb_dataset` -==================================== +:py:mod:`fairchem.core.datasets.lmdb_dataset` +============================================= -.. py:module:: core.datasets.lmdb_dataset +.. py:module:: fairchem.core.datasets.lmdb_dataset .. autoapi-nested-parse:: @@ -19,9 +19,9 @@ Classes .. autoapisummary:: - core.datasets.lmdb_dataset.LmdbDataset - core.datasets.lmdb_dataset.SinglePointLmdbDataset - core.datasets.lmdb_dataset.TrajectoryLmdbDataset + fairchem.core.datasets.lmdb_dataset.LmdbDataset + fairchem.core.datasets.lmdb_dataset.SinglePointLmdbDataset + fairchem.core.datasets.lmdb_dataset.TrajectoryLmdbDataset @@ -30,7 +30,7 @@ Functions .. autoapisummary:: - core.datasets.lmdb_dataset.data_list_collater + fairchem.core.datasets.lmdb_dataset.data_list_collater @@ -39,7 +39,7 @@ Attributes .. autoapisummary:: - core.datasets.lmdb_dataset.T_co + fairchem.core.datasets.lmdb_dataset.T_co .. py:data:: T_co diff --git a/_sources/autoapi/core/datasets/oc22_lmdb_dataset/index.rst b/_sources/autoapi/fairchem/core/datasets/oc22_lmdb_dataset/index.rst similarity index 85% rename from _sources/autoapi/core/datasets/oc22_lmdb_dataset/index.rst rename to _sources/autoapi/fairchem/core/datasets/oc22_lmdb_dataset/index.rst index fb3293db7..6fef390dd 100644 --- a/_sources/autoapi/core/datasets/oc22_lmdb_dataset/index.rst +++ b/_sources/autoapi/fairchem/core/datasets/oc22_lmdb_dataset/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.datasets.oc22_lmdb_dataset` -========================================= +:py:mod:`fairchem.core.datasets.oc22_lmdb_dataset` +================================================== -.. py:module:: core.datasets.oc22_lmdb_dataset +.. py:module:: fairchem.core.datasets.oc22_lmdb_dataset .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.datasets.oc22_lmdb_dataset.OC22LmdbDataset + fairchem.core.datasets.oc22_lmdb_dataset.OC22LmdbDataset diff --git a/_sources/autoapi/fairchem/core/datasets/target_metadata_guesser/index.rst b/_sources/autoapi/fairchem/core/datasets/target_metadata_guesser/index.rst new file mode 100644 index 000000000..7a4065b1f --- /dev/null +++ b/_sources/autoapi/fairchem/core/datasets/target_metadata_guesser/index.rst @@ -0,0 +1,42 @@ +:py:mod:`fairchem.core.datasets.target_metadata_guesser` +======================================================== + +.. py:module:: fairchem.core.datasets.target_metadata_guesser + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.datasets.target_metadata_guesser.uniform_atoms_lengths + fairchem.core.datasets.target_metadata_guesser.target_constant_shape + fairchem.core.datasets.target_metadata_guesser.target_per_atom + fairchem.core.datasets.target_metadata_guesser.target_extensive + fairchem.core.datasets.target_metadata_guesser.guess_target_metadata + fairchem.core.datasets.target_metadata_guesser.guess_property_metadata + + + +.. py:function:: uniform_atoms_lengths(atoms_lens) -> bool + + +.. py:function:: target_constant_shape(atoms_lens, target_samples) -> bool + + +.. py:function:: target_per_atom(atoms_lens, target_samples) -> bool + + +.. py:function:: target_extensive(atoms_lens, target_samples, threshold: float = 0.2) + + +.. py:function:: guess_target_metadata(atoms_len, target_samples) + + +.. py:function:: guess_property_metadata(atoms_list) + + diff --git a/_sources/autoapi/core/index.rst b/_sources/autoapi/fairchem/core/index.rst similarity index 89% rename from _sources/autoapi/core/index.rst rename to _sources/autoapi/fairchem/core/index.rst index deca3e7d9..9a537a155 100644 --- a/_sources/autoapi/core/index.rst +++ b/_sources/autoapi/fairchem/core/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core` -============== +:py:mod:`fairchem.core` +======================= -.. py:module:: core +.. py:module:: fairchem.core .. autoapi-nested-parse:: diff --git a/_sources/autoapi/core/models/base/index.rst b/_sources/autoapi/fairchem/core/models/base/index.rst similarity index 92% rename from _sources/autoapi/core/models/base/index.rst rename to _sources/autoapi/fairchem/core/models/base/index.rst index 649adc9ff..d76f60ba5 100644 --- a/_sources/autoapi/core/models/base/index.rst +++ b/_sources/autoapi/fairchem/core/models/base/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.base` -========================== +:py:mod:`fairchem.core.models.base` +=================================== -.. py:module:: core.models.base +.. py:module:: fairchem.core.models.base .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.models.base.BaseModel + fairchem.core.models.base.BaseModel diff --git a/_sources/autoapi/core/models/dimenet_plus_plus/index.rst b/_sources/autoapi/fairchem/core/models/dimenet_plus_plus/index.rst similarity index 95% rename from _sources/autoapi/core/models/dimenet_plus_plus/index.rst rename to _sources/autoapi/fairchem/core/models/dimenet_plus_plus/index.rst index d01d3f104..056837b85 100644 --- a/_sources/autoapi/core/models/dimenet_plus_plus/index.rst +++ b/_sources/autoapi/fairchem/core/models/dimenet_plus_plus/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.dimenet_plus_plus` -======================================= +:py:mod:`fairchem.core.models.dimenet_plus_plus` +================================================ -.. py:module:: core.models.dimenet_plus_plus +.. py:module:: fairchem.core.models.dimenet_plus_plus .. autoapi-nested-parse:: @@ -47,10 +47,10 @@ Classes .. autoapisummary:: - core.models.dimenet_plus_plus.InteractionPPBlock - core.models.dimenet_plus_plus.OutputPPBlock - core.models.dimenet_plus_plus.DimeNetPlusPlus - core.models.dimenet_plus_plus.DimeNetPlusPlusWrap + fairchem.core.models.dimenet_plus_plus.InteractionPPBlock + fairchem.core.models.dimenet_plus_plus.OutputPPBlock + fairchem.core.models.dimenet_plus_plus.DimeNetPlusPlus + fairchem.core.models.dimenet_plus_plus.DimeNetPlusPlusWrap @@ -60,7 +60,7 @@ Attributes .. autoapisummary:: - core.models.dimenet_plus_plus.sym + fairchem.core.models.dimenet_plus_plus.sym .. py:data:: sym diff --git a/_sources/autoapi/core/models/equiformer_v2/activation/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/activation/index.rst similarity index 93% rename from _sources/autoapi/core/models/equiformer_v2/activation/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/activation/index.rst index 89e859a6b..851f3eb4a 100644 --- a/_sources/autoapi/core/models/equiformer_v2/activation/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/activation/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.activation` -============================================== +:py:mod:`fairchem.core.models.equiformer_v2.activation` +======================================================= -.. py:module:: core.models.equiformer_v2.activation +.. py:module:: fairchem.core.models.equiformer_v2.activation Module Contents @@ -12,15 +12,15 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.activation.ScaledSiLU - core.models.equiformer_v2.activation.ScaledSwiGLU - core.models.equiformer_v2.activation.SwiGLU - core.models.equiformer_v2.activation.SmoothLeakyReLU - core.models.equiformer_v2.activation.ScaledSmoothLeakyReLU - core.models.equiformer_v2.activation.ScaledSigmoid - core.models.equiformer_v2.activation.GateActivation - core.models.equiformer_v2.activation.S2Activation - core.models.equiformer_v2.activation.SeparableS2Activation + fairchem.core.models.equiformer_v2.activation.ScaledSiLU + fairchem.core.models.equiformer_v2.activation.ScaledSwiGLU + fairchem.core.models.equiformer_v2.activation.SwiGLU + fairchem.core.models.equiformer_v2.activation.SmoothLeakyReLU + fairchem.core.models.equiformer_v2.activation.ScaledSmoothLeakyReLU + fairchem.core.models.equiformer_v2.activation.ScaledSigmoid + fairchem.core.models.equiformer_v2.activation.GateActivation + fairchem.core.models.equiformer_v2.activation.S2Activation + fairchem.core.models.equiformer_v2.activation.SeparableS2Activation diff --git a/_sources/autoapi/core/models/equiformer_v2/drop/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/drop/index.rst similarity index 91% rename from _sources/autoapi/core/models/equiformer_v2/drop/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/drop/index.rst index d753703b5..557e07fb0 100644 --- a/_sources/autoapi/core/models/equiformer_v2/drop/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/drop/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.drop` -======================================== +:py:mod:`fairchem.core.models.equiformer_v2.drop` +================================================= -.. py:module:: core.models.equiformer_v2.drop +.. py:module:: fairchem.core.models.equiformer_v2.drop .. autoapi-nested-parse:: @@ -18,11 +18,11 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.drop.DropPath - core.models.equiformer_v2.drop.GraphDropPath - core.models.equiformer_v2.drop.EquivariantDropout - core.models.equiformer_v2.drop.EquivariantScalarsDropout - core.models.equiformer_v2.drop.EquivariantDropoutArraySphericalHarmonics + fairchem.core.models.equiformer_v2.drop.DropPath + fairchem.core.models.equiformer_v2.drop.GraphDropPath + fairchem.core.models.equiformer_v2.drop.EquivariantDropout + fairchem.core.models.equiformer_v2.drop.EquivariantScalarsDropout + fairchem.core.models.equiformer_v2.drop.EquivariantDropoutArraySphericalHarmonics @@ -31,7 +31,7 @@ Functions .. autoapisummary:: - core.models.equiformer_v2.drop.drop_path + fairchem.core.models.equiformer_v2.drop.drop_path diff --git a/_sources/autoapi/fairchem/core/models/equiformer_v2/edge_rot_mat/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/edge_rot_mat/index.rst new file mode 100644 index 000000000..25ed17ead --- /dev/null +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/edge_rot_mat/index.rst @@ -0,0 +1,22 @@ +:py:mod:`fairchem.core.models.equiformer_v2.edge_rot_mat` +========================================================= + +.. py:module:: fairchem.core.models.equiformer_v2.edge_rot_mat + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.models.equiformer_v2.edge_rot_mat.init_edge_rot_mat + + + +.. py:function:: init_edge_rot_mat(edge_distance_vec) + + diff --git a/_sources/autoapi/core/models/equiformer_v2/equiformer_v2_oc20/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/equiformer_v2_oc20/index.rst similarity index 94% rename from _sources/autoapi/core/models/equiformer_v2/equiformer_v2_oc20/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/equiformer_v2_oc20/index.rst index c39765686..ec56c766c 100644 --- a/_sources/autoapi/core/models/equiformer_v2/equiformer_v2_oc20/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/equiformer_v2_oc20/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.equiformer_v2_oc20` -====================================================== +:py:mod:`fairchem.core.models.equiformer_v2.equiformer_v2_oc20` +=============================================================== -.. py:module:: core.models.equiformer_v2.equiformer_v2_oc20 +.. py:module:: fairchem.core.models.equiformer_v2.equiformer_v2_oc20 Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.equiformer_v2_oc20.EquiformerV2_OC20 + fairchem.core.models.equiformer_v2.equiformer_v2_oc20.EquiformerV2_OC20 @@ -22,8 +22,8 @@ Attributes .. autoapisummary:: - core.models.equiformer_v2.equiformer_v2_oc20._AVG_NUM_NODES - core.models.equiformer_v2.equiformer_v2_oc20._AVG_DEGREE + fairchem.core.models.equiformer_v2.equiformer_v2_oc20._AVG_NUM_NODES + fairchem.core.models.equiformer_v2.equiformer_v2_oc20._AVG_DEGREE .. py:data:: _AVG_NUM_NODES diff --git a/_sources/autoapi/core/models/equiformer_v2/gaussian_rbf/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/gaussian_rbf/index.rst similarity index 84% rename from _sources/autoapi/core/models/equiformer_v2/gaussian_rbf/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/gaussian_rbf/index.rst index c4d81a499..86a4235e5 100644 --- a/_sources/autoapi/core/models/equiformer_v2/gaussian_rbf/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/gaussian_rbf/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.gaussian_rbf` -================================================ +:py:mod:`fairchem.core.models.equiformer_v2.gaussian_rbf` +========================================================= -.. py:module:: core.models.equiformer_v2.gaussian_rbf +.. py:module:: fairchem.core.models.equiformer_v2.gaussian_rbf Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.gaussian_rbf.GaussianRadialBasisLayer + fairchem.core.models.equiformer_v2.gaussian_rbf.GaussianRadialBasisLayer @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - core.models.equiformer_v2.gaussian_rbf.gaussian + fairchem.core.models.equiformer_v2.gaussian_rbf.gaussian diff --git a/_sources/autoapi/core/models/equiformer_v2/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/index.rst similarity index 97% rename from _sources/autoapi/core/models/equiformer_v2/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/index.rst index f845eaf72..ffa8e9fa6 100644 --- a/_sources/autoapi/core/models/equiformer_v2/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2` -=================================== +:py:mod:`fairchem.core.models.equiformer_v2` +============================================ -.. py:module:: core.models.equiformer_v2 +.. py:module:: fairchem.core.models.equiformer_v2 Subpackages @@ -42,7 +42,7 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.EquiformerV2 + fairchem.core.models.equiformer_v2.EquiformerV2 diff --git a/_sources/autoapi/core/models/equiformer_v2/input_block/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/input_block/index.rst similarity index 85% rename from _sources/autoapi/core/models/equiformer_v2/input_block/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/input_block/index.rst index b760c5c9f..9a3e5301d 100644 --- a/_sources/autoapi/core/models/equiformer_v2/input_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/input_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.input_block` -=============================================== +:py:mod:`fairchem.core.models.equiformer_v2.input_block` +======================================================== -.. py:module:: core.models.equiformer_v2.input_block +.. py:module:: fairchem.core.models.equiformer_v2.input_block Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.input_block.EdgeDegreeEmbedding + fairchem.core.models.equiformer_v2.input_block.EdgeDegreeEmbedding diff --git a/_sources/autoapi/core/models/equiformer_v2/layer_norm/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/layer_norm/index.rst similarity index 84% rename from _sources/autoapi/core/models/equiformer_v2/layer_norm/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/layer_norm/index.rst index 20f0bf232..e518a6e7e 100644 --- a/_sources/autoapi/core/models/equiformer_v2/layer_norm/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/layer_norm/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.layer_norm` -============================================== +:py:mod:`fairchem.core.models.equiformer_v2.layer_norm` +======================================================= -.. py:module:: core.models.equiformer_v2.layer_norm +.. py:module:: fairchem.core.models.equiformer_v2.layer_norm .. autoapi-nested-parse:: @@ -21,11 +21,11 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.layer_norm.EquivariantLayerNormArray - core.models.equiformer_v2.layer_norm.EquivariantLayerNormArraySphericalHarmonics - core.models.equiformer_v2.layer_norm.EquivariantRMSNormArraySphericalHarmonics - core.models.equiformer_v2.layer_norm.EquivariantRMSNormArraySphericalHarmonicsV2 - core.models.equiformer_v2.layer_norm.EquivariantDegreeLayerScale + fairchem.core.models.equiformer_v2.layer_norm.EquivariantLayerNormArray + fairchem.core.models.equiformer_v2.layer_norm.EquivariantLayerNormArraySphericalHarmonics + fairchem.core.models.equiformer_v2.layer_norm.EquivariantRMSNormArraySphericalHarmonics + fairchem.core.models.equiformer_v2.layer_norm.EquivariantRMSNormArraySphericalHarmonicsV2 + fairchem.core.models.equiformer_v2.layer_norm.EquivariantDegreeLayerScale @@ -34,8 +34,8 @@ Functions .. autoapisummary:: - core.models.equiformer_v2.layer_norm.get_normalization_layer - core.models.equiformer_v2.layer_norm.get_l_to_all_m_expand_index + fairchem.core.models.equiformer_v2.layer_norm.get_normalization_layer + fairchem.core.models.equiformer_v2.layer_norm.get_l_to_all_m_expand_index diff --git a/_sources/autoapi/core/models/equiformer_v2/module_list/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/module_list/index.rst similarity index 81% rename from _sources/autoapi/core/models/equiformer_v2/module_list/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/module_list/index.rst index bd57f9e94..8e549b9fa 100644 --- a/_sources/autoapi/core/models/equiformer_v2/module_list/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/module_list/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.module_list` -=============================================== +:py:mod:`fairchem.core.models.equiformer_v2.module_list` +======================================================== -.. py:module:: core.models.equiformer_v2.module_list +.. py:module:: fairchem.core.models.equiformer_v2.module_list Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.module_list.ModuleListInfo + fairchem.core.models.equiformer_v2.module_list.ModuleListInfo diff --git a/_sources/autoapi/core/models/equiformer_v2/radial_function/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/radial_function/index.rst similarity index 53% rename from _sources/autoapi/core/models/equiformer_v2/radial_function/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/radial_function/index.rst index 383894fc3..3140c691f 100644 --- a/_sources/autoapi/core/models/equiformer_v2/radial_function/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/radial_function/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.radial_function` -=================================================== +:py:mod:`fairchem.core.models.equiformer_v2.radial_function` +============================================================ -.. py:module:: core.models.equiformer_v2.radial_function +.. py:module:: fairchem.core.models.equiformer_v2.radial_function Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.radial_function.RadialFunction + fairchem.core.models.equiformer_v2.radial_function.RadialFunction diff --git a/_sources/autoapi/core/models/equiformer_v2/so2_ops/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/so2_ops/index.rst similarity index 90% rename from _sources/autoapi/core/models/equiformer_v2/so2_ops/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/so2_ops/index.rst index 44119da12..e2cdcc1cc 100644 --- a/_sources/autoapi/core/models/equiformer_v2/so2_ops/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/so2_ops/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.so2_ops` -=========================================== +:py:mod:`fairchem.core.models.equiformer_v2.so2_ops` +==================================================== -.. py:module:: core.models.equiformer_v2.so2_ops +.. py:module:: fairchem.core.models.equiformer_v2.so2_ops Module Contents @@ -12,9 +12,9 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.so2_ops.SO2_m_Convolution - core.models.equiformer_v2.so2_ops.SO2_Convolution - core.models.equiformer_v2.so2_ops.SO2_Linear + fairchem.core.models.equiformer_v2.so2_ops.SO2_m_Convolution + fairchem.core.models.equiformer_v2.so2_ops.SO2_Convolution + fairchem.core.models.equiformer_v2.so2_ops.SO2_Linear diff --git a/_sources/autoapi/core/models/equiformer_v2/so3/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/so3/index.rst similarity index 92% rename from _sources/autoapi/core/models/equiformer_v2/so3/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/so3/index.rst index 54d511980..411a919ec 100644 --- a/_sources/autoapi/core/models/equiformer_v2/so3/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/so3/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.so3` -======================================= +:py:mod:`fairchem.core.models.equiformer_v2.so3` +================================================ -.. py:module:: core.models.equiformer_v2.so3 +.. py:module:: fairchem.core.models.equiformer_v2.so3 .. autoapi-nested-parse:: @@ -27,12 +27,12 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.so3.CoefficientMappingModule - core.models.equiformer_v2.so3.SO3_Embedding - core.models.equiformer_v2.so3.SO3_Rotation - core.models.equiformer_v2.so3.SO3_Grid - core.models.equiformer_v2.so3.SO3_Linear - core.models.equiformer_v2.so3.SO3_LinearV2 + fairchem.core.models.equiformer_v2.so3.CoefficientMappingModule + fairchem.core.models.equiformer_v2.so3.SO3_Embedding + fairchem.core.models.equiformer_v2.so3.SO3_Rotation + fairchem.core.models.equiformer_v2.so3.SO3_Grid + fairchem.core.models.equiformer_v2.so3.SO3_Linear + fairchem.core.models.equiformer_v2.so3.SO3_LinearV2 diff --git a/_sources/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/trainers/energy_trainer/index.rst similarity index 90% rename from _sources/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/trainers/energy_trainer/index.rst index c22178614..b0f128942 100644 --- a/_sources/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/trainers/energy_trainer/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.trainers.energy_trainer` -=========================================================== +:py:mod:`fairchem.core.models.equiformer_v2.trainers.energy_trainer` +==================================================================== -.. py:module:: core.models.equiformer_v2.trainers.energy_trainer +.. py:module:: fairchem.core.models.equiformer_v2.trainers.energy_trainer .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.trainers.energy_trainer.EquiformerV2EnergyTrainer + fairchem.core.models.equiformer_v2.trainers.energy_trainer.EquiformerV2EnergyTrainer diff --git a/_sources/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/trainers/forces_trainer/index.rst similarity index 90% rename from _sources/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/trainers/forces_trainer/index.rst index 756a4dbab..147f4d422 100644 --- a/_sources/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/trainers/forces_trainer/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.trainers.forces_trainer` -=========================================================== +:py:mod:`fairchem.core.models.equiformer_v2.trainers.forces_trainer` +==================================================================== -.. py:module:: core.models.equiformer_v2.trainers.forces_trainer +.. py:module:: fairchem.core.models.equiformer_v2.trainers.forces_trainer .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.trainers.forces_trainer.EquiformerV2ForcesTrainer + fairchem.core.models.equiformer_v2.trainers.forces_trainer.EquiformerV2ForcesTrainer diff --git a/_sources/autoapi/fairchem/core/models/equiformer_v2/trainers/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/trainers/index.rst new file mode 100644 index 000000000..89acf0167 --- /dev/null +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/trainers/index.rst @@ -0,0 +1,17 @@ +:py:mod:`fairchem.core.models.equiformer_v2.trainers` +===================================================== + +.. py:module:: fairchem.core.models.equiformer_v2.trainers + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + energy_trainer/index.rst + forces_trainer/index.rst + lr_scheduler/index.rst + + diff --git a/_sources/autoapi/core/models/equiformer_v2/trainers/lr_scheduler/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/trainers/lr_scheduler/index.rst similarity index 72% rename from _sources/autoapi/core/models/equiformer_v2/trainers/lr_scheduler/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/trainers/lr_scheduler/index.rst index 03782ace4..273f598bd 100644 --- a/_sources/autoapi/core/models/equiformer_v2/trainers/lr_scheduler/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/trainers/lr_scheduler/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.trainers.lr_scheduler` -========================================================= +:py:mod:`fairchem.core.models.equiformer_v2.trainers.lr_scheduler` +================================================================== -.. py:module:: core.models.equiformer_v2.trainers.lr_scheduler +.. py:module:: fairchem.core.models.equiformer_v2.trainers.lr_scheduler Module Contents @@ -12,9 +12,9 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.trainers.lr_scheduler.CosineLRLambda - core.models.equiformer_v2.trainers.lr_scheduler.MultistepLRLambda - core.models.equiformer_v2.trainers.lr_scheduler.LRScheduler + fairchem.core.models.equiformer_v2.trainers.lr_scheduler.CosineLRLambda + fairchem.core.models.equiformer_v2.trainers.lr_scheduler.MultistepLRLambda + fairchem.core.models.equiformer_v2.trainers.lr_scheduler.LRScheduler @@ -23,9 +23,9 @@ Functions .. autoapisummary:: - core.models.equiformer_v2.trainers.lr_scheduler.multiply - core.models.equiformer_v2.trainers.lr_scheduler.cosine_lr_lambda - core.models.equiformer_v2.trainers.lr_scheduler.multistep_lr_lambda + fairchem.core.models.equiformer_v2.trainers.lr_scheduler.multiply + fairchem.core.models.equiformer_v2.trainers.lr_scheduler.cosine_lr_lambda + fairchem.core.models.equiformer_v2.trainers.lr_scheduler.multistep_lr_lambda diff --git a/_sources/autoapi/core/models/equiformer_v2/transformer_block/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/transformer_block/index.rst similarity index 95% rename from _sources/autoapi/core/models/equiformer_v2/transformer_block/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/transformer_block/index.rst index 68b72fb1e..eab927024 100644 --- a/_sources/autoapi/core/models/equiformer_v2/transformer_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/transformer_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.transformer_block` -===================================================== +:py:mod:`fairchem.core.models.equiformer_v2.transformer_block` +============================================================== -.. py:module:: core.models.equiformer_v2.transformer_block +.. py:module:: fairchem.core.models.equiformer_v2.transformer_block Module Contents @@ -12,9 +12,9 @@ Classes .. autoapisummary:: - core.models.equiformer_v2.transformer_block.SO2EquivariantGraphAttention - core.models.equiformer_v2.transformer_block.FeedForwardNetwork - core.models.equiformer_v2.transformer_block.TransBlockV2 + fairchem.core.models.equiformer_v2.transformer_block.SO2EquivariantGraphAttention + fairchem.core.models.equiformer_v2.transformer_block.FeedForwardNetwork + fairchem.core.models.equiformer_v2.transformer_block.TransBlockV2 diff --git a/_sources/autoapi/core/models/equiformer_v2/wigner/index.rst b/_sources/autoapi/fairchem/core/models/equiformer_v2/wigner/index.rst similarity index 51% rename from _sources/autoapi/core/models/equiformer_v2/wigner/index.rst rename to _sources/autoapi/fairchem/core/models/equiformer_v2/wigner/index.rst index a064782f8..46097ca51 100644 --- a/_sources/autoapi/core/models/equiformer_v2/wigner/index.rst +++ b/_sources/autoapi/fairchem/core/models/equiformer_v2/wigner/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.equiformer_v2.wigner` -========================================== +:py:mod:`fairchem.core.models.equiformer_v2.wigner` +=================================================== -.. py:module:: core.models.equiformer_v2.wigner +.. py:module:: fairchem.core.models.equiformer_v2.wigner Module Contents @@ -13,8 +13,8 @@ Functions .. autoapisummary:: - core.models.equiformer_v2.wigner.wigner_D - core.models.equiformer_v2.wigner._z_rot_mat + fairchem.core.models.equiformer_v2.wigner.wigner_D + fairchem.core.models.equiformer_v2.wigner._z_rot_mat @@ -23,7 +23,7 @@ Attributes .. autoapisummary:: - core.models.equiformer_v2.wigner._Jd + fairchem.core.models.equiformer_v2.wigner._Jd .. py:data:: _Jd diff --git a/_sources/autoapi/core/models/escn/escn/index.rst b/_sources/autoapi/fairchem/core/models/escn/escn/index.rst similarity index 94% rename from _sources/autoapi/core/models/escn/escn/index.rst rename to _sources/autoapi/fairchem/core/models/escn/escn/index.rst index d60d22a36..d6b6dbd0a 100644 --- a/_sources/autoapi/core/models/escn/escn/index.rst +++ b/_sources/autoapi/fairchem/core/models/escn/escn/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.escn.escn` -=============================== +:py:mod:`fairchem.core.models.escn.escn` +======================================== -.. py:module:: core.models.escn.escn +.. py:module:: fairchem.core.models.escn.escn .. autoapi-nested-parse:: @@ -20,14 +20,14 @@ Classes .. autoapisummary:: - core.models.escn.escn.eSCN - core.models.escn.escn.LayerBlock - core.models.escn.escn.MessageBlock - core.models.escn.escn.SO2Block - core.models.escn.escn.SO2Conv - core.models.escn.escn.EdgeBlock - core.models.escn.escn.EnergyBlock - core.models.escn.escn.ForceBlock + fairchem.core.models.escn.escn.eSCN + fairchem.core.models.escn.escn.LayerBlock + fairchem.core.models.escn.escn.MessageBlock + fairchem.core.models.escn.escn.SO2Block + fairchem.core.models.escn.escn.SO2Conv + fairchem.core.models.escn.escn.EdgeBlock + fairchem.core.models.escn.escn.EnergyBlock + fairchem.core.models.escn.escn.ForceBlock diff --git a/_sources/autoapi/core/models/escn/index.rst b/_sources/autoapi/fairchem/core/models/escn/index.rst similarity index 95% rename from _sources/autoapi/core/models/escn/index.rst rename to _sources/autoapi/fairchem/core/models/escn/index.rst index 1a056d30e..5773a81ad 100644 --- a/_sources/autoapi/core/models/escn/index.rst +++ b/_sources/autoapi/fairchem/core/models/escn/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.escn` -========================== +:py:mod:`fairchem.core.models.escn` +=================================== -.. py:module:: core.models.escn +.. py:module:: fairchem.core.models.escn Submodules @@ -22,7 +22,7 @@ Classes .. autoapisummary:: - core.models.escn.eSCN + fairchem.core.models.escn.eSCN diff --git a/_sources/autoapi/core/models/escn/so3/index.rst b/_sources/autoapi/fairchem/core/models/escn/so3/index.rst similarity index 91% rename from _sources/autoapi/core/models/escn/so3/index.rst rename to _sources/autoapi/fairchem/core/models/escn/so3/index.rst index 472a6c422..782f6c445 100644 --- a/_sources/autoapi/core/models/escn/so3/index.rst +++ b/_sources/autoapi/fairchem/core/models/escn/so3/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.escn.so3` -============================== +:py:mod:`fairchem.core.models.escn.so3` +======================================= -.. py:module:: core.models.escn.so3 +.. py:module:: fairchem.core.models.escn.so3 .. autoapi-nested-parse:: @@ -20,10 +20,10 @@ Classes .. autoapisummary:: - core.models.escn.so3.CoefficientMapping - core.models.escn.so3.SO3_Embedding - core.models.escn.so3.SO3_Rotation - core.models.escn.so3.SO3_Grid + fairchem.core.models.escn.so3.CoefficientMapping + fairchem.core.models.escn.so3.SO3_Embedding + fairchem.core.models.escn.so3.SO3_Rotation + fairchem.core.models.escn.so3.SO3_Grid @@ -33,7 +33,7 @@ Attributes .. autoapisummary:: - core.models.escn.so3._Jd + fairchem.core.models.escn.so3._Jd .. py:data:: _Jd diff --git a/_sources/autoapi/core/models/gemnet/gemnet/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/gemnet/index.rst similarity index 96% rename from _sources/autoapi/core/models/gemnet/gemnet/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/gemnet/index.rst index 77ef7f910..2c52d2d7d 100644 --- a/_sources/autoapi/core/models/gemnet/gemnet/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/gemnet/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.gemnet` -=================================== +:py:mod:`fairchem.core.models.gemnet.gemnet` +============================================ -.. py:module:: core.models.gemnet.gemnet +.. py:module:: fairchem.core.models.gemnet.gemnet .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.models.gemnet.gemnet.GemNetT + fairchem.core.models.gemnet.gemnet.GemNetT diff --git a/_sources/autoapi/core/models/gemnet/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/index.rst similarity index 97% rename from _sources/autoapi/core/models/gemnet/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/index.rst index cba947b66..36c179893 100644 --- a/_sources/autoapi/core/models/gemnet/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet` -============================ +:py:mod:`fairchem.core.models.gemnet` +===================================== -.. py:module:: core.models.gemnet +.. py:module:: fairchem.core.models.gemnet Subpackages @@ -32,7 +32,7 @@ Classes .. autoapisummary:: - core.models.gemnet.GemNetT + fairchem.core.models.gemnet.GemNetT diff --git a/_sources/autoapi/core/models/gemnet/initializers/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/initializers/index.rst similarity index 76% rename from _sources/autoapi/core/models/gemnet/initializers/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/initializers/index.rst index 0dc720337..5a7c40cc3 100644 --- a/_sources/autoapi/core/models/gemnet/initializers/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/initializers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.initializers` -========================================= +:py:mod:`fairchem.core.models.gemnet.initializers` +================================================== -.. py:module:: core.models.gemnet.initializers +.. py:module:: fairchem.core.models.gemnet.initializers .. autoapi-nested-parse:: @@ -21,8 +21,8 @@ Functions .. autoapisummary:: - core.models.gemnet.initializers._standardize - core.models.gemnet.initializers.he_orthogonal_init + fairchem.core.models.gemnet.initializers._standardize + fairchem.core.models.gemnet.initializers.he_orthogonal_init diff --git a/_sources/autoapi/core/models/gemnet/layers/atom_update_block/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/layers/atom_update_block/index.rst similarity index 87% rename from _sources/autoapi/core/models/gemnet/layers/atom_update_block/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/layers/atom_update_block/index.rst index c7a1ae3b6..dd0dfb82a 100644 --- a/_sources/autoapi/core/models/gemnet/layers/atom_update_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/layers/atom_update_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.layers.atom_update_block` -===================================================== +:py:mod:`fairchem.core.models.gemnet.layers.atom_update_block` +============================================================== -.. py:module:: core.models.gemnet.layers.atom_update_block +.. py:module:: fairchem.core.models.gemnet.layers.atom_update_block .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.models.gemnet.layers.atom_update_block.AtomUpdateBlock - core.models.gemnet.layers.atom_update_block.OutputBlock + fairchem.core.models.gemnet.layers.atom_update_block.AtomUpdateBlock + fairchem.core.models.gemnet.layers.atom_update_block.OutputBlock diff --git a/_sources/autoapi/core/models/gemnet/layers/base_layers/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/layers/base_layers/index.rst similarity index 89% rename from _sources/autoapi/core/models/gemnet/layers/base_layers/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/layers/base_layers/index.rst index 00868610d..21412e038 100644 --- a/_sources/autoapi/core/models/gemnet/layers/base_layers/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/layers/base_layers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.layers.base_layers` -=============================================== +:py:mod:`fairchem.core.models.gemnet.layers.base_layers` +======================================================== -.. py:module:: core.models.gemnet.layers.base_layers +.. py:module:: fairchem.core.models.gemnet.layers.base_layers .. autoapi-nested-parse:: @@ -20,10 +20,10 @@ Classes .. autoapisummary:: - core.models.gemnet.layers.base_layers.Dense - core.models.gemnet.layers.base_layers.ScaledSiLU - core.models.gemnet.layers.base_layers.SiQU - core.models.gemnet.layers.base_layers.ResidualLayer + fairchem.core.models.gemnet.layers.base_layers.Dense + fairchem.core.models.gemnet.layers.base_layers.ScaledSiLU + fairchem.core.models.gemnet.layers.base_layers.SiQU + fairchem.core.models.gemnet.layers.base_layers.ResidualLayer diff --git a/_sources/autoapi/core/models/gemnet/layers/basis_utils/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/layers/basis_utils/index.rst similarity index 84% rename from _sources/autoapi/core/models/gemnet/layers/basis_utils/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/layers/basis_utils/index.rst index 217afd5a0..dfe595f2c 100644 --- a/_sources/autoapi/core/models/gemnet/layers/basis_utils/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/layers/basis_utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.layers.basis_utils` -=============================================== +:py:mod:`fairchem.core.models.gemnet.layers.basis_utils` +======================================================== -.. py:module:: core.models.gemnet.layers.basis_utils +.. py:module:: fairchem.core.models.gemnet.layers.basis_utils .. autoapi-nested-parse:: @@ -21,13 +21,13 @@ Functions .. autoapisummary:: - core.models.gemnet.layers.basis_utils.Jn - core.models.gemnet.layers.basis_utils.Jn_zeros - core.models.gemnet.layers.basis_utils.spherical_bessel_formulas - core.models.gemnet.layers.basis_utils.bessel_basis - core.models.gemnet.layers.basis_utils.sph_harm_prefactor - core.models.gemnet.layers.basis_utils.associated_legendre_polynomials - core.models.gemnet.layers.basis_utils.real_sph_harm + fairchem.core.models.gemnet.layers.basis_utils.Jn + fairchem.core.models.gemnet.layers.basis_utils.Jn_zeros + fairchem.core.models.gemnet.layers.basis_utils.spherical_bessel_formulas + fairchem.core.models.gemnet.layers.basis_utils.bessel_basis + fairchem.core.models.gemnet.layers.basis_utils.sph_harm_prefactor + fairchem.core.models.gemnet.layers.basis_utils.associated_legendre_polynomials + fairchem.core.models.gemnet.layers.basis_utils.real_sph_harm diff --git a/_sources/autoapi/core/models/gemnet/layers/efficient/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/layers/efficient/index.rst similarity index 85% rename from _sources/autoapi/core/models/gemnet/layers/efficient/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/layers/efficient/index.rst index cc8f297eb..45cad6ebe 100644 --- a/_sources/autoapi/core/models/gemnet/layers/efficient/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/layers/efficient/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.layers.efficient` -============================================= +:py:mod:`fairchem.core.models.gemnet.layers.efficient` +====================================================== -.. py:module:: core.models.gemnet.layers.efficient +.. py:module:: fairchem.core.models.gemnet.layers.efficient .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.models.gemnet.layers.efficient.EfficientInteractionDownProjection - core.models.gemnet.layers.efficient.EfficientInteractionBilinear + fairchem.core.models.gemnet.layers.efficient.EfficientInteractionDownProjection + fairchem.core.models.gemnet.layers.efficient.EfficientInteractionBilinear diff --git a/_sources/autoapi/core/models/gemnet/layers/embedding_block/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/layers/embedding_block/index.rst similarity index 80% rename from _sources/autoapi/core/models/gemnet/layers/embedding_block/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/layers/embedding_block/index.rst index 72d634204..80f062bee 100644 --- a/_sources/autoapi/core/models/gemnet/layers/embedding_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/layers/embedding_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.layers.embedding_block` -=================================================== +:py:mod:`fairchem.core.models.gemnet.layers.embedding_block` +============================================================ -.. py:module:: core.models.gemnet.layers.embedding_block +.. py:module:: fairchem.core.models.gemnet.layers.embedding_block .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.models.gemnet.layers.embedding_block.AtomEmbedding - core.models.gemnet.layers.embedding_block.EdgeEmbedding + fairchem.core.models.gemnet.layers.embedding_block.AtomEmbedding + fairchem.core.models.gemnet.layers.embedding_block.EdgeEmbedding diff --git a/_sources/autoapi/core/models/gemnet/layers/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/layers/index.rst similarity index 67% rename from _sources/autoapi/core/models/gemnet/layers/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/layers/index.rst index f9b4995a6..df70b29c0 100644 --- a/_sources/autoapi/core/models/gemnet/layers/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/layers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.layers` -=================================== +:py:mod:`fairchem.core.models.gemnet.layers` +============================================ -.. py:module:: core.models.gemnet.layers +.. py:module:: fairchem.core.models.gemnet.layers Submodules diff --git a/_sources/autoapi/core/models/gemnet/layers/interaction_block/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/layers/interaction_block/index.rst similarity index 90% rename from _sources/autoapi/core/models/gemnet/layers/interaction_block/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/layers/interaction_block/index.rst index a72d83836..557d73eea 100644 --- a/_sources/autoapi/core/models/gemnet/layers/interaction_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/layers/interaction_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.layers.interaction_block` -===================================================== +:py:mod:`fairchem.core.models.gemnet.layers.interaction_block` +============================================================== -.. py:module:: core.models.gemnet.layers.interaction_block +.. py:module:: fairchem.core.models.gemnet.layers.interaction_block .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.models.gemnet.layers.interaction_block.InteractionBlockTripletsOnly - core.models.gemnet.layers.interaction_block.TripletInteraction + fairchem.core.models.gemnet.layers.interaction_block.InteractionBlockTripletsOnly + fairchem.core.models.gemnet.layers.interaction_block.TripletInteraction diff --git a/_sources/autoapi/core/models/gemnet/layers/radial_basis/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/layers/radial_basis/index.rst similarity index 83% rename from _sources/autoapi/core/models/gemnet/layers/radial_basis/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/layers/radial_basis/index.rst index b2e787fff..a77ae3108 100644 --- a/_sources/autoapi/core/models/gemnet/layers/radial_basis/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/layers/radial_basis/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.layers.radial_basis` -================================================ +:py:mod:`fairchem.core.models.gemnet.layers.radial_basis` +========================================================= -.. py:module:: core.models.gemnet.layers.radial_basis +.. py:module:: fairchem.core.models.gemnet.layers.radial_basis .. autoapi-nested-parse:: @@ -20,11 +20,11 @@ Classes .. autoapisummary:: - core.models.gemnet.layers.radial_basis.PolynomialEnvelope - core.models.gemnet.layers.radial_basis.ExponentialEnvelope - core.models.gemnet.layers.radial_basis.SphericalBesselBasis - core.models.gemnet.layers.radial_basis.BernsteinBasis - core.models.gemnet.layers.radial_basis.RadialBasis + fairchem.core.models.gemnet.layers.radial_basis.PolynomialEnvelope + fairchem.core.models.gemnet.layers.radial_basis.ExponentialEnvelope + fairchem.core.models.gemnet.layers.radial_basis.SphericalBesselBasis + fairchem.core.models.gemnet.layers.radial_basis.BernsteinBasis + fairchem.core.models.gemnet.layers.radial_basis.RadialBasis diff --git a/_sources/autoapi/core/models/gemnet/layers/spherical_basis/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/layers/spherical_basis/index.rst similarity index 69% rename from _sources/autoapi/core/models/gemnet/layers/spherical_basis/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/layers/spherical_basis/index.rst index 1e8da62c6..ce902370e 100644 --- a/_sources/autoapi/core/models/gemnet/layers/spherical_basis/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/layers/spherical_basis/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.layers.spherical_basis` -=================================================== +:py:mod:`fairchem.core.models.gemnet.layers.spherical_basis` +============================================================ -.. py:module:: core.models.gemnet.layers.spherical_basis +.. py:module:: fairchem.core.models.gemnet.layers.spherical_basis .. autoapi-nested-parse:: @@ -20,12 +20,12 @@ Classes .. autoapisummary:: - core.models.gemnet.layers.spherical_basis.CircularBasisLayer + fairchem.core.models.gemnet.layers.spherical_basis.CircularBasisLayer -.. py:class:: CircularBasisLayer(num_spherical: int, radial_basis: core.models.gemnet.layers.radial_basis.RadialBasis, cbf, efficient: bool = False) +.. py:class:: CircularBasisLayer(num_spherical: int, radial_basis: fairchem.core.models.gemnet.layers.radial_basis.RadialBasis, cbf, efficient: bool = False) Bases: :py:obj:`torch.nn.Module` diff --git a/_sources/autoapi/core/models/gemnet/utils/index.rst b/_sources/autoapi/fairchem/core/models/gemnet/utils/index.rst similarity index 84% rename from _sources/autoapi/core/models/gemnet/utils/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet/utils/index.rst index 9ef15740a..ee921c574 100644 --- a/_sources/autoapi/core/models/gemnet/utils/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet/utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet.utils` -================================== +:py:mod:`fairchem.core.models.gemnet.utils` +=========================================== -.. py:module:: core.models.gemnet.utils +.. py:module:: fairchem.core.models.gemnet.utils .. autoapi-nested-parse:: @@ -21,15 +21,15 @@ Functions .. autoapisummary:: - core.models.gemnet.utils.read_json - core.models.gemnet.utils.update_json - core.models.gemnet.utils.write_json - core.models.gemnet.utils.read_value_json - core.models.gemnet.utils.ragged_range - core.models.gemnet.utils.repeat_blocks - core.models.gemnet.utils.calculate_interatomic_vectors - core.models.gemnet.utils.inner_product_normalized - core.models.gemnet.utils.mask_neighbors + fairchem.core.models.gemnet.utils.read_json + fairchem.core.models.gemnet.utils.update_json + fairchem.core.models.gemnet.utils.write_json + fairchem.core.models.gemnet.utils.read_value_json + fairchem.core.models.gemnet.utils.ragged_range + fairchem.core.models.gemnet.utils.repeat_blocks + fairchem.core.models.gemnet.utils.calculate_interatomic_vectors + fairchem.core.models.gemnet.utils.inner_product_normalized + fairchem.core.models.gemnet.utils.mask_neighbors diff --git a/_sources/autoapi/core/models/gemnet_gp/gemnet/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/gemnet/index.rst similarity index 96% rename from _sources/autoapi/core/models/gemnet_gp/gemnet/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/gemnet/index.rst index 4152b8351..99fbd9c3a 100644 --- a/_sources/autoapi/core/models/gemnet_gp/gemnet/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/gemnet/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.gemnet` -====================================== +:py:mod:`fairchem.core.models.gemnet_gp.gemnet` +=============================================== -.. py:module:: core.models.gemnet_gp.gemnet +.. py:module:: fairchem.core.models.gemnet_gp.gemnet .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.models.gemnet_gp.gemnet.GraphParallelGemNetT + fairchem.core.models.gemnet_gp.gemnet.GraphParallelGemNetT diff --git a/_sources/autoapi/core/models/gemnet_gp/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/index.rst similarity index 96% rename from _sources/autoapi/core/models/gemnet_gp/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/index.rst index 7b9a08caf..092aee307 100644 --- a/_sources/autoapi/core/models/gemnet_gp/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp` -=============================== +:py:mod:`fairchem.core.models.gemnet_gp` +======================================== -.. py:module:: core.models.gemnet_gp +.. py:module:: fairchem.core.models.gemnet_gp Subpackages @@ -32,7 +32,7 @@ Classes .. autoapisummary:: - core.models.gemnet_gp.GraphParallelGemNetT + fairchem.core.models.gemnet_gp.GraphParallelGemNetT diff --git a/_sources/autoapi/core/models/gemnet_gp/initializers/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/initializers/index.rst similarity index 75% rename from _sources/autoapi/core/models/gemnet_gp/initializers/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/initializers/index.rst index aa83f068c..869d770df 100644 --- a/_sources/autoapi/core/models/gemnet_gp/initializers/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/initializers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.initializers` -============================================ +:py:mod:`fairchem.core.models.gemnet_gp.initializers` +===================================================== -.. py:module:: core.models.gemnet_gp.initializers +.. py:module:: fairchem.core.models.gemnet_gp.initializers .. autoapi-nested-parse:: @@ -21,8 +21,8 @@ Functions .. autoapisummary:: - core.models.gemnet_gp.initializers._standardize - core.models.gemnet_gp.initializers.he_orthogonal_init + fairchem.core.models.gemnet_gp.initializers._standardize + fairchem.core.models.gemnet_gp.initializers.he_orthogonal_init diff --git a/_sources/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/atom_update_block/index.rst similarity index 82% rename from _sources/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/layers/atom_update_block/index.rst index d8002d861..58591fa71 100644 --- a/_sources/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/atom_update_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.layers.atom_update_block` -======================================================== +:py:mod:`fairchem.core.models.gemnet_gp.layers.atom_update_block` +================================================================= -.. py:module:: core.models.gemnet_gp.layers.atom_update_block +.. py:module:: fairchem.core.models.gemnet_gp.layers.atom_update_block .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.models.gemnet_gp.layers.atom_update_block.AtomUpdateBlock - core.models.gemnet_gp.layers.atom_update_block.OutputBlock + fairchem.core.models.gemnet_gp.layers.atom_update_block.AtomUpdateBlock + fairchem.core.models.gemnet_gp.layers.atom_update_block.OutputBlock @@ -30,7 +30,7 @@ Functions .. autoapisummary:: - core.models.gemnet_gp.layers.atom_update_block.scatter_sum + fairchem.core.models.gemnet_gp.layers.atom_update_block.scatter_sum @@ -88,17 +88,17 @@ Functions :type output_init: int .. py:attribute:: dense_rbf_F - :type: core.models.gemnet_gp.layers.base_layers.Dense + :type: fairchem.core.models.gemnet_gp.layers.base_layers.Dense .. py:attribute:: out_forces - :type: core.models.gemnet_gp.layers.base_layers.Dense + :type: fairchem.core.models.gemnet_gp.layers.base_layers.Dense .. py:attribute:: out_energy - :type: core.models.gemnet_gp.layers.base_layers.Dense + :type: fairchem.core.models.gemnet_gp.layers.base_layers.Dense diff --git a/_sources/autoapi/core/models/gemnet_gp/layers/base_layers/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/base_layers/index.rst similarity index 89% rename from _sources/autoapi/core/models/gemnet_gp/layers/base_layers/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/layers/base_layers/index.rst index fc2d8f9ed..745291508 100644 --- a/_sources/autoapi/core/models/gemnet_gp/layers/base_layers/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/base_layers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.layers.base_layers` -================================================== +:py:mod:`fairchem.core.models.gemnet_gp.layers.base_layers` +=========================================================== -.. py:module:: core.models.gemnet_gp.layers.base_layers +.. py:module:: fairchem.core.models.gemnet_gp.layers.base_layers .. autoapi-nested-parse:: @@ -20,10 +20,10 @@ Classes .. autoapisummary:: - core.models.gemnet_gp.layers.base_layers.Dense - core.models.gemnet_gp.layers.base_layers.ScaledSiLU - core.models.gemnet_gp.layers.base_layers.SiQU - core.models.gemnet_gp.layers.base_layers.ResidualLayer + fairchem.core.models.gemnet_gp.layers.base_layers.Dense + fairchem.core.models.gemnet_gp.layers.base_layers.ScaledSiLU + fairchem.core.models.gemnet_gp.layers.base_layers.SiQU + fairchem.core.models.gemnet_gp.layers.base_layers.ResidualLayer diff --git a/_sources/autoapi/core/models/gemnet_gp/layers/basis_utils/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/basis_utils/index.rst similarity index 84% rename from _sources/autoapi/core/models/gemnet_gp/layers/basis_utils/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/layers/basis_utils/index.rst index 2de46d705..f742b5c52 100644 --- a/_sources/autoapi/core/models/gemnet_gp/layers/basis_utils/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/basis_utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.layers.basis_utils` -================================================== +:py:mod:`fairchem.core.models.gemnet_gp.layers.basis_utils` +=========================================================== -.. py:module:: core.models.gemnet_gp.layers.basis_utils +.. py:module:: fairchem.core.models.gemnet_gp.layers.basis_utils .. autoapi-nested-parse:: @@ -21,13 +21,13 @@ Functions .. autoapisummary:: - core.models.gemnet_gp.layers.basis_utils.Jn - core.models.gemnet_gp.layers.basis_utils.Jn_zeros - core.models.gemnet_gp.layers.basis_utils.spherical_bessel_formulas - core.models.gemnet_gp.layers.basis_utils.bessel_basis - core.models.gemnet_gp.layers.basis_utils.sph_harm_prefactor - core.models.gemnet_gp.layers.basis_utils.associated_legendre_polynomials - core.models.gemnet_gp.layers.basis_utils.real_sph_harm + fairchem.core.models.gemnet_gp.layers.basis_utils.Jn + fairchem.core.models.gemnet_gp.layers.basis_utils.Jn_zeros + fairchem.core.models.gemnet_gp.layers.basis_utils.spherical_bessel_formulas + fairchem.core.models.gemnet_gp.layers.basis_utils.bessel_basis + fairchem.core.models.gemnet_gp.layers.basis_utils.sph_harm_prefactor + fairchem.core.models.gemnet_gp.layers.basis_utils.associated_legendre_polynomials + fairchem.core.models.gemnet_gp.layers.basis_utils.real_sph_harm diff --git a/_sources/autoapi/core/models/gemnet_gp/layers/efficient/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/efficient/index.rst similarity index 86% rename from _sources/autoapi/core/models/gemnet_gp/layers/efficient/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/layers/efficient/index.rst index e704ea672..f015b1a0b 100644 --- a/_sources/autoapi/core/models/gemnet_gp/layers/efficient/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/efficient/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.layers.efficient` -================================================ +:py:mod:`fairchem.core.models.gemnet_gp.layers.efficient` +========================================================= -.. py:module:: core.models.gemnet_gp.layers.efficient +.. py:module:: fairchem.core.models.gemnet_gp.layers.efficient .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.models.gemnet_gp.layers.efficient.EfficientInteractionDownProjection - core.models.gemnet_gp.layers.efficient.EfficientInteractionBilinear + fairchem.core.models.gemnet_gp.layers.efficient.EfficientInteractionDownProjection + fairchem.core.models.gemnet_gp.layers.efficient.EfficientInteractionBilinear diff --git a/_sources/autoapi/core/models/gemnet_gp/layers/embedding_block/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/embedding_block/index.rst similarity index 80% rename from _sources/autoapi/core/models/gemnet_gp/layers/embedding_block/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/layers/embedding_block/index.rst index cf3c40c84..ec3b497a0 100644 --- a/_sources/autoapi/core/models/gemnet_gp/layers/embedding_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/embedding_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.layers.embedding_block` -====================================================== +:py:mod:`fairchem.core.models.gemnet_gp.layers.embedding_block` +=============================================================== -.. py:module:: core.models.gemnet_gp.layers.embedding_block +.. py:module:: fairchem.core.models.gemnet_gp.layers.embedding_block .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.models.gemnet_gp.layers.embedding_block.AtomEmbedding - core.models.gemnet_gp.layers.embedding_block.EdgeEmbedding + fairchem.core.models.gemnet_gp.layers.embedding_block.AtomEmbedding + fairchem.core.models.gemnet_gp.layers.embedding_block.EdgeEmbedding diff --git a/_sources/autoapi/core/models/gemnet_gp/layers/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/index.rst similarity index 66% rename from _sources/autoapi/core/models/gemnet_gp/layers/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/layers/index.rst index 395fb489d..20dce5bec 100644 --- a/_sources/autoapi/core/models/gemnet_gp/layers/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.layers` -====================================== +:py:mod:`fairchem.core.models.gemnet_gp.layers` +=============================================== -.. py:module:: core.models.gemnet_gp.layers +.. py:module:: fairchem.core.models.gemnet_gp.layers Submodules diff --git a/_sources/autoapi/core/models/gemnet_gp/layers/interaction_block/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/interaction_block/index.rst similarity index 90% rename from _sources/autoapi/core/models/gemnet_gp/layers/interaction_block/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/layers/interaction_block/index.rst index 0402cc5c9..7de69b3c9 100644 --- a/_sources/autoapi/core/models/gemnet_gp/layers/interaction_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/interaction_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.layers.interaction_block` -======================================================== +:py:mod:`fairchem.core.models.gemnet_gp.layers.interaction_block` +================================================================= -.. py:module:: core.models.gemnet_gp.layers.interaction_block +.. py:module:: fairchem.core.models.gemnet_gp.layers.interaction_block .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.models.gemnet_gp.layers.interaction_block.InteractionBlockTripletsOnly - core.models.gemnet_gp.layers.interaction_block.TripletInteraction + fairchem.core.models.gemnet_gp.layers.interaction_block.InteractionBlockTripletsOnly + fairchem.core.models.gemnet_gp.layers.interaction_block.TripletInteraction diff --git a/_sources/autoapi/core/models/gemnet_gp/layers/radial_basis/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/radial_basis/index.rst similarity index 82% rename from _sources/autoapi/core/models/gemnet_gp/layers/radial_basis/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/layers/radial_basis/index.rst index 73236d7f6..1506306c0 100644 --- a/_sources/autoapi/core/models/gemnet_gp/layers/radial_basis/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/radial_basis/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.layers.radial_basis` -=================================================== +:py:mod:`fairchem.core.models.gemnet_gp.layers.radial_basis` +============================================================ -.. py:module:: core.models.gemnet_gp.layers.radial_basis +.. py:module:: fairchem.core.models.gemnet_gp.layers.radial_basis .. autoapi-nested-parse:: @@ -20,11 +20,11 @@ Classes .. autoapisummary:: - core.models.gemnet_gp.layers.radial_basis.PolynomialEnvelope - core.models.gemnet_gp.layers.radial_basis.ExponentialEnvelope - core.models.gemnet_gp.layers.radial_basis.SphericalBesselBasis - core.models.gemnet_gp.layers.radial_basis.BernsteinBasis - core.models.gemnet_gp.layers.radial_basis.RadialBasis + fairchem.core.models.gemnet_gp.layers.radial_basis.PolynomialEnvelope + fairchem.core.models.gemnet_gp.layers.radial_basis.ExponentialEnvelope + fairchem.core.models.gemnet_gp.layers.radial_basis.SphericalBesselBasis + fairchem.core.models.gemnet_gp.layers.radial_basis.BernsteinBasis + fairchem.core.models.gemnet_gp.layers.radial_basis.RadialBasis diff --git a/_sources/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/spherical_basis/index.rst similarity index 68% rename from _sources/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/layers/spherical_basis/index.rst index 8820ed1b3..29b78eaf3 100644 --- a/_sources/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/layers/spherical_basis/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.layers.spherical_basis` -====================================================== +:py:mod:`fairchem.core.models.gemnet_gp.layers.spherical_basis` +=============================================================== -.. py:module:: core.models.gemnet_gp.layers.spherical_basis +.. py:module:: fairchem.core.models.gemnet_gp.layers.spherical_basis .. autoapi-nested-parse:: @@ -20,12 +20,12 @@ Classes .. autoapisummary:: - core.models.gemnet_gp.layers.spherical_basis.CircularBasisLayer + fairchem.core.models.gemnet_gp.layers.spherical_basis.CircularBasisLayer -.. py:class:: CircularBasisLayer(num_spherical: int, radial_basis: core.models.gemnet_gp.layers.radial_basis.RadialBasis, cbf, efficient: bool = False) +.. py:class:: CircularBasisLayer(num_spherical: int, radial_basis: fairchem.core.models.gemnet_gp.layers.radial_basis.RadialBasis, cbf, efficient: bool = False) Bases: :py:obj:`torch.nn.Module` diff --git a/_sources/autoapi/core/models/gemnet_gp/utils/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_gp/utils/index.rst similarity index 83% rename from _sources/autoapi/core/models/gemnet_gp/utils/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_gp/utils/index.rst index 1ba511bda..76d3f6310 100644 --- a/_sources/autoapi/core/models/gemnet_gp/utils/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_gp/utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_gp.utils` -===================================== +:py:mod:`fairchem.core.models.gemnet_gp.utils` +============================================== -.. py:module:: core.models.gemnet_gp.utils +.. py:module:: fairchem.core.models.gemnet_gp.utils .. autoapi-nested-parse:: @@ -21,15 +21,15 @@ Functions .. autoapisummary:: - core.models.gemnet_gp.utils.read_json - core.models.gemnet_gp.utils.update_json - core.models.gemnet_gp.utils.write_json - core.models.gemnet_gp.utils.read_value_json - core.models.gemnet_gp.utils.ragged_range - core.models.gemnet_gp.utils.repeat_blocks - core.models.gemnet_gp.utils.calculate_interatomic_vectors - core.models.gemnet_gp.utils.inner_product_normalized - core.models.gemnet_gp.utils.mask_neighbors + fairchem.core.models.gemnet_gp.utils.read_json + fairchem.core.models.gemnet_gp.utils.update_json + fairchem.core.models.gemnet_gp.utils.write_json + fairchem.core.models.gemnet_gp.utils.read_value_json + fairchem.core.models.gemnet_gp.utils.ragged_range + fairchem.core.models.gemnet_gp.utils.repeat_blocks + fairchem.core.models.gemnet_gp.utils.calculate_interatomic_vectors + fairchem.core.models.gemnet_gp.utils.inner_product_normalized + fairchem.core.models.gemnet_gp.utils.mask_neighbors diff --git a/_sources/autoapi/core/models/gemnet_oc/gemnet_oc/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/gemnet_oc/index.rst similarity index 98% rename from _sources/autoapi/core/models/gemnet_oc/gemnet_oc/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/gemnet_oc/index.rst index f6c1eeb67..f7d424db7 100644 --- a/_sources/autoapi/core/models/gemnet_oc/gemnet_oc/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/gemnet_oc/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.gemnet_oc` -========================================= +:py:mod:`fairchem.core.models.gemnet_oc.gemnet_oc` +================================================== -.. py:module:: core.models.gemnet_oc.gemnet_oc +.. py:module:: fairchem.core.models.gemnet_oc.gemnet_oc .. autoapi-nested-parse:: @@ -19,7 +19,7 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.gemnet_oc.GemNetOC + fairchem.core.models.gemnet_oc.gemnet_oc.GemNetOC diff --git a/_sources/autoapi/core/models/gemnet_oc/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/index.rst similarity index 98% rename from _sources/autoapi/core/models/gemnet_oc/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/index.rst index a49ad327a..97f6182f0 100644 --- a/_sources/autoapi/core/models/gemnet_oc/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc` -=============================== +:py:mod:`fairchem.core.models.gemnet_oc` +======================================== -.. py:module:: core.models.gemnet_oc +.. py:module:: fairchem.core.models.gemnet_oc Subpackages @@ -33,7 +33,7 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.GemNetOC + fairchem.core.models.gemnet_oc.GemNetOC diff --git a/_sources/autoapi/core/models/gemnet_oc/initializers/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/initializers/index.rst similarity index 75% rename from _sources/autoapi/core/models/gemnet_oc/initializers/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/initializers/index.rst index 00c3376fe..083c0702c 100644 --- a/_sources/autoapi/core/models/gemnet_oc/initializers/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/initializers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.initializers` -============================================ +:py:mod:`fairchem.core.models.gemnet_oc.initializers` +===================================================== -.. py:module:: core.models.gemnet_oc.initializers +.. py:module:: fairchem.core.models.gemnet_oc.initializers .. autoapi-nested-parse:: @@ -20,11 +20,11 @@ Functions .. autoapisummary:: - core.models.gemnet_oc.initializers._standardize - core.models.gemnet_oc.initializers.he_orthogonal_init - core.models.gemnet_oc.initializers.grid_init - core.models.gemnet_oc.initializers.log_grid_init - core.models.gemnet_oc.initializers.get_initializer + fairchem.core.models.gemnet_oc.initializers._standardize + fairchem.core.models.gemnet_oc.initializers.he_orthogonal_init + fairchem.core.models.gemnet_oc.initializers.grid_init + fairchem.core.models.gemnet_oc.initializers.log_grid_init + fairchem.core.models.gemnet_oc.initializers.get_initializer diff --git a/_sources/autoapi/core/models/gemnet_oc/interaction_indices/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/interaction_indices/index.rst similarity index 92% rename from _sources/autoapi/core/models/gemnet_oc/interaction_indices/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/interaction_indices/index.rst index 817102579..6a59bc7fb 100644 --- a/_sources/autoapi/core/models/gemnet_oc/interaction_indices/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/interaction_indices/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.interaction_indices` -=================================================== +:py:mod:`fairchem.core.models.gemnet_oc.interaction_indices` +============================================================ -.. py:module:: core.models.gemnet_oc.interaction_indices +.. py:module:: fairchem.core.models.gemnet_oc.interaction_indices .. autoapi-nested-parse:: @@ -20,9 +20,9 @@ Functions .. autoapisummary:: - core.models.gemnet_oc.interaction_indices.get_triplets - core.models.gemnet_oc.interaction_indices.get_mixed_triplets - core.models.gemnet_oc.interaction_indices.get_quadruplets + fairchem.core.models.gemnet_oc.interaction_indices.get_triplets + fairchem.core.models.gemnet_oc.interaction_indices.get_mixed_triplets + fairchem.core.models.gemnet_oc.interaction_indices.get_quadruplets diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/atom_update_block/index.rst similarity index 87% rename from _sources/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/atom_update_block/index.rst index 27bcd5daf..b2ea43320 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/atom_update_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers.atom_update_block` -======================================================== +:py:mod:`fairchem.core.models.gemnet_oc.layers.atom_update_block` +================================================================= -.. py:module:: core.models.gemnet_oc.layers.atom_update_block +.. py:module:: fairchem.core.models.gemnet_oc.layers.atom_update_block .. autoapi-nested-parse:: @@ -19,8 +19,8 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.layers.atom_update_block.AtomUpdateBlock - core.models.gemnet_oc.layers.atom_update_block.OutputBlock + fairchem.core.models.gemnet_oc.layers.atom_update_block.AtomUpdateBlock + fairchem.core.models.gemnet_oc.layers.atom_update_block.OutputBlock diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/base_layers/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/base_layers/index.rst similarity index 87% rename from _sources/autoapi/core/models/gemnet_oc/layers/base_layers/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/base_layers/index.rst index 999181d51..7ce2f33fc 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/base_layers/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/base_layers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers.base_layers` -================================================== +:py:mod:`fairchem.core.models.gemnet_oc.layers.base_layers` +=========================================================== -.. py:module:: core.models.gemnet_oc.layers.base_layers +.. py:module:: fairchem.core.models.gemnet_oc.layers.base_layers .. autoapi-nested-parse:: @@ -19,9 +19,9 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.layers.base_layers.Dense - core.models.gemnet_oc.layers.base_layers.ScaledSiLU - core.models.gemnet_oc.layers.base_layers.ResidualLayer + fairchem.core.models.gemnet_oc.layers.base_layers.Dense + fairchem.core.models.gemnet_oc.layers.base_layers.ScaledSiLU + fairchem.core.models.gemnet_oc.layers.base_layers.ResidualLayer diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/basis_utils/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/basis_utils/index.rst similarity index 83% rename from _sources/autoapi/core/models/gemnet_oc/layers/basis_utils/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/basis_utils/index.rst index a725a8538..3ce52cef1 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/basis_utils/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/basis_utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers.basis_utils` -================================================== +:py:mod:`fairchem.core.models.gemnet_oc.layers.basis_utils` +=========================================================== -.. py:module:: core.models.gemnet_oc.layers.basis_utils +.. py:module:: fairchem.core.models.gemnet_oc.layers.basis_utils .. autoapi-nested-parse:: @@ -20,14 +20,14 @@ Functions .. autoapisummary:: - core.models.gemnet_oc.layers.basis_utils.Jn - core.models.gemnet_oc.layers.basis_utils.Jn_zeros - core.models.gemnet_oc.layers.basis_utils.spherical_bessel_formulas - core.models.gemnet_oc.layers.basis_utils.bessel_basis - core.models.gemnet_oc.layers.basis_utils.sph_harm_prefactor - core.models.gemnet_oc.layers.basis_utils.associated_legendre_polynomials - core.models.gemnet_oc.layers.basis_utils.real_sph_harm - core.models.gemnet_oc.layers.basis_utils.get_sph_harm_basis + fairchem.core.models.gemnet_oc.layers.basis_utils.Jn + fairchem.core.models.gemnet_oc.layers.basis_utils.Jn_zeros + fairchem.core.models.gemnet_oc.layers.basis_utils.spherical_bessel_formulas + fairchem.core.models.gemnet_oc.layers.basis_utils.bessel_basis + fairchem.core.models.gemnet_oc.layers.basis_utils.sph_harm_prefactor + fairchem.core.models.gemnet_oc.layers.basis_utils.associated_legendre_polynomials + fairchem.core.models.gemnet_oc.layers.basis_utils.real_sph_harm + fairchem.core.models.gemnet_oc.layers.basis_utils.get_sph_harm_basis diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/efficient/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/efficient/index.rst similarity index 93% rename from _sources/autoapi/core/models/gemnet_oc/layers/efficient/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/efficient/index.rst index 9ba029e8a..c8e5da08d 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/efficient/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/efficient/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers.efficient` -================================================ +:py:mod:`fairchem.core.models.gemnet_oc.layers.efficient` +========================================================= -.. py:module:: core.models.gemnet_oc.layers.efficient +.. py:module:: fairchem.core.models.gemnet_oc.layers.efficient .. autoapi-nested-parse:: @@ -19,8 +19,8 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.layers.efficient.BasisEmbedding - core.models.gemnet_oc.layers.efficient.EfficientInteractionBilinear + fairchem.core.models.gemnet_oc.layers.efficient.BasisEmbedding + fairchem.core.models.gemnet_oc.layers.efficient.EfficientInteractionBilinear diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/embedding_block/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/embedding_block/index.rst similarity index 83% rename from _sources/autoapi/core/models/gemnet_oc/layers/embedding_block/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/embedding_block/index.rst index e448091e5..b53c9017c 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/embedding_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/embedding_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers.embedding_block` -====================================================== +:py:mod:`fairchem.core.models.gemnet_oc.layers.embedding_block` +=============================================================== -.. py:module:: core.models.gemnet_oc.layers.embedding_block +.. py:module:: fairchem.core.models.gemnet_oc.layers.embedding_block .. autoapi-nested-parse:: @@ -19,8 +19,8 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.layers.embedding_block.AtomEmbedding - core.models.gemnet_oc.layers.embedding_block.EdgeEmbedding + fairchem.core.models.gemnet_oc.layers.embedding_block.AtomEmbedding + fairchem.core.models.gemnet_oc.layers.embedding_block.EdgeEmbedding diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/force_scaler/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/force_scaler/index.rst similarity index 76% rename from _sources/autoapi/core/models/gemnet_oc/layers/force_scaler/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/force_scaler/index.rst index a8259ae3d..ba8de1bc2 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/force_scaler/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/force_scaler/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers.force_scaler` -=================================================== +:py:mod:`fairchem.core.models.gemnet_oc.layers.force_scaler` +============================================================ -.. py:module:: core.models.gemnet_oc.layers.force_scaler +.. py:module:: fairchem.core.models.gemnet_oc.layers.force_scaler .. autoapi-nested-parse:: @@ -19,7 +19,7 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.layers.force_scaler.ForceScaler + fairchem.core.models.gemnet_oc.layers.force_scaler.ForceScaler diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/index.rst similarity index 68% rename from _sources/autoapi/core/models/gemnet_oc/layers/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/index.rst index dd81c1a25..ff09fd285 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers` -====================================== +:py:mod:`fairchem.core.models.gemnet_oc.layers` +=============================================== -.. py:module:: core.models.gemnet_oc.layers +.. py:module:: fairchem.core.models.gemnet_oc.layers Submodules diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/interaction_block/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/interaction_block/index.rst similarity index 93% rename from _sources/autoapi/core/models/gemnet_oc/layers/interaction_block/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/interaction_block/index.rst index ae4052a88..3e12cc37d 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/interaction_block/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/interaction_block/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers.interaction_block` -======================================================== +:py:mod:`fairchem.core.models.gemnet_oc.layers.interaction_block` +================================================================= -.. py:module:: core.models.gemnet_oc.layers.interaction_block +.. py:module:: fairchem.core.models.gemnet_oc.layers.interaction_block .. autoapi-nested-parse:: @@ -19,10 +19,10 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.layers.interaction_block.InteractionBlock - core.models.gemnet_oc.layers.interaction_block.QuadrupletInteraction - core.models.gemnet_oc.layers.interaction_block.TripletInteraction - core.models.gemnet_oc.layers.interaction_block.PairInteraction + fairchem.core.models.gemnet_oc.layers.interaction_block.InteractionBlock + fairchem.core.models.gemnet_oc.layers.interaction_block.QuadrupletInteraction + fairchem.core.models.gemnet_oc.layers.interaction_block.TripletInteraction + fairchem.core.models.gemnet_oc.layers.interaction_block.PairInteraction diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/radial_basis/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/radial_basis/index.rst similarity index 87% rename from _sources/autoapi/core/models/gemnet_oc/layers/radial_basis/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/radial_basis/index.rst index faaa84b5e..7ab5b069d 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/radial_basis/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/radial_basis/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers.radial_basis` -=================================================== +:py:mod:`fairchem.core.models.gemnet_oc.layers.radial_basis` +============================================================ -.. py:module:: core.models.gemnet_oc.layers.radial_basis +.. py:module:: fairchem.core.models.gemnet_oc.layers.radial_basis .. autoapi-nested-parse:: @@ -19,12 +19,12 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.layers.radial_basis.PolynomialEnvelope - core.models.gemnet_oc.layers.radial_basis.ExponentialEnvelope - core.models.gemnet_oc.layers.radial_basis.GaussianBasis - core.models.gemnet_oc.layers.radial_basis.SphericalBesselBasis - core.models.gemnet_oc.layers.radial_basis.BernsteinBasis - core.models.gemnet_oc.layers.radial_basis.RadialBasis + fairchem.core.models.gemnet_oc.layers.radial_basis.PolynomialEnvelope + fairchem.core.models.gemnet_oc.layers.radial_basis.ExponentialEnvelope + fairchem.core.models.gemnet_oc.layers.radial_basis.GaussianBasis + fairchem.core.models.gemnet_oc.layers.radial_basis.SphericalBesselBasis + fairchem.core.models.gemnet_oc.layers.radial_basis.BernsteinBasis + fairchem.core.models.gemnet_oc.layers.radial_basis.RadialBasis diff --git a/_sources/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/spherical_basis/index.rst similarity index 72% rename from _sources/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/layers/spherical_basis/index.rst index ac7fddcb9..20dabbef4 100644 --- a/_sources/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/layers/spherical_basis/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.layers.spherical_basis` -====================================================== +:py:mod:`fairchem.core.models.gemnet_oc.layers.spherical_basis` +=============================================================== -.. py:module:: core.models.gemnet_oc.layers.spherical_basis +.. py:module:: fairchem.core.models.gemnet_oc.layers.spherical_basis .. autoapi-nested-parse:: @@ -19,13 +19,13 @@ Classes .. autoapisummary:: - core.models.gemnet_oc.layers.spherical_basis.CircularBasisLayer - core.models.gemnet_oc.layers.spherical_basis.SphericalBasisLayer + fairchem.core.models.gemnet_oc.layers.spherical_basis.CircularBasisLayer + fairchem.core.models.gemnet_oc.layers.spherical_basis.SphericalBasisLayer -.. py:class:: CircularBasisLayer(num_spherical: int, radial_basis: core.models.gemnet_oc.layers.radial_basis.RadialBasis, cbf: dict, scale_basis: bool = False) +.. py:class:: CircularBasisLayer(num_spherical: int, radial_basis: fairchem.core.models.gemnet_oc.layers.radial_basis.RadialBasis, cbf: dict, scale_basis: bool = False) Bases: :py:obj:`torch.nn.Module` @@ -45,7 +45,7 @@ Classes -.. py:class:: SphericalBasisLayer(num_spherical: int, radial_basis: core.models.gemnet_oc.layers.radial_basis.RadialBasis, sbf: dict, scale_basis: bool = False) +.. py:class:: SphericalBasisLayer(num_spherical: int, radial_basis: fairchem.core.models.gemnet_oc.layers.radial_basis.RadialBasis, sbf: dict, scale_basis: bool = False) Bases: :py:obj:`torch.nn.Module` diff --git a/_sources/autoapi/core/models/gemnet_oc/utils/index.rst b/_sources/autoapi/fairchem/core/models/gemnet_oc/utils/index.rst similarity index 85% rename from _sources/autoapi/core/models/gemnet_oc/utils/index.rst rename to _sources/autoapi/fairchem/core/models/gemnet_oc/utils/index.rst index a66317272..0ec6837bf 100644 --- a/_sources/autoapi/core/models/gemnet_oc/utils/index.rst +++ b/_sources/autoapi/fairchem/core/models/gemnet_oc/utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.gemnet_oc.utils` -===================================== +:py:mod:`fairchem.core.models.gemnet_oc.utils` +============================================== -.. py:module:: core.models.gemnet_oc.utils +.. py:module:: fairchem.core.models.gemnet_oc.utils .. autoapi-nested-parse:: @@ -20,18 +20,18 @@ Functions .. autoapisummary:: - core.models.gemnet_oc.utils.ragged_range - core.models.gemnet_oc.utils.repeat_blocks - core.models.gemnet_oc.utils.masked_select_sparsetensor_flat - core.models.gemnet_oc.utils.calculate_interatomic_vectors - core.models.gemnet_oc.utils.inner_product_clamped - core.models.gemnet_oc.utils.get_angle - core.models.gemnet_oc.utils.vector_rejection - core.models.gemnet_oc.utils.get_projected_angle - core.models.gemnet_oc.utils.mask_neighbors - core.models.gemnet_oc.utils.get_neighbor_order - core.models.gemnet_oc.utils.get_inner_idx - core.models.gemnet_oc.utils.get_edge_id + fairchem.core.models.gemnet_oc.utils.ragged_range + fairchem.core.models.gemnet_oc.utils.repeat_blocks + fairchem.core.models.gemnet_oc.utils.masked_select_sparsetensor_flat + fairchem.core.models.gemnet_oc.utils.calculate_interatomic_vectors + fairchem.core.models.gemnet_oc.utils.inner_product_clamped + fairchem.core.models.gemnet_oc.utils.get_angle + fairchem.core.models.gemnet_oc.utils.vector_rejection + fairchem.core.models.gemnet_oc.utils.get_projected_angle + fairchem.core.models.gemnet_oc.utils.mask_neighbors + fairchem.core.models.gemnet_oc.utils.get_neighbor_order + fairchem.core.models.gemnet_oc.utils.get_inner_idx + fairchem.core.models.gemnet_oc.utils.get_edge_id diff --git a/_sources/autoapi/core/models/index.rst b/_sources/autoapi/fairchem/core/models/index.rst similarity index 83% rename from _sources/autoapi/core/models/index.rst rename to _sources/autoapi/fairchem/core/models/index.rst index 5a7aa67e7..fd996b4a0 100644 --- a/_sources/autoapi/core/models/index.rst +++ b/_sources/autoapi/fairchem/core/models/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models` -===================== +:py:mod:`fairchem.core.models` +============================== -.. py:module:: core.models +.. py:module:: fairchem.core.models Subpackages @@ -41,7 +41,7 @@ Functions .. autoapisummary:: - core.models.model_name_to_local_file + fairchem.core.models.model_name_to_local_file @@ -50,7 +50,7 @@ Attributes .. autoapisummary:: - core.models.available_pretrained_models + fairchem.core.models.available_pretrained_models .. py:data:: available_pretrained_models diff --git a/_sources/autoapi/core/models/model_registry/index.rst b/_sources/autoapi/fairchem/core/models/model_registry/index.rst similarity index 71% rename from _sources/autoapi/core/models/model_registry/index.rst rename to _sources/autoapi/fairchem/core/models/model_registry/index.rst index 220b4ac26..a5ccdf72e 100644 --- a/_sources/autoapi/core/models/model_registry/index.rst +++ b/_sources/autoapi/fairchem/core/models/model_registry/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.model_registry` -==================================== +:py:mod:`fairchem.core.models.model_registry` +============================================= -.. py:module:: core.models.model_registry +.. py:module:: fairchem.core.models.model_registry .. autoapi-nested-parse:: @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - core.models.model_registry.model_name_to_local_file + fairchem.core.models.model_registry.model_name_to_local_file @@ -30,8 +30,8 @@ Attributes .. autoapisummary:: - core.models.model_registry.MODEL_REGISTRY - core.models.model_registry.available_pretrained_models + fairchem.core.models.model_registry.MODEL_REGISTRY + fairchem.core.models.model_registry.available_pretrained_models .. py:data:: MODEL_REGISTRY diff --git a/_sources/autoapi/core/models/painn/index.rst b/_sources/autoapi/fairchem/core/models/painn/index.rst similarity index 92% rename from _sources/autoapi/core/models/painn/index.rst rename to _sources/autoapi/fairchem/core/models/painn/index.rst index 82aa440a2..d7b758d01 100644 --- a/_sources/autoapi/core/models/painn/index.rst +++ b/_sources/autoapi/fairchem/core/models/painn/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.painn` -=========================== +:py:mod:`fairchem.core.models.painn` +==================================== -.. py:module:: core.models.painn +.. py:module:: fairchem.core.models.painn Submodules @@ -22,7 +22,7 @@ Classes .. autoapisummary:: - core.models.painn.PaiNN + fairchem.core.models.painn.PaiNN diff --git a/_sources/autoapi/core/models/painn/painn/index.rst b/_sources/autoapi/fairchem/core/models/painn/painn/index.rst similarity index 96% rename from _sources/autoapi/core/models/painn/painn/index.rst rename to _sources/autoapi/fairchem/core/models/painn/painn/index.rst index 12fe45835..d20d28cdb 100644 --- a/_sources/autoapi/core/models/painn/painn/index.rst +++ b/_sources/autoapi/fairchem/core/models/painn/painn/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.painn.painn` -================================= +:py:mod:`fairchem.core.models.painn.painn` +========================================== -.. py:module:: core.models.painn.painn +.. py:module:: fairchem.core.models.painn.painn .. autoapi-nested-parse:: @@ -44,11 +44,11 @@ Classes .. autoapisummary:: - core.models.painn.painn.PaiNN - core.models.painn.painn.PaiNNMessage - core.models.painn.painn.PaiNNUpdate - core.models.painn.painn.PaiNNOutput - core.models.painn.painn.GatedEquivariantBlock + fairchem.core.models.painn.painn.PaiNN + fairchem.core.models.painn.painn.PaiNNMessage + fairchem.core.models.painn.painn.PaiNNUpdate + fairchem.core.models.painn.painn.PaiNNOutput + fairchem.core.models.painn.painn.GatedEquivariantBlock diff --git a/_sources/autoapi/core/models/painn/utils/index.rst b/_sources/autoapi/fairchem/core/models/painn/utils/index.rst similarity index 88% rename from _sources/autoapi/core/models/painn/utils/index.rst rename to _sources/autoapi/fairchem/core/models/painn/utils/index.rst index c3722abaa..7a304580d 100644 --- a/_sources/autoapi/core/models/painn/utils/index.rst +++ b/_sources/autoapi/fairchem/core/models/painn/utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.painn.utils` -================================= +:py:mod:`fairchem.core.models.painn.utils` +========================================== -.. py:module:: core.models.painn.utils +.. py:module:: fairchem.core.models.painn.utils .. autoapi-nested-parse:: @@ -21,8 +21,8 @@ Functions .. autoapisummary:: - core.models.painn.utils.repeat_blocks - core.models.painn.utils.get_edge_id + fairchem.core.models.painn.utils.repeat_blocks + fairchem.core.models.painn.utils.get_edge_id diff --git a/_sources/autoapi/core/models/schnet/index.rst b/_sources/autoapi/fairchem/core/models/schnet/index.rst similarity index 95% rename from _sources/autoapi/core/models/schnet/index.rst rename to _sources/autoapi/fairchem/core/models/schnet/index.rst index bea77e4ed..42f2db5fe 100644 --- a/_sources/autoapi/core/models/schnet/index.rst +++ b/_sources/autoapi/fairchem/core/models/schnet/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.schnet` -============================ +:py:mod:`fairchem.core.models.schnet` +===================================== -.. py:module:: core.models.schnet +.. py:module:: fairchem.core.models.schnet .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.models.schnet.SchNetWrap + fairchem.core.models.schnet.SchNetWrap diff --git a/_sources/autoapi/core/models/scn/index.rst b/_sources/autoapi/fairchem/core/models/scn/index.rst similarity index 96% rename from _sources/autoapi/core/models/scn/index.rst rename to _sources/autoapi/fairchem/core/models/scn/index.rst index b5f2b61c0..6fb7677ad 100644 --- a/_sources/autoapi/core/models/scn/index.rst +++ b/_sources/autoapi/fairchem/core/models/scn/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.scn` -========================= +:py:mod:`fairchem.core.models.scn` +================================== -.. py:module:: core.models.scn +.. py:module:: fairchem.core.models.scn Submodules @@ -24,7 +24,7 @@ Classes .. autoapisummary:: - core.models.scn.SphericalChannelNetwork + fairchem.core.models.scn.SphericalChannelNetwork diff --git a/_sources/autoapi/core/models/scn/sampling/index.rst b/_sources/autoapi/fairchem/core/models/scn/sampling/index.rst similarity index 64% rename from _sources/autoapi/core/models/scn/sampling/index.rst rename to _sources/autoapi/fairchem/core/models/scn/sampling/index.rst index 6cd596fb3..a019b290a 100644 --- a/_sources/autoapi/core/models/scn/sampling/index.rst +++ b/_sources/autoapi/fairchem/core/models/scn/sampling/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.scn.sampling` -================================== +:py:mod:`fairchem.core.models.scn.sampling` +=========================================== -.. py:module:: core.models.scn.sampling +.. py:module:: fairchem.core.models.scn.sampling .. autoapi-nested-parse:: @@ -21,8 +21,8 @@ Functions .. autoapisummary:: - core.models.scn.sampling.CalcSpherePoints - core.models.scn.sampling.CalcSpherePointsRandom + fairchem.core.models.scn.sampling.CalcSpherePoints + fairchem.core.models.scn.sampling.CalcSpherePointsRandom diff --git a/_sources/autoapi/core/models/scn/scn/index.rst b/_sources/autoapi/fairchem/core/models/scn/scn/index.rst similarity index 96% rename from _sources/autoapi/core/models/scn/scn/index.rst rename to _sources/autoapi/fairchem/core/models/scn/scn/index.rst index aa1235dcb..0533ed38c 100644 --- a/_sources/autoapi/core/models/scn/scn/index.rst +++ b/_sources/autoapi/fairchem/core/models/scn/scn/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.scn.scn` -============================= +:py:mod:`fairchem.core.models.scn.scn` +====================================== -.. py:module:: core.models.scn.scn +.. py:module:: fairchem.core.models.scn.scn .. autoapi-nested-parse:: @@ -20,10 +20,10 @@ Classes .. autoapisummary:: - core.models.scn.scn.SphericalChannelNetwork - core.models.scn.scn.EdgeBlock - core.models.scn.scn.MessageBlock - core.models.scn.scn.DistanceBlock + fairchem.core.models.scn.scn.SphericalChannelNetwork + fairchem.core.models.scn.scn.EdgeBlock + fairchem.core.models.scn.scn.MessageBlock + fairchem.core.models.scn.scn.DistanceBlock diff --git a/_sources/autoapi/core/models/scn/smearing/index.rst b/_sources/autoapi/fairchem/core/models/scn/smearing/index.rst similarity index 93% rename from _sources/autoapi/core/models/scn/smearing/index.rst rename to _sources/autoapi/fairchem/core/models/scn/smearing/index.rst index ce325292a..9bbcfb760 100644 --- a/_sources/autoapi/core/models/scn/smearing/index.rst +++ b/_sources/autoapi/fairchem/core/models/scn/smearing/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.scn.smearing` -================================== +:py:mod:`fairchem.core.models.scn.smearing` +=========================================== -.. py:module:: core.models.scn.smearing +.. py:module:: fairchem.core.models.scn.smearing .. autoapi-nested-parse:: @@ -20,10 +20,10 @@ Classes .. autoapisummary:: - core.models.scn.smearing.GaussianSmearing - core.models.scn.smearing.SigmoidSmearing - core.models.scn.smearing.LinearSigmoidSmearing - core.models.scn.smearing.SiLUSmearing + fairchem.core.models.scn.smearing.GaussianSmearing + fairchem.core.models.scn.smearing.SigmoidSmearing + fairchem.core.models.scn.smearing.LinearSigmoidSmearing + fairchem.core.models.scn.smearing.SiLUSmearing diff --git a/_sources/autoapi/core/models/scn/spherical_harmonics/index.rst b/_sources/autoapi/fairchem/core/models/scn/spherical_harmonics/index.rst similarity index 80% rename from _sources/autoapi/core/models/scn/spherical_harmonics/index.rst rename to _sources/autoapi/fairchem/core/models/scn/spherical_harmonics/index.rst index b19697c1f..58310ef86 100644 --- a/_sources/autoapi/core/models/scn/spherical_harmonics/index.rst +++ b/_sources/autoapi/fairchem/core/models/scn/spherical_harmonics/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.scn.spherical_harmonics` -============================================= +:py:mod:`fairchem.core.models.scn.spherical_harmonics` +====================================================== -.. py:module:: core.models.scn.spherical_harmonics +.. py:module:: fairchem.core.models.scn.spherical_harmonics .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.models.scn.spherical_harmonics.SphericalHarmonicsHelper + fairchem.core.models.scn.spherical_harmonics.SphericalHarmonicsHelper @@ -29,8 +29,8 @@ Functions .. autoapisummary:: - core.models.scn.spherical_harmonics.wigner_D - core.models.scn.spherical_harmonics._z_rot_mat + fairchem.core.models.scn.spherical_harmonics.wigner_D + fairchem.core.models.scn.spherical_harmonics._z_rot_mat @@ -39,7 +39,7 @@ Attributes .. autoapisummary:: - core.models.scn.spherical_harmonics._Jd + fairchem.core.models.scn.spherical_harmonics._Jd .. py:data:: _Jd diff --git a/_sources/autoapi/core/models/utils/activations/index.rst b/_sources/autoapi/fairchem/core/models/utils/activations/index.rst similarity index 88% rename from _sources/autoapi/core/models/utils/activations/index.rst rename to _sources/autoapi/fairchem/core/models/utils/activations/index.rst index 23d7855b6..8f533bcc0 100644 --- a/_sources/autoapi/core/models/utils/activations/index.rst +++ b/_sources/autoapi/fairchem/core/models/utils/activations/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.utils.activations` -======================================= +:py:mod:`fairchem.core.models.utils.activations` +================================================ -.. py:module:: core.models.utils.activations +.. py:module:: fairchem.core.models.utils.activations .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.models.utils.activations.Act + fairchem.core.models.utils.activations.Act diff --git a/_sources/autoapi/core/models/utils/basis/index.rst b/_sources/autoapi/fairchem/core/models/utils/basis/index.rst similarity index 95% rename from _sources/autoapi/core/models/utils/basis/index.rst rename to _sources/autoapi/fairchem/core/models/utils/basis/index.rst index f33ce9953..52e43d5d0 100644 --- a/_sources/autoapi/core/models/utils/basis/index.rst +++ b/_sources/autoapi/fairchem/core/models/utils/basis/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.utils.basis` -================================= +:py:mod:`fairchem.core.models.utils.basis` +========================================== -.. py:module:: core.models.utils.basis +.. py:module:: fairchem.core.models.utils.basis .. autoapi-nested-parse:: @@ -20,13 +20,13 @@ Classes .. autoapisummary:: - core.models.utils.basis.Sine - core.models.utils.basis.SIREN - core.models.utils.basis.SINESmearing - core.models.utils.basis.GaussianSmearing - core.models.utils.basis.FourierSmearing - core.models.utils.basis.Basis - core.models.utils.basis.SphericalSmearing + fairchem.core.models.utils.basis.Sine + fairchem.core.models.utils.basis.SIREN + fairchem.core.models.utils.basis.SINESmearing + fairchem.core.models.utils.basis.GaussianSmearing + fairchem.core.models.utils.basis.FourierSmearing + fairchem.core.models.utils.basis.Basis + fairchem.core.models.utils.basis.SphericalSmearing diff --git a/_sources/autoapi/core/models/utils/index.rst b/_sources/autoapi/fairchem/core/models/utils/index.rst similarity index 50% rename from _sources/autoapi/core/models/utils/index.rst rename to _sources/autoapi/fairchem/core/models/utils/index.rst index da195a466..1d6ff8ba7 100644 --- a/_sources/autoapi/core/models/utils/index.rst +++ b/_sources/autoapi/fairchem/core/models/utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.models.utils` -=========================== +:py:mod:`fairchem.core.models.utils` +==================================== -.. py:module:: core.models.utils +.. py:module:: fairchem.core.models.utils Submodules diff --git a/_sources/autoapi/core/modules/evaluator/index.rst b/_sources/autoapi/fairchem/core/modules/evaluator/index.rst similarity index 76% rename from _sources/autoapi/core/modules/evaluator/index.rst rename to _sources/autoapi/fairchem/core/modules/evaluator/index.rst index e8cf3abfe..08326c3da 100644 --- a/_sources/autoapi/core/modules/evaluator/index.rst +++ b/_sources/autoapi/fairchem/core/modules/evaluator/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.evaluator` -================================ +:py:mod:`fairchem.core.modules.evaluator` +========================================= -.. py:module:: core.modules.evaluator +.. py:module:: fairchem.core.modules.evaluator .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.modules.evaluator.Evaluator + fairchem.core.modules.evaluator.Evaluator @@ -29,20 +29,20 @@ Functions .. autoapisummary:: - core.modules.evaluator.forcesx_mae - core.modules.evaluator.forcesx_mse - core.modules.evaluator.forcesy_mae - core.modules.evaluator.forcesy_mse - core.modules.evaluator.forcesz_mae - core.modules.evaluator.forcesz_mse - core.modules.evaluator.energy_forces_within_threshold - core.modules.evaluator.energy_within_threshold - core.modules.evaluator.average_distance_within_threshold - core.modules.evaluator.min_diff - core.modules.evaluator.cosine_similarity - core.modules.evaluator.mae - core.modules.evaluator.mse - core.modules.evaluator.magnitude_error + fairchem.core.modules.evaluator.forcesx_mae + fairchem.core.modules.evaluator.forcesx_mse + fairchem.core.modules.evaluator.forcesy_mae + fairchem.core.modules.evaluator.forcesy_mse + fairchem.core.modules.evaluator.forcesz_mae + fairchem.core.modules.evaluator.forcesz_mse + fairchem.core.modules.evaluator.energy_forces_within_threshold + fairchem.core.modules.evaluator.energy_within_threshold + fairchem.core.modules.evaluator.average_distance_within_threshold + fairchem.core.modules.evaluator.min_diff + fairchem.core.modules.evaluator.cosine_similarity + fairchem.core.modules.evaluator.mae + fairchem.core.modules.evaluator.mse + fairchem.core.modules.evaluator.magnitude_error @@ -51,7 +51,7 @@ Attributes .. autoapisummary:: - core.modules.evaluator.NONE + fairchem.core.modules.evaluator.NONE .. py:data:: NONE diff --git a/_sources/autoapi/core/modules/exponential_moving_average/index.rst b/_sources/autoapi/fairchem/core/modules/exponential_moving_average/index.rst similarity index 92% rename from _sources/autoapi/core/modules/exponential_moving_average/index.rst rename to _sources/autoapi/fairchem/core/modules/exponential_moving_average/index.rst index 2ac2993cd..e8381d965 100644 --- a/_sources/autoapi/core/modules/exponential_moving_average/index.rst +++ b/_sources/autoapi/fairchem/core/modules/exponential_moving_average/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.exponential_moving_average` -================================================= +:py:mod:`fairchem.core.modules.exponential_moving_average` +========================================================== -.. py:module:: core.modules.exponential_moving_average +.. py:module:: fairchem.core.modules.exponential_moving_average .. autoapi-nested-parse:: @@ -18,7 +18,7 @@ Classes .. autoapisummary:: - core.modules.exponential_moving_average.ExponentialMovingAverage + fairchem.core.modules.exponential_moving_average.ExponentialMovingAverage diff --git a/_sources/autoapi/core/modules/index.rst b/_sources/autoapi/fairchem/core/modules/index.rst similarity index 83% rename from _sources/autoapi/core/modules/index.rst rename to _sources/autoapi/fairchem/core/modules/index.rst index ea4adb9a5..1b41f0d94 100644 --- a/_sources/autoapi/core/modules/index.rst +++ b/_sources/autoapi/fairchem/core/modules/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules` -====================== +:py:mod:`fairchem.core.modules` +=============================== -.. py:module:: core.modules +.. py:module:: fairchem.core.modules .. autoapi-nested-parse:: diff --git a/_sources/autoapi/core/modules/loss/index.rst b/_sources/autoapi/fairchem/core/modules/loss/index.rst similarity index 94% rename from _sources/autoapi/core/modules/loss/index.rst rename to _sources/autoapi/fairchem/core/modules/loss/index.rst index 079bb7af3..32b443a00 100644 --- a/_sources/autoapi/core/modules/loss/index.rst +++ b/_sources/autoapi/fairchem/core/modules/loss/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.loss` -=========================== +:py:mod:`fairchem.core.modules.loss` +==================================== -.. py:module:: core.modules.loss +.. py:module:: fairchem.core.modules.loss Module Contents @@ -12,9 +12,9 @@ Classes .. autoapisummary:: - core.modules.loss.L2MAELoss - core.modules.loss.AtomwiseL2Loss - core.modules.loss.DDPLoss + fairchem.core.modules.loss.L2MAELoss + fairchem.core.modules.loss.AtomwiseL2Loss + fairchem.core.modules.loss.DDPLoss diff --git a/_sources/autoapi/core/modules/normalizer/index.rst b/_sources/autoapi/fairchem/core/modules/normalizer/index.rst similarity index 79% rename from _sources/autoapi/core/modules/normalizer/index.rst rename to _sources/autoapi/fairchem/core/modules/normalizer/index.rst index 56cf72000..7ee248843 100644 --- a/_sources/autoapi/core/modules/normalizer/index.rst +++ b/_sources/autoapi/fairchem/core/modules/normalizer/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.normalizer` -================================= +:py:mod:`fairchem.core.modules.normalizer` +========================================== -.. py:module:: core.modules.normalizer +.. py:module:: fairchem.core.modules.normalizer .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.modules.normalizer.Normalizer + fairchem.core.modules.normalizer.Normalizer diff --git a/_sources/autoapi/core/modules/scaling/compat/index.rst b/_sources/autoapi/fairchem/core/modules/scaling/compat/index.rst similarity index 65% rename from _sources/autoapi/core/modules/scaling/compat/index.rst rename to _sources/autoapi/fairchem/core/modules/scaling/compat/index.rst index a3e7f7339..4f462336d 100644 --- a/_sources/autoapi/core/modules/scaling/compat/index.rst +++ b/_sources/autoapi/fairchem/core/modules/scaling/compat/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.scaling.compat` -===================================== +:py:mod:`fairchem.core.modules.scaling.compat` +============================================== -.. py:module:: core.modules.scaling.compat +.. py:module:: fairchem.core.modules.scaling.compat Module Contents @@ -13,8 +13,8 @@ Functions .. autoapisummary:: - core.modules.scaling.compat._load_scale_dict - core.modules.scaling.compat.load_scales_compat + fairchem.core.modules.scaling.compat._load_scale_dict + fairchem.core.modules.scaling.compat.load_scales_compat @@ -23,7 +23,7 @@ Attributes .. autoapisummary:: - core.modules.scaling.compat.ScaleDict + fairchem.core.modules.scaling.compat.ScaleDict .. py:data:: ScaleDict diff --git a/_sources/autoapi/core/modules/scaling/fit/index.rst b/_sources/autoapi/fairchem/core/modules/scaling/fit/index.rst similarity index 53% rename from _sources/autoapi/core/modules/scaling/fit/index.rst rename to _sources/autoapi/fairchem/core/modules/scaling/fit/index.rst index b36129e1a..028d2607b 100644 --- a/_sources/autoapi/core/modules/scaling/fit/index.rst +++ b/_sources/autoapi/fairchem/core/modules/scaling/fit/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.scaling.fit` -================================== +:py:mod:`fairchem.core.modules.scaling.fit` +=========================================== -.. py:module:: core.modules.scaling.fit +.. py:module:: fairchem.core.modules.scaling.fit Module Contents @@ -13,9 +13,9 @@ Functions .. autoapisummary:: - core.modules.scaling.fit._prefilled_input - core.modules.scaling.fit._train_batch - core.modules.scaling.fit.main + fairchem.core.modules.scaling.fit._prefilled_input + fairchem.core.modules.scaling.fit._train_batch + fairchem.core.modules.scaling.fit.main diff --git a/_sources/autoapi/core/modules/scaling/index.rst b/_sources/autoapi/fairchem/core/modules/scaling/index.rst similarity index 93% rename from _sources/autoapi/core/modules/scaling/index.rst rename to _sources/autoapi/fairchem/core/modules/scaling/index.rst index b04ed10c6..e5542d5c4 100644 --- a/_sources/autoapi/core/modules/scaling/index.rst +++ b/_sources/autoapi/fairchem/core/modules/scaling/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.scaling` -============================== +:py:mod:`fairchem.core.modules.scaling` +======================================= -.. py:module:: core.modules.scaling +.. py:module:: fairchem.core.modules.scaling Submodules @@ -24,7 +24,7 @@ Classes .. autoapisummary:: - core.modules.scaling.ScaleFactor + fairchem.core.modules.scaling.ScaleFactor diff --git a/_sources/autoapi/core/modules/scaling/scale_factor/index.rst b/_sources/autoapi/fairchem/core/modules/scaling/scale_factor/index.rst similarity index 88% rename from _sources/autoapi/core/modules/scaling/scale_factor/index.rst rename to _sources/autoapi/fairchem/core/modules/scaling/scale_factor/index.rst index c72187413..bdde37911 100644 --- a/_sources/autoapi/core/modules/scaling/scale_factor/index.rst +++ b/_sources/autoapi/fairchem/core/modules/scaling/scale_factor/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.scaling.scale_factor` -=========================================== +:py:mod:`fairchem.core.modules.scaling.scale_factor` +==================================================== -.. py:module:: core.modules.scaling.scale_factor +.. py:module:: fairchem.core.modules.scaling.scale_factor Module Contents @@ -12,8 +12,8 @@ Classes .. autoapisummary:: - core.modules.scaling.scale_factor._Stats - core.modules.scaling.scale_factor.ScaleFactor + fairchem.core.modules.scaling.scale_factor._Stats + fairchem.core.modules.scaling.scale_factor.ScaleFactor @@ -22,7 +22,7 @@ Functions .. autoapisummary:: - core.modules.scaling.scale_factor._check_consistency + fairchem.core.modules.scaling.scale_factor._check_consistency @@ -31,7 +31,7 @@ Attributes .. autoapisummary:: - core.modules.scaling.scale_factor.IndexFn + fairchem.core.modules.scaling.scale_factor.IndexFn .. py:class:: _Stats diff --git a/_sources/autoapi/fairchem/core/modules/scaling/util/index.rst b/_sources/autoapi/fairchem/core/modules/scaling/util/index.rst new file mode 100644 index 000000000..156d2c241 --- /dev/null +++ b/_sources/autoapi/fairchem/core/modules/scaling/util/index.rst @@ -0,0 +1,22 @@ +:py:mod:`fairchem.core.modules.scaling.util` +============================================ + +.. py:module:: fairchem.core.modules.scaling.util + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.modules.scaling.util.ensure_fitted + + + +.. py:function:: ensure_fitted(module: torch.nn.Module, warn: bool = False) -> None + + diff --git a/_sources/autoapi/core/modules/scheduler/index.rst b/_sources/autoapi/fairchem/core/modules/scheduler/index.rst similarity index 81% rename from _sources/autoapi/core/modules/scheduler/index.rst rename to _sources/autoapi/fairchem/core/modules/scheduler/index.rst index 3668a763c..7fdd4c914 100644 --- a/_sources/autoapi/core/modules/scheduler/index.rst +++ b/_sources/autoapi/fairchem/core/modules/scheduler/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.scheduler` -================================ +:py:mod:`fairchem.core.modules.scheduler` +========================================= -.. py:module:: core.modules.scheduler +.. py:module:: fairchem.core.modules.scheduler Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - core.modules.scheduler.LRScheduler + fairchem.core.modules.scheduler.LRScheduler diff --git a/_sources/autoapi/core/modules/transforms/index.rst b/_sources/autoapi/fairchem/core/modules/transforms/index.rst similarity index 54% rename from _sources/autoapi/core/modules/transforms/index.rst rename to _sources/autoapi/fairchem/core/modules/transforms/index.rst index b05f54993..2da555a56 100644 --- a/_sources/autoapi/core/modules/transforms/index.rst +++ b/_sources/autoapi/fairchem/core/modules/transforms/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.modules.transforms` -================================= +:py:mod:`fairchem.core.modules.transforms` +========================================== -.. py:module:: core.modules.transforms +.. py:module:: fairchem.core.modules.transforms Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - core.modules.transforms.DataTransforms + fairchem.core.modules.transforms.DataTransforms @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - core.modules.transforms.decompose_tensor + fairchem.core.modules.transforms.decompose_tensor diff --git a/_sources/autoapi/core/preprocessing/atoms_to_graphs/index.rst b/_sources/autoapi/fairchem/core/preprocessing/atoms_to_graphs/index.rst similarity index 94% rename from _sources/autoapi/core/preprocessing/atoms_to_graphs/index.rst rename to _sources/autoapi/fairchem/core/preprocessing/atoms_to_graphs/index.rst index d3cd5b3d7..df8127591 100644 --- a/_sources/autoapi/core/preprocessing/atoms_to_graphs/index.rst +++ b/_sources/autoapi/fairchem/core/preprocessing/atoms_to_graphs/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.preprocessing.atoms_to_graphs` -============================================ +:py:mod:`fairchem.core.preprocessing.atoms_to_graphs` +===================================================== -.. py:module:: core.preprocessing.atoms_to_graphs +.. py:module:: fairchem.core.preprocessing.atoms_to_graphs .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.preprocessing.atoms_to_graphs.AtomsToGraphs + fairchem.core.preprocessing.atoms_to_graphs.AtomsToGraphs @@ -30,8 +30,8 @@ Attributes .. autoapisummary:: - core.preprocessing.atoms_to_graphs.AseAtomsAdaptor - core.preprocessing.atoms_to_graphs.shell + fairchem.core.preprocessing.atoms_to_graphs.AseAtomsAdaptor + fairchem.core.preprocessing.atoms_to_graphs.shell .. py:data:: AseAtomsAdaptor diff --git a/_sources/autoapi/core/preprocessing/index.rst b/_sources/autoapi/fairchem/core/preprocessing/index.rst similarity index 97% rename from _sources/autoapi/core/preprocessing/index.rst rename to _sources/autoapi/fairchem/core/preprocessing/index.rst index f6acc52e3..4f1d1ad37 100644 --- a/_sources/autoapi/core/preprocessing/index.rst +++ b/_sources/autoapi/fairchem/core/preprocessing/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.preprocessing` -============================ +:py:mod:`fairchem.core.preprocessing` +===================================== -.. py:module:: core.preprocessing +.. py:module:: fairchem.core.preprocessing .. autoapi-nested-parse:: @@ -29,7 +29,7 @@ Classes .. autoapisummary:: - core.preprocessing.AtomsToGraphs + fairchem.core.preprocessing.AtomsToGraphs diff --git a/_sources/autoapi/core/scripts/download_data/index.rst b/_sources/autoapi/fairchem/core/scripts/download_data/index.rst similarity index 53% rename from _sources/autoapi/core/scripts/download_data/index.rst rename to _sources/autoapi/fairchem/core/scripts/download_data/index.rst index 6f4d4aea8..97c09fa34 100644 --- a/_sources/autoapi/core/scripts/download_data/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/download_data/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts.download_data` -==================================== +:py:mod:`fairchem.core.scripts.download_data` +============================================= -.. py:module:: core.scripts.download_data +.. py:module:: fairchem.core.scripts.download_data Module Contents @@ -13,11 +13,11 @@ Functions .. autoapisummary:: - core.scripts.download_data.get_data - core.scripts.download_data.uncompress_data - core.scripts.download_data.preprocess_data - core.scripts.download_data.verify_count - core.scripts.download_data.cleanup + fairchem.core.scripts.download_data.get_data + fairchem.core.scripts.download_data.uncompress_data + fairchem.core.scripts.download_data.preprocess_data + fairchem.core.scripts.download_data.verify_count + fairchem.core.scripts.download_data.cleanup @@ -26,10 +26,10 @@ Attributes .. autoapisummary:: - core.scripts.download_data.DOWNLOAD_LINKS_s2ef - core.scripts.download_data.DOWNLOAD_LINKS_is2re - core.scripts.download_data.S2EF_COUNTS - core.scripts.download_data.parser + fairchem.core.scripts.download_data.DOWNLOAD_LINKS_s2ef + fairchem.core.scripts.download_data.DOWNLOAD_LINKS_is2re + fairchem.core.scripts.download_data.S2EF_COUNTS + fairchem.core.scripts.download_data.parser .. py:data:: DOWNLOAD_LINKS_s2ef diff --git a/_sources/autoapi/core/scripts/gif_maker_parallelized/index.rst b/_sources/autoapi/fairchem/core/scripts/gif_maker_parallelized/index.rst similarity index 64% rename from _sources/autoapi/core/scripts/gif_maker_parallelized/index.rst rename to _sources/autoapi/fairchem/core/scripts/gif_maker_parallelized/index.rst index 234e708f9..8649498a5 100644 --- a/_sources/autoapi/core/scripts/gif_maker_parallelized/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/gif_maker_parallelized/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts.gif_maker_parallelized` -============================================= +:py:mod:`fairchem.core.scripts.gif_maker_parallelized` +====================================================== -.. py:module:: core.scripts.gif_maker_parallelized +.. py:module:: fairchem.core.scripts.gif_maker_parallelized .. autoapi-nested-parse:: @@ -27,9 +27,9 @@ Functions .. autoapisummary:: - core.scripts.gif_maker_parallelized.pov_from_atoms - core.scripts.gif_maker_parallelized.parallelize_generation - core.scripts.gif_maker_parallelized.get_parser + fairchem.core.scripts.gif_maker_parallelized.pov_from_atoms + fairchem.core.scripts.gif_maker_parallelized.parallelize_generation + fairchem.core.scripts.gif_maker_parallelized.get_parser @@ -38,7 +38,7 @@ Attributes .. autoapisummary:: - core.scripts.gif_maker_parallelized.parser + fairchem.core.scripts.gif_maker_parallelized.parser .. py:function:: pov_from_atoms(mp_args) -> None diff --git a/_sources/autoapi/core/scripts/hpo/index.rst b/_sources/autoapi/fairchem/core/scripts/hpo/index.rst similarity index 74% rename from _sources/autoapi/core/scripts/hpo/index.rst rename to _sources/autoapi/fairchem/core/scripts/hpo/index.rst index 2a5810b28..7045188e3 100644 --- a/_sources/autoapi/core/scripts/hpo/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/hpo/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts.hpo` -========================== +:py:mod:`fairchem.core.scripts.hpo` +=================================== -.. py:module:: core.scripts.hpo +.. py:module:: fairchem.core.scripts.hpo .. autoapi-nested-parse:: diff --git a/_sources/autoapi/fairchem/core/scripts/hpo/run_tune/index.rst b/_sources/autoapi/fairchem/core/scripts/hpo/run_tune/index.rst new file mode 100644 index 000000000..2ce7fcdba --- /dev/null +++ b/_sources/autoapi/fairchem/core/scripts/hpo/run_tune/index.rst @@ -0,0 +1,26 @@ +:py:mod:`fairchem.core.scripts.hpo.run_tune` +============================================ + +.. py:module:: fairchem.core.scripts.hpo.run_tune + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.scripts.hpo.run_tune.ocp_trainable + fairchem.core.scripts.hpo.run_tune.main + + + +.. py:function:: ocp_trainable(config, checkpoint_dir=None) -> None + + +.. py:function:: main() -> None + + diff --git a/_sources/autoapi/fairchem/core/scripts/hpo/run_tune_pbt/index.rst b/_sources/autoapi/fairchem/core/scripts/hpo/run_tune_pbt/index.rst new file mode 100644 index 000000000..f5c4241c8 --- /dev/null +++ b/_sources/autoapi/fairchem/core/scripts/hpo/run_tune_pbt/index.rst @@ -0,0 +1,26 @@ +:py:mod:`fairchem.core.scripts.hpo.run_tune_pbt` +================================================ + +.. py:module:: fairchem.core.scripts.hpo.run_tune_pbt + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.scripts.hpo.run_tune_pbt.ocp_trainable + fairchem.core.scripts.hpo.run_tune_pbt.main + + + +.. py:function:: ocp_trainable(config, checkpoint_dir=None) -> None + + +.. py:function:: main() -> None + + diff --git a/_sources/autoapi/core/scripts/index.rst b/_sources/autoapi/fairchem/core/scripts/index.rst similarity index 86% rename from _sources/autoapi/core/scripts/index.rst rename to _sources/autoapi/fairchem/core/scripts/index.rst index 690934af7..0a19fdfc7 100644 --- a/_sources/autoapi/core/scripts/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts` -====================== +:py:mod:`fairchem.core.scripts` +=============================== -.. py:module:: core.scripts +.. py:module:: fairchem.core.scripts .. autoapi-nested-parse:: diff --git a/_sources/autoapi/core/scripts/make_challenge_submission_file/index.rst b/_sources/autoapi/fairchem/core/scripts/make_challenge_submission_file/index.rst similarity index 59% rename from _sources/autoapi/core/scripts/make_challenge_submission_file/index.rst rename to _sources/autoapi/fairchem/core/scripts/make_challenge_submission_file/index.rst index c9787ea4f..30ddb2bee 100644 --- a/_sources/autoapi/core/scripts/make_challenge_submission_file/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/make_challenge_submission_file/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts.make_challenge_submission_file` -===================================================== +:py:mod:`fairchem.core.scripts.make_challenge_submission_file` +============================================================== -.. py:module:: core.scripts.make_challenge_submission_file +.. py:module:: fairchem.core.scripts.make_challenge_submission_file .. autoapi-nested-parse:: @@ -25,9 +25,9 @@ Functions .. autoapisummary:: - core.scripts.make_challenge_submission_file.write_is2re_relaxations - core.scripts.make_challenge_submission_file.write_predictions - core.scripts.make_challenge_submission_file.main + fairchem.core.scripts.make_challenge_submission_file.write_is2re_relaxations + fairchem.core.scripts.make_challenge_submission_file.write_predictions + fairchem.core.scripts.make_challenge_submission_file.main @@ -36,7 +36,7 @@ Attributes .. autoapisummary:: - core.scripts.make_challenge_submission_file.parser + fairchem.core.scripts.make_challenge_submission_file.parser .. py:function:: write_is2re_relaxations(path: str, filename: str, hybrid) -> None diff --git a/_sources/autoapi/core/scripts/make_lmdb_sizes/index.rst b/_sources/autoapi/fairchem/core/scripts/make_lmdb_sizes/index.rst similarity index 56% rename from _sources/autoapi/core/scripts/make_lmdb_sizes/index.rst rename to _sources/autoapi/fairchem/core/scripts/make_lmdb_sizes/index.rst index d900bb153..67981923c 100644 --- a/_sources/autoapi/core/scripts/make_lmdb_sizes/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/make_lmdb_sizes/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts.make_lmdb_sizes` -====================================== +:py:mod:`fairchem.core.scripts.make_lmdb_sizes` +=============================================== -.. py:module:: core.scripts.make_lmdb_sizes +.. py:module:: fairchem.core.scripts.make_lmdb_sizes .. autoapi-nested-parse:: @@ -19,8 +19,8 @@ Functions .. autoapisummary:: - core.scripts.make_lmdb_sizes.get_data - core.scripts.make_lmdb_sizes.main + fairchem.core.scripts.make_lmdb_sizes.get_data + fairchem.core.scripts.make_lmdb_sizes.main @@ -29,7 +29,7 @@ Attributes .. autoapisummary:: - core.scripts.make_lmdb_sizes.parser + fairchem.core.scripts.make_lmdb_sizes.parser .. py:function:: get_data(index) diff --git a/_sources/autoapi/core/scripts/make_submission_file/index.rst b/_sources/autoapi/fairchem/core/scripts/make_submission_file/index.rst similarity index 54% rename from _sources/autoapi/core/scripts/make_submission_file/index.rst rename to _sources/autoapi/fairchem/core/scripts/make_submission_file/index.rst index 8c89e0864..f7a104d41 100644 --- a/_sources/autoapi/core/scripts/make_submission_file/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/make_submission_file/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts.make_submission_file` -=========================================== +:py:mod:`fairchem.core.scripts.make_submission_file` +==================================================== -.. py:module:: core.scripts.make_submission_file +.. py:module:: fairchem.core.scripts.make_submission_file .. autoapi-nested-parse:: @@ -21,9 +21,9 @@ Functions .. autoapisummary:: - core.scripts.make_submission_file.write_is2re_relaxations - core.scripts.make_submission_file.write_predictions - core.scripts.make_submission_file.main + fairchem.core.scripts.make_submission_file.write_is2re_relaxations + fairchem.core.scripts.make_submission_file.write_predictions + fairchem.core.scripts.make_submission_file.main @@ -32,8 +32,8 @@ Attributes .. autoapisummary:: - core.scripts.make_submission_file.SPLITS - core.scripts.make_submission_file.parser + fairchem.core.scripts.make_submission_file.SPLITS + fairchem.core.scripts.make_submission_file.parser .. py:data:: SPLITS diff --git a/_sources/autoapi/core/scripts/preprocess_ef/index.rst b/_sources/autoapi/fairchem/core/scripts/preprocess_ef/index.rst similarity index 58% rename from _sources/autoapi/core/scripts/preprocess_ef/index.rst rename to _sources/autoapi/fairchem/core/scripts/preprocess_ef/index.rst index 84a2afad2..85c99b9eb 100644 --- a/_sources/autoapi/core/scripts/preprocess_ef/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/preprocess_ef/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts.preprocess_ef` -==================================== +:py:mod:`fairchem.core.scripts.preprocess_ef` +============================================= -.. py:module:: core.scripts.preprocess_ef +.. py:module:: fairchem.core.scripts.preprocess_ef .. autoapi-nested-parse:: @@ -19,9 +19,9 @@ Functions .. autoapisummary:: - core.scripts.preprocess_ef.write_images_to_lmdb - core.scripts.preprocess_ef.main - core.scripts.preprocess_ef.get_parser + fairchem.core.scripts.preprocess_ef.write_images_to_lmdb + fairchem.core.scripts.preprocess_ef.main + fairchem.core.scripts.preprocess_ef.get_parser @@ -30,7 +30,7 @@ Attributes .. autoapisummary:: - core.scripts.preprocess_ef.parser + fairchem.core.scripts.preprocess_ef.parser .. py:function:: write_images_to_lmdb(mp_arg) diff --git a/_sources/autoapi/core/scripts/preprocess_relaxed/index.rst b/_sources/autoapi/fairchem/core/scripts/preprocess_relaxed/index.rst similarity index 54% rename from _sources/autoapi/core/scripts/preprocess_relaxed/index.rst rename to _sources/autoapi/fairchem/core/scripts/preprocess_relaxed/index.rst index 5e96e685c..87f280cc7 100644 --- a/_sources/autoapi/core/scripts/preprocess_relaxed/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/preprocess_relaxed/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts.preprocess_relaxed` -========================================= +:py:mod:`fairchem.core.scripts.preprocess_relaxed` +================================================== -.. py:module:: core.scripts.preprocess_relaxed +.. py:module:: fairchem.core.scripts.preprocess_relaxed .. autoapi-nested-parse:: @@ -19,8 +19,8 @@ Functions .. autoapisummary:: - core.scripts.preprocess_relaxed.write_images_to_lmdb - core.scripts.preprocess_relaxed.main + fairchem.core.scripts.preprocess_relaxed.write_images_to_lmdb + fairchem.core.scripts.preprocess_relaxed.main @@ -29,7 +29,7 @@ Attributes .. autoapisummary:: - core.scripts.preprocess_relaxed.parser + fairchem.core.scripts.preprocess_relaxed.parser .. py:function:: write_images_to_lmdb(mp_arg) -> None diff --git a/_sources/autoapi/core/scripts/uncompress/index.rst b/_sources/autoapi/fairchem/core/scripts/uncompress/index.rst similarity index 61% rename from _sources/autoapi/core/scripts/uncompress/index.rst rename to _sources/autoapi/fairchem/core/scripts/uncompress/index.rst index 99d9fa193..6299ee61d 100644 --- a/_sources/autoapi/core/scripts/uncompress/index.rst +++ b/_sources/autoapi/fairchem/core/scripts/uncompress/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.scripts.uncompress` -================================= +:py:mod:`fairchem.core.scripts.uncompress` +========================================== -.. py:module:: core.scripts.uncompress +.. py:module:: fairchem.core.scripts.uncompress .. autoapi-nested-parse:: @@ -19,10 +19,10 @@ Functions .. autoapisummary:: - core.scripts.uncompress.read_lzma - core.scripts.uncompress.decompress_list_of_files - core.scripts.uncompress.get_parser - core.scripts.uncompress.main + fairchem.core.scripts.uncompress.read_lzma + fairchem.core.scripts.uncompress.decompress_list_of_files + fairchem.core.scripts.uncompress.get_parser + fairchem.core.scripts.uncompress.main @@ -31,7 +31,7 @@ Attributes .. autoapisummary:: - core.scripts.uncompress.parser + fairchem.core.scripts.uncompress.parser .. py:function:: read_lzma(inpfile: str, outfile: str) -> None diff --git a/_sources/autoapi/core/tasks/index.rst b/_sources/autoapi/fairchem/core/tasks/index.rst similarity index 72% rename from _sources/autoapi/core/tasks/index.rst rename to _sources/autoapi/fairchem/core/tasks/index.rst index d82f71aaf..cc9648135 100644 --- a/_sources/autoapi/core/tasks/index.rst +++ b/_sources/autoapi/fairchem/core/tasks/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tasks` -==================== +:py:mod:`fairchem.core.tasks` +============================= -.. py:module:: core.tasks +.. py:module:: fairchem.core.tasks Submodules @@ -21,10 +21,10 @@ Classes .. autoapisummary:: - core.tasks.PredictTask - core.tasks.RelaxationTask - core.tasks.TrainTask - core.tasks.ValidateTask + fairchem.core.tasks.PredictTask + fairchem.core.tasks.RelaxationTask + fairchem.core.tasks.TrainTask + fairchem.core.tasks.ValidateTask diff --git a/_sources/autoapi/core/tasks/task/index.rst b/_sources/autoapi/fairchem/core/tasks/task/index.rst similarity index 73% rename from _sources/autoapi/core/tasks/task/index.rst rename to _sources/autoapi/fairchem/core/tasks/task/index.rst index d0412859a..08784d796 100644 --- a/_sources/autoapi/core/tasks/task/index.rst +++ b/_sources/autoapi/fairchem/core/tasks/task/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tasks.task` -========================= +:py:mod:`fairchem.core.tasks.task` +================================== -.. py:module:: core.tasks.task +.. py:module:: fairchem.core.tasks.task .. autoapi-nested-parse:: @@ -20,11 +20,11 @@ Classes .. autoapisummary:: - core.tasks.task.BaseTask - core.tasks.task.TrainTask - core.tasks.task.PredictTask - core.tasks.task.ValidateTask - core.tasks.task.RelaxationTask + fairchem.core.tasks.task.BaseTask + fairchem.core.tasks.task.TrainTask + fairchem.core.tasks.task.PredictTask + fairchem.core.tasks.task.ValidateTask + fairchem.core.tasks.task.RelaxationTask diff --git a/_sources/autoapi/core/tests/common/test_ase_calculator/index.rst b/_sources/autoapi/fairchem/core/tests/common/test_ase_calculator/index.rst similarity index 52% rename from _sources/autoapi/core/tests/common/test_ase_calculator/index.rst rename to _sources/autoapi/fairchem/core/tests/common/test_ase_calculator/index.rst index fc32aab12..b08f38e72 100644 --- a/_sources/autoapi/core/tests/common/test_ase_calculator/index.rst +++ b/_sources/autoapi/fairchem/core/tests/common/test_ase_calculator/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.common.test_ase_calculator` -=============================================== +:py:mod:`fairchem.core.tests.common.test_ase_calculator` +======================================================== -.. py:module:: core.tests.common.test_ase_calculator +.. py:module:: fairchem.core.tests.common.test_ase_calculator .. autoapi-nested-parse:: @@ -21,11 +21,11 @@ Functions .. autoapisummary:: - core.tests.common.test_ase_calculator.atoms - core.tests.common.test_ase_calculator.checkpoint_path - core.tests.common.test_ase_calculator.test_calculator_setup - core.tests.common.test_ase_calculator.test_relaxation_final_energy - core.tests.common.test_ase_calculator.test_random_seed_final_energy + fairchem.core.tests.common.test_ase_calculator.atoms + fairchem.core.tests.common.test_ase_calculator.checkpoint_path + fairchem.core.tests.common.test_ase_calculator.test_calculator_setup + fairchem.core.tests.common.test_ase_calculator.test_relaxation_final_energy + fairchem.core.tests.common.test_ase_calculator.test_random_seed_final_energy diff --git a/_sources/autoapi/fairchem/core/tests/common/test_data_parallel_batch_sampler/index.rst b/_sources/autoapi/fairchem/core/tests/common/test_data_parallel_batch_sampler/index.rst new file mode 100644 index 000000000..08cf57e33 --- /dev/null +++ b/_sources/autoapi/fairchem/core/tests/common/test_data_parallel_batch_sampler/index.rst @@ -0,0 +1,112 @@ +:py:mod:`fairchem.core.tests.common.test_data_parallel_batch_sampler` +===================================================================== + +.. py:module:: fairchem.core.tests.common.test_data_parallel_batch_sampler + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.tests.common.test_data_parallel_batch_sampler._temp_file + fairchem.core.tests.common.test_data_parallel_batch_sampler.valid_path_dataset + fairchem.core.tests.common.test_data_parallel_batch_sampler.invalid_path_dataset + fairchem.core.tests.common.test_data_parallel_batch_sampler.invalid_dataset + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_lowercase + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_invalid_mode + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_invalid_dataset + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_invalid_path_dataset + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_valid_dataset + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_disabled + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_single_node + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_noshuffle + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_vs_distributed_sampler + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_numreplicas + fairchem.core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_numreplicas_drop_last + + + +Attributes +~~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.tests.common.test_data_parallel_batch_sampler.DATA + fairchem.core.tests.common.test_data_parallel_batch_sampler.SIZE_ATOMS + fairchem.core.tests.common.test_data_parallel_batch_sampler.SIZE_NEIGHBORS + fairchem.core.tests.common.test_data_parallel_batch_sampler.T_co + + +.. py:data:: DATA + :value: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + + + +.. py:data:: SIZE_ATOMS + :value: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + + + +.. py:data:: SIZE_NEIGHBORS + :value: [4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + + + +.. py:data:: T_co + + + +.. py:function:: _temp_file(name: str) + + +.. py:function:: valid_path_dataset() + + +.. py:function:: invalid_path_dataset() + + +.. py:function:: invalid_dataset() + + +.. py:function:: test_lowercase(invalid_dataset) -> None + + +.. py:function:: test_invalid_mode(invalid_dataset) -> None + + +.. py:function:: test_invalid_dataset(invalid_dataset) -> None + + +.. py:function:: test_invalid_path_dataset(invalid_path_dataset) -> None + + +.. py:function:: test_valid_dataset(valid_path_dataset) -> None + + +.. py:function:: test_disabled(valid_path_dataset) -> None + + +.. py:function:: test_single_node(valid_path_dataset) -> None + + +.. py:function:: test_stateful_distributed_sampler_noshuffle(valid_path_dataset) -> None + + +.. py:function:: test_stateful_distributed_sampler_vs_distributed_sampler(valid_path_dataset) -> None + + +.. py:function:: test_stateful_distributed_sampler(valid_path_dataset) -> None + + +.. py:function:: test_stateful_distributed_sampler_numreplicas(valid_path_dataset) -> None + + +.. py:function:: test_stateful_distributed_sampler_numreplicas_drop_last(valid_path_dataset) -> None + + diff --git a/_sources/autoapi/fairchem/core/tests/common/test_yaml_loader/index.rst b/_sources/autoapi/fairchem/core/tests/common/test_yaml_loader/index.rst new file mode 100644 index 000000000..a387b4074 --- /dev/null +++ b/_sources/autoapi/fairchem/core/tests/common/test_yaml_loader/index.rst @@ -0,0 +1,34 @@ +:py:mod:`fairchem.core.tests.common.test_yaml_loader` +===================================================== + +.. py:module:: fairchem.core.tests.common.test_yaml_loader + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.tests.common.test_yaml_loader.invalid_yaml_config + fairchem.core.tests.common.test_yaml_loader.valid_yaml_config + fairchem.core.tests.common.test_yaml_loader.test_invalid_config + fairchem.core.tests.common.test_yaml_loader.test_valid_config + + + +.. py:function:: invalid_yaml_config() + + +.. py:function:: valid_yaml_config() + + +.. py:function:: test_invalid_config(invalid_yaml_config) + + +.. py:function:: test_valid_config(valid_yaml_config) + + diff --git a/_sources/autoapi/core/tests/conftest/index.rst b/_sources/autoapi/fairchem/core/tests/conftest/index.rst similarity index 82% rename from _sources/autoapi/core/tests/conftest/index.rst rename to _sources/autoapi/fairchem/core/tests/conftest/index.rst index 5ac643304..1a2997a2c 100644 --- a/_sources/autoapi/core/tests/conftest/index.rst +++ b/_sources/autoapi/fairchem/core/tests/conftest/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.conftest` -============================= +:py:mod:`fairchem.core.tests.conftest` +====================================== -.. py:module:: core.tests.conftest +.. py:module:: fairchem.core.tests.conftest .. autoapi-nested-parse:: @@ -20,9 +20,9 @@ Classes .. autoapisummary:: - core.tests.conftest.Approx - core.tests.conftest._ApproxNumpyFormatter - core.tests.conftest.ApproxExtension + fairchem.core.tests.conftest.Approx + fairchem.core.tests.conftest._ApproxNumpyFormatter + fairchem.core.tests.conftest.ApproxExtension @@ -31,8 +31,8 @@ Functions .. autoapisummary:: - core.tests.conftest._try_parse_approx - core.tests.conftest.snapshot + fairchem.core.tests.conftest._try_parse_approx + fairchem.core.tests.conftest.snapshot @@ -41,8 +41,8 @@ Attributes .. autoapisummary:: - core.tests.conftest.DEFAULT_RTOL - core.tests.conftest.DEFAULT_ATOL + fairchem.core.tests.conftest.DEFAULT_RTOL + fairchem.core.tests.conftest.DEFAULT_ATOL .. py:data:: DEFAULT_RTOL diff --git a/_sources/autoapi/fairchem/core/tests/datasets/test_ase_datasets/index.rst b/_sources/autoapi/fairchem/core/tests/datasets/test_ase_datasets/index.rst new file mode 100644 index 000000000..5e5d4cfec --- /dev/null +++ b/_sources/autoapi/fairchem/core/tests/datasets/test_ase_datasets/index.rst @@ -0,0 +1,63 @@ +:py:mod:`fairchem.core.tests.datasets.test_ase_datasets` +======================================================== + +.. py:module:: fairchem.core.tests.datasets.test_ase_datasets + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.tests.datasets.test_ase_datasets.ase_dataset + fairchem.core.tests.datasets.test_ase_datasets.test_ase_dataset + fairchem.core.tests.datasets.test_ase_datasets.test_ase_read_dataset + fairchem.core.tests.datasets.test_ase_datasets.test_ase_metadata_guesser + fairchem.core.tests.datasets.test_ase_datasets.test_db_add_delete + fairchem.core.tests.datasets.test_ase_datasets.test_ase_multiread_dataset + fairchem.core.tests.datasets.test_ase_datasets.test_empty_dataset + + + +Attributes +~~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.tests.datasets.test_ase_datasets.structures + fairchem.core.tests.datasets.test_ase_datasets.calc + + +.. py:data:: structures + + + +.. py:data:: calc + + + +.. py:function:: ase_dataset(request, tmp_path_factory) + + +.. py:function:: test_ase_dataset(ase_dataset) + + +.. py:function:: test_ase_read_dataset(tmp_path) -> None + + +.. py:function:: test_ase_metadata_guesser(ase_dataset) -> None + + +.. py:function:: test_db_add_delete(tmp_path) -> None + + +.. py:function:: test_ase_multiread_dataset(tmp_path) -> None + + +.. py:function:: test_empty_dataset(tmp_path) + + diff --git a/_sources/autoapi/fairchem/core/tests/datasets/test_ase_lmdb/index.rst b/_sources/autoapi/fairchem/core/tests/datasets/test_ase_lmdb/index.rst new file mode 100644 index 000000000..0fb5fde70 --- /dev/null +++ b/_sources/autoapi/fairchem/core/tests/datasets/test_ase_lmdb/index.rst @@ -0,0 +1,82 @@ +:py:mod:`fairchem.core.tests.datasets.test_ase_lmdb` +==================================================== + +.. py:module:: fairchem.core.tests.datasets.test_ase_lmdb + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.tests.datasets.test_ase_lmdb.generate_random_structure + fairchem.core.tests.datasets.test_ase_lmdb.ase_lmbd_path + fairchem.core.tests.datasets.test_ase_lmdb.test_aselmdb_write + fairchem.core.tests.datasets.test_ase_lmdb.test_aselmdb_count + fairchem.core.tests.datasets.test_ase_lmdb.test_aselmdb_delete + fairchem.core.tests.datasets.test_ase_lmdb.test_aselmdb_randomreads + fairchem.core.tests.datasets.test_ase_lmdb.test_aselmdb_constraintread + fairchem.core.tests.datasets.test_ase_lmdb.test_update_keyvalue_pair + fairchem.core.tests.datasets.test_ase_lmdb.test_update_atoms + fairchem.core.tests.datasets.test_ase_lmdb.test_metadata + + + +Attributes +~~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.tests.datasets.test_ase_lmdb.N_WRITES + fairchem.core.tests.datasets.test_ase_lmdb.N_READS + fairchem.core.tests.datasets.test_ase_lmdb.test_structures + + +.. py:data:: N_WRITES + :value: 100 + + + +.. py:data:: N_READS + :value: 200 + + + +.. py:data:: test_structures + + + +.. py:function:: generate_random_structure() + + +.. py:function:: ase_lmbd_path(tmp_path_factory) + + +.. py:function:: test_aselmdb_write(ase_lmbd_path) -> None + + +.. py:function:: test_aselmdb_count(ase_lmbd_path) -> None + + +.. py:function:: test_aselmdb_delete(ase_lmbd_path) -> None + + +.. py:function:: test_aselmdb_randomreads(ase_lmbd_path) -> None + + +.. py:function:: test_aselmdb_constraintread(ase_lmbd_path) -> None + + +.. py:function:: test_update_keyvalue_pair(ase_lmbd_path) -> None + + +.. py:function:: test_update_atoms(ase_lmbd_path) -> None + + +.. py:function:: test_metadata(ase_lmbd_path) -> None + + diff --git a/_sources/autoapi/fairchem/core/tests/datasets/test_utils/index.rst b/_sources/autoapi/fairchem/core/tests/datasets/test_utils/index.rst new file mode 100644 index 000000000..ce7efb46d --- /dev/null +++ b/_sources/autoapi/fairchem/core/tests/datasets/test_utils/index.rst @@ -0,0 +1,26 @@ +:py:mod:`fairchem.core.tests.datasets.test_utils` +================================================= + +.. py:module:: fairchem.core.tests.datasets.test_utils + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.core.tests.datasets.test_utils.pyg_data + fairchem.core.tests.datasets.test_utils.test_rename_data_object_keys + + + +.. py:function:: pyg_data() + + +.. py:function:: test_rename_data_object_keys(pyg_data) + + diff --git a/_sources/autoapi/core/tests/evaluator/test_evaluator/index.rst b/_sources/autoapi/fairchem/core/tests/evaluator/test_evaluator/index.rst similarity index 58% rename from _sources/autoapi/core/tests/evaluator/test_evaluator/index.rst rename to _sources/autoapi/fairchem/core/tests/evaluator/test_evaluator/index.rst index 1e1754489..fbbf99048 100644 --- a/_sources/autoapi/core/tests/evaluator/test_evaluator/index.rst +++ b/_sources/autoapi/fairchem/core/tests/evaluator/test_evaluator/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.evaluator.test_evaluator` -============================================= +:py:mod:`fairchem.core.tests.evaluator.test_evaluator` +====================================================== -.. py:module:: core.tests.evaluator.test_evaluator +.. py:module:: fairchem.core.tests.evaluator.test_evaluator .. autoapi-nested-parse:: @@ -20,10 +20,10 @@ Classes .. autoapisummary:: - core.tests.evaluator.test_evaluator.TestMetrics - core.tests.evaluator.test_evaluator.TestS2EFEval - core.tests.evaluator.test_evaluator.TestIS2RSEval - core.tests.evaluator.test_evaluator.TestIS2REEval + fairchem.core.tests.evaluator.test_evaluator.TestMetrics + fairchem.core.tests.evaluator.test_evaluator.TestS2EFEval + fairchem.core.tests.evaluator.test_evaluator.TestIS2RSEval + fairchem.core.tests.evaluator.test_evaluator.TestIS2REEval @@ -32,9 +32,9 @@ Functions .. autoapisummary:: - core.tests.evaluator.test_evaluator.load_evaluator_s2ef - core.tests.evaluator.test_evaluator.load_evaluator_is2rs - core.tests.evaluator.test_evaluator.load_evaluator_is2re + fairchem.core.tests.evaluator.test_evaluator.load_evaluator_s2ef + fairchem.core.tests.evaluator.test_evaluator.load_evaluator_is2rs + fairchem.core.tests.evaluator.test_evaluator.load_evaluator_is2re diff --git a/_sources/autoapi/core/tests/index.rst b/_sources/autoapi/fairchem/core/tests/index.rst similarity index 80% rename from _sources/autoapi/core/tests/index.rst rename to _sources/autoapi/fairchem/core/tests/index.rst index 516683842..5d7a0ac78 100644 --- a/_sources/autoapi/core/tests/index.rst +++ b/_sources/autoapi/fairchem/core/tests/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests` -==================== +:py:mod:`fairchem.core.tests` +============================= -.. py:module:: core.tests +.. py:module:: fairchem.core.tests .. autoapi-nested-parse:: diff --git a/_sources/autoapi/core/tests/models/test_dimenetpp/index.rst b/_sources/autoapi/fairchem/core/tests/models/test_dimenetpp/index.rst similarity index 63% rename from _sources/autoapi/core/tests/models/test_dimenetpp/index.rst rename to _sources/autoapi/fairchem/core/tests/models/test_dimenetpp/index.rst index 073988ce7..fb326096f 100644 --- a/_sources/autoapi/core/tests/models/test_dimenetpp/index.rst +++ b/_sources/autoapi/fairchem/core/tests/models/test_dimenetpp/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.models.test_dimenetpp` -========================================== +:py:mod:`fairchem.core.tests.models.test_dimenetpp` +=================================================== -.. py:module:: core.tests.models.test_dimenetpp +.. py:module:: fairchem.core.tests.models.test_dimenetpp .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.tests.models.test_dimenetpp.TestDimeNet + fairchem.core.tests.models.test_dimenetpp.TestDimeNet @@ -29,8 +29,8 @@ Functions .. autoapisummary:: - core.tests.models.test_dimenetpp.load_data - core.tests.models.test_dimenetpp.load_model + fairchem.core.tests.models.test_dimenetpp.load_data + fairchem.core.tests.models.test_dimenetpp.load_model diff --git a/_sources/autoapi/core/tests/models/test_equiformer_v2/index.rst b/_sources/autoapi/fairchem/core/tests/models/test_equiformer_v2/index.rst similarity index 57% rename from _sources/autoapi/core/tests/models/test_equiformer_v2/index.rst rename to _sources/autoapi/fairchem/core/tests/models/test_equiformer_v2/index.rst index fa8a65e4c..9840ba2d2 100644 --- a/_sources/autoapi/core/tests/models/test_equiformer_v2/index.rst +++ b/_sources/autoapi/fairchem/core/tests/models/test_equiformer_v2/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.models.test_equiformer_v2` -============================================== +:py:mod:`fairchem.core.tests.models.test_equiformer_v2` +======================================================= -.. py:module:: core.tests.models.test_equiformer_v2 +.. py:module:: fairchem.core.tests.models.test_equiformer_v2 .. autoapi-nested-parse:: @@ -20,8 +20,8 @@ Classes .. autoapisummary:: - core.tests.models.test_equiformer_v2.TestEquiformerV2 - core.tests.models.test_equiformer_v2.TestMPrimaryLPrimary + fairchem.core.tests.models.test_equiformer_v2.TestEquiformerV2 + fairchem.core.tests.models.test_equiformer_v2.TestMPrimaryLPrimary @@ -30,8 +30,8 @@ Functions .. autoapisummary:: - core.tests.models.test_equiformer_v2.load_data - core.tests.models.test_equiformer_v2.load_model + fairchem.core.tests.models.test_equiformer_v2.load_data + fairchem.core.tests.models.test_equiformer_v2.load_model diff --git a/_sources/autoapi/fairchem/core/tests/models/test_escn/index.rst b/_sources/autoapi/fairchem/core/tests/models/test_escn/index.rst new file mode 100644 index 000000000..65485a157 --- /dev/null +++ b/_sources/autoapi/fairchem/core/tests/models/test_escn/index.rst @@ -0,0 +1,26 @@ +:py:mod:`fairchem.core.tests.models.test_escn` +============================================== + +.. py:module:: fairchem.core.tests.models.test_escn + + +Module Contents +--------------- + +Classes +~~~~~~~ + +.. autoapisummary:: + + fairchem.core.tests.models.test_escn.TestMPrimaryLPrimary + + + + +.. py:class:: TestMPrimaryLPrimary + + + .. py:method:: test_mprimary_lprimary_mappings() + + + diff --git a/_sources/autoapi/core/tests/models/test_gemnet/index.rst b/_sources/autoapi/fairchem/core/tests/models/test_gemnet/index.rst similarity index 64% rename from _sources/autoapi/core/tests/models/test_gemnet/index.rst rename to _sources/autoapi/fairchem/core/tests/models/test_gemnet/index.rst index f962a9d23..862604058 100644 --- a/_sources/autoapi/core/tests/models/test_gemnet/index.rst +++ b/_sources/autoapi/fairchem/core/tests/models/test_gemnet/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.models.test_gemnet` -======================================= +:py:mod:`fairchem.core.tests.models.test_gemnet` +================================================ -.. py:module:: core.tests.models.test_gemnet +.. py:module:: fairchem.core.tests.models.test_gemnet .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.tests.models.test_gemnet.TestGemNetT + fairchem.core.tests.models.test_gemnet.TestGemNetT @@ -29,8 +29,8 @@ Functions .. autoapisummary:: - core.tests.models.test_gemnet.load_data - core.tests.models.test_gemnet.load_model + fairchem.core.tests.models.test_gemnet.load_data + fairchem.core.tests.models.test_gemnet.load_model diff --git a/_sources/autoapi/core/tests/models/test_gemnet_oc/index.rst b/_sources/autoapi/fairchem/core/tests/models/test_gemnet_oc/index.rst similarity index 63% rename from _sources/autoapi/core/tests/models/test_gemnet_oc/index.rst rename to _sources/autoapi/fairchem/core/tests/models/test_gemnet_oc/index.rst index c589bcd51..5f9f49be8 100644 --- a/_sources/autoapi/core/tests/models/test_gemnet_oc/index.rst +++ b/_sources/autoapi/fairchem/core/tests/models/test_gemnet_oc/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.models.test_gemnet_oc` -========================================== +:py:mod:`fairchem.core.tests.models.test_gemnet_oc` +=================================================== -.. py:module:: core.tests.models.test_gemnet_oc +.. py:module:: fairchem.core.tests.models.test_gemnet_oc .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.tests.models.test_gemnet_oc.TestGemNetOC + fairchem.core.tests.models.test_gemnet_oc.TestGemNetOC @@ -29,8 +29,8 @@ Functions .. autoapisummary:: - core.tests.models.test_gemnet_oc.load_data - core.tests.models.test_gemnet_oc.load_model + fairchem.core.tests.models.test_gemnet_oc.load_data + fairchem.core.tests.models.test_gemnet_oc.load_model diff --git a/_sources/autoapi/core/tests/models/test_gemnet_oc_scaling_mismatch/index.rst b/_sources/autoapi/fairchem/core/tests/models/test_gemnet_oc_scaling_mismatch/index.rst similarity index 64% rename from _sources/autoapi/core/tests/models/test_gemnet_oc_scaling_mismatch/index.rst rename to _sources/autoapi/fairchem/core/tests/models/test_gemnet_oc_scaling_mismatch/index.rst index c28935b5c..827d079f0 100644 --- a/_sources/autoapi/core/tests/models/test_gemnet_oc_scaling_mismatch/index.rst +++ b/_sources/autoapi/fairchem/core/tests/models/test_gemnet_oc_scaling_mismatch/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.models.test_gemnet_oc_scaling_mismatch` -=========================================================== +:py:mod:`fairchem.core.tests.models.test_gemnet_oc_scaling_mismatch` +==================================================================== -.. py:module:: core.tests.models.test_gemnet_oc_scaling_mismatch +.. py:module:: fairchem.core.tests.models.test_gemnet_oc_scaling_mismatch .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.tests.models.test_gemnet_oc_scaling_mismatch.TestGemNetOC + fairchem.core.tests.models.test_gemnet_oc_scaling_mismatch.TestGemNetOC diff --git a/_sources/autoapi/core/tests/models/test_schnet/index.rst b/_sources/autoapi/fairchem/core/tests/models/test_schnet/index.rst similarity index 64% rename from _sources/autoapi/core/tests/models/test_schnet/index.rst rename to _sources/autoapi/fairchem/core/tests/models/test_schnet/index.rst index 013f6b081..89deac8d2 100644 --- a/_sources/autoapi/core/tests/models/test_schnet/index.rst +++ b/_sources/autoapi/fairchem/core/tests/models/test_schnet/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.models.test_schnet` -======================================= +:py:mod:`fairchem.core.tests.models.test_schnet` +================================================ -.. py:module:: core.tests.models.test_schnet +.. py:module:: fairchem.core.tests.models.test_schnet .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.tests.models.test_schnet.TestSchNet + fairchem.core.tests.models.test_schnet.TestSchNet @@ -29,8 +29,8 @@ Functions .. autoapisummary:: - core.tests.models.test_schnet.load_data - core.tests.models.test_schnet.load_model + fairchem.core.tests.models.test_schnet.load_data + fairchem.core.tests.models.test_schnet.load_model diff --git a/_sources/autoapi/core/tests/preprocessing/index.rst b/_sources/autoapi/fairchem/core/tests/preprocessing/index.rst similarity index 73% rename from _sources/autoapi/core/tests/preprocessing/index.rst rename to _sources/autoapi/fairchem/core/tests/preprocessing/index.rst index 5dbe1bb9a..0dad4e5ec 100644 --- a/_sources/autoapi/core/tests/preprocessing/index.rst +++ b/_sources/autoapi/fairchem/core/tests/preprocessing/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.preprocessing` -================================== +:py:mod:`fairchem.core.tests.preprocessing` +=========================================== -.. py:module:: core.tests.preprocessing +.. py:module:: fairchem.core.tests.preprocessing .. autoapi-nested-parse:: diff --git a/_sources/autoapi/core/tests/preprocessing/test_atoms_to_graphs/index.rst b/_sources/autoapi/fairchem/core/tests/preprocessing/test_atoms_to_graphs/index.rst similarity index 61% rename from _sources/autoapi/core/tests/preprocessing/test_atoms_to_graphs/index.rst rename to _sources/autoapi/fairchem/core/tests/preprocessing/test_atoms_to_graphs/index.rst index 46546d4ee..b821c1477 100644 --- a/_sources/autoapi/core/tests/preprocessing/test_atoms_to_graphs/index.rst +++ b/_sources/autoapi/fairchem/core/tests/preprocessing/test_atoms_to_graphs/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.preprocessing.test_atoms_to_graphs` -======================================================= +:py:mod:`fairchem.core.tests.preprocessing.test_atoms_to_graphs` +================================================================ -.. py:module:: core.tests.preprocessing.test_atoms_to_graphs +.. py:module:: fairchem.core.tests.preprocessing.test_atoms_to_graphs .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.tests.preprocessing.test_atoms_to_graphs.TestAtomsToGraphs + fairchem.core.tests.preprocessing.test_atoms_to_graphs.TestAtomsToGraphs @@ -29,7 +29,7 @@ Functions .. autoapisummary:: - core.tests.preprocessing.test_atoms_to_graphs.atoms_to_graphs_internals + fairchem.core.tests.preprocessing.test_atoms_to_graphs.atoms_to_graphs_internals diff --git a/_sources/autoapi/core/tests/preprocessing/test_pbc/index.rst b/_sources/autoapi/fairchem/core/tests/preprocessing/test_pbc/index.rst similarity index 62% rename from _sources/autoapi/core/tests/preprocessing/test_pbc/index.rst rename to _sources/autoapi/fairchem/core/tests/preprocessing/test_pbc/index.rst index 3e8ffe2fb..355ad43fb 100644 --- a/_sources/autoapi/core/tests/preprocessing/test_pbc/index.rst +++ b/_sources/autoapi/fairchem/core/tests/preprocessing/test_pbc/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.preprocessing.test_pbc` -=========================================== +:py:mod:`fairchem.core.tests.preprocessing.test_pbc` +==================================================== -.. py:module:: core.tests.preprocessing.test_pbc +.. py:module:: fairchem.core.tests.preprocessing.test_pbc .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.tests.preprocessing.test_pbc.TestPBC + fairchem.core.tests.preprocessing.test_pbc.TestPBC @@ -29,7 +29,7 @@ Functions .. autoapisummary:: - core.tests.preprocessing.test_pbc.load_data + fairchem.core.tests.preprocessing.test_pbc.load_data diff --git a/_sources/autoapi/core/tests/preprocessing/test_radius_graph_pbc/index.rst b/_sources/autoapi/fairchem/core/tests/preprocessing/test_radius_graph_pbc/index.rst similarity index 60% rename from _sources/autoapi/core/tests/preprocessing/test_radius_graph_pbc/index.rst rename to _sources/autoapi/fairchem/core/tests/preprocessing/test_radius_graph_pbc/index.rst index a754b5af8..5037a0e7a 100644 --- a/_sources/autoapi/core/tests/preprocessing/test_radius_graph_pbc/index.rst +++ b/_sources/autoapi/fairchem/core/tests/preprocessing/test_radius_graph_pbc/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.tests.preprocessing.test_radius_graph_pbc` -======================================================== +:py:mod:`fairchem.core.tests.preprocessing.test_radius_graph_pbc` +================================================================= -.. py:module:: core.tests.preprocessing.test_radius_graph_pbc +.. py:module:: fairchem.core.tests.preprocessing.test_radius_graph_pbc .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.tests.preprocessing.test_radius_graph_pbc.TestRadiusGraphPBC + fairchem.core.tests.preprocessing.test_radius_graph_pbc.TestRadiusGraphPBC @@ -29,8 +29,8 @@ Functions .. autoapisummary:: - core.tests.preprocessing.test_radius_graph_pbc.load_data - core.tests.preprocessing.test_radius_graph_pbc.check_features_match + fairchem.core.tests.preprocessing.test_radius_graph_pbc.load_data + fairchem.core.tests.preprocessing.test_radius_graph_pbc.check_features_match diff --git a/_sources/autoapi/core/trainers/base_trainer/index.rst b/_sources/autoapi/fairchem/core/trainers/base_trainer/index.rst similarity index 92% rename from _sources/autoapi/core/trainers/base_trainer/index.rst rename to _sources/autoapi/fairchem/core/trainers/base_trainer/index.rst index 6e8efb4ed..1af814235 100644 --- a/_sources/autoapi/core/trainers/base_trainer/index.rst +++ b/_sources/autoapi/fairchem/core/trainers/base_trainer/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.trainers.base_trainer` -==================================== +:py:mod:`fairchem.core.trainers.base_trainer` +============================================= -.. py:module:: core.trainers.base_trainer +.. py:module:: fairchem.core.trainers.base_trainer .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.trainers.base_trainer.BaseTrainer + fairchem.core.trainers.base_trainer.BaseTrainer diff --git a/_sources/autoapi/core/trainers/index.rst b/_sources/autoapi/fairchem/core/trainers/index.rst similarity index 96% rename from _sources/autoapi/core/trainers/index.rst rename to _sources/autoapi/fairchem/core/trainers/index.rst index 8e9c6fb6d..4ea569b49 100644 --- a/_sources/autoapi/core/trainers/index.rst +++ b/_sources/autoapi/fairchem/core/trainers/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.trainers` -======================= +:py:mod:`fairchem.core.trainers` +================================ -.. py:module:: core.trainers +.. py:module:: fairchem.core.trainers Submodules @@ -22,8 +22,8 @@ Classes .. autoapisummary:: - core.trainers.BaseTrainer - core.trainers.OCPTrainer + fairchem.core.trainers.BaseTrainer + fairchem.core.trainers.OCPTrainer diff --git a/_sources/autoapi/core/trainers/ocp_trainer/index.rst b/_sources/autoapi/fairchem/core/trainers/ocp_trainer/index.rst similarity index 94% rename from _sources/autoapi/core/trainers/ocp_trainer/index.rst rename to _sources/autoapi/fairchem/core/trainers/ocp_trainer/index.rst index 40d11d33a..751037009 100644 --- a/_sources/autoapi/core/trainers/ocp_trainer/index.rst +++ b/_sources/autoapi/fairchem/core/trainers/ocp_trainer/index.rst @@ -1,7 +1,7 @@ -:py:mod:`core.trainers.ocp_trainer` -=================================== +:py:mod:`fairchem.core.trainers.ocp_trainer` +============================================ -.. py:module:: core.trainers.ocp_trainer +.. py:module:: fairchem.core.trainers.ocp_trainer .. autoapi-nested-parse:: @@ -20,7 +20,7 @@ Classes .. autoapisummary:: - core.trainers.ocp_trainer.OCPTrainer + fairchem.core.trainers.ocp_trainer.OCPTrainer diff --git a/_sources/autoapi/data/oc/core/adsorbate/index.rst b/_sources/autoapi/fairchem/data/oc/core/adsorbate/index.rst similarity index 88% rename from _sources/autoapi/data/oc/core/adsorbate/index.rst rename to _sources/autoapi/fairchem/data/oc/core/adsorbate/index.rst index b0d2cd701..67e0fcbc6 100644 --- a/_sources/autoapi/data/oc/core/adsorbate/index.rst +++ b/_sources/autoapi/fairchem/data/oc/core/adsorbate/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.core.adsorbate` -================================ +:py:mod:`fairchem.data.oc.core.adsorbate` +========================================= -.. py:module:: data.oc.core.adsorbate +.. py:module:: fairchem.data.oc.core.adsorbate Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.core.adsorbate.Adsorbate + fairchem.data.oc.core.adsorbate.Adsorbate @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - data.oc.core.adsorbate.randomly_rotate_adsorbate + fairchem.data.oc.core.adsorbate.randomly_rotate_adsorbate diff --git a/_sources/autoapi/data/oc/core/adsorbate_slab_config/index.rst b/_sources/autoapi/fairchem/data/oc/core/adsorbate_slab_config/index.rst similarity index 94% rename from _sources/autoapi/data/oc/core/adsorbate_slab_config/index.rst rename to _sources/autoapi/fairchem/data/oc/core/adsorbate_slab_config/index.rst index 76226d3c9..1cc17a55e 100644 --- a/_sources/autoapi/data/oc/core/adsorbate_slab_config/index.rst +++ b/_sources/autoapi/fairchem/data/oc/core/adsorbate_slab_config/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.core.adsorbate_slab_config` -============================================ +:py:mod:`fairchem.data.oc.core.adsorbate_slab_config` +===================================================== -.. py:module:: data.oc.core.adsorbate_slab_config +.. py:module:: fairchem.data.oc.core.adsorbate_slab_config Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.core.adsorbate_slab_config.AdsorbateSlabConfig + fairchem.data.oc.core.adsorbate_slab_config.AdsorbateSlabConfig @@ -21,10 +21,10 @@ Functions .. autoapisummary:: - data.oc.core.adsorbate_slab_config.get_random_sites_on_triangle - data.oc.core.adsorbate_slab_config.custom_tile_atoms - data.oc.core.adsorbate_slab_config.get_interstitial_distances - data.oc.core.adsorbate_slab_config.there_is_overlap + fairchem.data.oc.core.adsorbate_slab_config.get_random_sites_on_triangle + fairchem.data.oc.core.adsorbate_slab_config.custom_tile_atoms + fairchem.data.oc.core.adsorbate_slab_config.get_interstitial_distances + fairchem.data.oc.core.adsorbate_slab_config.there_is_overlap diff --git a/_sources/autoapi/data/oc/core/bulk/index.rst b/_sources/autoapi/fairchem/data/oc/core/bulk/index.rst similarity index 90% rename from _sources/autoapi/data/oc/core/bulk/index.rst rename to _sources/autoapi/fairchem/data/oc/core/bulk/index.rst index 5df8803ba..82d6500fa 100644 --- a/_sources/autoapi/data/oc/core/bulk/index.rst +++ b/_sources/autoapi/fairchem/data/oc/core/bulk/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.core.bulk` -=========================== +:py:mod:`fairchem.data.oc.core.bulk` +==================================== -.. py:module:: data.oc.core.bulk +.. py:module:: fairchem.data.oc.core.bulk Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.core.bulk.Bulk + fairchem.data.oc.core.bulk.Bulk diff --git a/_sources/autoapi/data/oc/core/index.rst b/_sources/autoapi/fairchem/data/oc/core/index.rst similarity index 98% rename from _sources/autoapi/data/oc/core/index.rst rename to _sources/autoapi/fairchem/data/oc/core/index.rst index 6907da522..690f9b1ef 100644 --- a/_sources/autoapi/data/oc/core/index.rst +++ b/_sources/autoapi/fairchem/data/oc/core/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.core` -====================== +:py:mod:`fairchem.data.oc.core` +=============================== -.. py:module:: data.oc.core +.. py:module:: fairchem.data.oc.core Submodules @@ -25,11 +25,11 @@ Classes .. autoapisummary:: - data.oc.core.Bulk - data.oc.core.Slab - data.oc.core.Adsorbate - data.oc.core.AdsorbateSlabConfig - data.oc.core.MultipleAdsorbateSlabConfig + fairchem.data.oc.core.Bulk + fairchem.data.oc.core.Slab + fairchem.data.oc.core.Adsorbate + fairchem.data.oc.core.AdsorbateSlabConfig + fairchem.data.oc.core.MultipleAdsorbateSlabConfig diff --git a/_sources/autoapi/data/oc/core/multi_adsorbate_slab_config/index.rst b/_sources/autoapi/fairchem/data/oc/core/multi_adsorbate_slab_config/index.rst similarity index 92% rename from _sources/autoapi/data/oc/core/multi_adsorbate_slab_config/index.rst rename to _sources/autoapi/fairchem/data/oc/core/multi_adsorbate_slab_config/index.rst index 570a74988..639eab0af 100644 --- a/_sources/autoapi/data/oc/core/multi_adsorbate_slab_config/index.rst +++ b/_sources/autoapi/fairchem/data/oc/core/multi_adsorbate_slab_config/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.core.multi_adsorbate_slab_config` -================================================== +:py:mod:`fairchem.data.oc.core.multi_adsorbate_slab_config` +=========================================================== -.. py:module:: data.oc.core.multi_adsorbate_slab_config +.. py:module:: fairchem.data.oc.core.multi_adsorbate_slab_config Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.core.multi_adsorbate_slab_config.MultipleAdsorbateSlabConfig + fairchem.data.oc.core.multi_adsorbate_slab_config.MultipleAdsorbateSlabConfig @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - data.oc.core.multi_adsorbate_slab_config.update_distance_map + fairchem.data.oc.core.multi_adsorbate_slab_config.update_distance_map diff --git a/_sources/autoapi/data/oc/core/slab/index.rst b/_sources/autoapi/fairchem/data/oc/core/slab/index.rst similarity index 93% rename from _sources/autoapi/data/oc/core/slab/index.rst rename to _sources/autoapi/fairchem/data/oc/core/slab/index.rst index 93f0032c4..099c95b91 100644 --- a/_sources/autoapi/data/oc/core/slab/index.rst +++ b/_sources/autoapi/fairchem/data/oc/core/slab/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.core.slab` -=========================== +:py:mod:`fairchem.data.oc.core.slab` +==================================== -.. py:module:: data.oc.core.slab +.. py:module:: fairchem.data.oc.core.slab Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.core.slab.Slab + fairchem.data.oc.core.slab.Slab @@ -21,18 +21,18 @@ Functions .. autoapisummary:: - data.oc.core.slab.tile_and_tag_atoms - data.oc.core.slab.set_fixed_atom_constraints - data.oc.core.slab.tag_surface_atoms - data.oc.core.slab.tile_atoms - data.oc.core.slab.find_surface_atoms_by_height - data.oc.core.slab.find_surface_atoms_with_voronoi_given_height - data.oc.core.slab.calculate_center_of_mass - data.oc.core.slab.calculate_coordination_of_bulk_atoms - data.oc.core.slab.compute_slabs - data.oc.core.slab.flip_struct - data.oc.core.slab.is_structure_invertible - data.oc.core.slab.standardize_bulk + fairchem.data.oc.core.slab.tile_and_tag_atoms + fairchem.data.oc.core.slab.set_fixed_atom_constraints + fairchem.data.oc.core.slab.tag_surface_atoms + fairchem.data.oc.core.slab.tile_atoms + fairchem.data.oc.core.slab.find_surface_atoms_by_height + fairchem.data.oc.core.slab.find_surface_atoms_with_voronoi_given_height + fairchem.data.oc.core.slab.calculate_center_of_mass + fairchem.data.oc.core.slab.calculate_coordination_of_bulk_atoms + fairchem.data.oc.core.slab.compute_slabs + fairchem.data.oc.core.slab.flip_struct + fairchem.data.oc.core.slab.is_structure_invertible + fairchem.data.oc.core.slab.standardize_bulk diff --git a/_sources/autoapi/data/oc/databases/index.rst b/_sources/autoapi/fairchem/data/oc/databases/index.rst similarity index 61% rename from _sources/autoapi/data/oc/databases/index.rst rename to _sources/autoapi/fairchem/data/oc/databases/index.rst index b8f3075c6..75b18327d 100644 --- a/_sources/autoapi/data/oc/databases/index.rst +++ b/_sources/autoapi/fairchem/data/oc/databases/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.databases` -=========================== +:py:mod:`fairchem.data.oc.databases` +==================================== -.. py:module:: data.oc.databases +.. py:module:: fairchem.data.oc.databases Subpackages diff --git a/_sources/autoapi/fairchem/data/oc/databases/pkls/index.rst b/_sources/autoapi/fairchem/data/oc/databases/pkls/index.rst new file mode 100644 index 000000000..21e06cdf2 --- /dev/null +++ b/_sources/autoapi/fairchem/data/oc/databases/pkls/index.rst @@ -0,0 +1,17 @@ +:py:mod:`fairchem.data.oc.databases.pkls` +========================================= + +.. py:module:: fairchem.data.oc.databases.pkls + + +Package Contents +---------------- + +.. py:data:: BULK_PKL_PATH + + + +.. py:data:: ADSORBATES_PKL_PATH + + + diff --git a/_sources/autoapi/data/oc/databases/update/index.rst b/_sources/autoapi/fairchem/data/oc/databases/update/index.rst similarity index 51% rename from _sources/autoapi/data/oc/databases/update/index.rst rename to _sources/autoapi/fairchem/data/oc/databases/update/index.rst index 8bc39c042..bf2be9dc6 100644 --- a/_sources/autoapi/data/oc/databases/update/index.rst +++ b/_sources/autoapi/fairchem/data/oc/databases/update/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.databases.update` -================================== +:py:mod:`fairchem.data.oc.databases.update` +=========================================== -.. py:module:: data.oc.databases.update +.. py:module:: fairchem.data.oc.databases.update .. autoapi-nested-parse:: @@ -19,10 +19,10 @@ Functions .. autoapisummary:: - data.oc.databases.update.pbc_patch - data.oc.databases.update.set_pbc_patch - data.oc.databases.update.update_pkls - data.oc.databases.update.update_dbs + fairchem.data.oc.databases.update.pbc_patch + fairchem.data.oc.databases.update.set_pbc_patch + fairchem.data.oc.databases.update.update_pkls + fairchem.data.oc.databases.update.update_dbs diff --git a/_sources/autoapi/fairchem/data/oc/experimental/get_energies/index.rst b/_sources/autoapi/fairchem/data/oc/experimental/get_energies/index.rst new file mode 100644 index 000000000..70a85de2a --- /dev/null +++ b/_sources/autoapi/fairchem/data/oc/experimental/get_energies/index.rst @@ -0,0 +1,39 @@ +:py:mod:`fairchem.data.oc.experimental.get_energies` +==================================================== + +.. py:module:: fairchem.data.oc.experimental.get_energies + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.data.oc.experimental.get_energies.extract_file + fairchem.data.oc.experimental.get_energies.process_func + + + +Attributes +~~~~~~~~~~ + +.. autoapisummary:: + + fairchem.data.oc.experimental.get_energies.input_folder + + +.. py:function:: extract_file(zipname, file_to_unzip, extract_to) + + +.. py:function:: process_func(indices, dirlist, ans) + + +.. py:data:: input_folder + :value: 'temp_download/' + + + diff --git a/_sources/autoapi/data/oc/experimental/merge_traj/index.rst b/_sources/autoapi/fairchem/data/oc/experimental/merge_traj/index.rst similarity index 55% rename from _sources/autoapi/data/oc/experimental/merge_traj/index.rst rename to _sources/autoapi/fairchem/data/oc/experimental/merge_traj/index.rst index ae550dc65..6d216f4e5 100644 --- a/_sources/autoapi/data/oc/experimental/merge_traj/index.rst +++ b/_sources/autoapi/fairchem/data/oc/experimental/merge_traj/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.experimental.merge_traj` -========================================= +:py:mod:`fairchem.data.oc.experimental.merge_traj` +================================================== -.. py:module:: data.oc.experimental.merge_traj +.. py:module:: fairchem.data.oc.experimental.merge_traj Module Contents @@ -13,8 +13,8 @@ Functions .. autoapisummary:: - data.oc.experimental.merge_traj.extract_file - data.oc.experimental.merge_traj.main + fairchem.data.oc.experimental.merge_traj.extract_file + fairchem.data.oc.experimental.merge_traj.main diff --git a/_sources/autoapi/data/oc/experimental/perturb_systems/index.rst b/_sources/autoapi/fairchem/data/oc/experimental/perturb_systems/index.rst similarity index 57% rename from _sources/autoapi/data/oc/experimental/perturb_systems/index.rst rename to _sources/autoapi/fairchem/data/oc/experimental/perturb_systems/index.rst index f164929e2..3888fca0f 100644 --- a/_sources/autoapi/data/oc/experimental/perturb_systems/index.rst +++ b/_sources/autoapi/fairchem/data/oc/experimental/perturb_systems/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.experimental.perturb_systems` -============================================== +:py:mod:`fairchem.data.oc.experimental.perturb_systems` +======================================================= -.. py:module:: data.oc.experimental.perturb_systems +.. py:module:: fairchem.data.oc.experimental.perturb_systems Module Contents @@ -13,7 +13,7 @@ Functions .. autoapisummary:: - data.oc.experimental.perturb_systems.main + fairchem.data.oc.experimental.perturb_systems.main diff --git a/_sources/autoapi/fairchem/data/oc/experimental/rattle_test/index.rst b/_sources/autoapi/fairchem/data/oc/experimental/rattle_test/index.rst new file mode 100644 index 000000000..9449c836e --- /dev/null +++ b/_sources/autoapi/fairchem/data/oc/experimental/rattle_test/index.rst @@ -0,0 +1,25 @@ +:py:mod:`fairchem.data.oc.experimental.rattle_test` +=================================================== + +.. py:module:: fairchem.data.oc.experimental.rattle_test + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.data.oc.experimental.rattle_test.main + + + +.. py:function:: main() + + Checks whether ASE's rattle modifies fixed atoms. + ' + + diff --git a/_sources/autoapi/data/oc/experimental/utils/index.rst b/_sources/autoapi/fairchem/data/oc/experimental/utils/index.rst similarity index 79% rename from _sources/autoapi/data/oc/experimental/utils/index.rst rename to _sources/autoapi/fairchem/data/oc/experimental/utils/index.rst index f40677b3c..560db4dac 100644 --- a/_sources/autoapi/data/oc/experimental/utils/index.rst +++ b/_sources/autoapi/fairchem/data/oc/experimental/utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.experimental.utils` -==================================== +:py:mod:`fairchem.data.oc.experimental.utils` +============================================= -.. py:module:: data.oc.experimental.utils +.. py:module:: fairchem.data.oc.experimental.utils Module Contents @@ -13,9 +13,9 @@ Functions .. autoapisummary:: - data.oc.experimental.utils.v0_check - data.oc.experimental.utils.restart_bug_check - data.oc.experimental.utils.plot_traj + fairchem.data.oc.experimental.utils.v0_check + fairchem.data.oc.experimental.utils.restart_bug_check + fairchem.data.oc.experimental.utils.plot_traj diff --git a/_sources/autoapi/data/oc/index.rst b/_sources/autoapi/fairchem/data/oc/index.rst similarity index 73% rename from _sources/autoapi/data/oc/index.rst rename to _sources/autoapi/fairchem/data/oc/index.rst index 7ea60b66a..6598b5c52 100644 --- a/_sources/autoapi/data/oc/index.rst +++ b/_sources/autoapi/fairchem/data/oc/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc` -================= +:py:mod:`fairchem.data.oc` +========================== -.. py:module:: data.oc +.. py:module:: fairchem.data.oc Subpackages diff --git a/_sources/autoapi/data/oc/scripts/precompute_sample_structures/index.rst b/_sources/autoapi/fairchem/data/oc/scripts/precompute_sample_structures/index.rst similarity index 82% rename from _sources/autoapi/data/oc/scripts/precompute_sample_structures/index.rst rename to _sources/autoapi/fairchem/data/oc/scripts/precompute_sample_structures/index.rst index ea600bbd4..4a7fc3cdb 100644 --- a/_sources/autoapi/data/oc/scripts/precompute_sample_structures/index.rst +++ b/_sources/autoapi/fairchem/data/oc/scripts/precompute_sample_structures/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.scripts.precompute_sample_structures` -====================================================== +:py:mod:`fairchem.data.oc.scripts.precompute_sample_structures` +=============================================================== -.. py:module:: data.oc.scripts.precompute_sample_structures +.. py:module:: fairchem.data.oc.scripts.precompute_sample_structures .. autoapi-nested-parse:: @@ -22,11 +22,11 @@ Functions .. autoapisummary:: - data.oc.scripts.precompute_sample_structures.enumerate_surfaces_for_saving - data.oc.scripts.precompute_sample_structures.standardize_bulk - data.oc.scripts.precompute_sample_structures.is_structure_invertible - data.oc.scripts.precompute_sample_structures.flip_struct - data.oc.scripts.precompute_sample_structures.precompute_enumerate_surface + fairchem.data.oc.scripts.precompute_sample_structures.enumerate_surfaces_for_saving + fairchem.data.oc.scripts.precompute_sample_structures.standardize_bulk + fairchem.data.oc.scripts.precompute_sample_structures.is_structure_invertible + fairchem.data.oc.scripts.precompute_sample_structures.flip_struct + fairchem.data.oc.scripts.precompute_sample_structures.precompute_enumerate_surface @@ -35,9 +35,9 @@ Attributes .. autoapisummary:: - data.oc.scripts.precompute_sample_structures.__authors__ - data.oc.scripts.precompute_sample_structures.__email__ - data.oc.scripts.precompute_sample_structures.s + fairchem.data.oc.scripts.precompute_sample_structures.__authors__ + fairchem.data.oc.scripts.precompute_sample_structures.__email__ + fairchem.data.oc.scripts.precompute_sample_structures.s .. py:data:: __authors__ diff --git a/_sources/autoapi/data/oc/structure_generator/index.rst b/_sources/autoapi/fairchem/data/oc/structure_generator/index.rst similarity index 81% rename from _sources/autoapi/data/oc/structure_generator/index.rst rename to _sources/autoapi/fairchem/data/oc/structure_generator/index.rst index e59926ff1..8ef68cf0a 100644 --- a/_sources/autoapi/data/oc/structure_generator/index.rst +++ b/_sources/autoapi/fairchem/data/oc/structure_generator/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.structure_generator` -===================================== +:py:mod:`fairchem.data.oc.structure_generator` +============================================== -.. py:module:: data.oc.structure_generator +.. py:module:: fairchem.data.oc.structure_generator Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.structure_generator.StructureGenerator + fairchem.data.oc.structure_generator.StructureGenerator @@ -21,10 +21,10 @@ Functions .. autoapisummary:: - data.oc.structure_generator.write_surface - data.oc.structure_generator.parse_args - data.oc.structure_generator.precompute_slabs - data.oc.structure_generator.run_placements + fairchem.data.oc.structure_generator.write_surface + fairchem.data.oc.structure_generator.parse_args + fairchem.data.oc.structure_generator.precompute_slabs + fairchem.data.oc.structure_generator.run_placements @@ -33,7 +33,7 @@ Attributes .. autoapisummary:: - data.oc.structure_generator.args + fairchem.data.oc.structure_generator.args .. py:class:: StructureGenerator(args, bulk_index, surface_index, adsorbate_index) diff --git a/_sources/autoapi/data/oc/tests/old_tests/check_energy_and_forces/index.rst b/_sources/autoapi/fairchem/data/oc/tests/old_tests/check_energy_and_forces/index.rst similarity index 60% rename from _sources/autoapi/data/oc/tests/old_tests/check_energy_and_forces/index.rst rename to _sources/autoapi/fairchem/data/oc/tests/old_tests/check_energy_and_forces/index.rst index 390f96a66..24b6ee97f 100644 --- a/_sources/autoapi/data/oc/tests/old_tests/check_energy_and_forces/index.rst +++ b/_sources/autoapi/fairchem/data/oc/tests/old_tests/check_energy_and_forces/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.tests.old_tests.check_energy_and_forces` -========================================================= +:py:mod:`fairchem.data.oc.tests.old_tests.check_energy_and_forces` +================================================================== -.. py:module:: data.oc.tests.old_tests.check_energy_and_forces +.. py:module:: fairchem.data.oc.tests.old_tests.check_energy_and_forces Module Contents @@ -13,13 +13,13 @@ Functions .. autoapisummary:: - data.oc.tests.old_tests.check_energy_and_forces.check_relaxed_forces - data.oc.tests.old_tests.check_energy_and_forces.check_adsorption_energy - data.oc.tests.old_tests.check_energy_and_forces.check_DFT_energy - data.oc.tests.old_tests.check_energy_and_forces.check_positions_across_frames_are_different - data.oc.tests.old_tests.check_energy_and_forces.read_pkl - data.oc.tests.old_tests.check_energy_and_forces.run_checks - data.oc.tests.old_tests.check_energy_and_forces.create_parser + fairchem.data.oc.tests.old_tests.check_energy_and_forces.check_relaxed_forces + fairchem.data.oc.tests.old_tests.check_energy_and_forces.check_adsorption_energy + fairchem.data.oc.tests.old_tests.check_energy_and_forces.check_DFT_energy + fairchem.data.oc.tests.old_tests.check_energy_and_forces.check_positions_across_frames_are_different + fairchem.data.oc.tests.old_tests.check_energy_and_forces.read_pkl + fairchem.data.oc.tests.old_tests.check_energy_and_forces.run_checks + fairchem.data.oc.tests.old_tests.check_energy_and_forces.create_parser @@ -28,7 +28,7 @@ Attributes .. autoapisummary:: - data.oc.tests.old_tests.check_energy_and_forces.parser + fairchem.data.oc.tests.old_tests.check_energy_and_forces.parser .. py:function:: check_relaxed_forces(sid, path, thres) diff --git a/_sources/autoapi/data/oc/tests/old_tests/check_inputs/index.rst b/_sources/autoapi/fairchem/data/oc/tests/old_tests/check_inputs/index.rst similarity index 85% rename from _sources/autoapi/data/oc/tests/old_tests/check_inputs/index.rst rename to _sources/autoapi/fairchem/data/oc/tests/old_tests/check_inputs/index.rst index 28a96af20..9df54e4f0 100644 --- a/_sources/autoapi/data/oc/tests/old_tests/check_inputs/index.rst +++ b/_sources/autoapi/fairchem/data/oc/tests/old_tests/check_inputs/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.tests.old_tests.check_inputs` -============================================== +:py:mod:`fairchem.data.oc.tests.old_tests.check_inputs` +======================================================= -.. py:module:: data.oc.tests.old_tests.check_inputs +.. py:module:: fairchem.data.oc.tests.old_tests.check_inputs Module Contents @@ -13,12 +13,12 @@ Functions .. autoapisummary:: - data.oc.tests.old_tests.check_inputs.obtain_metadata - data.oc.tests.old_tests.check_inputs.create_df - data.oc.tests.old_tests.check_inputs.adslabs_are_unique - data.oc.tests.old_tests.check_inputs.check_commonelems - data.oc.tests.old_tests.check_inputs.is_adsorbate_placed_correct - data.oc.tests.old_tests.check_inputs._get_connectivity + fairchem.data.oc.tests.old_tests.check_inputs.obtain_metadata + fairchem.data.oc.tests.old_tests.check_inputs.create_df + fairchem.data.oc.tests.old_tests.check_inputs.adslabs_are_unique + fairchem.data.oc.tests.old_tests.check_inputs.check_commonelems + fairchem.data.oc.tests.old_tests.check_inputs.is_adsorbate_placed_correct + fairchem.data.oc.tests.old_tests.check_inputs._get_connectivity diff --git a/_sources/autoapi/fairchem/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.rst b/_sources/autoapi/fairchem/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.rst new file mode 100644 index 000000000..5bfcb8cb2 --- /dev/null +++ b/_sources/autoapi/fairchem/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.rst @@ -0,0 +1,53 @@ +:py:mod:`fairchem.data.oc.tests.old_tests.compare_inputs_and_trajectory` +======================================================================== + +.. py:module:: fairchem.data.oc.tests.old_tests.compare_inputs_and_trajectory + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.data.oc.tests.old_tests.compare_inputs_and_trajectory.get_starting_structure_from_input_dir + fairchem.data.oc.tests.old_tests.compare_inputs_and_trajectory.min_diff + fairchem.data.oc.tests.old_tests.compare_inputs_and_trajectory.compare + fairchem.data.oc.tests.old_tests.compare_inputs_and_trajectory.read_pkl + fairchem.data.oc.tests.old_tests.compare_inputs_and_trajectory.create_parser + + + +Attributes +~~~~~~~~~~ + +.. autoapisummary:: + + fairchem.data.oc.tests.old_tests.compare_inputs_and_trajectory.parser + + +.. py:function:: get_starting_structure_from_input_dir(input_dir) + + +.. py:function:: min_diff(atoms_init, atoms_final) + + Calculate atom wise distances of two atoms object, + taking into account periodic boundary conditions. + + +.. py:function:: compare(args) + + +.. py:function:: read_pkl(fname) + + +.. py:function:: create_parser() + + +.. py:data:: parser + + + diff --git a/_sources/autoapi/fairchem/data/oc/tests/old_tests/verify_correctness/index.rst b/_sources/autoapi/fairchem/data/oc/tests/old_tests/verify_correctness/index.rst new file mode 100644 index 000000000..93e8dbd91 --- /dev/null +++ b/_sources/autoapi/fairchem/data/oc/tests/old_tests/verify_correctness/index.rst @@ -0,0 +1,42 @@ +:py:mod:`fairchem.data.oc.tests.old_tests.verify_correctness` +============================================================= + +.. py:module:: fairchem.data.oc.tests.old_tests.verify_correctness + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.data.oc.tests.old_tests.verify_correctness.compare_runs + fairchem.data.oc.tests.old_tests.verify_correctness.create_parser + fairchem.data.oc.tests.old_tests.verify_correctness.main + + + +Attributes +~~~~~~~~~~ + +.. autoapisummary:: + + fairchem.data.oc.tests.old_tests.verify_correctness.parser + + +.. py:function:: compare_runs(path1, path2, reference_type, tol) + + +.. py:function:: create_parser() + + +.. py:function:: main(args) + + +.. py:data:: parser + + + diff --git a/_sources/autoapi/data/oc/tests/test_adsorbate/index.rst b/_sources/autoapi/fairchem/data/oc/tests/test_adsorbate/index.rst similarity index 68% rename from _sources/autoapi/data/oc/tests/test_adsorbate/index.rst rename to _sources/autoapi/fairchem/data/oc/tests/test_adsorbate/index.rst index b405f8c43..c16df1bd0 100644 --- a/_sources/autoapi/data/oc/tests/test_adsorbate/index.rst +++ b/_sources/autoapi/fairchem/data/oc/tests/test_adsorbate/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.tests.test_adsorbate` -====================================== +:py:mod:`fairchem.data.oc.tests.test_adsorbate` +=============================================== -.. py:module:: data.oc.tests.test_adsorbate +.. py:module:: fairchem.data.oc.tests.test_adsorbate Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.tests.test_adsorbate.TestAdsorbate + fairchem.data.oc.tests.test_adsorbate.TestAdsorbate @@ -22,8 +22,8 @@ Attributes .. autoapisummary:: - data.oc.tests.test_adsorbate._test_db - data.oc.tests.test_adsorbate._test_db_old + fairchem.data.oc.tests.test_adsorbate._test_db + fairchem.data.oc.tests.test_adsorbate._test_db_old .. py:data:: _test_db diff --git a/_sources/autoapi/data/oc/tests/test_adsorbate_slab_config/index.rst b/_sources/autoapi/fairchem/data/oc/tests/test_adsorbate_slab_config/index.rst similarity index 61% rename from _sources/autoapi/data/oc/tests/test_adsorbate_slab_config/index.rst rename to _sources/autoapi/fairchem/data/oc/tests/test_adsorbate_slab_config/index.rst index fbe53733a..8781a250d 100644 --- a/_sources/autoapi/data/oc/tests/test_adsorbate_slab_config/index.rst +++ b/_sources/autoapi/fairchem/data/oc/tests/test_adsorbate_slab_config/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.tests.test_adsorbate_slab_config` -================================================== +:py:mod:`fairchem.data.oc.tests.test_adsorbate_slab_config` +=========================================================== -.. py:module:: data.oc.tests.test_adsorbate_slab_config +.. py:module:: fairchem.data.oc.tests.test_adsorbate_slab_config Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.tests.test_adsorbate_slab_config.TestAdslab + fairchem.data.oc.tests.test_adsorbate_slab_config.TestAdslab @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - data.oc.tests.test_adsorbate_slab_config.load_data + fairchem.data.oc.tests.test_adsorbate_slab_config.load_data diff --git a/_sources/autoapi/data/oc/tests/test_bulk/index.rst b/_sources/autoapi/fairchem/data/oc/tests/test_bulk/index.rst similarity index 73% rename from _sources/autoapi/data/oc/tests/test_bulk/index.rst rename to _sources/autoapi/fairchem/data/oc/tests/test_bulk/index.rst index b90c9fdcd..b2df88670 100644 --- a/_sources/autoapi/data/oc/tests/test_bulk/index.rst +++ b/_sources/autoapi/fairchem/data/oc/tests/test_bulk/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.tests.test_bulk` -================================= +:py:mod:`fairchem.data.oc.tests.test_bulk` +========================================== -.. py:module:: data.oc.tests.test_bulk +.. py:module:: fairchem.data.oc.tests.test_bulk Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.tests.test_bulk.TestBulk + fairchem.data.oc.tests.test_bulk.TestBulk @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - data.oc.tests.test_bulk.load_bulk + fairchem.data.oc.tests.test_bulk.load_bulk @@ -30,7 +30,7 @@ Attributes .. autoapisummary:: - data.oc.tests.test_bulk._test_db + fairchem.data.oc.tests.test_bulk._test_db .. py:function:: load_bulk(request) diff --git a/_sources/autoapi/data/oc/tests/test_inputs/index.rst b/_sources/autoapi/fairchem/data/oc/tests/test_inputs/index.rst similarity index 52% rename from _sources/autoapi/data/oc/tests/test_inputs/index.rst rename to _sources/autoapi/fairchem/data/oc/tests/test_inputs/index.rst index 37b04e847..5d2b300a9 100644 --- a/_sources/autoapi/data/oc/tests/test_inputs/index.rst +++ b/_sources/autoapi/fairchem/data/oc/tests/test_inputs/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.tests.test_inputs` -=================================== +:py:mod:`fairchem.data.oc.tests.test_inputs` +============================================ -.. py:module:: data.oc.tests.test_inputs +.. py:module:: fairchem.data.oc.tests.test_inputs Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.tests.test_inputs.TestVasp + fairchem.data.oc.tests.test_inputs.TestVasp @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - data.oc.tests.test_inputs.load_data + fairchem.data.oc.tests.test_inputs.load_data diff --git a/_sources/autoapi/data/oc/tests/test_multi_adsorbate_slab_config/index.rst b/_sources/autoapi/fairchem/data/oc/tests/test_multi_adsorbate_slab_config/index.rst similarity index 57% rename from _sources/autoapi/data/oc/tests/test_multi_adsorbate_slab_config/index.rst rename to _sources/autoapi/fairchem/data/oc/tests/test_multi_adsorbate_slab_config/index.rst index 5f82e34bb..2007d5f9a 100644 --- a/_sources/autoapi/data/oc/tests/test_multi_adsorbate_slab_config/index.rst +++ b/_sources/autoapi/fairchem/data/oc/tests/test_multi_adsorbate_slab_config/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.tests.test_multi_adsorbate_slab_config` -======================================================== +:py:mod:`fairchem.data.oc.tests.test_multi_adsorbate_slab_config` +================================================================= -.. py:module:: data.oc.tests.test_multi_adsorbate_slab_config +.. py:module:: fairchem.data.oc.tests.test_multi_adsorbate_slab_config Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.tests.test_multi_adsorbate_slab_config.TestMultiAdslab + fairchem.data.oc.tests.test_multi_adsorbate_slab_config.TestMultiAdslab @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - data.oc.tests.test_multi_adsorbate_slab_config.load_data + fairchem.data.oc.tests.test_multi_adsorbate_slab_config.load_data diff --git a/_sources/autoapi/data/oc/tests/test_slab/index.rst b/_sources/autoapi/fairchem/data/oc/tests/test_slab/index.rst similarity index 58% rename from _sources/autoapi/data/oc/tests/test_slab/index.rst rename to _sources/autoapi/fairchem/data/oc/tests/test_slab/index.rst index daad7282f..4ccbbc70e 100644 --- a/_sources/autoapi/data/oc/tests/test_slab/index.rst +++ b/_sources/autoapi/fairchem/data/oc/tests/test_slab/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.tests.test_slab` -================================= +:py:mod:`fairchem.data.oc.tests.test_slab` +========================================== -.. py:module:: data.oc.tests.test_slab +.. py:module:: fairchem.data.oc.tests.test_slab Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.tests.test_slab.TestSlab + fairchem.data.oc.tests.test_slab.TestSlab diff --git a/_sources/autoapi/data/oc/utils/flag_anomaly/index.rst b/_sources/autoapi/fairchem/data/oc/utils/flag_anomaly/index.rst similarity index 89% rename from _sources/autoapi/data/oc/utils/flag_anomaly/index.rst rename to _sources/autoapi/fairchem/data/oc/utils/flag_anomaly/index.rst index 9e77d6a61..3bc74cd9a 100644 --- a/_sources/autoapi/data/oc/utils/flag_anomaly/index.rst +++ b/_sources/autoapi/fairchem/data/oc/utils/flag_anomaly/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.utils.flag_anomaly` -==================================== +:py:mod:`fairchem.data.oc.utils.flag_anomaly` +============================================= -.. py:module:: data.oc.utils.flag_anomaly +.. py:module:: fairchem.data.oc.utils.flag_anomaly Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - data.oc.utils.flag_anomaly.DetectTrajAnomaly + fairchem.data.oc.utils.flag_anomaly.DetectTrajAnomaly diff --git a/_sources/autoapi/data/oc/utils/index.rst b/_sources/autoapi/fairchem/data/oc/utils/index.rst similarity index 92% rename from _sources/autoapi/data/oc/utils/index.rst rename to _sources/autoapi/fairchem/data/oc/utils/index.rst index 55f044ea0..75eae8bc7 100644 --- a/_sources/autoapi/data/oc/utils/index.rst +++ b/_sources/autoapi/fairchem/data/oc/utils/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.utils` -======================= +:py:mod:`fairchem.data.oc.utils` +================================ -.. py:module:: data.oc.utils +.. py:module:: fairchem.data.oc.utils Submodules @@ -22,7 +22,7 @@ Classes .. autoapisummary:: - data.oc.utils.DetectTrajAnomaly + fairchem.data.oc.utils.DetectTrajAnomaly diff --git a/_sources/autoapi/data/oc/utils/vasp/index.rst b/_sources/autoapi/fairchem/data/oc/utils/vasp/index.rst similarity index 81% rename from _sources/autoapi/data/oc/utils/vasp/index.rst rename to _sources/autoapi/fairchem/data/oc/utils/vasp/index.rst index 9fac178ee..2592d8a7d 100644 --- a/_sources/autoapi/data/oc/utils/vasp/index.rst +++ b/_sources/autoapi/fairchem/data/oc/utils/vasp/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.oc.utils.vasp` -============================ +:py:mod:`fairchem.data.oc.utils.vasp` +===================================== -.. py:module:: data.oc.utils.vasp +.. py:module:: fairchem.data.oc.utils.vasp .. autoapi-nested-parse:: @@ -21,9 +21,9 @@ Functions .. autoapisummary:: - data.oc.utils.vasp._clean_up_inputs - data.oc.utils.vasp.calculate_surface_k_points - data.oc.utils.vasp.write_vasp_input_files + fairchem.data.oc.utils.vasp._clean_up_inputs + fairchem.data.oc.utils.vasp.calculate_surface_k_points + fairchem.data.oc.utils.vasp.write_vasp_input_files @@ -32,10 +32,10 @@ Attributes .. autoapisummary:: - data.oc.utils.vasp.__author__ - data.oc.utils.vasp.__email__ - data.oc.utils.vasp.VASP_FLAGS - data.oc.utils.vasp.BULK_VASP_FLAGS + fairchem.data.oc.utils.vasp.__author__ + fairchem.data.oc.utils.vasp.__email__ + fairchem.data.oc.utils.vasp.VASP_FLAGS + fairchem.data.oc.utils.vasp.BULK_VASP_FLAGS .. py:data:: __author__ diff --git a/_sources/autoapi/data/odac/force_field/FF_analysis/index.rst b/_sources/autoapi/fairchem/data/odac/force_field/FF_analysis/index.rst similarity index 52% rename from _sources/autoapi/data/odac/force_field/FF_analysis/index.rst rename to _sources/autoapi/fairchem/data/odac/force_field/FF_analysis/index.rst index 97bfda83e..13e36c30b 100644 --- a/_sources/autoapi/data/odac/force_field/FF_analysis/index.rst +++ b/_sources/autoapi/fairchem/data/odac/force_field/FF_analysis/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.odac.force_field.FF_analysis` -=========================================== +:py:mod:`fairchem.data.odac.force_field.FF_analysis` +==================================================== -.. py:module:: data.odac.force_field.FF_analysis +.. py:module:: fairchem.data.odac.force_field.FF_analysis Module Contents @@ -13,15 +13,15 @@ Functions .. autoapisummary:: - data.odac.force_field.FF_analysis.get_data - data.odac.force_field.FF_analysis.binned_average - data.odac.force_field.FF_analysis.bin_plot - data.odac.force_field.FF_analysis.get_Fig4a - data.odac.force_field.FF_analysis.get_Fig4b - data.odac.force_field.FF_analysis.get_Fig4c - data.odac.force_field.FF_analysis.get_Fig4d - data.odac.force_field.FF_analysis.phys_err - data.odac.force_field.FF_analysis.chem_err + fairchem.data.odac.force_field.FF_analysis.get_data + fairchem.data.odac.force_field.FF_analysis.binned_average + fairchem.data.odac.force_field.FF_analysis.bin_plot + fairchem.data.odac.force_field.FF_analysis.get_Fig4a + fairchem.data.odac.force_field.FF_analysis.get_Fig4b + fairchem.data.odac.force_field.FF_analysis.get_Fig4c + fairchem.data.odac.force_field.FF_analysis.get_Fig4d + fairchem.data.odac.force_field.FF_analysis.phys_err + fairchem.data.odac.force_field.FF_analysis.chem_err @@ -30,7 +30,7 @@ Attributes .. autoapisummary:: - data.odac.force_field.FF_analysis.infile + fairchem.data.odac.force_field.FF_analysis.infile .. py:function:: get_data(infile, limit=2) diff --git a/_sources/autoapi/data/odac/promising_mof/promising_mof_energies/energy/index.rst b/_sources/autoapi/fairchem/data/odac/promising_mof/promising_mof_energies/energy/index.rst similarity index 90% rename from _sources/autoapi/data/odac/promising_mof/promising_mof_energies/energy/index.rst rename to _sources/autoapi/fairchem/data/odac/promising_mof/promising_mof_energies/energy/index.rst index 678b3db9e..1b9e95fc5 100644 --- a/_sources/autoapi/data/odac/promising_mof/promising_mof_energies/energy/index.rst +++ b/_sources/autoapi/fairchem/data/odac/promising_mof/promising_mof_energies/energy/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.odac.promising_mof.promising_mof_energies.energy` -=============================================================== +:py:mod:`fairchem.data.odac.promising_mof.promising_mof_energies.energy` +======================================================================== -.. py:module:: data.odac.promising_mof.promising_mof_energies.energy +.. py:module:: fairchem.data.odac.promising_mof.promising_mof_energies.energy Module Contents diff --git a/_sources/autoapi/fairchem/data/om/biomolecules/geom/sample_geom_drugs/index.rst b/_sources/autoapi/fairchem/data/om/biomolecules/geom/sample_geom_drugs/index.rst new file mode 100644 index 000000000..d296d291a --- /dev/null +++ b/_sources/autoapi/fairchem/data/om/biomolecules/geom/sample_geom_drugs/index.rst @@ -0,0 +1,30 @@ +:py:mod:`fairchem.data.om.biomolecules.geom.sample_geom_drugs` +============================================================== + +.. py:module:: fairchem.data.om.biomolecules.geom.sample_geom_drugs + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.data.om.biomolecules.geom.sample_geom_drugs.write_pickle + fairchem.data.om.biomolecules.geom.sample_geom_drugs.parse_args + fairchem.data.om.biomolecules.geom.sample_geom_drugs.main + + + +.. py:function:: write_pickle(data, path) + + +.. py:function:: parse_args() + + +.. py:function:: main() + + diff --git a/_sources/autoapi/fairchem/data/om/biomolecules/geom/write_geom_drugs_structures/index.rst b/_sources/autoapi/fairchem/data/om/biomolecules/geom/write_geom_drugs_structures/index.rst new file mode 100644 index 000000000..8e8f6a49d --- /dev/null +++ b/_sources/autoapi/fairchem/data/om/biomolecules/geom/write_geom_drugs_structures/index.rst @@ -0,0 +1,26 @@ +:py:mod:`fairchem.data.om.biomolecules.geom.write_geom_drugs_structures` +======================================================================== + +.. py:module:: fairchem.data.om.biomolecules.geom.write_geom_drugs_structures + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + fairchem.data.om.biomolecules.geom.write_geom_drugs_structures.parse_args + fairchem.data.om.biomolecules.geom.write_geom_drugs_structures.main + + + +.. py:function:: parse_args() + + +.. py:function:: main() + + diff --git a/_sources/autoapi/data/om/omdata/orca/calc/index.rst b/_sources/autoapi/fairchem/data/om/omdata/orca/calc/index.rst similarity index 63% rename from _sources/autoapi/data/om/omdata/orca/calc/index.rst rename to _sources/autoapi/fairchem/data/om/omdata/orca/calc/index.rst index 136395ad8..96efaf1bc 100644 --- a/_sources/autoapi/data/om/omdata/orca/calc/index.rst +++ b/_sources/autoapi/fairchem/data/om/omdata/orca/calc/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.om.omdata.orca.calc` -================================== +:py:mod:`fairchem.data.om.omdata.orca.calc` +=========================================== -.. py:module:: data.om.omdata.orca.calc +.. py:module:: fairchem.data.om.omdata.orca.calc Module Contents @@ -13,7 +13,7 @@ Functions .. autoapisummary:: - data.om.omdata.orca.calc.write_orca_inputs + fairchem.data.om.omdata.orca.calc.write_orca_inputs @@ -22,12 +22,12 @@ Attributes .. autoapisummary:: - data.om.omdata.orca.calc.ORCA_FUNCTIONAL - data.om.omdata.orca.calc.ORCA_BASIS - data.om.omdata.orca.calc.ORCA_SIMPLE_INPUT - data.om.omdata.orca.calc.ORCA_BLOCKS - data.om.omdata.orca.calc.ORCA_ASE_SIMPLE_INPUT - data.om.omdata.orca.calc.OPT_PARAMETERS + fairchem.data.om.omdata.orca.calc.ORCA_FUNCTIONAL + fairchem.data.om.omdata.orca.calc.ORCA_BASIS + fairchem.data.om.omdata.orca.calc.ORCA_SIMPLE_INPUT + fairchem.data.om.omdata.orca.calc.ORCA_BLOCKS + fairchem.data.om.omdata.orca.calc.ORCA_ASE_SIMPLE_INPUT + fairchem.data.om.omdata.orca.calc.OPT_PARAMETERS .. py:data:: ORCA_FUNCTIONAL diff --git a/_sources/autoapi/fairchem/data/om/omdata/orca/index.rst b/_sources/autoapi/fairchem/data/om/omdata/orca/index.rst new file mode 100644 index 000000000..5675bd633 --- /dev/null +++ b/_sources/autoapi/fairchem/data/om/omdata/orca/index.rst @@ -0,0 +1,16 @@ +:py:mod:`fairchem.data.om.omdata.orca` +====================================== + +.. py:module:: fairchem.data.om.omdata.orca + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + calc/index.rst + recipes/index.rst + + diff --git a/_sources/autoapi/data/om/omdata/orca/recipes/index.rst b/_sources/autoapi/fairchem/data/om/omdata/orca/recipes/index.rst similarity index 90% rename from _sources/autoapi/data/om/omdata/orca/recipes/index.rst rename to _sources/autoapi/fairchem/data/om/omdata/orca/recipes/index.rst index 4fa66ad21..b7cfc29d0 100644 --- a/_sources/autoapi/data/om/omdata/orca/recipes/index.rst +++ b/_sources/autoapi/fairchem/data/om/omdata/orca/recipes/index.rst @@ -1,7 +1,7 @@ -:py:mod:`data.om.omdata.orca.recipes` -===================================== +:py:mod:`fairchem.data.om.omdata.orca.recipes` +============================================== -.. py:module:: data.om.omdata.orca.recipes +.. py:module:: fairchem.data.om.omdata.orca.recipes Module Contents @@ -13,8 +13,8 @@ Functions .. autoapisummary:: - data.om.omdata.orca.recipes.single_point_calculation - data.om.omdata.orca.recipes.ase_relaxation + fairchem.data.om.omdata.orca.recipes.single_point_calculation + fairchem.data.om.omdata.orca.recipes.ase_relaxation diff --git a/_sources/autoapi/demo/ocpapi/client/client/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/client/client/index.rst similarity index 89% rename from _sources/autoapi/demo/ocpapi/client/client/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/client/client/index.rst index 88e6b723b..98021eccb 100644 --- a/_sources/autoapi/demo/ocpapi/client/client/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/client/client/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.client.client` -=================================== +:py:mod:`fairchem.demo.ocpapi.client.client` +============================================ -.. py:module:: demo.ocpapi.client.client +.. py:module:: fairchem.demo.ocpapi.client.client Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - demo.ocpapi.client.client.Client + fairchem.demo.ocpapi.client.client.Client @@ -59,7 +59,7 @@ Classes The host being called by this client. - .. py:method:: get_models() -> demo.ocpapi.client.models.Models + .. py:method:: get_models() -> fairchem.demo.ocpapi.client.models.Models :async: Fetch the list of models that are supported in the API. @@ -74,7 +74,7 @@ Classes :returns: The models that are supported in the API. - .. py:method:: get_bulks() -> demo.ocpapi.client.models.Bulks + .. py:method:: get_bulks() -> fairchem.demo.ocpapi.client.models.Bulks :async: Fetch the list of bulk materials that are supported in the API. @@ -89,7 +89,7 @@ Classes :returns: The bulks that are supported throughout the API. - .. py:method:: get_adsorbates() -> demo.ocpapi.client.models.Adsorbates + .. py:method:: get_adsorbates() -> fairchem.demo.ocpapi.client.models.Adsorbates :async: Fetch the list of adsorbates that are supported in the API. @@ -104,7 +104,7 @@ Classes :returns: The adsorbates that are supported throughout the API. - .. py:method:: get_slabs(bulk: Union[str, demo.ocpapi.client.models.Bulk]) -> demo.ocpapi.client.models.Slabs + .. py:method:: get_slabs(bulk: Union[str, fairchem.demo.ocpapi.client.models.Bulk]) -> fairchem.demo.ocpapi.client.models.Slabs :async: Get a unique list of slabs for the input bulk structure. @@ -122,7 +122,7 @@ Classes :returns: Slabs for each of the unique surfaces of the material. - .. py:method:: get_adsorbate_slab_configs(adsorbate: str, slab: demo.ocpapi.client.models.Slab) -> demo.ocpapi.client.models.AdsorbateSlabConfigs + .. py:method:: get_adsorbate_slab_configs(adsorbate: str, slab: fairchem.demo.ocpapi.client.models.Slab) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabConfigs :async: Get a list of possible binding sites for the input adsorbate on the @@ -142,7 +142,7 @@ Classes :returns: Configurations for each adsorbate binding site on the slab. - .. py:method:: submit_adsorbate_slab_relaxations(adsorbate: str, adsorbate_configs: List[demo.ocpapi.client.models.Atoms], bulk: demo.ocpapi.client.models.Bulk, slab: demo.ocpapi.client.models.Slab, model: str, ephemeral: bool = False) -> demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem + .. py:method:: submit_adsorbate_slab_relaxations(adsorbate: str, adsorbate_configs: List[fairchem.demo.ocpapi.client.models.Atoms], bulk: fairchem.demo.ocpapi.client.models.Bulk, slab: fairchem.demo.ocpapi.client.models.Slab, model: str, ephemeral: bool = False) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem :async: Starts relaxations of the input adsorbate configurations on the input @@ -173,7 +173,7 @@ Classes :returns: IDs of the relaxations. - .. py:method:: get_adsorbate_slab_relaxations_request(system_id: str) -> demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest + .. py:method:: get_adsorbate_slab_relaxations_request(system_id: str) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest :async: Fetches the original relaxations request for the input system. @@ -190,7 +190,7 @@ Classes :returns: The original request that was made when submitting relaxations. - .. py:method:: get_adsorbate_slab_relaxations_results(system_id: str, config_ids: Optional[List[int]] = None, fields: Optional[List[str]] = None) -> demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults + .. py:method:: get_adsorbate_slab_relaxations_results(system_id: str, config_ids: Optional[List[int]] = None, fields: Optional[List[str]] = None) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults :async: Fetches relaxation results for the input system. diff --git a/_sources/autoapi/demo/ocpapi/client/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/client/index.rst similarity index 91% rename from _sources/autoapi/demo/ocpapi/client/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/client/index.rst index b4f43f6c1..78e721656 100644 --- a/_sources/autoapi/demo/ocpapi/client/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/client/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.client` -============================ +:py:mod:`fairchem.demo.ocpapi.client` +===================================== -.. py:module:: demo.ocpapi.client +.. py:module:: fairchem.demo.ocpapi.client Submodules @@ -23,22 +23,22 @@ Classes .. autoapisummary:: - demo.ocpapi.client.Client - demo.ocpapi.client.Adsorbates - demo.ocpapi.client.AdsorbateSlabConfigs - demo.ocpapi.client.AdsorbateSlabRelaxationResult - demo.ocpapi.client.AdsorbateSlabRelaxationsRequest - demo.ocpapi.client.AdsorbateSlabRelaxationsResults - demo.ocpapi.client.AdsorbateSlabRelaxationsSystem - demo.ocpapi.client.Atoms - demo.ocpapi.client.Bulk - demo.ocpapi.client.Bulks - demo.ocpapi.client.Model - demo.ocpapi.client.Models - demo.ocpapi.client.Slab - demo.ocpapi.client.SlabMetadata - demo.ocpapi.client.Slabs - demo.ocpapi.client.Status + fairchem.demo.ocpapi.client.Client + fairchem.demo.ocpapi.client.Adsorbates + fairchem.demo.ocpapi.client.AdsorbateSlabConfigs + fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationResult + fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationsRequest + fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationsResults + fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationsSystem + fairchem.demo.ocpapi.client.Atoms + fairchem.demo.ocpapi.client.Bulk + fairchem.demo.ocpapi.client.Bulks + fairchem.demo.ocpapi.client.Model + fairchem.demo.ocpapi.client.Models + fairchem.demo.ocpapi.client.Slab + fairchem.demo.ocpapi.client.SlabMetadata + fairchem.demo.ocpapi.client.Slabs + fairchem.demo.ocpapi.client.Status @@ -47,7 +47,7 @@ Functions .. autoapisummary:: - demo.ocpapi.client.get_results_ui_url + fairchem.demo.ocpapi.client.get_results_ui_url @@ -61,7 +61,7 @@ Functions The host being called by this client. - .. py:method:: get_models() -> demo.ocpapi.client.models.Models + .. py:method:: get_models() -> fairchem.demo.ocpapi.client.models.Models :async: Fetch the list of models that are supported in the API. @@ -76,7 +76,7 @@ Functions :returns: The models that are supported in the API. - .. py:method:: get_bulks() -> demo.ocpapi.client.models.Bulks + .. py:method:: get_bulks() -> fairchem.demo.ocpapi.client.models.Bulks :async: Fetch the list of bulk materials that are supported in the API. @@ -91,7 +91,7 @@ Functions :returns: The bulks that are supported throughout the API. - .. py:method:: get_adsorbates() -> demo.ocpapi.client.models.Adsorbates + .. py:method:: get_adsorbates() -> fairchem.demo.ocpapi.client.models.Adsorbates :async: Fetch the list of adsorbates that are supported in the API. @@ -106,7 +106,7 @@ Functions :returns: The adsorbates that are supported throughout the API. - .. py:method:: get_slabs(bulk: Union[str, demo.ocpapi.client.models.Bulk]) -> demo.ocpapi.client.models.Slabs + .. py:method:: get_slabs(bulk: Union[str, fairchem.demo.ocpapi.client.models.Bulk]) -> fairchem.demo.ocpapi.client.models.Slabs :async: Get a unique list of slabs for the input bulk structure. @@ -124,7 +124,7 @@ Functions :returns: Slabs for each of the unique surfaces of the material. - .. py:method:: get_adsorbate_slab_configs(adsorbate: str, slab: demo.ocpapi.client.models.Slab) -> demo.ocpapi.client.models.AdsorbateSlabConfigs + .. py:method:: get_adsorbate_slab_configs(adsorbate: str, slab: fairchem.demo.ocpapi.client.models.Slab) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabConfigs :async: Get a list of possible binding sites for the input adsorbate on the @@ -144,7 +144,7 @@ Functions :returns: Configurations for each adsorbate binding site on the slab. - .. py:method:: submit_adsorbate_slab_relaxations(adsorbate: str, adsorbate_configs: List[demo.ocpapi.client.models.Atoms], bulk: demo.ocpapi.client.models.Bulk, slab: demo.ocpapi.client.models.Slab, model: str, ephemeral: bool = False) -> demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem + .. py:method:: submit_adsorbate_slab_relaxations(adsorbate: str, adsorbate_configs: List[fairchem.demo.ocpapi.client.models.Atoms], bulk: fairchem.demo.ocpapi.client.models.Bulk, slab: fairchem.demo.ocpapi.client.models.Slab, model: str, ephemeral: bool = False) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem :async: Starts relaxations of the input adsorbate configurations on the input @@ -175,7 +175,7 @@ Functions :returns: IDs of the relaxations. - .. py:method:: get_adsorbate_slab_relaxations_request(system_id: str) -> demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest + .. py:method:: get_adsorbate_slab_relaxations_request(system_id: str) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest :async: Fetches the original relaxations request for the input system. @@ -192,7 +192,7 @@ Functions :returns: The original request that was made when submitting relaxations. - .. py:method:: get_adsorbate_slab_relaxations_results(system_id: str, config_ids: Optional[List[int]] = None, fields: Optional[List[str]] = None) -> demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults + .. py:method:: get_adsorbate_slab_relaxations_results(system_id: str, config_ids: Optional[List[int]] = None, fields: Optional[List[str]] = None) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults :async: Fetches relaxation results for the input system. diff --git a/_sources/autoapi/demo/ocpapi/client/models/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/client/models/index.rst similarity index 91% rename from _sources/autoapi/demo/ocpapi/client/models/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/client/models/index.rst index 8d372db2c..1ed57ef37 100644 --- a/_sources/autoapi/demo/ocpapi/client/models/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/client/models/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.client.models` -=================================== +:py:mod:`fairchem.demo.ocpapi.client.models` +============================================ -.. py:module:: demo.ocpapi.client.models +.. py:module:: fairchem.demo.ocpapi.client.models Module Contents @@ -12,22 +12,22 @@ Classes .. autoapisummary:: - demo.ocpapi.client.models._DataModel - demo.ocpapi.client.models.Model - demo.ocpapi.client.models.Models - demo.ocpapi.client.models.Bulk - demo.ocpapi.client.models.Bulks - demo.ocpapi.client.models.Adsorbates - demo.ocpapi.client.models.Atoms - demo.ocpapi.client.models.SlabMetadata - demo.ocpapi.client.models.Slab - demo.ocpapi.client.models.Slabs - demo.ocpapi.client.models.AdsorbateSlabConfigs - demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem - demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest - demo.ocpapi.client.models.Status - demo.ocpapi.client.models.AdsorbateSlabRelaxationResult - demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults + fairchem.demo.ocpapi.client.models._DataModel + fairchem.demo.ocpapi.client.models.Model + fairchem.demo.ocpapi.client.models.Models + fairchem.demo.ocpapi.client.models.Bulk + fairchem.demo.ocpapi.client.models.Bulks + fairchem.demo.ocpapi.client.models.Adsorbates + fairchem.demo.ocpapi.client.models.Atoms + fairchem.demo.ocpapi.client.models.SlabMetadata + fairchem.demo.ocpapi.client.models.Slab + fairchem.demo.ocpapi.client.models.Slabs + fairchem.demo.ocpapi.client.models.AdsorbateSlabConfigs + fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem + fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest + fairchem.demo.ocpapi.client.models.Status + fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationResult + fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults diff --git a/_sources/autoapi/demo/ocpapi/client/ui/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/client/ui/index.rst similarity index 71% rename from _sources/autoapi/demo/ocpapi/client/ui/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/client/ui/index.rst index fcfc196f2..158b8e3f6 100644 --- a/_sources/autoapi/demo/ocpapi/client/ui/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/client/ui/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.client.ui` -=============================== +:py:mod:`fairchem.demo.ocpapi.client.ui` +======================================== -.. py:module:: demo.ocpapi.client.ui +.. py:module:: fairchem.demo.ocpapi.client.ui Module Contents @@ -13,7 +13,7 @@ Functions .. autoapisummary:: - demo.ocpapi.client.ui.get_results_ui_url + fairchem.demo.ocpapi.client.ui.get_results_ui_url @@ -22,7 +22,7 @@ Attributes .. autoapisummary:: - demo.ocpapi.client.ui._API_TO_UI_HOSTS + fairchem.demo.ocpapi.client.ui._API_TO_UI_HOSTS .. py:data:: _API_TO_UI_HOSTS diff --git a/_sources/autoapi/demo/ocpapi/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/index.rst similarity index 92% rename from _sources/autoapi/demo/ocpapi/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/index.rst index c5fbe6812..f4ff815fa 100644 --- a/_sources/autoapi/demo/ocpapi/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi` -===================== +:py:mod:`fairchem.demo.ocpapi` +============================== -.. py:module:: demo.ocpapi +.. py:module:: fairchem.demo.ocpapi Subpackages @@ -32,29 +32,29 @@ Classes .. autoapisummary:: - demo.ocpapi.Client - demo.ocpapi.Adsorbates - demo.ocpapi.AdsorbateSlabConfigs - demo.ocpapi.AdsorbateSlabRelaxationResult - demo.ocpapi.AdsorbateSlabRelaxationsRequest - demo.ocpapi.AdsorbateSlabRelaxationsResults - demo.ocpapi.AdsorbateSlabRelaxationsSystem - demo.ocpapi.Atoms - demo.ocpapi.Bulk - demo.ocpapi.Bulks - demo.ocpapi.Model - demo.ocpapi.Models - demo.ocpapi.Slab - demo.ocpapi.SlabMetadata - demo.ocpapi.Slabs - demo.ocpapi.Status - demo.ocpapi.AdsorbateBindingSites - demo.ocpapi.AdsorbateSlabRelaxations - demo.ocpapi.Lifetime - demo.ocpapi.keep_all_slabs - demo.ocpapi.keep_slabs_with_miller_indices - demo.ocpapi.prompt_for_slabs_to_keep - demo.ocpapi.RateLimitLogging + fairchem.demo.ocpapi.Client + fairchem.demo.ocpapi.Adsorbates + fairchem.demo.ocpapi.AdsorbateSlabConfigs + fairchem.demo.ocpapi.AdsorbateSlabRelaxationResult + fairchem.demo.ocpapi.AdsorbateSlabRelaxationsRequest + fairchem.demo.ocpapi.AdsorbateSlabRelaxationsResults + fairchem.demo.ocpapi.AdsorbateSlabRelaxationsSystem + fairchem.demo.ocpapi.Atoms + fairchem.demo.ocpapi.Bulk + fairchem.demo.ocpapi.Bulks + fairchem.demo.ocpapi.Model + fairchem.demo.ocpapi.Models + fairchem.demo.ocpapi.Slab + fairchem.demo.ocpapi.SlabMetadata + fairchem.demo.ocpapi.Slabs + fairchem.demo.ocpapi.Status + fairchem.demo.ocpapi.AdsorbateBindingSites + fairchem.demo.ocpapi.AdsorbateSlabRelaxations + fairchem.demo.ocpapi.Lifetime + fairchem.demo.ocpapi.keep_all_slabs + fairchem.demo.ocpapi.keep_slabs_with_miller_indices + fairchem.demo.ocpapi.prompt_for_slabs_to_keep + fairchem.demo.ocpapi.RateLimitLogging @@ -63,11 +63,11 @@ Functions .. autoapisummary:: - demo.ocpapi.get_results_ui_url - demo.ocpapi.find_adsorbate_binding_sites - demo.ocpapi.get_adsorbate_slab_relaxation_results - demo.ocpapi.wait_for_adsorbate_slab_relaxations - demo.ocpapi.retry_api_calls + fairchem.demo.ocpapi.get_results_ui_url + fairchem.demo.ocpapi.find_adsorbate_binding_sites + fairchem.demo.ocpapi.get_adsorbate_slab_relaxation_results + fairchem.demo.ocpapi.wait_for_adsorbate_slab_relaxations + fairchem.demo.ocpapi.retry_api_calls @@ -76,8 +76,8 @@ Attributes .. autoapisummary:: - demo.ocpapi.NO_LIMIT - demo.ocpapi.NoLimitType + fairchem.demo.ocpapi.NO_LIMIT + fairchem.demo.ocpapi.NoLimitType .. py:class:: Client(host: str = 'open-catalyst-api.metademolab.com', scheme: str = 'https') @@ -90,7 +90,7 @@ Attributes The host being called by this client. - .. py:method:: get_models() -> demo.ocpapi.client.models.Models + .. py:method:: get_models() -> fairchem.demo.ocpapi.client.models.Models :async: Fetch the list of models that are supported in the API. @@ -105,7 +105,7 @@ Attributes :returns: The models that are supported in the API. - .. py:method:: get_bulks() -> demo.ocpapi.client.models.Bulks + .. py:method:: get_bulks() -> fairchem.demo.ocpapi.client.models.Bulks :async: Fetch the list of bulk materials that are supported in the API. @@ -120,7 +120,7 @@ Attributes :returns: The bulks that are supported throughout the API. - .. py:method:: get_adsorbates() -> demo.ocpapi.client.models.Adsorbates + .. py:method:: get_adsorbates() -> fairchem.demo.ocpapi.client.models.Adsorbates :async: Fetch the list of adsorbates that are supported in the API. @@ -135,7 +135,7 @@ Attributes :returns: The adsorbates that are supported throughout the API. - .. py:method:: get_slabs(bulk: Union[str, demo.ocpapi.client.models.Bulk]) -> demo.ocpapi.client.models.Slabs + .. py:method:: get_slabs(bulk: Union[str, fairchem.demo.ocpapi.client.models.Bulk]) -> fairchem.demo.ocpapi.client.models.Slabs :async: Get a unique list of slabs for the input bulk structure. @@ -153,7 +153,7 @@ Attributes :returns: Slabs for each of the unique surfaces of the material. - .. py:method:: get_adsorbate_slab_configs(adsorbate: str, slab: demo.ocpapi.client.models.Slab) -> demo.ocpapi.client.models.AdsorbateSlabConfigs + .. py:method:: get_adsorbate_slab_configs(adsorbate: str, slab: fairchem.demo.ocpapi.client.models.Slab) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabConfigs :async: Get a list of possible binding sites for the input adsorbate on the @@ -173,7 +173,7 @@ Attributes :returns: Configurations for each adsorbate binding site on the slab. - .. py:method:: submit_adsorbate_slab_relaxations(adsorbate: str, adsorbate_configs: List[demo.ocpapi.client.models.Atoms], bulk: demo.ocpapi.client.models.Bulk, slab: demo.ocpapi.client.models.Slab, model: str, ephemeral: bool = False) -> demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem + .. py:method:: submit_adsorbate_slab_relaxations(adsorbate: str, adsorbate_configs: List[fairchem.demo.ocpapi.client.models.Atoms], bulk: fairchem.demo.ocpapi.client.models.Bulk, slab: fairchem.demo.ocpapi.client.models.Slab, model: str, ephemeral: bool = False) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem :async: Starts relaxations of the input adsorbate configurations on the input @@ -204,7 +204,7 @@ Attributes :returns: IDs of the relaxations. - .. py:method:: get_adsorbate_slab_relaxations_request(system_id: str) -> demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest + .. py:method:: get_adsorbate_slab_relaxations_request(system_id: str) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest :async: Fetches the original relaxations request for the input system. @@ -221,7 +221,7 @@ Attributes :returns: The original request that was made when submitting relaxations. - .. py:method:: get_adsorbate_slab_relaxations_results(system_id: str, config_ids: Optional[List[int]] = None, fields: Optional[List[str]] = None) -> demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults + .. py:method:: get_adsorbate_slab_relaxations_results(system_id: str, config_ids: Optional[List[int]] = None, fields: Optional[List[str]] = None) -> fairchem.demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults :async: Fetches relaxation results for the input system. diff --git a/_sources/autoapi/demo/ocpapi/tests/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/index.rst similarity index 50% rename from _sources/autoapi/demo/ocpapi/tests/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/index.rst index 9429c106c..472a55137 100644 --- a/_sources/autoapi/demo/ocpapi/tests/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests` -=========================== +:py:mod:`fairchem.demo.ocpapi.tests` +==================================== -.. py:module:: demo.ocpapi.tests +.. py:module:: fairchem.demo.ocpapi.tests Subpackages diff --git a/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/index.rst new file mode 100644 index 000000000..2ec6e7aa7 --- /dev/null +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/index.rst @@ -0,0 +1,16 @@ +:py:mod:`fairchem.demo.ocpapi.tests.integration.client` +======================================================= + +.. py:module:: fairchem.demo.ocpapi.tests.integration.client + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + test_client/index.rst + test_ui/index.rst + + diff --git a/_sources/autoapi/demo/ocpapi/tests/integration/client/test_client/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/test_client/index.rst similarity index 79% rename from _sources/autoapi/demo/ocpapi/tests/integration/client/test_client/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/test_client/index.rst index fc6c3b857..438a29024 100644 --- a/_sources/autoapi/demo/ocpapi/tests/integration/client/test_client/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/test_client/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.integration.client.test_client` -========================================================== +:py:mod:`fairchem.demo.ocpapi.tests.integration.client.test_client` +=================================================================== -.. py:module:: demo.ocpapi.tests.integration.client.test_client +.. py:module:: fairchem.demo.ocpapi.tests.integration.client.test_client Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.integration.client.test_client.TestClient + fairchem.demo.ocpapi.tests.integration.client.test_client.TestClient @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - demo.ocpapi.tests.integration.client.test_client._ensure_system_deleted + fairchem.demo.ocpapi.tests.integration.client.test_client._ensure_system_deleted @@ -30,7 +30,7 @@ Attributes .. autoapisummary:: - demo.ocpapi.tests.integration.client.test_client.log + fairchem.demo.ocpapi.tests.integration.client.test_client.log .. py:data:: log diff --git a/_sources/autoapi/demo/ocpapi/tests/integration/client/test_ui/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/test_ui/index.rst similarity index 65% rename from _sources/autoapi/demo/ocpapi/tests/integration/client/test_ui/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/test_ui/index.rst index d953f3b5a..197ffc869 100644 --- a/_sources/autoapi/demo/ocpapi/tests/integration/client/test_ui/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/client/test_ui/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.integration.client.test_ui` -====================================================== +:py:mod:`fairchem.demo.ocpapi.tests.integration.client.test_ui` +=============================================================== -.. py:module:: demo.ocpapi.tests.integration.client.test_ui +.. py:module:: fairchem.demo.ocpapi.tests.integration.client.test_ui Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.integration.client.test_ui.TestUI + fairchem.demo.ocpapi.tests.integration.client.test_ui.TestUI diff --git a/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/index.rst new file mode 100644 index 000000000..3f4c1e200 --- /dev/null +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/index.rst @@ -0,0 +1,16 @@ +:py:mod:`fairchem.demo.ocpapi.tests.integration` +================================================ + +.. py:module:: fairchem.demo.ocpapi.tests.integration + + +Subpackages +----------- +.. toctree:: + :titlesonly: + :maxdepth: 3 + + client/index.rst + workflows/index.rst + + diff --git a/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/workflows/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/workflows/index.rst new file mode 100644 index 000000000..6748a2e59 --- /dev/null +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/workflows/index.rst @@ -0,0 +1,15 @@ +:py:mod:`fairchem.demo.ocpapi.tests.integration.workflows` +========================================================== + +.. py:module:: fairchem.demo.ocpapi.tests.integration.workflows + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + test_adsorbates/index.rst + + diff --git a/_sources/autoapi/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.rst similarity index 75% rename from _sources/autoapi/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.rst index 90740db92..ab0e3cc86 100644 --- a/_sources/autoapi/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.integration.workflows.test_adsorbates` -================================================================= +:py:mod:`fairchem.demo.ocpapi.tests.integration.workflows.test_adsorbates` +========================================================================== -.. py:module:: demo.ocpapi.tests.integration.workflows.test_adsorbates +.. py:module:: fairchem.demo.ocpapi.tests.integration.workflows.test_adsorbates Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.integration.workflows.test_adsorbates.TestAdsorbates + fairchem.demo.ocpapi.tests.integration.workflows.test_adsorbates.TestAdsorbates diff --git a/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/index.rst new file mode 100644 index 000000000..f3c77359d --- /dev/null +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/index.rst @@ -0,0 +1,17 @@ +:py:mod:`fairchem.demo.ocpapi.tests.unit.client` +================================================ + +.. py:module:: fairchem.demo.ocpapi.tests.unit.client + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + test_client/index.rst + test_models/index.rst + test_ui/index.rst + + diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/client/test_client/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/test_client/index.rst similarity index 86% rename from _sources/autoapi/demo/ocpapi/tests/unit/client/test_client/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/test_client/index.rst index 6cf73d1be..4930eed23 100644 --- a/_sources/autoapi/demo/ocpapi/tests/unit/client/test_client/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/test_client/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.unit.client.test_client` -=================================================== +:py:mod:`fairchem.demo.ocpapi.tests.unit.client.test_client` +============================================================ -.. py:module:: demo.ocpapi.tests.unit.client.test_client +.. py:module:: fairchem.demo.ocpapi.tests.unit.client.test_client Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.unit.client.test_client.TestClient + fairchem.demo.ocpapi.tests.unit.client.test_client.TestClient diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/client/test_models/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/test_models/index.rst similarity index 73% rename from _sources/autoapi/demo/ocpapi/tests/unit/client/test_models/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/test_models/index.rst index bb5a41965..cef7242c4 100644 --- a/_sources/autoapi/demo/ocpapi/tests/unit/client/test_models/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/test_models/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.unit.client.test_models` -=================================================== +:py:mod:`fairchem.demo.ocpapi.tests.unit.client.test_models` +============================================================ -.. py:module:: demo.ocpapi.tests.unit.client.test_models +.. py:module:: fairchem.demo.ocpapi.tests.unit.client.test_models Module Contents @@ -12,23 +12,23 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.unit.client.test_models.ModelTestWrapper - demo.ocpapi.tests.unit.client.test_models.TestModel - demo.ocpapi.tests.unit.client.test_models.TestModels - demo.ocpapi.tests.unit.client.test_models.TestBulk - demo.ocpapi.tests.unit.client.test_models.TestBulks - demo.ocpapi.tests.unit.client.test_models.TestAdsorbates - demo.ocpapi.tests.unit.client.test_models.TestAtoms - demo.ocpapi.tests.unit.client.test_models.TestSlabMetadata - demo.ocpapi.tests.unit.client.test_models.TestSlab - demo.ocpapi.tests.unit.client.test_models.TestSlabs - demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabConfigs - demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsSystem - demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsRequest - demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsRequest_req_fields_only - demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationResult - demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationResult_req_fields_only - demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsResults + fairchem.demo.ocpapi.tests.unit.client.test_models.ModelTestWrapper + fairchem.demo.ocpapi.tests.unit.client.test_models.TestModel + fairchem.demo.ocpapi.tests.unit.client.test_models.TestModels + fairchem.demo.ocpapi.tests.unit.client.test_models.TestBulk + fairchem.demo.ocpapi.tests.unit.client.test_models.TestBulks + fairchem.demo.ocpapi.tests.unit.client.test_models.TestAdsorbates + fairchem.demo.ocpapi.tests.unit.client.test_models.TestAtoms + fairchem.demo.ocpapi.tests.unit.client.test_models.TestSlabMetadata + fairchem.demo.ocpapi.tests.unit.client.test_models.TestSlab + fairchem.demo.ocpapi.tests.unit.client.test_models.TestSlabs + fairchem.demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabConfigs + fairchem.demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsSystem + fairchem.demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsRequest + fairchem.demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsRequest_req_fields_only + fairchem.demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationResult + fairchem.demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationResult_req_fields_only + fairchem.demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsResults @@ -38,7 +38,7 @@ Attributes .. autoapisummary:: - demo.ocpapi.tests.unit.client.test_models.T + fairchem.demo.ocpapi.tests.unit.client.test_models.T .. py:data:: T diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/client/test_ui/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/test_ui/index.rst similarity index 88% rename from _sources/autoapi/demo/ocpapi/tests/unit/client/test_ui/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/test_ui/index.rst index 72542712c..df079a7fa 100644 --- a/_sources/autoapi/demo/ocpapi/tests/unit/client/test_ui/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/client/test_ui/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.unit.client.test_ui` -=============================================== +:py:mod:`fairchem.demo.ocpapi.tests.unit.client.test_ui` +======================================================== -.. py:module:: demo.ocpapi.tests.unit.client.test_ui +.. py:module:: fairchem.demo.ocpapi.tests.unit.client.test_ui Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.unit.client.test_ui.TestUI + fairchem.demo.ocpapi.tests.unit.client.test_ui.TestUI diff --git a/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/index.rst new file mode 100644 index 000000000..60bb766c4 --- /dev/null +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/index.rst @@ -0,0 +1,16 @@ +:py:mod:`fairchem.demo.ocpapi.tests.unit` +========================================= + +.. py:module:: fairchem.demo.ocpapi.tests.unit + + +Subpackages +----------- +.. toctree:: + :titlesonly: + :maxdepth: 3 + + client/index.rst + workflows/index.rst + + diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/index.rst similarity index 52% rename from _sources/autoapi/demo/ocpapi/tests/unit/workflows/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/index.rst index f89d427e9..254a3c3e6 100644 --- a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.unit.workflows` -========================================== +:py:mod:`fairchem.demo.ocpapi.tests.unit.workflows` +=================================================== -.. py:module:: demo.ocpapi.tests.unit.workflows +.. py:module:: fairchem.demo.ocpapi.tests.unit.workflows Submodules diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.rst similarity index 90% rename from _sources/autoapi/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.rst index 79d190659..61fcaddc7 100644 --- a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.unit.workflows.test_adsorbates` -========================================================== +:py:mod:`fairchem.demo.ocpapi.tests.unit.workflows.test_adsorbates` +=================================================================== -.. py:module:: demo.ocpapi.tests.unit.workflows.test_adsorbates +.. py:module:: fairchem.demo.ocpapi.tests.unit.workflows.test_adsorbates Module Contents @@ -12,9 +12,9 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.unit.workflows.test_adsorbates.MockGetRelaxationResults - demo.ocpapi.tests.unit.workflows.test_adsorbates.TestMockGetRelaxationResults - demo.ocpapi.tests.unit.workflows.test_adsorbates.TestAdsorbates + fairchem.demo.ocpapi.tests.unit.workflows.test_adsorbates.MockGetRelaxationResults + fairchem.demo.ocpapi.tests.unit.workflows.test_adsorbates.TestMockGetRelaxationResults + fairchem.demo.ocpapi.tests.unit.workflows.test_adsorbates.TestAdsorbates diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/test_context/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_context/index.rst similarity index 87% rename from _sources/autoapi/demo/ocpapi/tests/unit/workflows/test_context/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_context/index.rst index c6b58c598..39ee66412 100644 --- a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/test_context/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_context/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.unit.workflows.test_context` -======================================================= +:py:mod:`fairchem.demo.ocpapi.tests.unit.workflows.test_context` +================================================================ -.. py:module:: demo.ocpapi.tests.unit.workflows.test_context +.. py:module:: fairchem.demo.ocpapi.tests.unit.workflows.test_context Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.unit.workflows.test_context.TestContext + fairchem.demo.ocpapi.tests.unit.workflows.test_context.TestContext diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/test_filter/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_filter/index.rst similarity index 86% rename from _sources/autoapi/demo/ocpapi/tests/unit/workflows/test_filter/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_filter/index.rst index afaad2f0b..c617cd247 100644 --- a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/test_filter/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_filter/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.unit.workflows.test_filter` -====================================================== +:py:mod:`fairchem.demo.ocpapi.tests.unit.workflows.test_filter` +=============================================================== -.. py:module:: demo.ocpapi.tests.unit.workflows.test_filter +.. py:module:: fairchem.demo.ocpapi.tests.unit.workflows.test_filter Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.unit.workflows.test_filter.TestFilter + fairchem.demo.ocpapi.tests.unit.workflows.test_filter.TestFilter @@ -21,7 +21,7 @@ Functions .. autoapisummary:: - demo.ocpapi.tests.unit.workflows.test_filter._new_adslab + fairchem.demo.ocpapi.tests.unit.workflows.test_filter._new_adslab diff --git a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/test_retry/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_retry/index.rst similarity index 82% rename from _sources/autoapi/demo/ocpapi/tests/unit/workflows/test_retry/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_retry/index.rst index c9bf67f8e..49b869975 100644 --- a/_sources/autoapi/demo/ocpapi/tests/unit/workflows/test_retry/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/tests/unit/workflows/test_retry/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.tests.unit.workflows.test_retry` -===================================================== +:py:mod:`fairchem.demo.ocpapi.tests.unit.workflows.test_retry` +============================================================== -.. py:module:: demo.ocpapi.tests.unit.workflows.test_retry +.. py:module:: fairchem.demo.ocpapi.tests.unit.workflows.test_retry Module Contents @@ -12,7 +12,7 @@ Classes .. autoapisummary:: - demo.ocpapi.tests.unit.workflows.test_retry.TestRetry + fairchem.demo.ocpapi.tests.unit.workflows.test_retry.TestRetry @@ -21,8 +21,8 @@ Functions .. autoapisummary:: - demo.ocpapi.tests.unit.workflows.test_retry.returns - demo.ocpapi.tests.unit.workflows.test_retry.raises + fairchem.demo.ocpapi.tests.unit.workflows.test_retry.returns + fairchem.demo.ocpapi.tests.unit.workflows.test_retry.raises @@ -31,7 +31,7 @@ Attributes .. autoapisummary:: - demo.ocpapi.tests.unit.workflows.test_retry.T + fairchem.demo.ocpapi.tests.unit.workflows.test_retry.T .. py:data:: T diff --git a/_sources/autoapi/fairchem/demo/ocpapi/version/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/version/index.rst new file mode 100644 index 000000000..22ad42217 --- /dev/null +++ b/_sources/autoapi/fairchem/demo/ocpapi/version/index.rst @@ -0,0 +1,14 @@ +:py:mod:`fairchem.demo.ocpapi.version` +====================================== + +.. py:module:: fairchem.demo.ocpapi.version + + +Module Contents +--------------- + +.. py:data:: VERSION + :value: '1.0.0' + + + diff --git a/_sources/autoapi/demo/ocpapi/workflows/adsorbates/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/workflows/adsorbates/index.rst similarity index 89% rename from _sources/autoapi/demo/ocpapi/workflows/adsorbates/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/workflows/adsorbates/index.rst index 4195d2d14..d3d76dea0 100644 --- a/_sources/autoapi/demo/ocpapi/workflows/adsorbates/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/workflows/adsorbates/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.workflows.adsorbates` -========================================== +:py:mod:`fairchem.demo.ocpapi.workflows.adsorbates` +=================================================== -.. py:module:: demo.ocpapi.workflows.adsorbates +.. py:module:: fairchem.demo.ocpapi.workflows.adsorbates Module Contents @@ -12,9 +12,9 @@ Classes .. autoapisummary:: - demo.ocpapi.workflows.adsorbates.Lifetime - demo.ocpapi.workflows.adsorbates.AdsorbateSlabRelaxations - demo.ocpapi.workflows.adsorbates.AdsorbateBindingSites + fairchem.demo.ocpapi.workflows.adsorbates.Lifetime + fairchem.demo.ocpapi.workflows.adsorbates.AdsorbateSlabRelaxations + fairchem.demo.ocpapi.workflows.adsorbates.AdsorbateBindingSites @@ -23,24 +23,24 @@ Functions .. autoapisummary:: - demo.ocpapi.workflows.adsorbates._setup_log_record_factory - demo.ocpapi.workflows.adsorbates._ensure_model_supported - demo.ocpapi.workflows.adsorbates._get_bulk_if_supported - demo.ocpapi.workflows.adsorbates._ensure_adsorbate_supported - demo.ocpapi.workflows.adsorbates._get_slabs - demo.ocpapi.workflows.adsorbates._get_absorbate_configs_on_slab - demo.ocpapi.workflows.adsorbates._get_absorbate_configs_on_slab_with_logging - demo.ocpapi.workflows.adsorbates._get_adsorbate_configs_on_slabs - demo.ocpapi.workflows.adsorbates._submit_relaxations - demo.ocpapi.workflows.adsorbates._submit_relaxations_with_progress_logging - demo.ocpapi.workflows.adsorbates.get_adsorbate_slab_relaxation_results - demo.ocpapi.workflows.adsorbates.wait_for_adsorbate_slab_relaxations - demo.ocpapi.workflows.adsorbates._delete_system - demo.ocpapi.workflows.adsorbates._ensure_system_deleted - demo.ocpapi.workflows.adsorbates._run_relaxations_on_slab - demo.ocpapi.workflows.adsorbates._refresh_pbar - demo.ocpapi.workflows.adsorbates._relax_binding_sites_on_slabs - demo.ocpapi.workflows.adsorbates.find_adsorbate_binding_sites + fairchem.demo.ocpapi.workflows.adsorbates._setup_log_record_factory + fairchem.demo.ocpapi.workflows.adsorbates._ensure_model_supported + fairchem.demo.ocpapi.workflows.adsorbates._get_bulk_if_supported + fairchem.demo.ocpapi.workflows.adsorbates._ensure_adsorbate_supported + fairchem.demo.ocpapi.workflows.adsorbates._get_slabs + fairchem.demo.ocpapi.workflows.adsorbates._get_absorbate_configs_on_slab + fairchem.demo.ocpapi.workflows.adsorbates._get_absorbate_configs_on_slab_with_logging + fairchem.demo.ocpapi.workflows.adsorbates._get_adsorbate_configs_on_slabs + fairchem.demo.ocpapi.workflows.adsorbates._submit_relaxations + fairchem.demo.ocpapi.workflows.adsorbates._submit_relaxations_with_progress_logging + fairchem.demo.ocpapi.workflows.adsorbates.get_adsorbate_slab_relaxation_results + fairchem.demo.ocpapi.workflows.adsorbates.wait_for_adsorbate_slab_relaxations + fairchem.demo.ocpapi.workflows.adsorbates._delete_system + fairchem.demo.ocpapi.workflows.adsorbates._ensure_system_deleted + fairchem.demo.ocpapi.workflows.adsorbates._run_relaxations_on_slab + fairchem.demo.ocpapi.workflows.adsorbates._refresh_pbar + fairchem.demo.ocpapi.workflows.adsorbates._relax_binding_sites_on_slabs + fairchem.demo.ocpapi.workflows.adsorbates.find_adsorbate_binding_sites @@ -49,10 +49,10 @@ Attributes .. autoapisummary:: - demo.ocpapi.workflows.adsorbates._CTX_AD_BULK - demo.ocpapi.workflows.adsorbates._CTX_SLAB - demo.ocpapi.workflows.adsorbates.DEFAULT_CLIENT - demo.ocpapi.workflows.adsorbates._DEFAULT_ADSLAB_FILTER + fairchem.demo.ocpapi.workflows.adsorbates._CTX_AD_BULK + fairchem.demo.ocpapi.workflows.adsorbates._CTX_SLAB + fairchem.demo.ocpapi.workflows.adsorbates.DEFAULT_CLIENT + fairchem.demo.ocpapi.workflows.adsorbates._DEFAULT_ADSLAB_FILTER .. py:data:: _CTX_AD_BULK diff --git a/_sources/autoapi/demo/ocpapi/workflows/context/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/workflows/context/index.rst similarity index 70% rename from _sources/autoapi/demo/ocpapi/workflows/context/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/workflows/context/index.rst index 30ed58a94..80fc7d78d 100644 --- a/_sources/autoapi/demo/ocpapi/workflows/context/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/workflows/context/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.workflows.context` -======================================= +:py:mod:`fairchem.demo.ocpapi.workflows.context` +================================================ -.. py:module:: demo.ocpapi.workflows.context +.. py:module:: fairchem.demo.ocpapi.workflows.context Module Contents @@ -13,7 +13,7 @@ Functions .. autoapisummary:: - demo.ocpapi.workflows.context.set_context_var + fairchem.demo.ocpapi.workflows.context.set_context_var diff --git a/_sources/autoapi/demo/ocpapi/workflows/filter/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/workflows/filter/index.rst similarity index 79% rename from _sources/autoapi/demo/ocpapi/workflows/filter/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/workflows/filter/index.rst index b1f39aa15..66826b0b1 100644 --- a/_sources/autoapi/demo/ocpapi/workflows/filter/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/workflows/filter/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.workflows.filter` -====================================== +:py:mod:`fairchem.demo.ocpapi.workflows.filter` +=============================================== -.. py:module:: demo.ocpapi.workflows.filter +.. py:module:: fairchem.demo.ocpapi.workflows.filter Module Contents @@ -12,9 +12,9 @@ Classes .. autoapisummary:: - demo.ocpapi.workflows.filter.keep_all_slabs - demo.ocpapi.workflows.filter.keep_slabs_with_miller_indices - demo.ocpapi.workflows.filter.prompt_for_slabs_to_keep + fairchem.demo.ocpapi.workflows.filter.keep_all_slabs + fairchem.demo.ocpapi.workflows.filter.keep_slabs_with_miller_indices + fairchem.demo.ocpapi.workflows.filter.prompt_for_slabs_to_keep diff --git a/_sources/autoapi/demo/ocpapi/workflows/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/workflows/index.rst similarity index 92% rename from _sources/autoapi/demo/ocpapi/workflows/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/workflows/index.rst index e7d25f6c9..0cc6989fb 100644 --- a/_sources/autoapi/demo/ocpapi/workflows/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/workflows/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.workflows` -=============================== +:py:mod:`fairchem.demo.ocpapi.workflows` +======================================== -.. py:module:: demo.ocpapi.workflows +.. py:module:: fairchem.demo.ocpapi.workflows Submodules @@ -25,13 +25,13 @@ Classes .. autoapisummary:: - demo.ocpapi.workflows.AdsorbateBindingSites - demo.ocpapi.workflows.AdsorbateSlabRelaxations - demo.ocpapi.workflows.Lifetime - demo.ocpapi.workflows.keep_all_slabs - demo.ocpapi.workflows.keep_slabs_with_miller_indices - demo.ocpapi.workflows.prompt_for_slabs_to_keep - demo.ocpapi.workflows.RateLimitLogging + fairchem.demo.ocpapi.workflows.AdsorbateBindingSites + fairchem.demo.ocpapi.workflows.AdsorbateSlabRelaxations + fairchem.demo.ocpapi.workflows.Lifetime + fairchem.demo.ocpapi.workflows.keep_all_slabs + fairchem.demo.ocpapi.workflows.keep_slabs_with_miller_indices + fairchem.demo.ocpapi.workflows.prompt_for_slabs_to_keep + fairchem.demo.ocpapi.workflows.RateLimitLogging @@ -40,10 +40,10 @@ Functions .. autoapisummary:: - demo.ocpapi.workflows.find_adsorbate_binding_sites - demo.ocpapi.workflows.get_adsorbate_slab_relaxation_results - demo.ocpapi.workflows.wait_for_adsorbate_slab_relaxations - demo.ocpapi.workflows.retry_api_calls + fairchem.demo.ocpapi.workflows.find_adsorbate_binding_sites + fairchem.demo.ocpapi.workflows.get_adsorbate_slab_relaxation_results + fairchem.demo.ocpapi.workflows.wait_for_adsorbate_slab_relaxations + fairchem.demo.ocpapi.workflows.retry_api_calls @@ -52,8 +52,8 @@ Attributes .. autoapisummary:: - demo.ocpapi.workflows.NO_LIMIT - demo.ocpapi.workflows.NoLimitType + fairchem.demo.ocpapi.workflows.NO_LIMIT + fairchem.demo.ocpapi.workflows.NoLimitType .. py:class:: AdsorbateBindingSites diff --git a/_sources/autoapi/fairchem/demo/ocpapi/workflows/log/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/workflows/log/index.rst new file mode 100644 index 000000000..409239dfd --- /dev/null +++ b/_sources/autoapi/fairchem/demo/ocpapi/workflows/log/index.rst @@ -0,0 +1,13 @@ +:py:mod:`fairchem.demo.ocpapi.workflows.log` +============================================ + +.. py:module:: fairchem.demo.ocpapi.workflows.log + + +Module Contents +--------------- + +.. py:data:: log + + + diff --git a/_sources/autoapi/demo/ocpapi/workflows/retry/index.rst b/_sources/autoapi/fairchem/demo/ocpapi/workflows/retry/index.rst similarity index 83% rename from _sources/autoapi/demo/ocpapi/workflows/retry/index.rst rename to _sources/autoapi/fairchem/demo/ocpapi/workflows/retry/index.rst index cad508cf4..6b0eafcf3 100644 --- a/_sources/autoapi/demo/ocpapi/workflows/retry/index.rst +++ b/_sources/autoapi/fairchem/demo/ocpapi/workflows/retry/index.rst @@ -1,7 +1,7 @@ -:py:mod:`demo.ocpapi.workflows.retry` -===================================== +:py:mod:`fairchem.demo.ocpapi.workflows.retry` +============================================== -.. py:module:: demo.ocpapi.workflows.retry +.. py:module:: fairchem.demo.ocpapi.workflows.retry Module Contents @@ -12,8 +12,8 @@ Classes .. autoapisummary:: - demo.ocpapi.workflows.retry.RateLimitLogging - demo.ocpapi.workflows.retry._wait_check_retry_after + fairchem.demo.ocpapi.workflows.retry.RateLimitLogging + fairchem.demo.ocpapi.workflows.retry._wait_check_retry_after @@ -22,7 +22,7 @@ Functions .. autoapisummary:: - demo.ocpapi.workflows.retry.retry_api_calls + fairchem.demo.ocpapi.workflows.retry.retry_api_calls @@ -31,8 +31,8 @@ Attributes .. autoapisummary:: - demo.ocpapi.workflows.retry.NoLimitType - demo.ocpapi.workflows.retry.NO_LIMIT + fairchem.demo.ocpapi.workflows.retry.NoLimitType + fairchem.demo.ocpapi.workflows.retry.NO_LIMIT .. py:class:: RateLimitLogging diff --git a/_sources/autoapi/index.rst b/_sources/autoapi/index.rst index c2259e2d4..448b407b2 100644 --- a/_sources/autoapi/index.rst +++ b/_sources/autoapi/index.rst @@ -6,6 +6,5 @@ This page contains auto-generated API reference documentation [#f1]_. .. toctree:: :titlesonly: - /autoapi/core/index .. [#f1] Created with `sphinx-autoapi `_ \ No newline at end of file diff --git a/_sources/core/datasets/oc20.md b/_sources/core/datasets/oc20.md index 2ef25c3c6..66584cf35 100644 --- a/_sources/core/datasets/oc20.md +++ b/_sources/core/datasets/oc20.md @@ -9,7 +9,7 @@ IS2* datasets are stored as LMDB files and are ready to be used upon download. S2EF train+val datasets require an additional preprocessing step. -For convenience, a self-contained script can be found [here](https://github.com/Open-Catalyst-Project/ocp/blob/main/scripts/download_data.py) to download, preprocess, and organize the data directories to be readily usable by the existing [configs](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs). +For convenience, a self-contained script can be found [here](https://github.com/Open-Catalyst-Project/ocp/blob/main/src/fairchem/scripts/download_data.py) to download, preprocess, and organize the data directories to be readily usable by the existing [configs](https://github.com/Open-Catalyst-Project/ocp/tree/main/src/fairchem/configs). For IS2*, run the script as: @@ -49,7 +49,7 @@ python scripts/download_data.py --task s2ef --split test To download and process the dataset in a directory other than your local `ocp/data` folder, add the following command line argument `--data-path`. -Note that the baseline [configs](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs) +Note that the baseline [configs](https://github.com/Open-Catalyst-Project/ocp/tree/main/src/fairchem/configs) expect the data to be found in `ocp/data`, make sure you symlink your directory or modify the paths in the configs accordingly. diff --git a/_sources/core/fine-tuning/fine-tuning-oxides.md b/_sources/core/fine-tuning/fine-tuning-oxides.md index 1ed33c8dc..e7da2fdc9 100644 --- a/_sources/core/fine-tuning/fine-tuning-oxides.md +++ b/_sources/core/fine-tuning/fine-tuning-oxides.md @@ -29,7 +29,7 @@ We get this checkpoint here. ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OCOC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') ``` The data we need is provided in `supporting-information.json`. That file is embedded in the supporting information for the article, and is provided here in the tutorial. We load this data and explore it a little. The json file provides a dictionary with the structure: diff --git a/_sources/core/gotchas.md b/_sources/core/gotchas.md index b8431079a..da05ec6ac 100644 --- a/_sources/core/gotchas.md +++ b/_sources/core/gotchas.md @@ -45,7 +45,7 @@ The problem here is that no neighbors are found for the single atom which causes ```{code-cell} ipython3 from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OCOC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` @@ -158,7 +158,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('GemNet-OCOC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` @@ -184,7 +184,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('GemNet-OCOC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` @@ -209,7 +209,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('EquiformerV2 (31M) All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` @@ -231,7 +231,7 @@ This happens because a random selection of is made to sample edges, and a differ from fairchem.core.models.model_registry import model_name_to_local_file from fairchem.core.common.relaxation.ase_utils import OCPCalculator -checkpoint_path = model_name_to_local_file('EquiformerV2 (31M) All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path, cpu=True) from ase.build import fcc111, add_adsorbate @@ -258,7 +258,7 @@ In DFT, the forces on all the atoms should sum to zero; otherwise, there is a ne ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('EquiformerV2 (31M) All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') from fairchem.core.common.relaxation.ase_utils import OCPCalculator calc = OCPCalculator(checkpoint_path=checkpoint_path, cpu=True) diff --git a/_sources/core/install.md b/_sources/core/install.md index f9922ced2..8fb350f42 100644 --- a/_sources/core/install.md +++ b/_sources/core/install.md @@ -3,7 +3,7 @@ ## conda or better yet [mamba](https://mamba.readthedocs.io/en/latest/user_guide/mamba.html) - easy We do not have official conda recipes (yet!), so to install with conda or mamba you will need to clone the -[ocp repo](https://github.com/Open-Catalyst-Project/ocp) and run the following from inside the repo directory to create an environment with all the +[ocp repo](https://github.com/FAIR-Chem/fairchem) and run the following from inside the repo directory to create an environment with all the necessary dependencies. 1. Create an *ocp-models* environment diff --git a/_sources/core/lmdb_dataset_creation.md b/_sources/core/lmdb_dataset_creation.md index 93486747f..fa5913ae9 100644 --- a/_sources/core/lmdb_dataset_creation.md +++ b/_sources/core/lmdb_dataset_creation.md @@ -11,16 +11,15 @@ kernelspec: name: python3 --- -# Making LMDB Datasets (original format) +# Making LMDB Datasets (original format, deprecated for ASE LMDBs) -Storing your data in an LMDB ensures very fast random read speeds for the fastest supported throughput. This is the -recommended option for the majority of OCP use cases. For more information about writing your data to an LMDB, -please see the [LMDB Dataset Tutorial](https://github.com/Open-Catalyst-Project/ocp/blob/main/tutorials/lmdb_dataset_creation.ipynb). +Storing your data in an LMDB ensures very fast random read speeds for the fastest supported throughput. This was the +recommended option for the majority of fairchem use cases, but has since been deprecated for [ASE LMDB files](ase_dataset_creation) This notebook provides an overview of how to create LMDB datasets to be used with the OCP repo. This tutorial is intended for those who wish to use OCP to train on their own datasets. Those interested in just using OCP data need not worry about these steps as they've been automated as part of this -[download script](https://github.com/Open-Catalyst-Project/ocp/blob/master/scripts/download_data.py). +[download script](https://github.com/FAIR-Chem/fairchem/blob/master/src/core/scripts/download_data.py). ```{code-cell} ipython3 from fairchem.core.preprocessing import AtomsToGraphs diff --git a/_sources/core/model_checkpoints.md b/_sources/core/model_checkpoints.md index f4fb51642..f3fa4bc7c 100644 --- a/_sources/core/model_checkpoints.md +++ b/_sources/core/model_checkpoints.md @@ -7,55 +7,55 @@ This page summarizes all the pretrained models released as part of the [Open Cat ## Open Catalyst 2020 (OC20) -* All configurations for these models are available in the [`configs/`](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs) directory. -* All of these models are trained on various splits of the OC20 S2EF / IS2RE datasets. For details, see [https://arxiv.org/abs/2010.09990](https://arxiv.org/abs/2010.09990) and https://github.com/Open-Catalyst-Project/ocp/blob/main/DATASET.md. -* All OC20 models are trained on adsorption energies, i.e. the DFT total energies minus the clean surface and gas phase adsorbate energies. For details on how to train models on OC20 total energies, please read the [referencing section here](https://github.com/Open-Catalyst-Project/ocp/blob/main/DATASET.md#oc20-reference-information). +* All configurations for these models are available in the [`configs/`](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs) directory. +* All of these models are trained on various splits of the OC20 S2EF / IS2RE datasets. For details, see [https://arxiv.org/abs/2010.09990](https://arxiv.org/abs/2010.09990) and https://github.com/FAIR-Chem/fairchem/blob/main/DATASET.md. +* All OC20 models are trained on adsorption energies, i.e. the DFT total energies minus the clean surface and gas phase adsorbate energies. For details on how to train models on OC20 total energies, please read the [referencing section here](https://github.com/FAIR-Chem/fairchem/blob/main/DATASET.md#oc20-reference-information). ### S2EF models: optimized for EFwT |Model |Split |Download |val ID force MAE (eV / Å) |val ID EFwT | |--- |--- |--- |--- |--- | -|CGCNN |200k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/cgcnn_200k.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/200k/cgcnn/cgcnn.yml) |0.08 |0% | -|CGCNN |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/cgcnn_2M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/cgcnn/cgcnn.yml) |0.0673 |0.01% | -|CGCNN |20M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/cgcnn_20M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/20M/cgcnn/cgcnn.yml) |0.065 |0% | -|CGCNN |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/cgcnn_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/cgcnn/cgcnn.yml) |0.0684 |0.01% | +|CGCNN |200k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/cgcnn_200k.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/200k/cgcnn/cgcnn.yml) |0.08 |0% | +|CGCNN |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/cgcnn_2M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/cgcnn/cgcnn.yml) |0.0673 |0.01% | +|CGCNN |20M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/cgcnn_20M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/20M/cgcnn/cgcnn.yml) |0.065 |0% | +|CGCNN |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/cgcnn_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/cgcnn/cgcnn.yml) |0.0684 |0.01% | |DimeNet |200k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/dimenet_200k.pt) |0.0693 |0.01% | |DimeNet |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/dimenet_2M.pt) |0.0576 |0.02% | -|SchNet |200k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_200k.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/200k/schnet/schnet.yml) |0.0743 |0% | -|SchNet |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_2M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/schnet/schnet.yml) |0.0737 |0% | -|SchNet |20M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_20M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/20M/schnet/schnet.yml) |0.0568 |0.03% | -|SchNet |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_all_large.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/schnet/schnet.yml) |0.0494 |0.12% | -|DimeNet++ |200k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_200k.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/200k/dimenet_plus_plus/dpp.yml) |0.0741 |0% | -|DimeNet++ |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_2M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/dimenet_plus_plus/dpp.yml) |0.0595 |0.01% | -|DimeNet++ |20M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_20M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/20M/dimenet_plus_plus/dpp.yml) |0.0511 |0.06% | -|DimeNet++ |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/dimenet_plus_plus/dpp.yml) |0.0444 |0.12% | -|SpinConv |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_12/s2ef/spinconv_force_centric_2M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/spinconv/spinconv_force.yml) |0.0329 |0.18% | -|SpinConv |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_08/s2ef/spinconv_force_centric_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/spinconv/spinconv_force.yml) |0.0267 |1.02% | -|GemNet-dT |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_12/s2ef/gemnet_t_direct_h512_2M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/gemnet/gemnet-dT.yml) |0.0257 |1.10% | -|GemNet-dT |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_08/s2ef/gemnet_t_direct_h512_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/gemnet/gemnet-dT.yml) |0.0211 |2.21% | -|PaiNN |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_05/s2ef/painn_h512_s2ef_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/painn/painn_h512.yml) \| [scale file](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/painn/painn_nb6_scaling_factors.pt) |0.0294 |0.91% | -|GemNet-OC |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_07/s2ef/gemnet_oc_base_s2ef_2M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/gemnet/gemnet-oc.yml) \| [scale file](https://github.com/Open-Catalyst-Project/ocp/blob/481f3a5a92dc787384ddae9fe3f50f5d932712fd/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc.pt) |0.0225 |2.12% | -|GemNet-OC |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_07/s2ef/gemnet_oc_base_s2ef_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/gemnet/gemnet-oc.yml) \| [scale file](https://github.com/Open-Catalyst-Project/ocp/blob/481f3a5a92dc787384ddae9fe3f50f5d932712fd/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc.pt) |0.0179 |4.56% | -|GemNet-OC |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/gemnet_oc_base_s2ef_all_md.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/gemnet/gemnet-oc.yml) \| [scale file](https://github.com/Open-Catalyst-Project/ocp/blob/481f3a5a92dc787384ddae9fe3f50f5d932712fd/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc.pt) |0.0173 |4.72% | -|GemNet-OC-Large |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_07/s2ef/gemnet_oc_large_s2ef_all_md.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/gemnet/gemnet-oc-large.yml) \| [scale file](https://github.com/Open-Catalyst-Project/ocp/blob/481f3a5a92dc787384ddae9fe3f50f5d932712fd/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc-large.pt) |0.0164 |5.34% | -|SCN |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/scn_t1_b1_s2ef_2M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/scn/scn-t1-b1.yml) |0.0216 |1.68% | -|SCN-t4-b2 |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/scn_t4_b2_s2ef_2M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/scn/scn-t4-b2.yml) |0.0193 |2.68% | -|SCN |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/scn_all_md_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/scn/scn-all-md.yml) |0.0160 |5.08% | -|eSCN-L4-M2-Lay12 |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/escn_l4_m2_lay12_2M_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/escn/eSCN-L4-M2-Lay12.yml) |0.0191 |2.55% | -|eSCN-L6-M2-Lay12 |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/escn_l6_m2_lay12_2M_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/escn/eSCN-L6-M2-Lay12.yml) |0.0186 |2.66% | -|eSCN-L6-M2-Lay12 |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/escn_l6_m2_lay12_all_md_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/escn/eSCN-L6-M2-Lay12-All-MD.yml) |0.0161 |4.28% | -|eSCN-L6-M3-Lay20 |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/escn_l6_m3_lay20_all_md_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/escn/eSCN-L6-M3-Lay20-All-MD.yml) |0.0139 |6.64% | -|EquiformerV2 (83M) |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_06/oc20/s2ef/eq2_83M_2M.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/2M/equiformer_v2/equiformer_v2_N@12_L@6_M@2.yml) |0.0167 |4.26% | -|EquiformerV2 (31M) |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_06/oc20/s2ef/eq2_31M_ec4_allmd.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/equiformer_v2/equiformer_v2_N@8_L@4_M@2_31M.yml) |0.0142 |6.20% | -|EquiformerV2 (153M) |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_06/oc20/s2ef/eq2_153M_ec4_allmd.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/equiformer_v2/equiformer_v2_N@20_L@6_M@3_153M.yml) |0.0126 |8.90% | +|SchNet |200k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_200k.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/200k/schnet/schnet.yml) |0.0743 |0% | +|SchNet |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_2M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/schnet/schnet.yml) |0.0737 |0% | +|SchNet |20M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_20M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/20M/schnet/schnet.yml) |0.0568 |0.03% | +|SchNet |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_all_large.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/schnet/schnet.yml) |0.0494 |0.12% | +|DimeNet++ |200k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_200k.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/200k/dimenet_plus_plus/dpp.yml) |0.0741 |0% | +|DimeNet++ |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_2M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/dimenet_plus_plus/dpp.yml) |0.0595 |0.01% | +|DimeNet++ |20M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_20M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/20M/dimenet_plus_plus/dpp.yml) |0.0511 |0.06% | +|DimeNet++ |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/dimenet_plus_plus/dpp.yml) |0.0444 |0.12% | +|SpinConv |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_12/s2ef/spinconv_force_centric_2M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/spinconv/spinconv_force.yml) |0.0329 |0.18% | +|SpinConv |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_08/s2ef/spinconv_force_centric_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/spinconv/spinconv_force.yml) |0.0267 |1.02% | +|GemNet-dT |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_12/s2ef/gemnet_t_direct_h512_2M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/gemnet/gemnet-dT.yml) |0.0257 |1.10% | +|GemNet-dT |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_08/s2ef/gemnet_t_direct_h512_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/gemnet/gemnet-dT.yml) |0.0211 |2.21% | +|PaiNN |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_05/s2ef/painn_h512_s2ef_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/painn/painn_h512.yml) \| [scale file](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/painn/painn_nb6_scaling_factors.pt) |0.0294 |0.91% | +|GemNet-OC |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_07/s2ef/gemnet_oc_base_s2ef_2M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/gemnet/gemnet-oc.yml) \| [scale file](https://github.com/FAIR-Chem/fairchem/blob/481f3a5a92dc787384ddae9fe3f50f5d932712fd/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc.pt) |0.0225 |2.12% | +|GemNet-OC |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_07/s2ef/gemnet_oc_base_s2ef_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/gemnet/gemnet-oc.yml) \| [scale file](https://github.com/FAIR-Chem/fairchem/blob/481f3a5a92dc787384ddae9fe3f50f5d932712fd/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc.pt) |0.0179 |4.56% | +|GemNet-OC |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/gemnet_oc_base_s2ef_all_md.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/gemnet/gemnet-oc.yml) \| [scale file](https://github.com/FAIR-Chem/fairchem/blob/481f3a5a92dc787384ddae9fe3f50f5d932712fd/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc.pt) |0.0173 |4.72% | +|GemNet-OC-Large |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_07/s2ef/gemnet_oc_large_s2ef_all_md.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/gemnet/gemnet-oc-large.yml) \| [scale file](https://github.com/FAIR-Chem/fairchem/blob/481f3a5a92dc787384ddae9fe3f50f5d932712fd/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc-large.pt) |0.0164 |5.34% | +|SCN |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/scn_t1_b1_s2ef_2M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/scn/scn-t1-b1.yml) |0.0216 |1.68% | +|SCN-t4-b2 |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/scn_t4_b2_s2ef_2M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/scn/scn-t4-b2.yml) |0.0193 |2.68% | +|SCN |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/scn_all_md_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/scn/scn-all-md.yml) |0.0160 |5.08% | +|eSCN-L4-M2-Lay12 |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/escn_l4_m2_lay12_2M_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/escn/eSCN-L4-M2-Lay12.yml) |0.0191 |2.55% | +|eSCN-L6-M2-Lay12 |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/escn_l6_m2_lay12_2M_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/escn/eSCN-L6-M2-Lay12.yml) |0.0186 |2.66% | +|eSCN-L6-M2-Lay12 |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/escn_l6_m2_lay12_all_md_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/escn/eSCN-L6-M2-Lay12-All-MD.yml) |0.0161 |4.28% | +|eSCN-L6-M3-Lay20 |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_03/s2ef/escn_l6_m3_lay20_all_md_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/escn/eSCN-L6-M3-Lay20-All-MD.yml) |0.0139 |6.64% | +|EquiformerV2 (83M) |2M |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_06/oc20/s2ef/eq2_83M_2M.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/equiformer_v2/equiformer_v2_N@12_L@6_M@2.yml) |0.0167 |4.26% | +|EquiformerV2 (31M) |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_06/oc20/s2ef/eq2_31M_ec4_allmd.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/equiformer_v2/equiformer_v2_N@8_L@4_M@2_31M.yml) |0.0142 |6.20% | +|EquiformerV2 (153M) |All+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_06/oc20/s2ef/eq2_153M_ec4_allmd.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/equiformer_v2/equiformer_v2_N@20_L@6_M@3_153M.yml) |0.0126 |8.90% | ### S2EF models: optimized for force only |Model |Split |Download |val ID force MAE | |--- |--- |--- |--- | |SchNet |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/schnet_all_forceonly.pt) |0.0443 | -|DimeNet++ |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/dimenetpp_all_forceonly.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/dimenet_plus_plus/dpp_forceonly.yml) |0.0334 | -|DimeNet++-Large |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_large_all_forceonly.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/dimenet_plus_plus/dpp10.7M_forceonly.yml) |0.02825 | +|DimeNet++ |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/s2ef/dimenetpp_all_forceonly.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/dimenet_plus_plus/dpp_forceonly.yml) |0.0334 | +|DimeNet++-Large |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_large_all_forceonly.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/dimenet_plus_plus/dpp10.7M_forceonly.yml) |0.02825 | |DimeNet++ |20M+Rattled |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_20M_rattled_forceonly.pt) |0.0614 | |DimeNet++ |20M+MD |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/s2ef/dimenetpp_20M_md_forceonly.pt) |0.0594 | @@ -63,19 +63,19 @@ This page summarizes all the pretrained models released as part of the [Open Cat |Model |Split |Download |val ID energy MAE | |--- |--- |--- |--- | -|CGCNN |10k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/cgcnn_10k.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/10k/cgcnn/cgcnn.yml) |0.9881 | -|CGCNN |100k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/cgcnn_100k.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/100k/cgcnn/cgcnn.yml) |0.682 | -|CGCNN |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/cgcnn_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/all/cgcnn/cgcnn.yml) |0.6199 | +|CGCNN |10k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/cgcnn_10k.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/10k/cgcnn/cgcnn.yml) |0.9881 | +|CGCNN |100k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/cgcnn_100k.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/100k/cgcnn/cgcnn.yml) |0.682 | +|CGCNN |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/cgcnn_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/all/cgcnn/cgcnn.yml) |0.6199 | |DimeNet |10k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/is2re/dimenet_10k.pt) |1.0117 | |DimeNet |100k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/is2re/dimenet_100k.pt) |0.6658 | |DimeNet |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2020_11/is2re/dimenet_all.pt) |0.5999 | -|SchNet |10k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/schnet_10k.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/10k/schnet/schnet.yml) |1.059 | -|SchNet |100k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/schnet_100k.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/100k/schnet/schnet.yml) |0.7137 | -|SchNet |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/schnet_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/all/schnet/schnet.yml) |0.6458 | -|DimeNet++ |10k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/dimenetpp_10k.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/10k/dimenet_plus_plus/dpp.yml) |0.8837 | -|DimeNet++ |100k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/dimenetpp_100k.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/100k/dimenet_plus_plus/dpp.yml) |0.6388 | -|DimeNet++ |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/dimenetpp_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/all/dimenet_plus_plus/dpp.yml) |0.5639 | -|PaiNN |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_05/is2re/painn_h1024_bs4x8_is2re_all.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/is2re/all/painn/painn_h1024_bs8x4.yml) \| [scale file](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/painn/painn_nb6_scaling_factors.pt) |0.5728 | +|SchNet |10k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/schnet_10k.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/10k/schnet/schnet.yml) |1.059 | +|SchNet |100k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/schnet_100k.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/100k/schnet/schnet.yml) |0.7137 | +|SchNet |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/schnet_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/all/schnet/schnet.yml) |0.6458 | +|DimeNet++ |10k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/dimenetpp_10k.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/10k/dimenet_plus_plus/dpp.yml) |0.8837 | +|DimeNet++ |100k |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/dimenetpp_100k.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/100k/dimenet_plus_plus/dpp.yml) |0.6388 | +|DimeNet++ |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2021_02/is2re/dimenetpp_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/all/dimenet_plus_plus/dpp.yml) |0.5639 | +|PaiNN |All |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_05/is2re/painn_h1024_bs4x8_is2re_all.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/is2re/all/painn/painn_h1024_bs8x4.yml) \| [scale file](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/painn/painn_nb6_scaling_factors.pt) |0.5728 | The Open Catalyst 2020 (OC20) dataset is licensed under a [Creative Commons Attribution 4.0 License](https://creativecommons.org/licenses/by/4.0/legalcode). @@ -94,8 +94,8 @@ OC20 dataset or pretrained models, as well as the original paper for each model: ## Open Catalyst 2022 (OC22) -* All configurations for these models are available in the [`configs/oc22`](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/oc22) directory. -* All of these models are trained on various splits of the OC22 S2EF / IS2RE datasets. For details, see [https://arxiv.org/abs/2206.08917](https://arxiv.org/abs/2206.08917) and https://github.com/Open-Catalyst-Project/ocp/blob/main/DATASET.md. +* All configurations for these models are available in the [`configs/oc22`](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/oc22) directory. +* All of these models are trained on various splits of the OC22 S2EF / IS2RE datasets. For details, see [https://arxiv.org/abs/2206.08917](https://arxiv.org/abs/2206.08917) and https://github.com/FAIR-Chem/fairchem/blob/main/DATASET.md. * All OC22 models released here are trained on DFT total energies, in contrast to the OC20 models listed above, which are trained on adsorption energies. @@ -103,12 +103,12 @@ OC20 dataset or pretrained models, as well as the original paper for each model: |Model |Training |Download |val ID force MAE |val ID energy MAE | |--- |--- |--- |--- |--- | -|GemNet-dT | OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_09/oc22/s2ef/gndt_oc22_all_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/oc22/s2ef/gemnet-dt/gemnet-dT.yml) |0.032 |1.127 | -|GemNet-OC | OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_09/oc22/s2ef/gnoc_oc22_all_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/oc22/s2ef/gemnet-oc/gemnet_oc.yml) |0.030 |0.563 | -|GemNet-OC | OC20+OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_09/oc22/s2ef/gnoc_oc22_oc20_all_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/oc22/s2ef/gemnet-oc/gemnet_oc_oc20_oc22.yml) |0.027 |0.483 | -|GemNet-OC
(trained with `enforce_max_neighbors_strictly=False`, [#467](https://github.com/Open-Catalyst-Project/ocp/pull/467)) | OC20+OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_05/oc22/s2ef/gnoc_oc22_oc20_all_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/oc22/s2ef/gemnet-oc/gemnet_oc_oc20_oc22_degen_edges.yml) |0.027 |0.458 | -|GemNet-OC | OC20->OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_09/oc22/s2ef/gnoc_finetune_all_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/oc22/s2ef/gemnet-oc/gemnet_oc_finetune.yml) |0.030 |0.417 | -|EquiformerV2 ($\lambda_E$=4, $\lambda_F$=100) | OC22 | [checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_10/oc22/s2ef/eq2_121M_e4_f100_oc22_s2ef.pt) \| [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/oc22/s2ef/equiformer_v2/equiformer_v2_N@18_L@6_M@2_e4_f100_121M.yml) | 0.023 | 0.447 +|GemNet-dT | OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_09/oc22/s2ef/gndt_oc22_all_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/oc22/s2ef/gemnet-dt/gemnet-dT.yml) |0.032 |1.127 | +|GemNet-OC | OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_09/oc22/s2ef/gnoc_oc22_all_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/oc22/s2ef/gemnet-oc/gemnet_oc.yml) |0.030 |0.563 | +|GemNet-OC | OC20+OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_09/oc22/s2ef/gnoc_oc22_oc20_all_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/oc22/s2ef/gemnet-oc/gemnet_oc_oc20_oc22.yml) |0.027 |0.483 | +|GemNet-OC
(trained with `enforce_max_neighbors_strictly=False`, [#467](https://github.com/Open-Catalyst-Project/ocp/pull/467)) | OC20+OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_05/oc22/s2ef/gnoc_oc22_oc20_all_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/oc22/s2ef/gemnet-oc/gemnet_oc_oc20_oc22_degen_edges.yml) |0.027 |0.458 | +|GemNet-OC | OC20->OC22 |[checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2022_09/oc22/s2ef/gnoc_finetune_all_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/oc22/s2ef/gemnet-oc/gemnet_oc_finetune.yml) |0.030 |0.417 | +|EquiformerV2 ($\lambda_E$=4, $\lambda_F$=100) | OC22 | [checkpoint](https://dl.fbaipublicfiles.com/opencatalystproject/models/2023_10/oc22/s2ef/eq2_121M_e4_f100_oc22_s2ef.pt) \| [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/oc22/s2ef/equiformer_v2/equiformer_v2_N@18_L@6_M@2_e4_f100_121M.yml) | 0.023 | 0.447 The Open Catalyst 2022 (OC22) dataset is licensed under a [Creative Commons Attribution 4.0 License](https://creativecommons.org/licenses/by/4.0/legalcode). @@ -126,27 +126,27 @@ OC22 dataset or pretrained models, as well as the original paper for each model: ## Open Direct Air Capture 2023 (ODAC23) -* All config files for the ODAC23 models are available in the [`configs/odac`](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac) directory. +* All config files for the ODAC23 models are available in the [`configs/odac`](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac) directory. ### S2EF models |Model |Checkpoint | Config | |--- |--- |--- | -|SchNet | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Schnet.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/s2ef/schnet.yml) | -|DimeNet++ | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/DimenetPP.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/s2ef/dpp.yml) | -|PaiNN | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/PaiNN.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/s2ef/painn.yml) | -|GemNet-OC | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Gemnet-OC.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/s2ef/gemnet-oc.yml) | -|eSCN | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/eSCN.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/s2ef/eSCN.yml) | -|EquiformerV2 | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231116/eqv2_31M.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/s2ef/eqv2_31M.yml) | -|EquiformerV2 (Large) | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Equiformer_V2_Large.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/s2ef/eqv2_153M.yml) | +|SchNet | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Schnet.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/s2ef/schnet.yml) | +|DimeNet++ | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/DimenetPP.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/s2ef/dpp.yml) | +|PaiNN | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/PaiNN.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/s2ef/painn.yml) | +|GemNet-OC | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Gemnet-OC.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/s2ef/gemnet-oc.yml) | +|eSCN | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/eSCN.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/s2ef/eSCN.yml) | +|EquiformerV2 | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231116/eqv2_31M.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/s2ef/eqv2_31M.yml) | +|EquiformerV2 (Large) | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Equiformer_V2_Large.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/s2ef/eqv2_153M.yml) | ### IS2RE Direct models |Model |Checkpoint | Config | |--- |--- | --- | -|Gemnet-OC (Direct) | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Gemnet-OC_Direct.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/is2re/gemnet-oc.yml) | -|eSCN (Direct) | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/eSCN_Direct.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/is2re/eSCN.yml) | -|EquiformerV2 (Direct) | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Equiformer_V2_Direct.pt) | [config](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/odac/is2re/eqv2_31M.yml) | +|Gemnet-OC (Direct) | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Gemnet-OC_Direct.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/is2re/gemnet-oc.yml) | +|eSCN (Direct) | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/eSCN_Direct.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/is2re/eSCN.yml) | +|EquiformerV2 (Direct) | [checkpoint](https://dl.fbaipublicfiles.com/dac/checkpoints_20231018/Equiformer_V2_Direct.pt) | [config](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/odac/is2re/eqv2_31M.yml) | The models in the table above were trained to predict relaxed energy directly. Relaxed energies can also be predicted by running structural relaxations using the S2EF models from the previous section. diff --git a/_sources/core/model_faq.md b/_sources/core/model_faq.md index 0b3446ce8..8046844be 100644 --- a/_sources/core/model_faq.md +++ b/_sources/core/model_faq.md @@ -1,6 +1,6 @@ # Model FAQ -If you don't find your question answered here, please feel free to [file a GitHub issue](https://github.com/open-catalyst-project/ocp/issues) or [post on the discussion board](https://discuss.opencatalystproject.org/). +If you don't find your question answered here, please feel free to [file a GitHub issue](https://github.com/FAIR-Chem/fairchem/issues) or [post on the discussion board](https://discuss.opencatalystproject.org/). ## Models @@ -18,7 +18,7 @@ Moreover, results may be different between GPU and CPU executions [[3](https://pytorch.org/docs/stable/notes/randomness.html)]. To get deterministic results on GPU, use [`torch.use_deterministic_algorithms`](https://pytorch.org/docs/stable/generated/torch.use_deterministic_algorithms.html#torch.use_deterministic_algorithms) -where available (for example, see [`scatter_det`](https://github.com/Open-Catalyst-Project/ocp/blob/main/ocpmodels/common/utils.py#L1112)). Note that deterministic operations are often slower +where available (for example, see [`scatter_det`](https://github.com/FAIR-Chem/fairchem/blob/main/ocpmodels/common/utils.py#L1112)). Note that deterministic operations are often slower than non-deterministic operations, so while this may be worth using for testing and debugging, this is not recommended for large-scale training and inference. @@ -54,7 +54,7 @@ dataset: The OC20 reference pickle file containing the energy necessary to convert adsorption energy values to total energy is [available for download -here](https://github.com/Open-Catalyst-Project/ocp/blob/main/DATASET.md#oc20-reference-information). +here](https://github.com/FAIR-Chem/fairchem/blob/main/DATASET.md#oc20-reference-information). To test if your setup is correct, try the following: @@ -72,8 +72,8 @@ print(dset[0]) ``` Another option that might be useful for training on total energies is passing -precomputed per-element average energies with [`lin_ref`](https://github.com/Open-Catalyst-Project/ocp/blob/faq/configs/s2ef/example.yml#L94-L97). If you use this option, make sure to recompute the -[normalizer statistics (for energies)](https://github.com/Open-Catalyst-Project/ocp/blob/faq/configs/s2ef/example.yml#L82-L83) +precomputed per-element average energies with [`lin_ref`](https://github.com/FAIR-Chem/fairchem/blob/faq/configs/s2ef/example.yml#L94-L97). If you use this option, make sure to recompute the +[normalizer statistics (for energies)](https://github.com/FAIR-Chem/fairchem/blob/faq/configs/s2ef/example.yml#L82-L83) _after_ linear referencing. ### I'm trying to run GemNet-OC / GemNet-dT, but it throws an error that scaling factors are not fitted. What should I do? @@ -85,8 +85,8 @@ for more details on this. We provide some set of scaling factors as part of the `ocp` codebase that you can reuse by passing the `scale_file` parameter in the YAML config. For example: -* GemNet-dT [scaling factors](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/gemnet/scaling_factors/gemnet-dT.json) and [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/gemnet/gemnet-dT.yml#L32) -* GemNet-OC [scaling factors](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc.pt) and [config](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/s2ef/all/gemnet/gemnet-oc.yml#L45) +* GemNet-dT [scaling factors](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/gemnet/scaling_factors/gemnet-dT.json) and [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/gemnet/gemnet-dT.yml#L32) +* GemNet-OC [scaling factors](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/gemnet/scaling_factors/gemnet-oc.pt) and [config](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/all/gemnet/gemnet-oc.yml#L45) If you change any of the model architecture hyperparameters or the dataset, you should refit these scaling factors: @@ -112,7 +112,7 @@ python main.py \ This is likely a tagging issue -- GemNet-OC computes quadruplet interactions for atoms tagged as 1 and 2 -([see code](https://github.com/Open-Catalyst-Project/ocp/blob/main/ocpmodels/models/gemnet_oc/gemnet_oc.py#L1020)). +([see code](https://github.com/FAIR-Chem/fairchem/blob/main/ocpmodels/models/gemnet_oc/gemnet_oc.py#L1020)). In OC20 parlance, `tag==1` refers to surface atoms and `tag==2` refers to adsorbate atoms. If all the atoms are tagged as 0 (check `atoms.get_tags()`), no quadruplets are computed, and part of the GemNet-OC forward pass fails. diff --git a/_sources/core/model_training.md b/_sources/core/model_training.md index e8114e4ec..94139c113 100644 --- a/_sources/core/model_training.md +++ b/_sources/core/model_training.md @@ -39,7 +39,7 @@ Load balancing is activated by default (in atoms mode). To change modes you can optim: load_balancing: neighbors ``` -For more details, refer to [PR 267](https://github.com/Open-Catalyst-Project/ocp/pull/267). +For more details, refer to [PR 267](https://github.com/FAIR-Chem/fairchem/pull/267). If you have access to a slurm cluster, we use the [submitit](https://github.com/facebookincubator/submitit) package to simplify multi-node distributed training: ``` @@ -73,7 +73,7 @@ dataset: test: src: [Path to test data] ``` -You can find examples configuration files in [`configs/is2re`](https://github.com/Open-Catalyst-Project/ocp/tree/master/configs/is2re). +You can find examples configuration files in [`configs/is2re`](https://github.com/FAIR-Chem/fairchem/tree/main/configs/is2re). To train a SchNet model for the IS2RE task on the 10k split, run: ```bash @@ -100,8 +100,8 @@ Alternatively, the IS2RE task may be approached by 2 methods as described in our - Single Model: Relaxed energy predictions are extracted from relaxed structures generated via ML relaxations from a single model. - 1. Train a S2EF model on both energy and forces as described [here](https://github.com/Open-Catalyst-Project/ocp/blob/master/TRAIN.md#structure-to-energy-and-forces-s2ef) - 2. Using the trained S2EF model, run ML relaxations as described [here](https://github.com/Open-Catalyst-Project/ocp/blob/master/TRAIN.md#initial-structure-to-relaxed-structure-is2rs). Ensure `traj_dir` is uniquely specified in the config as to save out the full trajectory. A sample config can be found [here](https://github.com/Open-Catalyst-Project/ocp/blob/master/configs/s2ef/2M/dimenet_plus_plus/dpp_relax.yml). ** Note ** Relaxations on the complete val/test set may take upwards of 8hrs depending on your available hardware. + 1. Train a S2EF model on both energy and forces as described [here](../core/model_training.md) + 2. Using the trained S2EF model, run ML relaxations as described [here](../core/model_training.md). Ensure `traj_dir` is uniquely specified in the config as to save out the full trajectory. A sample config can be found [here](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/s2ef/2M/dimenet_plus_plus/dpp_relax.yml). ** Note ** Relaxations on the complete val/test set may take upwards of 8hrs depending on your available hardware. 3. Prepare a submission file by running the following command: ``` python scripts/make_submission_file.py --id path/to/id/traj_dir \ @@ -153,7 +153,7 @@ dataset: test: src: [Path to test data] ``` -You can find examples configuration files in [`configs/s2ef`](https://github.com/Open-Catalyst-Project/ocp/tree/master/configs/s2ef). +You can find examples configuration files in [`configs/s2ef`](https://github.com/FAIR-Chem/fairchem/tree/main/configs/s2ef). To train a SchNet model for the S2EF task on the 2M split using 2 GPUs, run: @@ -203,7 +203,7 @@ dataset: There is some support for specifying arguments from the command line, such that they would override any parameter from the YAML configuration file. The parser for this relies on the [nesting level being correctly specified using a `.` -separator](https://github.com/Open-Catalyst-Project/ocp/blob/main/ocpmodels/common/utils.py#L357). +separator](https://github.com/FAIR-Chem/fairchem/blob/main/ocpmodels/common/utils.py#L357). For example, to override the training dataset path via a command line argument: @@ -288,7 +288,7 @@ dataset: format: oc22_lmdb # Use the OC22LmdbDataset ... ``` -You can find examples configuration files in [`configs/oc22/is2re`](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/oc22/is2re). +You can find examples configuration files in [`configs/oc22/is2re`](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/oc22/is2re). ## Structure to Total Energy and Forces (S2EF-Total) @@ -301,7 +301,7 @@ dataset: format: oc22_lmdb # Use the OC22LmdbDataset ... ``` -You can find examples configuration files in [`configs/oc22/s2ef`](https://github.com/Open-Catalyst-Project/ocp/tree/main/configs/oc22/s2ef). +You can find examples configuration files in [`configs/oc22/s2ef`](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/core/configs/oc22/s2ef). ## Joint Training @@ -325,7 +325,7 @@ dataset: oc20_ref: path/to/oc20_ref.pkl ``` -You can find an example configuration file at [configs/oc22/s2ef/base_joint.yml](https://github.com/Open-Catalyst-Project/ocp/blob/main/configs/oc22/s2ef/base_joint.yml) +You can find an example configuration file at [configs/oc22/s2ef/base_joint.yml](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/configs/oc22/s2ef/base_joint.yml) ## Create EvalAI OC22 submission files diff --git a/_sources/core/quickstart.md b/_sources/core/quickstart.md index 4d6864b81..7396dfb4d 100644 --- a/_sources/core/quickstart.md +++ b/_sources/core/quickstart.md @@ -14,7 +14,7 @@ kernelspec: Using pre-trained models in ASE ---------- -1. First, install OCP in a fresh python environment using one of the approaches in [installation documentation](install). +1. First, install `fairchem` in a fresh python environment using one of the approaches in [installation documentation](install). 2. See what pre-trained potentials are available ```{code-cell} ipython3 @@ -26,7 +26,7 @@ print(available_pretrained_models) ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OCOC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') checkpoint_path ``` diff --git a/_sources/index.md b/_sources/index.md index 9e17dc627..93d7a9a05 100644 --- a/_sources/index.md +++ b/_sources/index.md @@ -1,49 +1,53 @@ -# `ocp` by Open Catalyst Project +# `fairchem` repository for atomistic AI/ML models in chemistry -![tests](https://github.com/Open-Catalyst-Project/ocp/actions/workflows/test.yml/badge.svg?branch=main) +![tests](https://github.com/FAIR-Chem/fairchem/actions/workflows/test.yml/badge.svg?branch=main) [![codecov](https://codecov.io/gh/Open-Catalyst-Project/ocp/graph/badge.svg?token=M606LH5LK6)](https://codecov.io/gh/Open-Catalyst-Project/ocp) -`ocp` is the [Open Catalyst Project](https://opencatalystproject.org/)'s -library of state-of-the-art machine learning algorithms for catalysis. +`fairchem` is the FAIR Chemistry team's library of state-of-the-art machine learning algorithms for chemistry and materials. Collaborative projects that contribute or use the models and approaches in this repo: +* [Open Catalyst Project (OCP)](https://opencatalystproject.org/) +* [Open Direct Air Capture (OpenDAC)](https://open-dac.github.io/) + +We re-organized and rebranded the repository in 2024 (previously the `ocp` repo) to reflect the increasingly general usability of these models beyond catalysis, including things like direct air capture. +

-## [OCP Documentation](https://open-catalyst-project.github.io/ocp/) +## [fairchem](https://fair-chem.github.io/fairchem/) Full documentation, released data/checkpoints, and tutorials are now available. -- [Installation](https://open-catalyst-project.github.io/ocp/core/install.html) -- [Pretrained models](https://open-catalyst-project.github.io/ocp/core/models.html) -- [FAQ](https://open-catalyst-project.github.io/ocp/core/model_faq.html) +- [Installation](core/install) +- [Pretrained model checkpoints](core/model_checkpoints) +- [FAQ](core/model_faq) `ocp` provides training and evaluation code for tasks and models that take arbitrary chemical structures as input to predict energies / forces / positions / stresses, and can be used as a base scaffold for research projects. For an overview of tasks, data, and metrics, please read the documentations and respective papers: - - [OC20](https://open-catalyst-project.github.io/ocp/core/datasets/oc20.html) - - [OC22](https://open-catalyst-project.github.io/ocp/core/datasets/oc22.html) - - [ODAC23](https://open-catalyst-project.github.io/ocp/core/datasets/odac.html) + - [OC20](core/datasets/oc20) + - [OC22](core/datasets/oc22) + - [ODAC23](core/datasets/odac) Projects and models built on `ocp`: -- SchNet [[`arXiv`](https://arxiv.org/abs/1706.08566)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/blob/main/ocpmodels/models/schnet.py)] -- DimeNet++ [[`arXiv`](https://arxiv.org/abs/2011.14115)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/blob/main/ocpmodels/models/dimenet_plus_plus.py)] -- GemNet-dT [[`arXiv`](https://arxiv.org/abs/2106.08903)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/tree/main/ocpmodels/models/gemnet)] -- PaiNN [[`arXiv`](https://arxiv.org/abs/2102.03150)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/tree/main/ocpmodels/models/painn)] -- Graph Parallelism [[`arXiv`](https://arxiv.org/abs/2203.09697)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/tree/main/ocpmodels/models/gemnet_gp)] -- GemNet-OC [[`arXiv`](https://arxiv.org/abs/2204.02782)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/tree/main/ocpmodels/models/gemnet_oc)] -- SCN [[`arXiv`](https://arxiv.org/abs/2206.14331)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/tree/main/ocpmodels/models/scn)] -- AdsorbML [[`arXiv`](https://arxiv.org/abs/2211.16486)] [[`code`](https://github.com/open-catalyst-project/adsorbml)] -- eSCN [[`arXiv`](https://arxiv.org/abs/2302.03655)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/tree/main/ocpmodels/models/escn)] -- EquiformerV2 [[`arXiv`](https://arxiv.org/abs/2306.12059)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/tree/main/ocpmodels/models/equiformer_v2)] +- SchNet [[`arXiv`](https://arxiv.org/abs/1706.08566)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/models/schnet.py)] +- DimeNet++ [[`arXiv`](https://arxiv.org/abs/2011.14115)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/main/src/fairchem/core/models/dimenet_plus_plus.py)] +- GemNet-dT [[`arXiv`](https://arxiv.org/abs/2106.08903)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/main/tree/fairchem/core/models/gemnet)] +- PaiNN [[`arXiv`](https://arxiv.org/abs/2102.03150)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/main/tree/fairchem/core/models/painn)] +- Graph Parallelism [[`arXiv`](https://arxiv.org/abs/2203.09697)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/main/tree/fairchem/core/models/gemnet_gp)] +- GemNet-OC [[`arXiv`](https://arxiv.org/abs/2204.02782)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/main/tree/fairchem/core/models/gemnet_oc)] +- SCN [[`arXiv`](https://arxiv.org/abs/2206.14331)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/main/tree/fairchem/core/models/scn)] +- AdsorbML [[`arXiv`](https://arxiv.org/abs/2211.16486)] [[`code`](https://github.com/FAIR-Chem/fairchem/tree/main/src/fairchem/applications/AdsorbML)] +- eSCN [[`arXiv`](https://arxiv.org/abs/2302.03655)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/main/tree/fairchem/core/models/escn)] +- EquiformerV2 [[`arXiv`](https://arxiv.org/abs/2306.12059)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/main/tree/fairchem/core/models/equiformer_v2)] Older model implementations that are no longer supported: -- CGCNN [[`arXiv`](https://arxiv.org/abs/1710.10324)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/blob/e7a8745eb307e8a681a1aa9d30c36e8c41e9457e/ocpmodels/models/cgcnn.py)] -- DimeNet [[`arXiv`](https://arxiv.org/abs/2003.03123)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/blob/e7a8745eb307e8a681a1aa9d30c36e8c41e9457e/ocpmodels/models/dimenet.py)] -- SpinConv [[`arXiv`](https://arxiv.org/abs/2106.09575)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/blob/e7a8745eb307e8a681a1aa9d30c36e8c41e9457e/ocpmodels/models/spinconv.py)] -- ForceNet [[`arXiv`](https://arxiv.org/abs/2103.01436)] [[`code`](https://github.com/Open-Catalyst-Project/ocp/blob/e7a8745eb307e8a681a1aa9d30c36e8c41e9457e/ocpmodels/models/forcenet.py)] +- CGCNN [[`arXiv`](https://arxiv.org/abs/1710.10324)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/e7a8745eb307e8a681a1aa9d30c36e8c41e9457e/ocpmodels/models/cgcnn.py)] +- DimeNet [[`arXiv`](https://arxiv.org/abs/2003.03123)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/e7a8745eb307e8a681a1aa9d30c36e8c41e9457e/ocpmodels/models/dimenet.py)] +- SpinConv [[`arXiv`](https://arxiv.org/abs/2106.09575)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/e7a8745eb307e8a681a1aa9d30c36e8c41e9457e/ocpmodels/models/spinconv.py)] +- ForceNet [[`arXiv`](https://arxiv.org/abs/2103.01436)] [[`code`](https://github.com/FAIR-Chem/fairchem/blob/e7a8745eb307e8a681a1aa9d30c36e8c41e9457e/ocpmodels/models/forcenet.py)] ## Discussion @@ -51,9 +55,7 @@ For all non-codebase related questions and to keep up-to-date with the latest OC announcements, please join the [discussion board](https://discuss.opencatalystproject.org/). All code-related questions and issues should be posted directly on our -[issues page](https://github.com/Open-Catalyst-Project/ocp/issues). -Make sure to first go through the [FAQ](https://github.com/Open-Catalyst-Project/ocp/tree/main/FAQ.md) -to check if your question's answered already. +[issues page](https://github.com/FAIR-Chem/fairchem/issues). ## Acknowledgements @@ -61,12 +63,14 @@ to check if your question's answered already. by [Tian Xie](http://txie.me), but has undergone significant changes since. - A lot of engineering ideas have been borrowed from [github.com/facebookresearch/mmf](https://github.com/facebookresearch/mmf). - The DimeNet++ implementation is based on the [author's Tensorflow implementation](https://github.com/klicperajo/dimenet) and the [DimeNet implementation in Pytorch Geometric](https://github.com/rusty1s/pytorch_geometric/blob/master/torch_geometric/nn/models/dimenet.py). +- It was then developed as the OCP repo, and includes many contributions from the community and collaborators. +- Much of the documentation was developed for various papers or as part of a comprehensive tutorial for the 2023 ACS Fall Chemistry conference. ## License -`ocp` is released under the [MIT](https://github.com/Open-Catalyst-Project/ocp/blob/main/LICENSE.md) license. +`fairchem` is released under the [MIT](https://github.com/FAIR-Chem/fairchem/blob/main/LICENSE.md) license. -## Citing `ocp` +## Citing `fairchem` If you use this codebase in your work, please consider citing: diff --git a/_sources/legacy_tutorials/OCP_Tutorial.md b/_sources/legacy_tutorials/OCP_Tutorial.md index 073898eef..defb0ca49 100644 --- a/_sources/legacy_tutorials/OCP_Tutorial.md +++ b/_sources/legacy_tutorials/OCP_Tutorial.md @@ -67,7 +67,7 @@ An important quantity in screening catalysts is their adsorption energy for the Specifically, during the course of a relaxation, given an initial set of atoms and their positions, the task is to iteratively estimate atomic forces and update atomic positions until a relaxed state is reached. The energy corresponding to the relaxed state is the structure's 'relaxed energy'. -As part of the [Open Catalyst Project](https://github.com/Open-Catalyst-Project/ocp) (OCP), we identify three key tasks ML models need to perform well on in +As part of the [Open Catalyst Project](https://github.com/FAIR-Chem/fairchem) (OCP), we identify three key tasks ML models need to perform well on in order to effectively approximate DFT -- 1) Given an **I**nitial **S**tructure, predict the **R**elaxed **E**nergy of the relaxed strucutre (**IS2RE**), @@ -102,7 +102,7 @@ Scalable and cost-effective solutions to renewable energy storage are essential An open challenge is finding low-cost catalysts to drive these reactions at high rates. Through the use of quantum mechanical simulations (Density Functional Theory, DFT), new catalyst structures can be tested and evaluated. Unfortunately, the high computational cost of these simulations limits the number of structures that may be tested. The use of AI or machine learning may provide a method to efficiently approximate these calculations; reducing the time required from 24} hours to a second. This capability would transform the search for new catalysts from the present day practice of evaluating O(1,000) of handpicked candidates to the brute force search over millions or even billions of candidates. -As part of OCP, we publicly released the world's largest quantum mechanical simulation dataset -- [OC20](https://github.com/Open-Catalyst-Project/ocp/blob/master/DATASET.md) -- in the Fall of 2020 along with a suite of baselines and evaluation metrics. The creation of the dataset required over 70 million hours of compute. This dataset enables the exploration of techniques that will generalize across different catalyst materials and adsorbates. If successful, models trained on the dataset could enable the computational testing of millions of catalyst materials for a wide variety of chemical reactions. However, techniques that achieve the accuracies required** for practical impact are still beyond reach and remain an open area for research, thus encouraging research in this important area to help in meeting the world's energy needs in the decades ahead. +As part of OCP, we publicly released the world's largest quantum mechanical simulation dataset -- [OC20](https://github.com/FAIR-Chem/fairchem/blob/master/DATASET.md) -- in the Fall of 2020 along with a suite of baselines and evaluation metrics. The creation of the dataset required over 70 million hours of compute. This dataset enables the exploration of techniques that will generalize across different catalyst materials and adsorbates. If successful, models trained on the dataset could enable the computational testing of millions of catalyst materials for a wide variety of chemical reactions. However, techniques that achieve the accuracies required** for practical impact are still beyond reach and remain an open area for research, thus encouraging research in this important area to help in meeting the world's energy needs in the decades ahead. ** The computational catalysis community often aims for an adsorption energy MAE of 0.1-0.2 eV for practical relevance. @@ -162,7 +162,7 @@ torch.cuda.is_available()
# Dataset Overview -The Open Catalyst 2020 Dataset (OC20) will be used throughout this tutorial. More details can be found [here](https://github.com/Open-Catalyst-Project/ocp/blob/master/DATASET.md) and the corresponding [paper](https://arxiv.org/abs/2010.09990). Data is stored in PyTorch Geometric [Data](https://pytorch-geometric.readthedocs.io/en/latest/modules/data.html) objects and stored in LMDB files. For each task we include several sized training splits. Validation/Test splits are broken into several subsplits: In Domain (ID), Out of Domain Adsorbate (OOD-Ads), Out of Domain Catalyast (OOD-Cat) and Out of Domain Adsorbate and Catalyst (OOD-Both). Split sizes are summarized below: +The Open Catalyst 2020 Dataset (OC20) will be used throughout this tutorial. More details can be found [here](https://github.com/FAIR-Chem/fairchem/blob/master/DATASET.md) and the corresponding [paper](https://arxiv.org/abs/2010.09990). Data is stored in PyTorch Geometric [Data](https://pytorch-geometric.readthedocs.io/en/latest/modules/data.html) objects and stored in LMDB files. For each task we include several sized training splits. Validation/Test splits are broken into several subsplits: In Domain (ID), Out of Domain Adsorbate (OOD-Ads), Out of Domain Catalyast (OOD-Cat) and Out of Domain Adsorbate and Catalyst (OOD-Both). Split sizes are summarized below: Train * S2EF - 200k, 2M, 20M, 134M(All) @@ -174,7 +174,7 @@ Val/Test #### **Tutorial Use** -For the sake of this tutorial we provide much smaller splits (100 train, 20 val for all tasks) to allow users to easily store, train, and predict across the various tasks. Please refer [here](https://github.com/Open-Catalyst-Project/ocp#download-data) for details on how to download the full datasets for general use. +For the sake of this tutorial we provide much smaller splits (100 train, 20 val for all tasks) to allow users to easily store, train, and predict across the various tasks. Please refer [here](https://github.com/FAIR-Chem/fairchem#download-data) for details on how to download the full datasets for general use. @@ -609,7 +609,7 @@ i_structure.get_forces(apply_constraint=True) ### Interacting with the OC20 datasets -The OC20 datasets are stored in LMDBs. Here we show how to interact with the datasets directly in order to better understand the data. We use [LmdbDataset](https://github.com/Open-Catalyst-Project/ocp/blob/main/ocpmodels/datasets/lmdb_dataset.py) to read in a directory of LMDB files or a single LMDB file. +The OC20 datasets are stored in LMDBs. Here we show how to interact with the datasets directly in order to better understand the data. We use [LmdbDataset](https://github.com/FAIR-Chem/fairchem/blob/main/ocpmodels/datasets/lmdb_dataset.py) to read in a directory of LMDB files or a single LMDB file. ```{code-cell} ipython3 --- @@ -784,7 +784,7 @@ stdev = np.std(energies) +++ {"id": "6R6IkYLCQPpH"} -For this example, we will explicitly define the config; however, a set of default configs can be found [here](https://github.com/Open-Catalyst-Project/ocp/tree/master/configs). Default config yaml files can easily be loaded with the following [utility](https://github.com/Open-Catalyst-Project/ocp/blob/aa8e44d50229fce887b3a94a5661c4f85cd73eed/ocpmodels/common/utils.py#L361-L400). Loading a yaml config is preferrable when launching jobs from the command line. We have included our best models' config files here for reference. +For this example, we will explicitly define the config; however, a set of default configs can be found [here](https://github.com/FAIR-Chem/fairchem/tree/master/configs). Default config yaml files can easily be loaded with the following [utility](https://github.com/FAIR-Chem/fairchem/blob/aa8e44d50229fce887b3a94a5661c4f85cd73eed/ocpmodels/common/utils.py#L361-L400). Loading a yaml config is preferrable when launching jobs from the command line. We have included our best models' config files here for reference. **Note** - we only train for a single epoch with a reduced batch size (GPU memory constraints) for demonstration purposes, modify accordingly for full convergence. @@ -1125,7 +1125,7 @@ stdev = np.std(energies) ### Define the Config -For this example, we will explicitly define the config; however, a set of default configs can be found [here](https://github.com/Open-Catalyst-Project/ocp/tree/master/configs). Default config yaml files can easily be loaded with the following [utility](https://github.com/Open-Catalyst-Project/ocp/blob/aa8e44d50229fce887b3a94a5661c4f85cd73eed/ocpmodels/common/utils.py#L361-L400). Loading a yaml config is preferrable when launching jobs from the command line. We have included our best models' config files here for reference. +For this example, we will explicitly define the config; however, a set of default configs can be found [here](https://github.com/FAIR-Chem/fairchem/tree/master/configs). Default config yaml files can easily be loaded with the following [utility](https://github.com/FAIR-Chem/fairchem/blob/aa8e44d50229fce887b3a94a5661c4f85cd73eed/ocpmodels/common/utils.py#L361-L400). Loading a yaml config is preferrable when launching jobs from the command line. We have included our best models' config files here for reference. **Note** - we only train for a single epoch with a reduced batch size (GPU memory constraints) for demonstration purposes, modify accordingly for full convergence. @@ -1417,7 +1417,7 @@ Running an iterative S2EF model for the IS2RS task can be run from any S2EF conf * *traj_dir* - If specified, directory to save out the full ML relaxation as an ASE trajectory. Useful for debugging or visualizing results. * *num_relaxation_batches* - If specified, relaxations will only be run for a subset of the relaxation dataset. Useful for debugging or wanting to visualize a few systems. -A sample relaxation config can be found [here](https://github.com/Open-Catalyst-Project/ocp/blob/1044e311182c1120c6e6d137ce6db3f445148973/configs/s2ef/2M/dimenet_plus_plus/dpp_relax.yml#L24-L33). +A sample relaxation config can be found [here](https://github.com/FAIR-Chem/fairchem/blob/1044e311182c1120c6e6d137ce6db3f445148973/configs/s2ef/2M/dimenet_plus_plus/dpp_relax.yml#L24-L33). ```{code-cell} ipython3 @@ -2018,7 +2018,7 @@ For those interested in using our pretrained models for other applications, we p ## Download pretrained checkpoint -We have released checkpoints of all the models on the leaderboard [here](https://github.com/Open-Catalyst-Project/ocp/blob/master/MODELS.md). These trained models can be used as an ASE calculator for various calculations. +We have released checkpoints of all the models on the leaderboard [here](https://github.com/FAIR-Chem/fairchem/blob/master/MODELS.md). These trained models can be used as an ASE calculator for various calculations. For this tutorial we download one of our earlier model checkpoints: GemNet-T @@ -2305,12 +2305,12 @@ db.close() The previous sections of this notebook are intended to demonstrate the inner workings of our codebase. For regular training, we suggest that you train and evaluate on command line. -1. Clone our repo at https://github.com/Open-Catalyst-Project/ocp and set up the environment according to the readme. +1. Clone our repo at https://github.com/FAIR-Chem/fairchem and set up the environment according to the readme. 2. Download relevant data ([see above for info](https://colab.research.google.com/drive/1oGZcrakB4Pbj8Xq74lSvcRDUHw9L-Dh5#scrollTo=jXoiLncsU3pe)). +++ {"id": "lAdwlMNOKwYj"} -3. In the config file, modify the path of the data [train](https://github.com/Open-Catalyst-Project/ocp/blob/master/configs/is2re/10k/base.yml#L4) [val](https://github.com/Open-Catalyst-Project/ocp/blob/master/configs/is2re/10k/base.yml#L8), [normalization parameters](https://github.com/Open-Catalyst-Project/ocp/blob/master/configs/is2re/10k/base.yml#L5-L7) as well as any other [model](https://github.com/Open-Catalyst-Project/ocp/blob/master/configs/is2re/10k/dimenet_plus_plus/dpp.yml#L4-L16) or [training](https://github.com/Open-Catalyst-Project/ocp/blob/master/configs/is2re/10k/dimenet_plus_plus/dpp.yml#L23-L35) args. +3. In the config file, modify the path of the data [train](https://github.com/FAIR-Chem/fairchem/blob/master/configs/is2re/10k/base.yml#L4) [val](https://github.com/FAIR-Chem/fairchem/blob/master/configs/is2re/10k/base.yml#L8), [normalization parameters](https://github.com/FAIR-Chem/fairchem/blob/master/configs/is2re/10k/base.yml#L5-L7) as well as any other [model](https://github.com/FAIR-Chem/fairchem/blob/master/configs/is2re/10k/dimenet_plus_plus/dpp.yml#L4-L16) or [training](https://github.com/FAIR-Chem/fairchem/blob/master/configs/is2re/10k/dimenet_plus_plus/dpp.yml#L23-L35) args. For a simple example, we'll train DimeNet++ on IS2RE demo data: \ a. Modify the train data path in `/contents/ocp/configs/is2re/10k/base.yml` in @@ -2336,7 +2336,7 @@ c. We can change the model parameters in `/contents/ocp/configs/is2re/10k/dimene `python main.py --mode predict --config-yml configs/is2re/10k/dimenet_plus_plus/dpp.yml --checkpoint checkpoints/[datetime]-dpp_is2re_sample/checkpoint.pt` 7. View energy predictions at `results/[datetime]/is2re_predictions.npz` -For more information on how to train and evaluate, see [this readme](https://github.com/Open-Catalyst-Project/ocp/blob/master/TRAIN.md). For checkpoints of publicly available trained models, see [MODELS.md](https://github.com/Open-Catalyst-Project/ocp/blob/master/MODELS.md). +For more information on how to train and evaluate, see [this readme](../core/model_training.md). For checkpoints of publicly available trained models, see [MODELS.md](../core/model_checkpoints.md). +++ {"id": "oHIjM6eMwlXY"} @@ -2369,7 +2369,7 @@ OC20 is a large and diverse dataset with many splits. For those with limited res # References -* Open Catalyst codebase: https://github.com/Open-Catalyst-Project/ocp/ +* Open Catalyst codebase: https://github.com/FAIR-Chem/fairchem/ * Open Catalyst webpage: https://opencatalystproject.org/ * [Electrocatalysis white paper](https://arxiv.org/pdf/2010.09435.pdf): C. Lawrence Zitnick, Lowik Chanussot, Abhishek Das, Siddharth Goyal, Javier Heras-Domingo, Caleb Ho, Weihua Hu, Thibaut Lavril, Aini Palizhati, Morgane Riviere, Muhammed Shuaibi, Anuroop Sriram, Kevin Tran, Brandon Wood, Junwoong Yoon, Devi Parikh, Zachary Ulissi: “An Introduction to Electrocatalyst Design using Machine Learning for Renewable Energy Storage”, 2020; arXiv:2010.09435. * [OC20 dataset paper](https://arxiv.org/pdf/2010.09990.pdf): L. Chanussot, A. Das, S. Goyal, T. Lavril, M. Shuaibi, M. Riviere, K. Tran, J. Heras-Domingo, C. Ho, W. Hu, A. Palizhati, A. Sriram, B. Wood, J. Yoon, D. Parikh, C. L. Zitnick, and Z. Ulissi. The Open Catalyst 2020 (oc20) dataset and community challenges. ACS Catalysis, 2021. diff --git a/_sources/tutorials/NRR/NRR_example.md b/_sources/tutorials/NRR/NRR_example.md index aa5618f54..fb3b566ee 100644 --- a/_sources/tutorials/NRR/NRR_example.md +++ b/_sources/tutorials/NRR/NRR_example.md @@ -39,7 +39,7 @@ from fairchem.data.oc.utils import DetectTrajAnomaly ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('EquiformerV2 (31M) All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') checkpoint_path ``` diff --git a/_sources/tutorials/OCP-introduction.md b/_sources/tutorials/OCP-introduction.md index 5ed80dcc8..4bf827fac 100644 --- a/_sources/tutorials/OCP-introduction.md +++ b/_sources/tutorials/OCP-introduction.md @@ -60,7 +60,7 @@ The different models have different compute requirements. If you find your kerne ```{code-cell} from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('EquiformerV2 (31M) All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') ``` Next we load the checkpoint. The output is somewhat verbose, but it can be informative for debugging purposes. diff --git a/_sources/tutorials/adsorbml_walkthrough.md b/_sources/tutorials/adsorbml_walkthrough.md index eedbc11bd..ecad65883 100644 --- a/_sources/tutorials/adsorbml_walkthrough.md +++ b/_sources/tutorials/adsorbml_walkthrough.md @@ -66,7 +66,7 @@ There are 2 options for how to do this. 1. Using `OCPCalculator` as the calculator within the ASE framework 2. By writing objects to lmdb and relaxing them using `main.py` in the ocp repo -(1) is really only adequate for small stuff and it is what I will show here, but if you plan to run many relaxations, you should definitely use (2). More details about writing lmdbs has been provided [here](https://github.com/Open-Catalyst-Project/ocp/blob/main/tutorials/lmdb_dataset_creation.ipynb) - follow the IS2RS/IS2RE instructions. And more information about running relaxations once the lmdb has been written is [here](https://github.com/Open-Catalyst-Project/ocp/blob/main/TRAIN.md#initial-structure-to-relaxed-structure-is2rs). +(1) is really only adequate for small stuff and it is what I will show here, but if you plan to run many relaxations, you should definitely use (2). More details about writing lmdbs has been provided [here](../core/lmdb_dataset_creation.md) - follow the IS2RS/IS2RE instructions. And more information about running relaxations once the lmdb has been written is [here](../core/model_training.md). You need to provide the calculator with a path to a model checkpoint file. That can be downloaded [here](https://github.com/Open-Catalyst-Project/ocp/blob/main/MODELS.md) @@ -75,7 +75,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('EquiformerV2 (31M) All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') os.makedirs(f"data/{bulk}_{adsorbate}", exist_ok=True) diff --git a/_sources/tutorials/advanced/embeddings.md b/_sources/tutorials/advanced/embeddings.md index 249379ec0..af725c266 100644 --- a/_sources/tutorials/advanced/embeddings.md +++ b/_sources/tutorials/advanced/embeddings.md @@ -58,7 +58,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('GemNet-OCOC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` diff --git a/_sources/tutorials/advanced/fine-tuning-in-python.md b/_sources/tutorials/advanced/fine-tuning-in-python.md index f3d06fffc..41c0055a5 100644 --- a/_sources/tutorials/advanced/fine-tuning-in-python.md +++ b/_sources/tutorials/advanced/fine-tuning-in-python.md @@ -51,7 +51,7 @@ root.addHandler(handler_err) ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OCOC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') from fairchem.core.common.relaxation.ase_utils import OCPCalculator calc = OCPCalculator(checkpoint_path=checkpoint_path, trainer='forces', cpu=False) ``` diff --git a/_sources/tutorials/cattsunami_walkthrough.md b/_sources/tutorials/cattsunami_walkthrough.md index 867f197c2..767eab35a 100644 --- a/_sources/tutorials/cattsunami_walkthrough.md +++ b/_sources/tutorials/cattsunami_walkthrough.md @@ -71,7 +71,7 @@ product2_configs = AdsorbateSlabConfig(slab = slab[0], adsorbate = product2, # Instantiate the calculator # NOTE: If you have a GPU, use cpu = False # NOTE: Change the checkpoint path to locally downloaded files as needed -checkpoint_path = model_name_to_local_file('EquiformerV2 (31M) All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') cpu = True calc = OCPCalculator(checkpoint_path = CHECKPOINT_PATH, cpu = cpu) ``` diff --git a/_sources/tutorials/intro.md b/_sources/tutorials/intro.md index 009fc7bb5..6f48efffd 100644 --- a/_sources/tutorials/intro.md +++ b/_sources/tutorials/intro.md @@ -68,7 +68,7 @@ You can get a checkpoint file with one of the keys listed above like this. The r ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OCOC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') checkpoint_path ``` diff --git a/autoapi/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.html b/autoapi/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.html deleted file mode 100644 index 6c7bf1123..000000000 --- a/autoapi/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.html +++ /dev/null @@ -1,816 +0,0 @@ - - - - - - - - - - - applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval

- -
- -
-
- - - - -
- -
-

applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - -

is_successful(best_pred_energy, best_dft_energy[, ...])

Computes the success rate given the best predicted energy

compute_valid_ml_success(ml_data, dft_data)

Computes validated ML success rates.

get_dft_data(targets)

Organizes the released target mapping for evaluation lookup.

process_ml_data(results_file, model, metadata, ...)

For ML systems in which no configurations made it through the physical

parse_args()

main()

This script takes in your prediction file (npz format)

-
-
-applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.is_successful(best_pred_energy, best_dft_energy, SUCCESS_THRESHOLD=0.1)#
-

Computes the success rate given the best predicted energy -and the best ground truth DFT energy.

-

success_parity: The standard definition for success, where ML needs to be -within the SUCCESS_THRESHOLD, or lower, of the DFT energy.

-

Returns: Bool

-
- -
-
-applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.compute_valid_ml_success(ml_data, dft_data)#
-

Computes validated ML success rates. -Here, results are generated only from ML. DFT single-points are used to -validate whether the ML energy is within 0.1eV of the DFT energy of the -predicted structure. If valid, the ML energy is compared to the ground -truth DFT energy, otherwise it is discarded.

-

Return validated ML success rates.

-
- -
-
-applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.get_dft_data(targets)#
-

Organizes the released target mapping for evaluation lookup.

-
-
Returns: Dict:
-
{

‘system_id 1’: {‘config_id 1’: dft_ads_energy, ‘config_id 2’: dft_ads_energy}, -‘system_id 2’: {‘config_id 1’: dft_ads_energy, ‘config_id 2’: dft_ads_energy}, -…

-
-
-

}

-
-
-
- -
-
-applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.process_ml_data(results_file, model, metadata, ml_dft_targets, dft_data)#
-

For ML systems in which no configurations made it through the physical -constraint checks, set energies to an arbitrarily high value to ensure -a failure case in evaluation.

-
-
Returns: Dict:
-
{

‘system_id 1’: {‘config_id 1’: {‘ml_energy’: predicted energy, ‘ml+dft_energy’: dft energy of ML structure} …}, -‘system_id 2’: {‘config_id 1’: {‘ml_energy’: predicted energy, ‘ml+dft_energy’: dft energy of ML structure} …}, -…

-
-
-

}

-
-
-
- -
-
-applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.parse_args()#
-
- -
-
-applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.main()#
-

This script takes in your prediction file (npz format) -and the ML model name used for ML relaxations. -Then using a mapping file, dft ground truth energy, -and ML relaxed dft energy returns the success rate of your predictions.

-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/applications/AdsorbML/adsorbml/scripts/dense_eval/index.html b/autoapi/applications/AdsorbML/adsorbml/scripts/dense_eval/index.html deleted file mode 100644 index 18369cc82..000000000 --- a/autoapi/applications/AdsorbML/adsorbml/scripts/dense_eval/index.html +++ /dev/null @@ -1,917 +0,0 @@ - - - - - - - - - - - applications.AdsorbML.adsorbml.scripts.dense_eval — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

applications.AdsorbML.adsorbml.scripts.dense_eval

- -
- -
-
- - - - -
- -
-

applications.AdsorbML.adsorbml.scripts.dense_eval#

-

AdsorbML evaluation script. This script expects the results-file to be -organized in a very specific structure in order to evaluate successfully.

-

Results are to be saved out in a dictionary pickle file, where keys are the -system_id and the values are energies and compute information for a -specified config_id. For each config_id that successfully passes the -physical constraints defined in the manuscript, the following information must -be provided:

-
-

ml_energy: The ML predicted adsorption energy on that particular config_id.

-

ml+dft_energy: The DFT adsorption energy (SP or RX) as evaluated on -the predicted ML config_id structure. Do note use raw DFT energies, -ensure these are referenced correctly. None if not available.

-

scf_steps: Total number of SCF steps involved in determining the DFT -adsorption energy on the predicted ML config_id. For relaxation -methods (ML+RX), sum all SCF steps across all frames. 0 if not -available.

-

ionic_steps: Total number of ionic steps in determining the DFT -adsorption energy on the predicted ML config_id. This will be 1 for -single-point methods (ML+SP). 0 if not available.

-
-

NOTE - It is possible that due to the required filtering of physical -constraints, no configurations are valid for a particular system_id. In -this case the system or config id can be excluded entirely from the -results file and will be treated as a failure point at evaluation time.

-
-
e.g.
-
{
-
“6_1134_23”:
-
{
-
“rand11”: {

“ml_energy”: -1.234, -“ml+dft_energy”: -1.456, -“scf_steps”: 33, -“ionic_steps”: 1,

-
-
-

}, -“rand5”: {

-
-

“ml_energy”: -2.489, -“ml+dft_energy”: -2.109, -“scf_steps”: 16, -“ionic_steps”: 1,

-
-

}, -. -. -.

-
-
-

},

-
-
“7_6566_62” :
-
{
-
“rand79”: {

“ml_energy”: -1.234, -“ml+dft_energy”: -1.456, -“scf_steps”: 33, -“ionic_steps”: 1,

-
-
-

}, -. -. -.

-
-
-

},

-
-
-

.

-
-
-

}

-
-
-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - -

is_successful(best_ml_dft_energy, best_dft_energy)

Computes the success rate given the best ML+DFT energy and the best ground

compute_hybrid_success(ml_data, dft_data, k)

Computes AdsorbML success rates at varying top-k values.

compute_valid_ml_success(ml_data, dft_data)

Computes validated ML success rates.

get_dft_data(targets)

Organizes the released target mapping for evaluation lookup.

get_dft_compute(counts)

Calculates the total DFT compute associated with establishing a ground

filter_ml_data(ml_data, dft_data)

For ML systems in which no configurations made it through the physical

-
-
-

Attributes#

- - - - - - - - - -

SUCCESS_THRESHOLD

parser

-
-
-applications.AdsorbML.adsorbml.scripts.dense_eval.SUCCESS_THRESHOLD = 0.1#
-
- -
-
-applications.AdsorbML.adsorbml.scripts.dense_eval.is_successful(best_ml_dft_energy, best_dft_energy)#
-

Computes the success rate given the best ML+DFT energy and the best ground -truth DFT energy.

-

success_parity: The standard definition for success, where ML needs to be -within the SUCCESS_THRESHOLD, or lower, of the DFT energy.

-

success_much_better: A system in which the ML energy is predicted to be -much lower (less than the SUCCESS_THRESHOLD) of the DFT energy.

-
- -
-
-applications.AdsorbML.adsorbml.scripts.dense_eval.compute_hybrid_success(ml_data, dft_data, k)#
-

Computes AdsorbML success rates at varying top-k values. -Here, results are generated for the hybrid method, where the top-k ML -energies are used to to run DFT on the corresponding ML structures. The -resulting energies are then compared to the ground truth DFT energies.

-

Return success rates and DFT compute usage at varying k.

-
- -
-
-applications.AdsorbML.adsorbml.scripts.dense_eval.compute_valid_ml_success(ml_data, dft_data)#
-

Computes validated ML success rates. -Here, results are generated only from ML. DFT single-points are used to -validate whether the ML energy is within 0.1eV of the DFT energy of the -predicted structure. If valid, the ML energy is compared to the ground -truth DFT energy, otherwise it is discarded.

-

Return validated ML success rates.

-
- -
-
-applications.AdsorbML.adsorbml.scripts.dense_eval.get_dft_data(targets)#
-

Organizes the released target mapping for evaluation lookup.

-
-
oc20dense_targets.pkl:

[‘system_id 1’: [(‘config_id 1’, dft_adsorption_energy), (‘config_id 2’, dft_adsorption_energy)], `system_id 2]

-
-
Returns: Dict:
-
{

‘system_id 1’: {‘config_id 1’: dft_ads_energy, ‘config_id 2’: dft_ads_energy}, -‘system_id 2’: {‘config_id 1’: dft_ads_energy, ‘config_id 2’: dft_ads_energy}, -…

-
-
-

}

-
-
-
- -
-
-applications.AdsorbML.adsorbml.scripts.dense_eval.get_dft_compute(counts)#
-

Calculates the total DFT compute associated with establishing a ground -truth using the released DFT timings: oc20dense_compute.pkl.

-

Compute is measured in the total number of self-consistent steps (SC). The -total number of ionic steps is also included for reference.

-
- -
-
-applications.AdsorbML.adsorbml.scripts.dense_eval.filter_ml_data(ml_data, dft_data)#
-

For ML systems in which no configurations made it through the physical -constraint checks, set energies to an arbitrarily high value to ensure -a failure case in evaluation.

-
- -
-
-applications.AdsorbML.adsorbml.scripts.dense_eval.parser#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.html b/autoapi/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.html deleted file mode 100644 index 123c01e44..000000000 --- a/autoapi/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.html +++ /dev/null @@ -1,806 +0,0 @@ - - - - - - - - - - - applications.AdsorbML.adsorbml.scripts.process_mlrs — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

applications.AdsorbML.adsorbml.scripts.process_mlrs

- -
- -
-
- - - - -
- -
-

applications.AdsorbML.adsorbml.scripts.process_mlrs#

-

This script processes ML relaxations and sets it up for the next step. -- Reads final energy and structure for each relaxation -- Filters out anomalies -- Groups together all configurations for one adsorbate-surface system -- Sorts configs by lowest energy first

-

The following files are saved out: -- cache_sorted_byE.pkl: dict going from the system ID (bulk, surface, adsorbate)

-
-

to a list of configs and their relaxed structures, sorted by lowest energy first. -This is later used by write_top_k_vasp.py.

-
-
    -
  • -
    anomalies_by_sid.pkl: dict going from integer sid to boolean representing

    whether it was an anomaly. Anomalies are already excluded from cache_sorted_byE.pkl -and this file is only used for extra analyses.

    -
    -
    -
  • -
  • errors_by_sid.pkl: any errors that occurred

  • -
-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - -

parse_args()

min_diff(atoms_init, atoms_final)

process_mlrs(arg)

-
-
-

Attributes#

- - - - - - - - - - - - -

SURFACE_CHANGE_CUTOFF_MULTIPLIER

DESORPTION_CUTOFF_MULTIPLIER

args

-
-
-applications.AdsorbML.adsorbml.scripts.process_mlrs.SURFACE_CHANGE_CUTOFF_MULTIPLIER = 1.5#
-
- -
-
-applications.AdsorbML.adsorbml.scripts.process_mlrs.DESORPTION_CUTOFF_MULTIPLIER = 1.5#
-
- -
-
-applications.AdsorbML.adsorbml.scripts.process_mlrs.parse_args()#
-
- -
-
-applications.AdsorbML.adsorbml.scripts.process_mlrs.min_diff(atoms_init, atoms_final)#
-
- -
-
-applications.AdsorbML.adsorbml.scripts.process_mlrs.process_mlrs(arg)#
-
- -
-
-applications.AdsorbML.adsorbml.scripts.process_mlrs.args#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/applications/CatTSunami/ocpneb/core/ocpneb/index.html b/autoapi/applications/CatTSunami/ocpneb/core/ocpneb/index.html deleted file mode 100644 index 4416761b3..000000000 --- a/autoapi/applications/CatTSunami/ocpneb/core/ocpneb/index.html +++ /dev/null @@ -1,766 +0,0 @@ - - - - - - - - - - - applications.CatTSunami.ocpneb.core.ocpneb — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

applications.CatTSunami.ocpneb.core.ocpneb

- -
- -
-
- - - - -
- -
-

applications.CatTSunami.ocpneb.core.ocpneb#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

OCPNEB

-
-
-class applications.CatTSunami.ocpneb.core.ocpneb.OCPNEB(images, checkpoint_path, k=0.1, fmax=0.05, climb=False, parallel=False, remove_rotation_and_translation=False, world=None, dynamic_relaxation=True, scale_fmax=0.0, method='aseneb', allow_shared_calculator=False, precon=None, cpu=False, batch_size=4)#
-

Bases: ase.neb.DyNEB

-
-
-load_checkpoint(checkpoint_path: str) None#
-

Load existing trained model

-
-
Parameters:
-

checkpoint_path – string -Path to trained model

-
-
-
- -
-
-get_forces()#
-

Evaluate and return the forces.

-
- -
-
-set_positions(positions)#
-
- -
-
-get_precon_forces(forces, energies, images)#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/applications/CatTSunami/ocpneb/databases/index.html b/autoapi/applications/CatTSunami/ocpneb/databases/index.html deleted file mode 100644 index 43ff5a71f..000000000 --- a/autoapi/applications/CatTSunami/ocpneb/databases/index.html +++ /dev/null @@ -1,725 +0,0 @@ - - - - - - - - - - - applications.CatTSunami.ocpneb.databases — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

applications.CatTSunami.ocpneb.databases

- -
- -
-
- - - - -
- -
-

applications.CatTSunami.ocpneb.databases#

-
-

Package Contents#

-
-
-applications.CatTSunami.ocpneb.databases.DISSOCIATION_REACTION_DB_PATH#
-
- -
-
-applications.CatTSunami.ocpneb.databases.DESORPTION_REACTION_DB_PATH#
-
- -
-
-applications.CatTSunami.ocpneb.databases.TRANSFER_REACTION_DB_PATH#
-
- -
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/applications/CatTSunami/ocpneb/run_validation/run_validation/index.html b/autoapi/applications/CatTSunami/ocpneb/run_validation/run_validation/index.html deleted file mode 100644 index e8efa5dce..000000000 --- a/autoapi/applications/CatTSunami/ocpneb/run_validation/run_validation/index.html +++ /dev/null @@ -1,961 +0,0 @@ - - - - - - - - - - - applications.CatTSunami.ocpneb.run_validation.run_validation — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

applications.CatTSunami.ocpneb.run_validation.run_validation

- -
- -
-
- - - - -
- -
-

applications.CatTSunami.ocpneb.run_validation.run_validation#

-

A python script to run a validation of the ML NEB model on a set of NEB calculations. -This script has not been written to run in parallel, but should be modified to do so.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

get_results_sp(df2)

Get the % success and % convergence for the model considered with

get_results_ml(df2)

Get the % success and % convergence for the model considered with

all_converged(row[, ml])

Dataframe function which makes the job of filtering to get % success cleaner.

both_barrierless(row)

Dataframe function which makes the job of filtering to get % success cleaner.

both_barriered(row)

Dataframe function which makes the job of filtering to get % success cleaner.

barrierless_converged(row)

Dataframe function which makes the job of filtering to get % success cleaner.

is_failed_sp(row)

Dataframe function which makes the job of filtering to get % success cleaner.

parse_neb_info(neb_frames, calc, conv, entry)

At the conclusion of the ML NEB, this function processes the important

get_single_point(atoms, vasp_dir, vasp_flags, vasp_command)

Gets a single point on the atoms passed.

-
-
-

Attributes#

- - - - - - -

parser

-
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.get_results_sp(df2: pandas.DataFrame)#
-

Get the % success and % convergence for the model considered with -single points performed on the transition states.

-
-
Parameters:
-

df2 (pd.DataFrame) – The dataframe containing the results of the -NEB calculations.

-
-
Returns:
-

-
a tuple of strings containing the % success and

% convergence

-
-
-

-
-
Return type:
-

(tuple[str])

-
-
-
- -
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.get_results_ml(df2)#
-

Get the % success and % convergence for the model considered with -just ML energy and force calls.

-
-
Parameters:
-

df2 (pd.DataFrame) – The dataframe containing the results of the -NEB calculations.

-
-
Returns:
-

-
a tuple of strings containing the % success and

% convergence

-
-
-

-
-
Return type:
-

(tuple[str])

-
-
-
- -
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.all_converged(row, ml=True)#
-

Dataframe function which makes the job of filtering to get % success cleaner. -It assesses the convergence.

-
-
Parameters:
-
    -
  • row – the dataframe row which the function is applied to

  • -
  • ml – boolean value. If True just the ML NEB and DFT NEB convergence are -considered. If False, the single point convergence is also considered.

  • -
-
-
Returns:
-

whether the system is converged

-
-
Return type:
-

bool

-
-
-
- -
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.both_barrierless(row)#
-

Dataframe function which makes the job of filtering to get % success cleaner. -It assesses if both DFT and ML find a barrierless transition state.

-
-
Parameters:
-

row – the dataframe row which the function is applied to

-
-
Returns:
-

True if both ML and DFT find a barrierless transition state, False otherwise

-
-
Return type:
-

bool

-
-
-
- -
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.both_barriered(row)#
-

Dataframe function which makes the job of filtering to get % success cleaner. -It assesses if both DFT and ML find a barriered transition state.

-
-
Parameters:
-

row – the dataframe row which the function is applied to

-
-
Returns:
-

True if both ML and DFT find a barriered transition state, False otherwise

-
-
Return type:
-

bool

-
-
-
- -
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.barrierless_converged(row)#
-

Dataframe function which makes the job of filtering to get % success cleaner. -It assesses if both DFT and ML find a barrierless, converged transition state.

-
-
Parameters:
-

row – the dataframe row which the function is applied to

-
-
Returns:
-

-
True if both ML and DFT find a barrierless converged transition state,

False otherwise

-
-
-

-
-
Return type:
-

bool

-
-
-
- -
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.is_failed_sp(row)#
-

Dataframe function which makes the job of filtering to get % success cleaner. -It assesses if the single point failed.

-
-
Parameters:
-

row – the dataframe row which the function is applied to

-
-
Returns:
-

True if ths single point failed, otherwise False

-
-
Return type:
-

bool

-
-
-
- -
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.parse_neb_info(neb_frames: list, calc, conv: bool, entry: dict)#
-

At the conclusion of the ML NEB, this function processes the important -results and adds them to the entry dictionary.

-
-
Parameters:
-
    -
  • neb_frames (list[ase.Atoms]) – the ML relaxed NEB frames

  • -
  • calc – the ocp ase Atoms calculator

  • -
  • conv (bool) – whether or not the NEB achieved forces below the threshold within -the number of allowed steps

  • -
  • entry (dict) – the entry corresponding to the NEB performed

  • -
-
-
-
- -
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.get_single_point(atoms: ase.Atoms, vasp_dir: str, vasp_flags: dict, vasp_command: str)#
-

Gets a single point on the atoms passed.

-
-
Parameters:
-
    -
  • atoms (ase.Atoms) – the atoms object on which the single point will be performed

  • -
  • vasp_dir (str) – the path where the vasp files should be written

  • -
  • vasp_flags – a dictionary of the vasp INCAR flags

  • -
  • vasp_command (str) – the

  • -
-
-
-
- -
-
-applications.CatTSunami.ocpneb.run_validation.run_validation.parser#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/_cli/index.html b/autoapi/core/_cli/index.html deleted file mode 100644 index b66833dee..000000000 --- a/autoapi/core/_cli/index.html +++ /dev/null @@ -1,798 +0,0 @@ - - - - - - - - - - - core._cli — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core._cli

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core._cli#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

Runner

Derived callable classes are requeued after timeout with their current

-
-
-

Functions#

- - - - - - -

main()

Run the main ocp-models program.

-
-
-class core._cli.Runner(distributed: bool = False)#
-

Bases: submitit.helpers.Checkpointable

-

Derived callable classes are requeued after timeout with their current -state dumped at checkpoint.

-

__call__ method must be implemented to make your class a callable.

-
-

Note

-

The following implementation of the checkpoint method resubmits the full current -state of the callable (self) with the initial argument. You may want to replace the method to -curate the state (dump a neural network to a standard format and remove it from -the state so that not to pickle it) and change/remove the initial parameters.

-
-
-
-__call__(config: dict) None#
-
- -
-
-checkpoint(*args, **kwargs)#
-

Resubmits the same callable with the same arguments

-
- -
- -
-
-core._cli.main()#
-

Run the main ocp-models program.

-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/data_parallel/index.html b/autoapi/core/common/data_parallel/index.html deleted file mode 100644 index 0fbef98a9..000000000 --- a/autoapi/core/common/data_parallel/index.html +++ /dev/null @@ -1,951 +0,0 @@ - - - - - - - - - - - core.common.data_parallel — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.common.data_parallel#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

OCPCollater

_HasMetadata

Base class for protocol classes.

StatefulDistributedSampler

More fine-grained state DataSampler that uses training iteration and epoch

BalancedBatchSampler

Base class for all Samplers.

-
-
-

Functions#

- - - - - - -

balanced_partition(sizes, num_parts)

Greedily partition the given set by always inserting

-
-
-class core.common.data_parallel.OCPCollater(otf_graph: bool = False)#
-
-
-__call__(data_list: list[torch_geometric.data.Data]) torch_geometric.data.Batch#
-
- -
- -
-
-core.common.data_parallel.balanced_partition(sizes: numpy.typing.NDArray[numpy.int_], num_parts: int)#
-

Greedily partition the given set by always inserting -the largest element into the smallest partition.

-
- -
-
-class core.common.data_parallel._HasMetadata#
-

Bases: Protocol

-

Base class for protocol classes.

-

Protocol classes are defined as:

-
class Proto(Protocol):
-    def meth(self) -> int:
-        ...
-
-
-

Such classes are primarily used with static type checkers that recognize -structural subtyping (static duck-typing).

-

For example:

-
class C:
-    def meth(self) -> int:
-        return 0
-
-def func(x: Proto) -> int:
-    return x.meth()
-
-func(C())  # Passes static type check
-
-
-

See PEP 544 for details. Protocol classes decorated with -@typing.runtime_checkable act as simple-minded runtime protocols that check -only the presence of given attributes, ignoring their type signatures. -Protocol classes can be generic, they are defined as:

-
class GenProto(Protocol[T]):
-    def meth(self) -> T:
-        ...
-
-
-
-
-property metadata_path: pathlib.Path#
-
- -
- -
-
-class core.common.data_parallel.StatefulDistributedSampler(dataset, batch_size, **kwargs)#
-

Bases: torch.utils.data.DistributedSampler

-

More fine-grained state DataSampler that uses training iteration and epoch -both for shuffling data. PyTorch DistributedSampler only uses epoch -for the shuffling and starts sampling data from the start. In case of training -on very large data, we train for one epoch only and when we resume training, -we want to resume the data sampler from the training iteration.

-
-
-__iter__()#
-
- -
-
-set_epoch_and_start_iteration(epoch, start_iter)#
-
- -
- -
-
-class core.common.data_parallel.BalancedBatchSampler(dataset, batch_size: int, num_replicas: int, rank: int, device: torch.device, mode: str | bool = 'atoms', shuffle: bool = True, drop_last: bool = False, force_balancing: bool = False, throw_on_error: bool = False)#
-

Bases: torch.utils.data.Sampler

-

Base class for all Samplers.

-

Every Sampler subclass has to provide an __iter__() method, providing a -way to iterate over indices or lists of indices (batches) of dataset elements, and a __len__() method -that returns the length of the returned iterators.

-
-
Parameters:
-

data_source (Dataset) – This argument is not used and will be removed in 2.2.0. -You may still have custom implementation that utilizes it.

-
-
-

Example

-
>>> # xdoctest: +SKIP
->>> class AccedingSequenceLengthSampler(Sampler[int]):
->>>     def __init__(self, data: List[str]) -> None:
->>>         self.data = data
->>>
->>>     def __len__(self) -> int:
->>>         return len(self.data)
->>>
->>>     def __iter__(self) -> Iterator[int]:
->>>         sizes = torch.tensor([len(x) for x in self.data])
->>>         yield from torch.argsort(sizes).tolist()
->>>
->>> class AccedingSequenceLengthBatchSampler(Sampler[List[int]]):
->>>     def __init__(self, data: List[str], batch_size: int) -> None:
->>>         self.data = data
->>>         self.batch_size = batch_size
->>>
->>>     def __len__(self) -> int:
->>>         return (len(self.data) + self.batch_size - 1) // self.batch_size
->>>
->>>     def __iter__(self) -> Iterator[List[int]]:
->>>         sizes = torch.tensor([len(x) for x in self.data])
->>>         for batch in torch.chunk(torch.argsort(sizes), len(self)):
->>>             yield batch.tolist()
-
-
-
-

Note

-

The __len__() method isn’t strictly required by -DataLoader, but is expected in any -calculation involving the length of a DataLoader.

-
-
-
-_load_dataset(dataset, mode: Literal[atoms, neighbors])#
-
- -
-
-__len__() int#
-
- -
-
-set_epoch_and_start_iteration(epoch: int, start_iteration: int) None#
-
- -
-
-__iter__()#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/distutils/index.html b/autoapi/core/common/distutils/index.html deleted file mode 100644 index b27d96bfc..000000000 --- a/autoapi/core/common/distutils/index.html +++ /dev/null @@ -1,878 +0,0 @@ - - - - - - - - - - - core.common.distutils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.common.distutils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

os_environ_get_or_throw(→ str)

setup(→ None)

cleanup(→ None)

initialized(→ bool)

get_rank(→ int)

get_world_size(→ int)

is_master(→ bool)

synchronize(→ None)

broadcast(→ None)

all_reduce(→ torch.Tensor)

all_gather(→ list[torch.Tensor])

gather_objects(→ list[T])

Gather a list of pickleable objects into rank 0

-
-
-

Attributes#

- - - - - - -

T

-
-
-core.common.distutils.T#
-
- -
-
-core.common.distutils.os_environ_get_or_throw(x: str) str#
-
- -
-
-core.common.distutils.setup(config) None#
-
- -
-
-core.common.distutils.cleanup() None#
-
- -
-
-core.common.distutils.initialized() bool#
-
- -
-
-core.common.distutils.get_rank() int#
-
- -
-
-core.common.distutils.get_world_size() int#
-
- -
-
-core.common.distutils.is_master() bool#
-
- -
-
-core.common.distutils.synchronize() None#
-
- -
-
-core.common.distutils.broadcast(tensor: torch.Tensor, src, group=dist.group.WORLD, async_op: bool = False) None#
-
- -
-
-core.common.distutils.all_reduce(data, group=dist.group.WORLD, average: bool = False, device=None) torch.Tensor#
-
- -
-
-core.common.distutils.all_gather(data, group=dist.group.WORLD, device=None) list[torch.Tensor]#
-
- -
-
-core.common.distutils.gather_objects(data: T, group: torch.distributed.ProcessGroup = dist.group.WORLD) list[T]#
-

Gather a list of pickleable objects into rank 0

-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/flags/index.html b/autoapi/core/common/flags/index.html deleted file mode 100644 index 0697f4f44..000000000 --- a/autoapi/core/common/flags/index.html +++ /dev/null @@ -1,785 +0,0 @@ - - - - - - - - - - - core.common.flags — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.common.flags

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.common.flags#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

Flags

-
-
-

Attributes#

- - - - - - -

flags

-
-
-class core.common.flags.Flags#
-
-
-get_parser() argparse.ArgumentParser#
-
- -
-
-add_core_args() None#
-
- -
- -
-
-core.common.flags.flags#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/gp_utils/index.html b/autoapi/core/common/gp_utils/index.html deleted file mode 100644 index 97c6487c7..000000000 --- a/autoapi/core/common/gp_utils/index.html +++ /dev/null @@ -1,1448 +0,0 @@ - - - - - - - - - - - core.common.gp_utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.common.gp_utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

CopyToModelParallelRegion

Base class to create custom autograd.Function.

ReduceFromModelParallelRegion

Base class to create custom autograd.Function.

ScatterToModelParallelRegion

Base class to create custom autograd.Function.

GatherFromModelParallelRegion

Base class to create custom autograd.Function.

-
-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ensure_div(→ None)

divide_and_check_no_remainder(→ int)

setup_gp(→ None)

cleanup_gp(→ None)

initialized(→ bool)

get_dp_group()

get_gp_group()

get_dp_rank(→ int)

get_gp_rank(→ int)

get_dp_world_size(→ int)

get_gp_world_size(→ int)

pad_tensor(→ torch.Tensor)

trim_tensor(tensor[, sizes, dim])

_split_tensor(tensor, num_parts[, dim, contiguous_chunks])

_reduce(→ torch.Tensor)

_split(→ torch.Tensor)

_gather(→ torch.Tensor)

_gather_with_padding(→ torch.Tensor)

copy_to_model_parallel_region(→ torch.Tensor)

reduce_from_model_parallel_region(→ torch.Tensor)

scatter_to_model_parallel_region(→ torch.Tensor)

gather_from_model_parallel_region(→ torch.Tensor)

-
-
-

Attributes#

- - - - - - - - - -

_GRAPH_PARALLEL_GROUP

_DATA_PARALLEL_GROUP

-
-
-core.common.gp_utils._GRAPH_PARALLEL_GROUP#
-
- -
-
-core.common.gp_utils._DATA_PARALLEL_GROUP#
-
- -
-
-core.common.gp_utils.ensure_div(a: int, b: int) None#
-
- -
-
-core.common.gp_utils.divide_and_check_no_remainder(a: int, b: int) int#
-
- -
-
-core.common.gp_utils.setup_gp(config) None#
-
- -
-
-core.common.gp_utils.cleanup_gp() None#
-
- -
-
-core.common.gp_utils.initialized() bool#
-
- -
-
-core.common.gp_utils.get_dp_group()#
-
- -
-
-core.common.gp_utils.get_gp_group()#
-
- -
-
-core.common.gp_utils.get_dp_rank() int#
-
- -
-
-core.common.gp_utils.get_gp_rank() int#
-
- -
-
-core.common.gp_utils.get_dp_world_size() int#
-
- -
-
-core.common.gp_utils.get_gp_world_size() int#
-
- -
-
-core.common.gp_utils.pad_tensor(tensor: torch.Tensor, dim: int = -1, target_size: int | None = None) torch.Tensor#
-
- -
-
-core.common.gp_utils.trim_tensor(tensor: torch.Tensor, sizes: torch.Tensor | None = None, dim: int = 0)#
-
- -
-
-core.common.gp_utils._split_tensor(tensor: torch.Tensor, num_parts: int, dim: int = -1, contiguous_chunks: bool = False)#
-
- -
-
-core.common.gp_utils._reduce(ctx: Any, input: torch.Tensor) torch.Tensor#
-
- -
-
-core.common.gp_utils._split(input: torch.Tensor, dim: int = -1) torch.Tensor#
-
- -
-
-core.common.gp_utils._gather(input: torch.Tensor, dim: int = -1) torch.Tensor#
-
- -
-
-core.common.gp_utils._gather_with_padding(input: torch.Tensor, dim: int = -1) torch.Tensor#
-
- -
-
-class core.common.gp_utils.CopyToModelParallelRegion(*args, **kwargs)#
-

Bases: torch.autograd.Function

-

Base class to create custom autograd.Function.

-

To create a custom autograd.Function, subclass this class and implement -the forward() and backward() static methods. Then, to use your custom -op in the forward pass, call the class method apply. Do not call -forward() directly.

-

To ensure correctness and best performance, make sure you are calling the -correct methods on ctx and validating your backward function using -torch.autograd.gradcheck().

-

See extending-autograd for more details on how to use this class.

-

Examples:

-
>>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_AUTOGRAD)
->>> class Exp(Function):
->>>     @staticmethod
->>>     def forward(ctx, i):
->>>         result = i.exp()
->>>         ctx.save_for_backward(result)
->>>         return result
->>>
->>>     @staticmethod
->>>     def backward(ctx, grad_output):
->>>         result, = ctx.saved_tensors
->>>         return grad_output * result
->>>
->>> # Use it by calling the apply method:
->>> # xdoctest: +SKIP
->>> output = Exp.apply(input)
-
-
-
-
-static forward(ctx, input: torch.Tensor) torch.Tensor#
-

Define the forward of the custom autograd Function.

-

This function is to be overridden by all subclasses. -There are two ways to define forward:

-

Usage 1 (Combined forward and ctx):

-
@staticmethod
-def forward(ctx: Any, *args: Any, **kwargs: Any) -> Any:
-    pass
-
-
-
    -
  • It must accept a context ctx as the first argument, followed by any -number of arguments (tensors or other types).

  • -
  • See combining-forward-context for more details

  • -
-

Usage 2 (Separate forward and ctx):

-
@staticmethod
-def forward(*args: Any, **kwargs: Any) -> Any:
-    pass
-
-@staticmethod
-def setup_context(ctx: Any, inputs: Tuple[Any, ...], output: Any) -> None:
-    pass
-
-
-
    -
  • The forward no longer accepts a ctx argument.

  • -
  • Instead, you must also override the torch.autograd.Function.setup_context() -staticmethod to handle setting up the ctx object. -output is the output of the forward, inputs are a Tuple of inputs -to the forward.

  • -
  • See extending-autograd for more details

  • -
-

The context can be used to store arbitrary data that can be then -retrieved during the backward pass. Tensors should not be stored -directly on ctx (though this is not currently enforced for -backward compatibility). Instead, tensors should be saved either with -ctx.save_for_backward() if they are intended to be used in -backward (equivalently, vjp) or ctx.save_for_forward() -if they are intended to be used for in jvp.

-
- -
-
-static backward(ctx, grad_output: torch.Tensor) torch.Tensor#
-

Define a formula for differentiating the operation with backward mode automatic differentiation.

-

This function is to be overridden by all subclasses. -(Defining this function is equivalent to defining the vjp function.)

-

It must accept a context ctx as the first argument, followed by -as many outputs as the forward() returned (None will be passed in -for non tensor outputs of the forward function), -and it should return as many tensors, as there were inputs to -forward(). Each argument is the gradient w.r.t the given output, -and each returned value should be the gradient w.r.t. the -corresponding input. If an input is not a Tensor or is a Tensor not -requiring grads, you can just pass None as a gradient for that input.

-

The context can be used to retrieve tensors saved during the forward -pass. It also has an attribute ctx.needs_input_grad as a tuple -of booleans representing whether each input needs gradient. E.g., -backward() will have ctx.needs_input_grad[0] = True if the -first input to forward() needs gradient computed w.r.t. the -output.

-
- -
- -
-
-class core.common.gp_utils.ReduceFromModelParallelRegion(*args, **kwargs)#
-

Bases: torch.autograd.Function

-

Base class to create custom autograd.Function.

-

To create a custom autograd.Function, subclass this class and implement -the forward() and backward() static methods. Then, to use your custom -op in the forward pass, call the class method apply. Do not call -forward() directly.

-

To ensure correctness and best performance, make sure you are calling the -correct methods on ctx and validating your backward function using -torch.autograd.gradcheck().

-

See extending-autograd for more details on how to use this class.

-

Examples:

-
>>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_AUTOGRAD)
->>> class Exp(Function):
->>>     @staticmethod
->>>     def forward(ctx, i):
->>>         result = i.exp()
->>>         ctx.save_for_backward(result)
->>>         return result
->>>
->>>     @staticmethod
->>>     def backward(ctx, grad_output):
->>>         result, = ctx.saved_tensors
->>>         return grad_output * result
->>>
->>> # Use it by calling the apply method:
->>> # xdoctest: +SKIP
->>> output = Exp.apply(input)
-
-
-
-
-static forward(ctx, input: torch.Tensor) torch.Tensor#
-

Define the forward of the custom autograd Function.

-

This function is to be overridden by all subclasses. -There are two ways to define forward:

-

Usage 1 (Combined forward and ctx):

-
@staticmethod
-def forward(ctx: Any, *args: Any, **kwargs: Any) -> Any:
-    pass
-
-
-
    -
  • It must accept a context ctx as the first argument, followed by any -number of arguments (tensors or other types).

  • -
  • See combining-forward-context for more details

  • -
-

Usage 2 (Separate forward and ctx):

-
@staticmethod
-def forward(*args: Any, **kwargs: Any) -> Any:
-    pass
-
-@staticmethod
-def setup_context(ctx: Any, inputs: Tuple[Any, ...], output: Any) -> None:
-    pass
-
-
-
    -
  • The forward no longer accepts a ctx argument.

  • -
  • Instead, you must also override the torch.autograd.Function.setup_context() -staticmethod to handle setting up the ctx object. -output is the output of the forward, inputs are a Tuple of inputs -to the forward.

  • -
  • See extending-autograd for more details

  • -
-

The context can be used to store arbitrary data that can be then -retrieved during the backward pass. Tensors should not be stored -directly on ctx (though this is not currently enforced for -backward compatibility). Instead, tensors should be saved either with -ctx.save_for_backward() if they are intended to be used in -backward (equivalently, vjp) or ctx.save_for_forward() -if they are intended to be used for in jvp.

-
- -
-
-static backward(ctx, grad_output: torch.Tensor) torch.Tensor#
-

Define a formula for differentiating the operation with backward mode automatic differentiation.

-

This function is to be overridden by all subclasses. -(Defining this function is equivalent to defining the vjp function.)

-

It must accept a context ctx as the first argument, followed by -as many outputs as the forward() returned (None will be passed in -for non tensor outputs of the forward function), -and it should return as many tensors, as there were inputs to -forward(). Each argument is the gradient w.r.t the given output, -and each returned value should be the gradient w.r.t. the -corresponding input. If an input is not a Tensor or is a Tensor not -requiring grads, you can just pass None as a gradient for that input.

-

The context can be used to retrieve tensors saved during the forward -pass. It also has an attribute ctx.needs_input_grad as a tuple -of booleans representing whether each input needs gradient. E.g., -backward() will have ctx.needs_input_grad[0] = True if the -first input to forward() needs gradient computed w.r.t. the -output.

-
- -
- -
-
-class core.common.gp_utils.ScatterToModelParallelRegion(*args, **kwargs)#
-

Bases: torch.autograd.Function

-

Base class to create custom autograd.Function.

-

To create a custom autograd.Function, subclass this class and implement -the forward() and backward() static methods. Then, to use your custom -op in the forward pass, call the class method apply. Do not call -forward() directly.

-

To ensure correctness and best performance, make sure you are calling the -correct methods on ctx and validating your backward function using -torch.autograd.gradcheck().

-

See extending-autograd for more details on how to use this class.

-

Examples:

-
>>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_AUTOGRAD)
->>> class Exp(Function):
->>>     @staticmethod
->>>     def forward(ctx, i):
->>>         result = i.exp()
->>>         ctx.save_for_backward(result)
->>>         return result
->>>
->>>     @staticmethod
->>>     def backward(ctx, grad_output):
->>>         result, = ctx.saved_tensors
->>>         return grad_output * result
->>>
->>> # Use it by calling the apply method:
->>> # xdoctest: +SKIP
->>> output = Exp.apply(input)
-
-
-
-
-static forward(ctx, input: torch.Tensor, dim: int = -1) torch.Tensor#
-

Define the forward of the custom autograd Function.

-

This function is to be overridden by all subclasses. -There are two ways to define forward:

-

Usage 1 (Combined forward and ctx):

-
@staticmethod
-def forward(ctx: Any, *args: Any, **kwargs: Any) -> Any:
-    pass
-
-
-
    -
  • It must accept a context ctx as the first argument, followed by any -number of arguments (tensors or other types).

  • -
  • See combining-forward-context for more details

  • -
-

Usage 2 (Separate forward and ctx):

-
@staticmethod
-def forward(*args: Any, **kwargs: Any) -> Any:
-    pass
-
-@staticmethod
-def setup_context(ctx: Any, inputs: Tuple[Any, ...], output: Any) -> None:
-    pass
-
-
-
    -
  • The forward no longer accepts a ctx argument.

  • -
  • Instead, you must also override the torch.autograd.Function.setup_context() -staticmethod to handle setting up the ctx object. -output is the output of the forward, inputs are a Tuple of inputs -to the forward.

  • -
  • See extending-autograd for more details

  • -
-

The context can be used to store arbitrary data that can be then -retrieved during the backward pass. Tensors should not be stored -directly on ctx (though this is not currently enforced for -backward compatibility). Instead, tensors should be saved either with -ctx.save_for_backward() if they are intended to be used in -backward (equivalently, vjp) or ctx.save_for_forward() -if they are intended to be used for in jvp.

-
- -
-
-static backward(ctx, grad_output: torch.Tensor)#
-

Define a formula for differentiating the operation with backward mode automatic differentiation.

-

This function is to be overridden by all subclasses. -(Defining this function is equivalent to defining the vjp function.)

-

It must accept a context ctx as the first argument, followed by -as many outputs as the forward() returned (None will be passed in -for non tensor outputs of the forward function), -and it should return as many tensors, as there were inputs to -forward(). Each argument is the gradient w.r.t the given output, -and each returned value should be the gradient w.r.t. the -corresponding input. If an input is not a Tensor or is a Tensor not -requiring grads, you can just pass None as a gradient for that input.

-

The context can be used to retrieve tensors saved during the forward -pass. It also has an attribute ctx.needs_input_grad as a tuple -of booleans representing whether each input needs gradient. E.g., -backward() will have ctx.needs_input_grad[0] = True if the -first input to forward() needs gradient computed w.r.t. the -output.

-
- -
- -
-
-class core.common.gp_utils.GatherFromModelParallelRegion(*args, **kwargs)#
-

Bases: torch.autograd.Function

-

Base class to create custom autograd.Function.

-

To create a custom autograd.Function, subclass this class and implement -the forward() and backward() static methods. Then, to use your custom -op in the forward pass, call the class method apply. Do not call -forward() directly.

-

To ensure correctness and best performance, make sure you are calling the -correct methods on ctx and validating your backward function using -torch.autograd.gradcheck().

-

See extending-autograd for more details on how to use this class.

-

Examples:

-
>>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_AUTOGRAD)
->>> class Exp(Function):
->>>     @staticmethod
->>>     def forward(ctx, i):
->>>         result = i.exp()
->>>         ctx.save_for_backward(result)
->>>         return result
->>>
->>>     @staticmethod
->>>     def backward(ctx, grad_output):
->>>         result, = ctx.saved_tensors
->>>         return grad_output * result
->>>
->>> # Use it by calling the apply method:
->>> # xdoctest: +SKIP
->>> output = Exp.apply(input)
-
-
-
-
-static forward(ctx, input: torch.Tensor, dim: int = -1) torch.Tensor#
-

Define the forward of the custom autograd Function.

-

This function is to be overridden by all subclasses. -There are two ways to define forward:

-

Usage 1 (Combined forward and ctx):

-
@staticmethod
-def forward(ctx: Any, *args: Any, **kwargs: Any) -> Any:
-    pass
-
-
-
    -
  • It must accept a context ctx as the first argument, followed by any -number of arguments (tensors or other types).

  • -
  • See combining-forward-context for more details

  • -
-

Usage 2 (Separate forward and ctx):

-
@staticmethod
-def forward(*args: Any, **kwargs: Any) -> Any:
-    pass
-
-@staticmethod
-def setup_context(ctx: Any, inputs: Tuple[Any, ...], output: Any) -> None:
-    pass
-
-
-
    -
  • The forward no longer accepts a ctx argument.

  • -
  • Instead, you must also override the torch.autograd.Function.setup_context() -staticmethod to handle setting up the ctx object. -output is the output of the forward, inputs are a Tuple of inputs -to the forward.

  • -
  • See extending-autograd for more details

  • -
-

The context can be used to store arbitrary data that can be then -retrieved during the backward pass. Tensors should not be stored -directly on ctx (though this is not currently enforced for -backward compatibility). Instead, tensors should be saved either with -ctx.save_for_backward() if they are intended to be used in -backward (equivalently, vjp) or ctx.save_for_forward() -if they are intended to be used for in jvp.

-
- -
-
-static backward(ctx, grad_output: torch.Tensor)#
-

Define a formula for differentiating the operation with backward mode automatic differentiation.

-

This function is to be overridden by all subclasses. -(Defining this function is equivalent to defining the vjp function.)

-

It must accept a context ctx as the first argument, followed by -as many outputs as the forward() returned (None will be passed in -for non tensor outputs of the forward function), -and it should return as many tensors, as there were inputs to -forward(). Each argument is the gradient w.r.t the given output, -and each returned value should be the gradient w.r.t. the -corresponding input. If an input is not a Tensor or is a Tensor not -requiring grads, you can just pass None as a gradient for that input.

-

The context can be used to retrieve tensors saved during the forward -pass. It also has an attribute ctx.needs_input_grad as a tuple -of booleans representing whether each input needs gradient. E.g., -backward() will have ctx.needs_input_grad[0] = True if the -first input to forward() needs gradient computed w.r.t. the -output.

-
- -
- -
-
-core.common.gp_utils.copy_to_model_parallel_region(input: torch.Tensor) torch.Tensor#
-
- -
-
-core.common.gp_utils.reduce_from_model_parallel_region(input: torch.Tensor) torch.Tensor#
-
- -
-
-core.common.gp_utils.scatter_to_model_parallel_region(input: torch.Tensor, dim: int = -1) torch.Tensor#
-
- -
-
-core.common.gp_utils.gather_from_model_parallel_region(input: torch.Tensor, dim: int = -1) torch.Tensor#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/hpo_utils/index.html b/autoapi/core/common/hpo_utils/index.html deleted file mode 100644 index 989d6ab01..000000000 --- a/autoapi/core/common/hpo_utils/index.html +++ /dev/null @@ -1,771 +0,0 @@ - - - - - - - - - - - core.common.hpo_utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.common.hpo_utils

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.common.hpo_utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

tune_reporter(→ None)

Wrapper function for tune.report()

label_metric_dict(metric_dict, split)

-
-
-core.common.hpo_utils.tune_reporter(iters, train_metrics, val_metrics, test_metrics=None, metric_to_opt: str = 'val_loss', min_max: str = 'min') None#
-

Wrapper function for tune.report()

-
-
Parameters:
-
    -
  • iters (dict) – dict with training iteration info (e.g. steps, epochs)

  • -
  • train_metrics (dict) – train metrics dict

  • -
  • val_metrics (dict) – val metrics dict

  • -
  • test_metrics (dict, optional) – test metrics dict, default is None

  • -
  • metric_to_opt (str, optional) – str for val metric to optimize, default is val_loss

  • -
  • min_max (str, optional) – either “min” or “max”, determines whether metric_to_opt is to be minimized or maximized, default is min

  • -
-
-
-
- -
-
-core.common.hpo_utils.label_metric_dict(metric_dict, split)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/index.html b/autoapi/core/common/index.html deleted file mode 100644 index b6e894eab..000000000 --- a/autoapi/core/common/index.html +++ /dev/null @@ -1,756 +0,0 @@ - - - - - - - - - - - core.common — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.common

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.common#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/logger/index.html b/autoapi/core/common/logger/index.html deleted file mode 100644 index 678afbc21..000000000 --- a/autoapi/core/common/logger/index.html +++ /dev/null @@ -1,879 +0,0 @@ - - - - - - - - - - - core.common.logger — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.common.logger#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

Logger

Generic class to interface with various logging modules, e.g. wandb,

WandBLogger

Generic class to interface with various logging modules, e.g. wandb,

TensorboardLogger

Generic class to interface with various logging modules, e.g. wandb,

-
-
-class core.common.logger.Logger(config)#
-

Bases: abc.ABC

-

Generic class to interface with various logging modules, e.g. wandb, -tensorboard, etc.

-
-
-abstract watch(model)#
-

Monitor parameters and gradients.

-
- -
-
-log(update_dict, step: int, split: str = '')#
-

Log some values.

-
- -
-
-abstract log_plots(plots) None#
-
- -
-
-abstract mark_preempting() None#
-
- -
- -
-
-class core.common.logger.WandBLogger(config)#
-

Bases: Logger

-

Generic class to interface with various logging modules, e.g. wandb, -tensorboard, etc.

-
-
-watch(model) None#
-

Monitor parameters and gradients.

-
- -
-
-log(update_dict, step: int, split: str = '') None#
-

Log some values.

-
- -
-
-log_plots(plots, caption: str = '') None#
-
- -
-
-mark_preempting() None#
-
- -
- -
-
-class core.common.logger.TensorboardLogger(config)#
-

Bases: Logger

-

Generic class to interface with various logging modules, e.g. wandb, -tensorboard, etc.

-
-
-watch(model) bool#
-

Monitor parameters and gradients.

-
- -
-
-log(update_dict, step: int, split: str = '')#
-

Log some values.

-
- -
-
-mark_preempting() None#
-
- -
-
-log_plots(plots) None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/registry/index.html b/autoapi/core/common/registry/index.html deleted file mode 100644 index f221be1f7..000000000 --- a/autoapi/core/common/registry/index.html +++ /dev/null @@ -1,1048 +0,0 @@ - - - - - - - - - - - core.common.registry — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.common.registry#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-

# Copyright (c) Meta, Inc. and its affiliates. -# Borrowed from facebookresearch/pythia.

-

Registry is central source of truth. Inspired from Redux’s concept of -global store, Registry maintains mappings of various information to unique -keys. Special functions in registry can be used as decorators to register -different kind of classes.

-

Import the global registry object using

-

from fairchem.core.common.registry import registry

-

Various decorators for registry different kind of classes with unique keys

-
    -
  • Register a model: @registry.register_model

  • -
-
-

Module Contents#

-
-

Classes#

- - - - - - -

Registry

Class for registry object which acts as central source of truth.

-
-
-

Functions#

- - - - - - -

_get_absolute_mapping(name)

-
-
-

Attributes#

- - - - - - - - - - - - -

R

NestedDict

registry

-
-
-core.common.registry.R#
-
- -
-
-core.common.registry.NestedDict#
-
- -
-
-core.common.registry._get_absolute_mapping(name: str)#
-
- -
-
-class core.common.registry.Registry#
-

Class for registry object which acts as central source of truth.

-
-
-mapping: ClassVar[NestedDict]#
-
- -
-
-classmethod register_task(name: str)#
-

Register a new task to registry with key ‘name’ -:param name: Key with which the task will be registered.

-
-
Usage::

from fairchem.core.common.registry import registry -from fairchem.core.tasks import BaseTask -@registry.register_task(“train”) -class TrainTask(BaseTask):

-
-

-
-
-
-
- -
-
-classmethod register_dataset(name: str)#
-

Register a dataset to registry with key ‘name’

-
-
Parameters:
-

name – Key with which the dataset will be registered.

-
-
-

Usage:

-
from fairchem.core.common.registry import registry
-from fairchem.core.datasets import BaseDataset
-
-@registry.register_dataset("qm9")
-class QM9(BaseDataset):
-    ...
-
-
-
- -
-
-classmethod register_model(name: str)#
-

Register a model to registry with key ‘name’

-
-
Parameters:
-

name – Key with which the model will be registered.

-
-
-

Usage:

-
from fairchem.core.common.registry import registry
-from fairchem.core.modules.layers import CGCNNConv
-
-@registry.register_model("cgcnn")
-class CGCNN():
-    ...
-
-
-
- -
-
-classmethod register_logger(name: str)#
-

Register a logger to registry with key ‘name’

-
-
Parameters:
-

name – Key with which the logger will be registered.

-
-
-

Usage:

-
from fairchem.core.common.registry import registry
-
-@registry.register_logger("wandb")
-class WandBLogger():
-    ...
-
-
-
- -
-
-classmethod register_trainer(name: str)#
-

Register a trainer to registry with key ‘name’

-
-
Parameters:
-

name – Key with which the trainer will be registered.

-
-
-

Usage:

-
from fairchem.core.common.registry import registry
-
-@registry.register_trainer("active_discovery")
-class ActiveDiscoveryTrainer():
-    ...
-
-
-
- -
-
-classmethod register(name: str, obj) None#
-

Register an item to registry with key ‘name’

-
-
Parameters:
-

name – Key with which the item will be registered.

-
-
-

Usage:

-
from fairchem.core.common.registry import registry
-
-registry.register("config", {})
-
-
-
- -
-
-classmethod __import_error(name: str, mapping_name: str) RuntimeError#
-
- -
-
-classmethod get_class(name: str, mapping_name: str)#
-
- -
-
-classmethod get_task_class(name: str)#
-
- -
-
-classmethod get_dataset_class(name: str)#
-
- -
-
-classmethod get_model_class(name: str)#
-
- -
-
-classmethod get_logger_class(name: str)#
-
- -
-
-classmethod get_trainer_class(name: str)#
-
- -
-
-classmethod get(name: str, default=None, no_warning: bool = False)#
-

Get an item from registry with key ‘name’

-
-
Parameters:
-
    -
  • name (string) – Key whose value needs to be retrieved.

  • -
  • default – If passed and key is not in registry, default value will -be returned with a warning. Default: None

  • -
  • no_warning (bool) – If passed as True, warning when key doesn’t exist -will not be generated. Useful for cgcnn’s -internal operations. Default: False

  • -
-
-
-

Usage:

-
from fairchem.core.common.registry import registry
-
-config = registry.get("config")
-
-
-
- -
-
-classmethod unregister(name: str)#
-

Remove an item from registry with key ‘name’

-
-
Parameters:
-

name – Key which needs to be removed.

-
-
-

Usage:

-
from fairchem.core.common.registry import registry
-
-config = registry.unregister("config")
-
-
-
- -
- -
-
-core.common.registry.registry#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/relaxation/ase_utils/index.html b/autoapi/core/common/relaxation/ase_utils/index.html deleted file mode 100644 index 0c66e3749..000000000 --- a/autoapi/core/common/relaxation/ase_utils/index.html +++ /dev/null @@ -1,838 +0,0 @@ - - - - - - - - - - - core.common.relaxation.ase_utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.common.relaxation.ase_utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-

Utilities to interface OCP models/trainers with the Atomic Simulation -Environment (ASE)

-
-

Module Contents#

-
-

Classes#

- - - - - - -

OCPCalculator

Base-class for all ASE calculators.

-
-
-

Functions#

- - - - - - -

batch_to_atoms(batch)

-
-
-core.common.relaxation.ase_utils.batch_to_atoms(batch)#
-
- -
-
-class core.common.relaxation.ase_utils.OCPCalculator(config_yml: str | None = None, checkpoint_path: str | None = None, model_name: str | None = None, local_cache: str | None = None, trainer: str | None = None, cutoff: int = 6, max_neighbors: int = 50, cpu: bool = True, seed: int | None = None)#
-

Bases: ase.calculators.calculator.Calculator

-

Base-class for all ASE calculators.

-

A calculator must raise PropertyNotImplementedError if asked for a -property that it can’t calculate. So, if calculation of the -stress tensor has not been implemented, get_stress(atoms) should -raise PropertyNotImplementedError. This can be achieved simply by not -including the string ‘stress’ in the list implemented_properties -which is a class member. These are the names of the standard -properties: ‘energy’, ‘forces’, ‘stress’, ‘dipole’, ‘charges’, -‘magmom’ and ‘magmoms’.

-
-
-implemented_properties: ClassVar[list[str]] = ['energy', 'forces']#
-
- -
-
-load_checkpoint(checkpoint_path: str, checkpoint: dict | None = None) None#
-

Load existing trained model

-
-
Parameters:
-

checkpoint_path – string -Path to trained model

-
-
-
- -
-
-calculate(atoms: ase.Atoms, properties, system_changes) None#
-

Do the calculation.

-
-
properties: list of str

List of what needs to be calculated. Can be any combination -of ‘energy’, ‘forces’, ‘stress’, ‘dipole’, ‘charges’, ‘magmom’ -and ‘magmoms’.

-
-
system_changes: list of str

List of what has changed since last calculation. Can be -any combination of these six: ‘positions’, ‘numbers’, ‘cell’, -‘pbc’, ‘initial_charges’ and ‘initial_magmoms’.

-
-
-

Subclasses need to implement this, but can ignore properties -and system_changes if they want. Calculated properties should -be inserted into results dictionary like shown in this dummy -example:

-
self.results = {'energy': 0.0,
-                'forces': np.zeros((len(atoms), 3)),
-                'stress': np.zeros(6),
-                'dipole': np.zeros(3),
-                'charges': np.zeros(len(atoms)),
-                'magmom': 0.0,
-                'magmoms': np.zeros(len(atoms))}
-
-
-

The subclass implementation should first call this -implementation to set the atoms attribute and create any missing -directories.

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/relaxation/index.html b/autoapi/core/common/relaxation/index.html deleted file mode 100644 index c95ae5e21..000000000 --- a/autoapi/core/common/relaxation/index.html +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - - - - - - core.common.relaxation — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.common.relaxation

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.common.relaxation#

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/relaxation/ml_relaxation/index.html b/autoapi/core/common/relaxation/ml_relaxation/index.html deleted file mode 100644 index 484443384..000000000 --- a/autoapi/core/common/relaxation/ml_relaxation/index.html +++ /dev/null @@ -1,768 +0,0 @@ - - - - - - - - - - - core.common.relaxation.ml_relaxation — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.common.relaxation.ml_relaxation

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.common.relaxation.ml_relaxation#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - -

ml_relax(batch, model, steps, fmax, relax_opt, ...[, ...])

Runs ML-based relaxations.

-
-
-core.common.relaxation.ml_relaxation.ml_relax(batch, model, steps: int, fmax: float, relax_opt, save_full_traj, device: str = 'cuda:0', transform=None, early_stop_batch: bool = False)#
-

Runs ML-based relaxations. -:param batch: object -:param model: object -:param steps: int

-
-

Max number of steps in the structure relaxation.

-
-
-
Parameters:
-
    -
  • fmax – float -Structure relaxation terminates when the max force -of the system is no bigger than fmax.

  • -
  • relax_opt – str -Optimizer and corresponding parameters to be used for structure relaxations.

  • -
  • save_full_traj – bool -Whether to save out the full ASE trajectory. If False, only save out initial and final frames.

  • -
-
-
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.html b/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.html deleted file mode 100644 index 1d8a87db3..000000000 --- a/autoapi/core/common/relaxation/optimizers/lbfgs_torch/index.html +++ /dev/null @@ -1,822 +0,0 @@ - - - - - - - - - - - core.common.relaxation.optimizers.lbfgs_torch — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.common.relaxation.optimizers.lbfgs_torch#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

LBFGS

TorchCalc

-
-
-class core.common.relaxation.optimizers.lbfgs_torch.LBFGS(batch: torch_geometric.data.Batch, model: TorchCalc, maxstep: float = 0.01, memory: int = 100, damping: float = 0.25, alpha: float = 100.0, force_consistent=None, device: str = 'cuda:0', save_full_traj: bool = True, traj_dir: pathlib.Path | None = None, traj_names=None, early_stop_batch: bool = False)#
-
-
-get_energy_and_forces(apply_constraint: bool = True)#
-
- -
-
-set_positions(update, update_mask) None#
-
- -
-
-check_convergence(iteration, forces=None, energy=None)#
-
- -
-
-run(fmax, steps)#
-
- -
-
-step(iteration: int, forces: torch.Tensor | None, update_mask: torch.Tensor) None#
-
- -
-
-write(energy, forces, update_mask) None#
-
- -
- -
-
-class core.common.relaxation.optimizers.lbfgs_torch.TorchCalc(model, transform=None)#
-
-
-get_energy_and_forces(atoms, apply_constraint: bool = True)#
-
- -
-
-update_graph(atoms)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/transforms/index.html b/autoapi/core/common/transforms/index.html deleted file mode 100644 index 8514a2c09..000000000 --- a/autoapi/core/common/transforms/index.html +++ /dev/null @@ -1,782 +0,0 @@ - - - - - - - - - - - core.common.transforms — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.common.transforms

- -
- -
-
- - - - -
- -
-

core.common.transforms#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

RandomRotate

Rotates node positions around a specific axis by a randomly sampled

-
-
-class core.common.transforms.RandomRotate(degrees, axes: list[int] | None = None)#
-

Rotates node positions around a specific axis by a randomly sampled -factor within a given interval.

-
-
Parameters:
-
    -
  • degrees (tuple or float) – Rotation interval from which the rotation -angle is sampled. If degrees is a number instead of a -tuple, the interval is given by \([-\mathrm{degrees}, -\mathrm{degrees}]\).

  • -
  • axes (int, optional) – The rotation axes. (default: [0, 1, 2])

  • -
-
-
-
-
-__call__(data)#
-
- -
-
-__repr__() str#
-

Return repr(self).

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/tutorial_utils/index.html b/autoapi/core/common/tutorial_utils/index.html deleted file mode 100644 index 87d860b75..000000000 --- a/autoapi/core/common/tutorial_utils/index.html +++ /dev/null @@ -1,804 +0,0 @@ - - - - - - - - - - - core.common.tutorial_utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.common.tutorial_utils

- -
- -
-
- - - - -
- -
-

core.common.tutorial_utils#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - -

ocp_root()

Return the root directory of the installed ocp package.

ocp_main()

Return the path to ocp main.py

describe_ocp()

Print some system information that could be useful in debugging.

train_test_val_split(ase_db[, ttv, files, seed])

Split an ase db into train, test and validation dbs.

generate_yml_config(checkpoint_path[, yml, delete, update])

Generate a yml config file from an existing checkpoint file.

-
-
-core.common.tutorial_utils.ocp_root()#
-

Return the root directory of the installed ocp package.

-
- -
-
-core.common.tutorial_utils.ocp_main()#
-

Return the path to ocp main.py

-
- -
-
-core.common.tutorial_utils.describe_ocp()#
-

Print some system information that could be useful in debugging.

-
- -
-
-core.common.tutorial_utils.train_test_val_split(ase_db, ttv=(0.8, 0.1, 0.1), files=('train.db', 'test.db', 'val.db'), seed=42)#
-

Split an ase db into train, test and validation dbs.

-

ase_db: path to an ase db containing all the data. -ttv: a tuple containing the fraction of train, test and val data. This will be normalized. -files: a tuple of filenames to write the splits into. An exception is raised if these exist.

-
-

You should delete them first.

-
-

seed: an integer for the random number generator seed

-

Returns the absolute path to files.

-
- -
-
-core.common.tutorial_utils.generate_yml_config(checkpoint_path, yml='run.yml', delete=(), update=())#
-

Generate a yml config file from an existing checkpoint file.

-

checkpoint_path: string to path of an existing checkpoint -yml: name of file to write to. -pop: list of keys to remove from the config -update: dictionary of key:values to update

-

Use a dot notation in update.

-

Returns an absolute path to the generated yml file.

-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/typing/index.html b/autoapi/core/common/typing/index.html deleted file mode 100644 index d3f96cdee..000000000 --- a/autoapi/core/common/typing/index.html +++ /dev/null @@ -1,774 +0,0 @@ - - - - - - - - - - - core.common.typing — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.common.typing

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.common.typing#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

assert_is_instance(→ _T)

none_throws(→ _T)

-
-
-

Attributes#

- - - - - - -

_T

-
-
-core.common.typing._T#
-
- -
-
-core.common.typing.assert_is_instance(obj: object, cls: type[_T]) _T#
-
- -
-
-core.common.typing.none_throws(x: _T | None, msg: str | None = None) _T#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/common/utils/index.html b/autoapi/core/common/utils/index.html deleted file mode 100644 index fbfb1a2fe..000000000 --- a/autoapi/core/common/utils/index.html +++ /dev/null @@ -1,1259 +0,0 @@ - - - - - - - - - - - core.common.utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.common.utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

UniqueKeyLoader

Complete

SeverityLevelBetween

Filter instances are used to perform arbitrary filtering of LogRecords.

-
-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

pyg2_data_transform(data)

if we're on the new pyg (2.0 or later) and if the Data stored is in older format

save_checkpoint(→ str)

warmup_lr_lambda(current_step, optim_config)

Returns a learning rate multiplier.

print_cuda_usage(→ None)

conditional_grad(dec)

Decorator to enable/disable grad depending on whether force/energy predictions are being made

plot_histogram(data[, xlabel, ylabel, title])

collate(data_list)

add_edge_distance_to_graph(batch[, device, dmin, ...])

_import_local_file(→ None)

Imports a Python file as a module

setup_experimental_imports(→ None)

Import selected directories of modules from the "experimental" subdirectory.

_get_project_root(→ pathlib.Path)

Gets the root folder of the project (the "ocp" folder)

setup_imports(→ None)

dict_set_recursively(→ None)

parse_value(value)

Parse string as Python literal if possible and fallback to string.

create_dict_from_args(args[, sep])

Create a (nested) dictionary from console arguments.

load_config(path[, previous_includes])

build_config(args, args_override)

create_grid(base_config, sweep_file)

save_experiment_log(args, jobs, configs)

get_pbc_distances(pos, edge_index, cell, cell_offsets, ...)

radius_graph_pbc(data, radius, max_num_neighbors_threshold)

get_max_neighbors_mask(natoms, index, atom_distance, ...)

Give a mask that filters out edges so that each atom has at most

get_pruned_edge_idx(→ torch.Tensor)

merge_dicts(dict1, dict2)

Recursively merge two dictionaries.

setup_logging(→ None)

compute_neighbors(data, edge_index)

check_traj_files(→ bool)

new_trainer_context(*, config[, distributed])

_resolve_scale_factor_submodule(model, name)

_report_incompat_keys(→ tuple[list[str], list[str]])

load_state_dict(→ tuple[list[str], list[str]])

scatter_det(*args, **kwargs)

get_commit_hash()

cg_change_mat(→ torch.tensor)

irreps_sum(→ int)

Returns the sum of the dimensions of the irreps up to the specified angular momentum.

update_config(base_config)

Configs created prior to OCP 2.0 are organized a little different than they

get_loss_module(loss_name)

-
-
-class core.common.utils.UniqueKeyLoader(stream)#
-

Bases: yaml.SafeLoader

-
-
-construct_mapping(node, deep=False)#
-
- -
- -
-
-core.common.utils.pyg2_data_transform(data: torch_geometric.data.Data)#
-

if we’re on the new pyg (2.0 or later) and if the Data stored is in older format -we need to convert the data to the new format

-
- -
-
-core.common.utils.save_checkpoint(state, checkpoint_dir: str = 'checkpoints/', checkpoint_file: str = 'checkpoint.pt') str#
-
- -
-
-class core.common.utils.Complete#
-
-
-__call__(data)#
-
- -
- -
-
-core.common.utils.warmup_lr_lambda(current_step: int, optim_config)#
-

Returns a learning rate multiplier. -Till warmup_steps, learning rate linearly increases to initial_lr, -and then gets multiplied by lr_gamma every time a milestone is crossed.

-
- -
-
-core.common.utils.print_cuda_usage() None#
-
- -
-
-core.common.utils.conditional_grad(dec)#
-

Decorator to enable/disable grad depending on whether force/energy predictions are being made

-
- -
-
-core.common.utils.plot_histogram(data, xlabel: str = '', ylabel: str = '', title: str = '')#
-
- -
-
-core.common.utils.collate(data_list)#
-
- -
-
-core.common.utils.add_edge_distance_to_graph(batch, device='cpu', dmin: float = 0.0, dmax: float = 6.0, num_gaussians: int = 50)#
-
- -
-
-core.common.utils._import_local_file(path: pathlib.Path, *, project_root: pathlib.Path) None#
-

Imports a Python file as a module

-
-
Parameters:
-
    -
  • path (Path) – The path to the file to import

  • -
  • project_root (Path) – The root directory of the project (i.e., the “ocp” folder)

  • -
-
-
-
- -
-
-core.common.utils.setup_experimental_imports(project_root: pathlib.Path) None#
-

Import selected directories of modules from the “experimental” subdirectory.

-

If a file named “.include” is present in the “experimental” subdirectory, -this will be read as a list of experimental subdirectories whose module -(including in any subsubdirectories) should be imported.

-
-
Parameters:
-

project_root – The root directory of the project (i.e., the “ocp” folder)

-
-
-
- -
-
-core.common.utils._get_project_root() pathlib.Path#
-

Gets the root folder of the project (the “ocp” folder) -:return: The absolute path to the project root.

-
- -
-
-core.common.utils.setup_imports(config: dict | None = None) None#
-
- -
-
-core.common.utils.dict_set_recursively(dictionary, key_sequence, val) None#
-
- -
-
-core.common.utils.parse_value(value)#
-

Parse string as Python literal if possible and fallback to string.

-
- -
-
-core.common.utils.create_dict_from_args(args: list, sep: str = '.')#
-

Create a (nested) dictionary from console arguments. -Keys in different dictionary levels are separated by sep.

-
- -
-
-core.common.utils.load_config(path: str, previous_includes: list | None = None)#
-
- -
-
-core.common.utils.build_config(args, args_override)#
-
- -
-
-core.common.utils.create_grid(base_config, sweep_file: str)#
-
- -
-
-core.common.utils.save_experiment_log(args, jobs, configs)#
-
- -
-
-core.common.utils.get_pbc_distances(pos, edge_index, cell, cell_offsets, neighbors, return_offsets: bool = False, return_distance_vec: bool = False)#
-
- -
-
-core.common.utils.radius_graph_pbc(data, radius, max_num_neighbors_threshold, enforce_max_neighbors_strictly: bool = False, pbc=None)#
-
- -
-
-core.common.utils.get_max_neighbors_mask(natoms, index, atom_distance, max_num_neighbors_threshold, degeneracy_tolerance: float = 0.01, enforce_max_strictly: bool = False)#
-

Give a mask that filters out edges so that each atom has at most -max_num_neighbors_threshold neighbors. -Assumes that index is sorted.

-

Enforcing the max strictly can force the arbitrary choice between -degenerate edges. This can lead to undesired behaviors; for -example, bulk formation energies which are not invariant to -unit cell choice.

-

A degeneracy tolerance can help prevent sudden changes in edge -existence from small changes in atom position, for example, -rounding errors, slab relaxation, temperature, etc.

-
- -
-
-core.common.utils.get_pruned_edge_idx(edge_index, num_atoms: int, max_neigh: float = 1000000000.0) torch.Tensor#
-
- -
-
-core.common.utils.merge_dicts(dict1: dict, dict2: dict)#
-

Recursively merge two dictionaries. -Values in dict2 override values in dict1. If dict1 and dict2 contain a dictionary as a -value, this will call itself recursively to merge these dictionaries. -This does not modify the input dictionaries (creates an internal copy). -Additionally returns a list of detected duplicates. -Adapted from TUM-DAML/seml

-
-
Parameters:
-
    -
  • dict1 (dict) – First dict.

  • -
  • dict2 (dict) – Second dict. Values in dict2 will override values from dict1 in case they share the same key.

  • -
-
-
Returns:
-

return_dict – Merged dictionaries.

-
-
Return type:
-

dict

-
-
-
- -
-
-class core.common.utils.SeverityLevelBetween(min_level: int, max_level: int)#
-

Bases: logging.Filter

-

Filter instances are used to perform arbitrary filtering of LogRecords.

-

Loggers and Handlers can optionally use Filter instances to filter -records as desired. The base filter class only allows events which are -below a certain point in the logger hierarchy. For example, a filter -initialized with “A.B” will allow events logged by loggers “A.B”, -“A.B.C”, “A.B.C.D”, “A.B.D” etc. but not “A.BB”, “B.A.B” etc. If -initialized with the empty string, all events are passed.

-
-
-filter(record) bool#
-

Determine if the specified record is to be logged.

-

Returns True if the record should be logged, or False otherwise. -If deemed appropriate, the record may be modified in-place.

-
- -
- -
-
-core.common.utils.setup_logging() None#
-
- -
-
-core.common.utils.compute_neighbors(data, edge_index)#
-
- -
-
-core.common.utils.check_traj_files(batch, traj_dir) bool#
-
- -
-
-core.common.utils.new_trainer_context(*, config: dict[str, Any], distributed: bool = False)#
-
- -
-
-core.common.utils._resolve_scale_factor_submodule(model: torch.nn.Module, name: str)#
-
- -
-
-core.common.utils._report_incompat_keys(model: torch.nn.Module, keys: torch.nn.modules.module._IncompatibleKeys, strict: bool = False) tuple[list[str], list[str]]#
-
- -
-
-core.common.utils.load_state_dict(module: torch.nn.Module, state_dict: collections.abc.Mapping[str, torch.Tensor], strict: bool = True) tuple[list[str], list[str]]#
-
- -
-
-core.common.utils.scatter_det(*args, **kwargs)#
-
- -
-
-core.common.utils.get_commit_hash()#
-
- -
-
-core.common.utils.cg_change_mat(ang_mom: int, device: str = 'cpu') torch.tensor#
-
- -
-
-core.common.utils.irreps_sum(ang_mom: int) int#
-

Returns the sum of the dimensions of the irreps up to the specified angular momentum.

-
-
Parameters:
-

ang_mom – max angular momenttum to sum up dimensions of irreps

-
-
-
- -
-
-core.common.utils.update_config(base_config)#
-

Configs created prior to OCP 2.0 are organized a little different than they -are now. Update old configs to fit the new expected structure.

-
- -
-
-core.common.utils.get_loss_module(loss_name)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/_utils/index.html b/autoapi/core/datasets/_utils/index.html deleted file mode 100644 index 7a901f16a..000000000 --- a/autoapi/core/datasets/_utils/index.html +++ /dev/null @@ -1,757 +0,0 @@ - - - - - - - - - - - core.datasets._utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.datasets._utils

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.datasets._utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - -

rename_data_object_keys(→ torch_geometric.data.Data)

Rename data object keys

-
-
-core.datasets._utils.rename_data_object_keys(data_object: torch_geometric.data.Data, key_mapping: dict[str, str]) torch_geometric.data.Data#
-

Rename data object keys

-
-
Parameters:
-
    -
  • data_object – data object

  • -
  • key_mapping – dictionary specifying keys to rename and new names {prev_key: new_key}

  • -
-
-
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/ase_datasets/index.html b/autoapi/core/datasets/ase_datasets/index.html deleted file mode 100644 index 9cea32bd7..000000000 --- a/autoapi/core/datasets/ase_datasets/index.html +++ /dev/null @@ -1,1142 +0,0 @@ - - - - - - - - - - - core.datasets.ase_datasets — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.datasets.ase_datasets#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

AseAtomsDataset

This is an abstract Dataset that includes helpful utilities for turning

AseReadDataset

This Dataset uses ase.io.read to load data from a directory on disk.

AseReadMultiStructureDataset

This Dataset can read multiple structures from each file using ase.io.read.

AseDBDataset

This Dataset connects to an ASE Database, allowing the storage of atoms objects

-
-
-

Functions#

- - - - - - -

apply_one_tags(atoms[, skip_if_nonzero, skip_always])

This function will apply tags of 1 to an ASE atoms object.

-
-
-core.datasets.ase_datasets.apply_one_tags(atoms: ase.Atoms, skip_if_nonzero: bool = True, skip_always: bool = False)#
-

This function will apply tags of 1 to an ASE atoms object. -It is used as an atoms_transform in the datasets contained in this file.

-

Certain models will treat atoms differently depending on their tags. -For example, GemNet-OC by default will only compute triplet and quadruplet interactions -for atoms with non-zero tags. This model throws an error if there are no tagged atoms. -For this reason, the default behavior is to tag atoms in structures with no tags.

-
-
Parameters:
-
    -
  • skip_if_nonzero (bool) – If at least one atom has a nonzero tag, do not tag any atoms

  • -
  • skip_always (bool) – Do not apply any tags. This arg exists so that this function can be disabled -without needing to pass a callable (which is currently difficult to do with main.py)

  • -
-
-
-
- -
-
-class core.datasets.ase_datasets.AseAtomsDataset(config: dict, atoms_transform: Callable[[ase.Atoms, Any, Ellipsis], ase.Atoms] = apply_one_tags)#
-

Bases: torch.utils.data.Dataset, abc.ABC

-

This is an abstract Dataset that includes helpful utilities for turning -ASE atoms objects into OCP-usable data objects. This should not be instantiated directly -as get_atoms_object and load_dataset_get_ids are not implemented in this base class.

-
-
Derived classes must add at least two things:

self.get_atoms_object(id): a function that takes an identifier and returns a corresponding atoms object

-
-
self.load_dataset_get_ids(config: dict): This function is responsible for any initialization/loads

of the dataset and importantly must return a list of all possible identifiers that can be passed into -self.get_atoms_object(id)

-
-
-
-
-

Identifiers need not be any particular type.

-
-
-__len__() int#
-
- -
-
-__getitem__(idx)#
-
- -
-
-abstract get_atoms(idx: str | int) ase.Atoms#
-
- -
-
-abstract _load_dataset_get_ids(config)#
-
- -
-
-abstract get_relaxed_energy(identifier)#
-
- -
-
-close_db() None#
-
- -
-
-get_metadata(num_samples: int = 100) dict#
-
- -
- -
-
-class core.datasets.ase_datasets.AseReadDataset(config: dict, atoms_transform: Callable[[ase.Atoms, Any, Ellipsis], ase.Atoms] = apply_one_tags)#
-

Bases: AseAtomsDataset

-

This Dataset uses ase.io.read to load data from a directory on disk. -This is intended for small-scale testing and demonstrations of OCP. -Larger datasets are better served by the efficiency of other dataset types -such as LMDB.

-

For a full list of ASE-readable filetypes, see -https://wiki.fysik.dtu.dk/ase/ase/io/io.html

-
-
Parameters:
-
    -
  • config (dict) –

    src (str): The source folder that contains your ASE-readable files

    -
    -
    pattern (str): Filepath matching each file you want to read

    ex. “/POSCAR”, “.cif”, “.xyz” -search recursively with two wildcards: “*/POSCAR” or “**/*.cif”

    -
    -
    a2g_args (dict): Keyword arguments for fairchem.core.preprocessing.AtomsToGraphs()

    default options will work for most users

    -

    If you are using this for a training dataset, set -“r_energy”:True, “r_forces”:True, and/or “r_stress”:True as appropriate -In that case, energy/forces must be in the files you read (ex. OUTCAR)

    -
    -
    -

    ase_read_args (dict): Keyword arguments for ase.io.read()

    -
    -
    keep_in_memory (bool): Store data in memory. This helps avoid random reads if you need

    to iterate over a dataset many times (e.g. training for many epochs). -Not recommended for large datasets.

    -
    -
    include_relaxed_energy (bool): Include the relaxed energy in the resulting data object.

    The relaxed structure is assumed to be the final structure in the file -(e.g. the last frame of a .traj).

    -
    -
    -

    atoms_transform_args (dict): Additional keyword arguments for the atoms_transform callable

    -

    transform_args (dict): Additional keyword arguments for the transform callable

    -
    -
    key_mapping (dict[str, str]): Dictionary specifying a mapping between the name of a property used

    in the model with the corresponding property as it was named in the dataset. Only need to use if -the name is different.

    -
    -
    -

  • -
  • atoms_transform (callable, optional) – Additional preprocessing function applied to the Atoms -object. Useful for applying tags, for example.

  • -
-
-
-
-
-_load_dataset_get_ids(config) list[pathlib.Path]#
-
- -
-
-get_atoms(idx: str | int) ase.Atoms#
-
- -
-
-get_relaxed_energy(identifier) float#
-
- -
- -
-
-class core.datasets.ase_datasets.AseReadMultiStructureDataset(config: dict, atoms_transform: Callable[[ase.Atoms, Any, Ellipsis], ase.Atoms] = apply_one_tags)#
-

Bases: AseAtomsDataset

-

This Dataset can read multiple structures from each file using ase.io.read. -The disadvantage is that all files must be read at startup. -This is a significant cost for large datasets.

-

This is intended for small-scale testing and demonstrations of OCP. -Larger datasets are better served by the efficiency of other dataset types -such as LMDB.

-

For a full list of ASE-readable filetypes, see -https://wiki.fysik.dtu.dk/ase/ase/io/io.html

-
-
Parameters:
-
    -
  • config (dict) –

    src (str): The source folder that contains your ASE-readable files

    -
    -
    pattern (str): Filepath matching each file you want to read

    ex. “.traj”, “.xyz” -search recursively with two wildcards: “/POSCAR” or “/*.cif”

    -
    -
    index_file (str): Filepath to an indexing file, which contains each filename

    and the number of structures contained in each file. For instance:

    -

    /path/to/relaxation1.traj 200 -/path/to/relaxation2.traj 150

    -

    This will overrule the src and pattern that you specify!

    -
    -
    a2g_args (dict): Keyword arguments for fairchem.core.preprocessing.AtomsToGraphs()

    default options will work for most users

    -

    If you are using this for a training dataset, set -“r_energy”:True, “r_forces”:True, and/or “r_stress”:True as appropriate -In that case, energy/forces must be in the files you read (ex. OUTCAR)

    -
    -
    -

    ase_read_args (dict): Keyword arguments for ase.io.read()

    -
    -
    keep_in_memory (bool): Store data in memory. This helps avoid random reads if you need

    to iterate over a dataset many times (e.g. training for many epochs). -Not recommended for large datasets.

    -
    -
    include_relaxed_energy (bool): Include the relaxed energy in the resulting data object.

    The relaxed structure is assumed to be the final structure in the file -(e.g. the last frame of a .traj).

    -
    -
    -

    use_tqdm (bool): Use TQDM progress bar when initializing dataset

    -

    atoms_transform_args (dict): Additional keyword arguments for the atoms_transform callable

    -

    transform_args (dict): Additional keyword arguments for the transform callable

    -
    -
    key_mapping (dict[str, str]): Dictionary specifying a mapping between the name of a property used

    in the model with the corresponding property as it was named in the dataset. Only need to use if -the name is different.

    -
    -
    -

  • -
  • atoms_transform (callable, optional) – Additional preprocessing function applied to the Atoms -object. Useful for applying tags, for example.

  • -
  • transform (callable, optional) – Additional preprocessing function for the Data object

  • -
-
-
-
-
-_load_dataset_get_ids(config) list[str]#
-
- -
-
-get_atoms(idx: str) ase.Atoms#
-
- -
-
-get_metadata(num_samples: int = 100) dict#
-
- -
-
-get_relaxed_energy(identifier) float#
-
- -
- -
-
-class core.datasets.ase_datasets.AseDBDataset(config: dict, atoms_transform: Callable[[ase.Atoms, Any, Ellipsis], ase.Atoms] = apply_one_tags)#
-

Bases: AseAtomsDataset

-

This Dataset connects to an ASE Database, allowing the storage of atoms objects -with a variety of backends including JSON, SQLite, and database server options.

-

For more information, see: -https://databases.fysik.dtu.dk/ase/ase/db/db.html

-
-
Parameters:
-
    -
  • config (dict) –

    -
    src (str): Either
      -
    • the path an ASE DB,

    • -
    • the connection address of an ASE DB,

    • -
    • a folder with multiple ASE DBs,

    • -
    • a list of folders with ASE DBs

    • -
    • a glob string to use to find ASE DBs, or

    • -
    • a list of ASE db paths/addresses.

    • -
    -

    If a folder, every file will be attempted as an ASE DB, and warnings -are raised for any files that can’t connect cleanly

    -

    Note that for large datasets, ID loading can be slow and there can be many -ids, so it’s advised to make loading the id list as easy as possible. There is not -an obvious way to get a full list of ids from most ASE dbs besides simply looping -through the entire dataset. See the AseLMDBDataset which was written with this usecase -in mind.

    -
    -
    -

    connect_args (dict): Keyword arguments for ase.db.connect()

    -
    -
    select_args (dict): Keyword arguments for ase.db.select()

    You can use this to query/filter your database

    -
    -
    a2g_args (dict): Keyword arguments for fairchem.core.preprocessing.AtomsToGraphs()

    default options will work for most users

    -

    If you are using this for a training dataset, set -“r_energy”:True, “r_forces”:True, and/or “r_stress”:True as appropriate -In that case, energy/forces must be in the database

    -
    -
    keep_in_memory (bool): Store data in memory. This helps avoid random reads if you need

    to iterate over a dataset many times (e.g. training for many epochs). -Not recommended for large datasets.

    -
    -
    -

    atoms_transform_args (dict): Additional keyword arguments for the atoms_transform callable

    -
    -
    transforms (dict[str, dict]): Dictionary specifying data transforms as {transform_function: config}

    where config is a dictionary specifying arguments to the transform_function

    -
    -
    key_mapping (dict[str, str]): Dictionary specifying a mapping between the name of a property used

    in the model with the corresponding property as it was named in the dataset. Only need to use if -the name is different.

    -
    -
    -

  • -
  • atoms_transform (callable, optional) – Additional preprocessing function applied to the Atoms -object. Useful for applying tags, for example.

  • -
  • transform (callable, optional) – deprecated?

  • -
-
-
-
-
-_load_dataset_get_ids(config: dict) list[int]#
-
- -
-
-get_atoms(idx: int) ase.Atoms#
-

Get atoms object corresponding to datapoint idx. Useful to read other properties not in data object. -:param idx: index in dataset -:type idx: int

-
-
Returns:
-

ASE atoms corresponding to datapoint idx

-
-
Return type:
-

atoms

-
-
-
- -
-
-static connect_db(address: str | pathlib.Path, connect_args: dict | None = None) ase.db.core.Database#
-
- -
-
-close_db() None#
-
- -
-
-get_metadata(num_samples: int = 100) dict#
-
- -
-
-abstract get_relaxed_energy(identifier)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/embeddings/atomic_radii/index.html b/autoapi/core/datasets/embeddings/atomic_radii/index.html deleted file mode 100644 index 511e96e13..000000000 --- a/autoapi/core/datasets/embeddings/atomic_radii/index.html +++ /dev/null @@ -1,731 +0,0 @@ - - - - - - - - - - - core.datasets.embeddings.atomic_radii — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.datasets.embeddings.atomic_radii

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.datasets.embeddings.atomic_radii#

-

Atomic radii in picometers

-

NaN stored for unavailable parameters.

-
-

Module Contents#

-
-
-core.datasets.embeddings.atomic_radii.ATOMIC_RADII#
-
- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/embeddings/continuous_embeddings/index.html b/autoapi/core/datasets/embeddings/continuous_embeddings/index.html deleted file mode 100644 index 7f3171e96..000000000 --- a/autoapi/core/datasets/embeddings/continuous_embeddings/index.html +++ /dev/null @@ -1,743 +0,0 @@ - - - - - - - - - - - core.datasets.embeddings.continuous_embeddings — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.datasets.embeddings.continuous_embeddings

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.datasets.embeddings.continuous_embeddings#

-

CGCNN-like embeddings using continuous values instead of original k-hot.

-
-
Properties:

Group number -Period number -Electronegativity -Covalent radius -Valence electrons -First ionization energy -Electron affinity -Block -Atomic Volume

-
-
-

NaN stored for unavaialable parameters.

-
-

Module Contents#

-
-
-core.datasets.embeddings.continuous_embeddings.CONTINUOUS_EMBEDDINGS#
-
- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/embeddings/index.html b/autoapi/core/datasets/embeddings/index.html deleted file mode 100644 index d8c527b06..000000000 --- a/autoapi/core/datasets/embeddings/index.html +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - - - - - - core.datasets.embeddings — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.datasets.embeddings

- -
- -
-
- - - - -
- -
-

core.datasets.embeddings#

-
-

Submodules#

- -
-
-

Package Contents#

-
-
-core.datasets.embeddings.ATOMIC_RADII#
-
- -
-
-core.datasets.embeddings.CONTINUOUS_EMBEDDINGS#
-
- -
-
-core.datasets.embeddings.KHOT_EMBEDDINGS#
-
- -
-
-core.datasets.embeddings.QMOF_KHOT_EMBEDDINGS#
-
- -
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/embeddings/khot_embeddings/index.html b/autoapi/core/datasets/embeddings/khot_embeddings/index.html deleted file mode 100644 index f43b01527..000000000 --- a/autoapi/core/datasets/embeddings/khot_embeddings/index.html +++ /dev/null @@ -1,733 +0,0 @@ - - - - - - - - - - - core.datasets.embeddings.khot_embeddings — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.datasets.embeddings.khot_embeddings

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.datasets.embeddings.khot_embeddings#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-

Original CGCNN k-hot elemental embeddings.

-
-

Module Contents#

-
-
-core.datasets.embeddings.khot_embeddings.KHOT_EMBEDDINGS#
-
- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.html b/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.html deleted file mode 100644 index e6df70700..000000000 --- a/autoapi/core/datasets/embeddings/qmof_khot_embeddings/index.html +++ /dev/null @@ -1,735 +0,0 @@ - - - - - - - - - - - core.datasets.embeddings.qmof_khot_embeddings — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.datasets.embeddings.qmof_khot_embeddings

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.datasets.embeddings.qmof_khot_embeddings#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-

k-hot elemental embeddings from QMOF, motivated by the following Github Issue threads: -txie-93/cgcnn#2 -arosen93/QMOF#18

-
-

Module Contents#

-
-
-core.datasets.embeddings.qmof_khot_embeddings.QMOF_KHOT_EMBEDDINGS#
-
- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/lmdb_database/index.html b/autoapi/core/datasets/lmdb_database/index.html deleted file mode 100644 index 89756a989..000000000 --- a/autoapi/core/datasets/lmdb_database/index.html +++ /dev/null @@ -1,885 +0,0 @@ - - - - - - - - - - - core.datasets.lmdb_database — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.datasets.lmdb_database#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is modified from the ASE db json backend -and is thus licensed under the corresponding LGPL2.1 license

-

The ASE notice for the LGPL2.1 license is available here: -ase/ase/-/blob/master/LICENSE

-
-

Module Contents#

-
-

Classes#

- - - - - - -

LMDBDatabase

Base class for all databases.

-
-
-

Attributes#

- - - - - - -

RESERVED_KEYS

-
-
-core.datasets.lmdb_database.RESERVED_KEYS = ['nextid', 'metadata', 'deleted_ids']#
-
- -
-
-class core.datasets.lmdb_database.LMDBDatabase(filename: str | pathlib.Path | None = None, create_indices: bool = True, use_lock_file: bool = False, serial: bool = False, readonly: bool = False, *args, **kwargs)#
-

Bases: ase.db.core.Database

-

Base class for all databases.

-
-
-property metadata#
-

Load the metadata from the DB if present

-
- -
-
-property _nextid#
-

Get the id of the next row to be written

-
- -
-
-__enter__() typing_extensions.Self#
-
- -
-
-__exit__(exc_type, exc_value, tb) None#
-
- -
-
-close() None#
-
- -
-
-_write(atoms: ase.Atoms | ase.db.row.AtomsRow, key_value_pairs: dict, data: dict | None, idx: int | None = None) None#
-
- -
-
-_update(idx: int, key_value_pairs: dict | None = None, data: dict | None = None)#
-
- -
-
-_write_deleted_ids()#
-
- -
-
-delete(ids: list[int]) None#
-

Delete rows.

-
- -
-
-_get_row(idx: int, include_data: bool = True)#
-
- -
-
-_get_row_by_index(index: int, include_data: bool = True)#
-

Auxiliary function to get the ith entry, rather than a specific id

-
- -
-
-_select(keys, cmps: list[tuple[str, str, str]], explain: bool = False, verbosity: int = 0, limit: int | None = None, offset: int = 0, sort: str | None = None, include_data: bool = True, columns: str = 'all')#
-
- -
-
-count(selection=None, **kwargs) int#
-

Count rows.

-

See the select() method for the selection syntax. Use db.count() or -len(db) to count all rows.

-
- -
-
-_load_ids() None#
-

Load ids from the DB

-

Since ASE db ids are mostly 1-N integers, but can be missing entries -if ids have been deleted. To save space and operating under the assumption -that there will probably not be many deletions in most OCP datasets, -we just store the deleted ids.

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/lmdb_dataset/index.html b/autoapi/core/datasets/lmdb_dataset/index.html deleted file mode 100644 index 903bd2d60..000000000 --- a/autoapi/core/datasets/lmdb_dataset/index.html +++ /dev/null @@ -1,920 +0,0 @@ - - - - - - - - - - - core.datasets.lmdb_dataset — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.datasets.lmdb_dataset#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

LmdbDataset

An abstract class representing a Dataset.

SinglePointLmdbDataset

An abstract class representing a Dataset.

TrajectoryLmdbDataset

An abstract class representing a Dataset.

-
-
-

Functions#

- - - - - - -

data_list_collater(→ torch_geometric.data.data.BaseData)

-
-
-

Attributes#

- - - - - - -

T_co

-
-
-core.datasets.lmdb_dataset.T_co#
-
- -
-
-class core.datasets.lmdb_dataset.LmdbDataset(config)#
-

Bases: torch.utils.data.Dataset[T_co]

-

An abstract class representing a Dataset.

-

All datasets that represent a map from keys to data samples should subclass -it. All subclasses should overwrite __getitem__(), supporting fetching a -data sample for a given key. Subclasses could also optionally overwrite -__len__(), which is expected to return the size of the dataset by many -Sampler implementations and the default options -of DataLoader. Subclasses could also -optionally implement __getitems__(), for speedup batched samples -loading. This method accepts list of indices of samples of batch and returns -list of samples.

-
-

Note

-

DataLoader by default constructs an index -sampler that yields integral indices. To make it work with a map-style -dataset with non-integral indices/keys, a custom sampler must be provided.

-
-
-
-metadata_path: pathlib.Path#
-
- -
-
-sharded: bool#
-

Dataset class to load from LMDB files containing relaxation -trajectories or single point computations. -Useful for Structure to Energy & Force (S2EF), Initial State to -Relaxed State (IS2RS), and Initial State to Relaxed Energy (IS2RE) tasks. -The keys in the LMDB must be integers (stored as ascii objects) starting -from 0 through the length of the LMDB. For historical reasons any key named -“length” is ignored since that was used to infer length of many lmdbs in the same -folder, but lmdb lengths are now calculated directly from the number of keys. -:param config: Dataset configuration -:type config: dict

-
- -
-
-__len__() int#
-
- -
-
-__getitem__(idx: int) T_co#
-
- -
-
-connect_db(lmdb_path: pathlib.Path | None = None) lmdb.Environment#
-
- -
-
-close_db() None#
-
- -
-
-get_metadata(num_samples: int = 100)#
-
- -
- -
-
-class core.datasets.lmdb_dataset.SinglePointLmdbDataset(config, transform=None)#
-

Bases: LmdbDataset[torch_geometric.data.data.BaseData]

-

An abstract class representing a Dataset.

-

All datasets that represent a map from keys to data samples should subclass -it. All subclasses should overwrite __getitem__(), supporting fetching a -data sample for a given key. Subclasses could also optionally overwrite -__len__(), which is expected to return the size of the dataset by many -Sampler implementations and the default options -of DataLoader. Subclasses could also -optionally implement __getitems__(), for speedup batched samples -loading. This method accepts list of indices of samples of batch and returns -list of samples.

-
-

Note

-

DataLoader by default constructs an index -sampler that yields integral indices. To make it work with a map-style -dataset with non-integral indices/keys, a custom sampler must be provided.

-
-
- -
-
-class core.datasets.lmdb_dataset.TrajectoryLmdbDataset(config, transform=None)#
-

Bases: LmdbDataset[torch_geometric.data.data.BaseData]

-

An abstract class representing a Dataset.

-

All datasets that represent a map from keys to data samples should subclass -it. All subclasses should overwrite __getitem__(), supporting fetching a -data sample for a given key. Subclasses could also optionally overwrite -__len__(), which is expected to return the size of the dataset by many -Sampler implementations and the default options -of DataLoader. Subclasses could also -optionally implement __getitems__(), for speedup batched samples -loading. This method accepts list of indices of samples of batch and returns -list of samples.

-
-

Note

-

DataLoader by default constructs an index -sampler that yields integral indices. To make it work with a map-style -dataset with non-integral indices/keys, a custom sampler must be provided.

-
-
- -
-
-core.datasets.lmdb_dataset.data_list_collater(data_list: list[torch_geometric.data.data.BaseData], otf_graph: bool = False) torch_geometric.data.data.BaseData#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/oc22_lmdb_dataset/index.html b/autoapi/core/datasets/oc22_lmdb_dataset/index.html deleted file mode 100644 index 09a0050d7..000000000 --- a/autoapi/core/datasets/oc22_lmdb_dataset/index.html +++ /dev/null @@ -1,798 +0,0 @@ - - - - - - - - - - - core.datasets.oc22_lmdb_dataset — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.datasets.oc22_lmdb_dataset

- -
- -
-
- - - - -
- -
-

core.datasets.oc22_lmdb_dataset#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

OC22LmdbDataset

Dataset class to load from LMDB files containing relaxation

-
-
-class core.datasets.oc22_lmdb_dataset.OC22LmdbDataset(config, transform=None)#
-

Bases: torch.utils.data.Dataset

-

Dataset class to load from LMDB files containing relaxation -trajectories or single point computations.

-

Useful for Structure to Energy & Force (S2EF), Initial State to -Relaxed State (IS2RS), and Initial State to Relaxed Energy (IS2RE) tasks.

-

The keys in the LMDB must be integers (stored as ascii objects) starting -from 0 through the length of the LMDB. For historical reasons any key named -“length” is ignored since that was used to infer length of many lmdbs in the same -folder, but lmdb lengths are now calculated directly from the number of keys.

-
-
Parameters:
-
    -
  • config (dict) – Dataset configuration

  • -
  • transform (callable, optional) – Data transform function. -(default: None)

  • -
-
-
-
-
-__len__() int#
-
- -
-
-__getitem__(idx)#
-
- -
-
-connect_db(lmdb_path=None)#
-
- -
-
-close_db() None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/datasets/target_metadata_guesser/index.html b/autoapi/core/datasets/target_metadata_guesser/index.html deleted file mode 100644 index f53b7a459..000000000 --- a/autoapi/core/datasets/target_metadata_guesser/index.html +++ /dev/null @@ -1,795 +0,0 @@ - - - - - - - - - - - core.datasets.target_metadata_guesser — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.datasets.target_metadata_guesser#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - -

uniform_atoms_lengths(→ bool)

target_constant_shape(→ bool)

target_per_atom(→ bool)

target_extensive(atoms_lens, target_samples[, threshold])

guess_target_metadata(atoms_len, target_samples)

guess_property_metadata(atoms_list)

-
-
-core.datasets.target_metadata_guesser.uniform_atoms_lengths(atoms_lens) bool#
-
- -
-
-core.datasets.target_metadata_guesser.target_constant_shape(atoms_lens, target_samples) bool#
-
- -
-
-core.datasets.target_metadata_guesser.target_per_atom(atoms_lens, target_samples) bool#
-
- -
-
-core.datasets.target_metadata_guesser.target_extensive(atoms_lens, target_samples, threshold: float = 0.2)#
-
- -
-
-core.datasets.target_metadata_guesser.guess_target_metadata(atoms_len, target_samples)#
-
- -
-
-core.datasets.target_metadata_guesser.guess_property_metadata(atoms_list)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/index.html b/autoapi/core/index.html deleted file mode 100644 index 3d30826e0..000000000 --- a/autoapi/core/index.html +++ /dev/null @@ -1,912 +0,0 @@ - - - - - - - - - - - core — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Subpackages#

-
- -
-
-
-

Submodules#

-
- -
-
-
-

Package Contents#

-
-
-core.__version__#
-
- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/base/index.html b/autoapi/core/models/base/index.html deleted file mode 100644 index ad7268546..000000000 --- a/autoapi/core/models/base/index.html +++ /dev/null @@ -1,813 +0,0 @@ - - - - - - - - - - - core.models.base — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.base

- -
- -
-
- - - - -
- -
-

core.models.base#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

BaseModel

Base class for all neural network modules.

-
-
-class core.models.base.BaseModel(num_atoms=None, bond_feat_dim=None, num_targets=None)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-property num_params: int#
-
- -
-
-abstract forward(data)#
-
- -
-
-generate_graph(data, cutoff=None, max_neighbors=None, use_pbc=None, otf_graph=None, enforce_max_neighbors_strictly=None)#
-
- -
-
-no_weight_decay() list#
-

Returns a list of parameters with no weight decay.

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/dimenet_plus_plus/index.html b/autoapi/core/models/dimenet_plus_plus/index.html deleted file mode 100644 index 0096b96da..000000000 --- a/autoapi/core/models/dimenet_plus_plus/index.html +++ /dev/null @@ -1,1030 +0,0 @@ - - - - - - - - - - - core.models.dimenet_plus_plus — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.dimenet_plus_plus#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-

-

This code borrows heavily from the DimeNet implementation as part of -pytorch-geometric: rusty1s/pytorch_geometric. License:

-

-

Copyright (c) 2020 Matthias Fey <matthias.fey@tu-dortmund.de>

-

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:

-

The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software.

-

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.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

InteractionPPBlock

Base class for all neural network modules.

OutputPPBlock

Base class for all neural network modules.

DimeNetPlusPlus

DimeNet++ implementation based on klicperajo/dimenet.

DimeNetPlusPlusWrap

DimeNet++ implementation based on klicperajo/dimenet.

-
-
-

Attributes#

- - - - - - -

sym

-
-
-core.models.dimenet_plus_plus.sym#
-
- -
-
-class core.models.dimenet_plus_plus.InteractionPPBlock(hidden_channels: int, int_emb_size: int, basis_emb_size: int, num_spherical: int, num_radial: int, num_before_skip: int, num_after_skip: int, act='silu')#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-reset_parameters() None#
-
- -
-
-forward(x, rbf, sbf, idx_kj, idx_ji)#
-
- -
- -
-
-class core.models.dimenet_plus_plus.OutputPPBlock(num_radial: int, hidden_channels: int, out_emb_channels: int, out_channels: int, num_layers: int, act: str = 'silu')#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-reset_parameters() None#
-
- -
-
-forward(x, rbf, i, num_nodes: int | None = None)#
-
- -
- -
-
-class core.models.dimenet_plus_plus.DimeNetPlusPlus(hidden_channels: int, out_channels: int, num_blocks: int, int_emb_size: int, basis_emb_size: int, out_emb_channels: int, num_spherical: int, num_radial: int, cutoff: float = 5.0, envelope_exponent: int = 5, num_before_skip: int = 1, num_after_skip: int = 2, num_output_layers: int = 3, act: str = 'silu')#
-

Bases: torch.nn.Module

-

DimeNet++ implementation based on klicperajo/dimenet.

-
-
Parameters:
-
    -
  • hidden_channels (int) – Hidden embedding size.

  • -
  • out_channels (int) – Size of each output sample.

  • -
  • num_blocks (int) – Number of building blocks.

  • -
  • int_emb_size (int) – Embedding size used for interaction triplets

  • -
  • basis_emb_size (int) – Embedding size used in the basis transformation

  • -
  • out_emb_channels (int) – Embedding size used for atoms in the output block

  • -
  • num_spherical (int) – Number of spherical harmonics.

  • -
  • num_radial (int) – Number of radial basis functions.

  • -
  • cutoff – (float, optional): Cutoff distance for interatomic -interactions. (default: 5.0)

  • -
  • envelope_exponent (int, optional) – Shape of the smooth cutoff. -(default: 5)

  • -
  • num_before_skip – (int, optional): Number of residual layers in the -interaction blocks before the skip connection. (default: 1)

  • -
  • num_after_skip – (int, optional): Number of residual layers in the -interaction blocks after the skip connection. (default: 2)

  • -
  • num_output_layers – (int, optional): Number of linear layers for the -output blocks. (default: 3)

  • -
  • act – (function, optional): The activation funtion. -(default: silu)

  • -
-
-
-
-
-url = 'https://github.com/klicperajo/dimenet/raw/master/pretrained'#
-
- -
-
-reset_parameters() None#
-
- -
-
-triplets(edge_index, cell_offsets, num_nodes: int)#
-
- -
-
-abstract forward(z, pos, batch=None)#
-
- -
- -
-
-class core.models.dimenet_plus_plus.DimeNetPlusPlusWrap(num_atoms: int, bond_feat_dim: int, num_targets: int, use_pbc: bool = True, regress_forces: bool = True, hidden_channels: int = 128, num_blocks: int = 4, int_emb_size: int = 64, basis_emb_size: int = 8, out_emb_channels: int = 256, num_spherical: int = 7, num_radial: int = 6, otf_graph: bool = False, cutoff: float = 10.0, envelope_exponent: int = 5, num_before_skip: int = 1, num_after_skip: int = 2, num_output_layers: int = 3)#
-

Bases: DimeNetPlusPlus, fairchem.core.models.base.BaseModel

-

DimeNet++ implementation based on klicperajo/dimenet.

-
-
Parameters:
-
    -
  • hidden_channels (int) – Hidden embedding size.

  • -
  • out_channels (int) – Size of each output sample.

  • -
  • num_blocks (int) – Number of building blocks.

  • -
  • int_emb_size (int) – Embedding size used for interaction triplets

  • -
  • basis_emb_size (int) – Embedding size used in the basis transformation

  • -
  • out_emb_channels (int) – Embedding size used for atoms in the output block

  • -
  • num_spherical (int) – Number of spherical harmonics.

  • -
  • num_radial (int) – Number of radial basis functions.

  • -
  • cutoff – (float, optional): Cutoff distance for interatomic -interactions. (default: 5.0)

  • -
  • envelope_exponent (int, optional) – Shape of the smooth cutoff. -(default: 5)

  • -
  • num_before_skip – (int, optional): Number of residual layers in the -interaction blocks before the skip connection. (default: 1)

  • -
  • num_after_skip – (int, optional): Number of residual layers in the -interaction blocks after the skip connection. (default: 2)

  • -
  • num_output_layers – (int, optional): Number of linear layers for the -output blocks. (default: 3)

  • -
  • act – (function, optional): The activation funtion. -(default: silu)

  • -
-
-
-
-
-property num_params: int#
-
- -
-
-_forward(data)#
-
- -
-
-forward(data)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/drop/index.html b/autoapi/core/models/equiformer_v2/drop/index.html deleted file mode 100644 index 81723846f..000000000 --- a/autoapi/core/models/equiformer_v2/drop/index.html +++ /dev/null @@ -1,1011 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.drop — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.equiformer_v2.drop#

-

Add extra_repr into DropPath implemented by timm -for displaying more info.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - -

DropPath

Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

GraphDropPath

Consider batch for graph data when dropping paths.

EquivariantDropout

Base class for all neural network modules.

EquivariantScalarsDropout

Base class for all neural network modules.

EquivariantDropoutArraySphericalHarmonics

Base class for all neural network modules.

-
-
-

Functions#

- - - - - - -

drop_path(→ torch.Tensor)

Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

-
-
-core.models.equiformer_v2.drop.drop_path(x: torch.Tensor, drop_prob: float = 0.0, training: bool = False) torch.Tensor#
-

Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks). -This is the same as the DropConnect impl I created for EfficientNet, etc networks, however, -the original name is misleading as ‘Drop Connect’ is a different form of dropout in a separate paper… -See discussion: tensorflow/tpu#494 … I’ve opted for -changing the layer and argument names to ‘drop path’ rather than mix DropConnect as a layer name and use -‘survival rate’ as the argument.

-
- -
-
-class core.models.equiformer_v2.drop.DropPath(drop_prob: float)#
-

Bases: torch.nn.Module

-

Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

-
-
-forward(x: torch.Tensor) torch.Tensor#
-
- -
-
-extra_repr() str#
-

Set the extra representation of the module.

-

To print customized extra information, you should re-implement -this method in your own modules. Both single-line and multi-line -strings are acceptable.

-
- -
- -
-
-class core.models.equiformer_v2.drop.GraphDropPath(drop_prob: float)#
-

Bases: torch.nn.Module

-

Consider batch for graph data when dropping paths.

-
-
-forward(x: torch.Tensor, batch) torch.Tensor#
-
- -
-
-extra_repr() str#
-

Set the extra representation of the module.

-

To print customized extra information, you should re-implement -this method in your own modules. Both single-line and multi-line -strings are acceptable.

-
- -
- -
-
-class core.models.equiformer_v2.drop.EquivariantDropout(irreps, drop_prob: float)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(x: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.equiformer_v2.drop.EquivariantScalarsDropout(irreps, drop_prob: float)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(x: torch.Tensor) torch.Tensor#
-
- -
-
-extra_repr() str#
-

Set the extra representation of the module.

-

To print customized extra information, you should re-implement -this method in your own modules. Both single-line and multi-line -strings are acceptable.

-
- -
- -
-
-class core.models.equiformer_v2.drop.EquivariantDropoutArraySphericalHarmonics(drop_prob: float, drop_graph: bool = False)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(x: torch.Tensor, batch=None) torch.Tensor#
-
- -
-
-extra_repr() str#
-

Set the extra representation of the module.

-

To print customized extra information, you should re-implement -this method in your own modules. Both single-line and multi-line -strings are acceptable.

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/edge_rot_mat/index.html b/autoapi/core/models/equiformer_v2/edge_rot_mat/index.html deleted file mode 100644 index 1ec5066df..000000000 --- a/autoapi/core/models/equiformer_v2/edge_rot_mat/index.html +++ /dev/null @@ -1,745 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.edge_rot_mat — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.edge_rot_mat

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.equiformer_v2.edge_rot_mat#

-
-

Module Contents#

-
-

Functions#

- - - - - - -

init_edge_rot_mat(edge_distance_vec)

-
-
-core.models.equiformer_v2.edge_rot_mat.init_edge_rot_mat(edge_distance_vec)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/equiformer_v2_oc20/index.html b/autoapi/core/models/equiformer_v2/equiformer_v2_oc20/index.html deleted file mode 100644 index c43c5daf8..000000000 --- a/autoapi/core/models/equiformer_v2/equiformer_v2_oc20/index.html +++ /dev/null @@ -1,879 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.equiformer_v2_oc20 — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.equiformer_v2.equiformer_v2_oc20#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

EquiformerV2_OC20

Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

-
-
-

Attributes#

- - - - - - - - - -

_AVG_NUM_NODES

_AVG_DEGREE

-
-
-core.models.equiformer_v2.equiformer_v2_oc20._AVG_NUM_NODES = 77.81317#
-
- -
-
-core.models.equiformer_v2.equiformer_v2_oc20._AVG_DEGREE = 23.395238876342773#
-
- -
-
-class core.models.equiformer_v2.equiformer_v2_oc20.EquiformerV2_OC20(num_atoms: int, bond_feat_dim: int, num_targets: int, use_pbc: bool = True, regress_forces: bool = True, otf_graph: bool = True, max_neighbors: int = 500, max_radius: float = 5.0, max_num_elements: int = 90, num_layers: int = 12, sphere_channels: int = 128, attn_hidden_channels: int = 128, num_heads: int = 8, attn_alpha_channels: int = 32, attn_value_channels: int = 16, ffn_hidden_channels: int = 512, norm_type: str = 'rms_norm_sh', lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, grid_resolution: int | None = None, num_sphere_samples: int = 128, edge_channels: int = 128, use_atom_edge_embedding: bool = True, share_atom_edge_embedding: bool = False, use_m_share_rad: bool = False, distance_function: str = 'gaussian', num_distance_basis: int = 512, attn_activation: str = 'scaled_silu', use_s2_act_attn: bool = False, use_attn_renorm: bool = True, ffn_activation: str = 'scaled_silu', use_gate_act: bool = False, use_grid_mlp: bool = False, use_sep_s2_act: bool = True, alpha_drop: float = 0.1, drop_path_rate: float = 0.05, proj_drop: float = 0.0, weight_init: str = 'normal', enforce_max_neighbors_strictly: bool = True, avg_num_nodes: float | None = None, avg_degree: float | None = None, use_energy_lin_ref: bool | None = False, load_energy_lin_ref: bool | None = False)#
-

Bases: fairchem.core.models.base.BaseModel

-

Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

-
-
Parameters:
-
    -
  • use_pbc (bool) – Use periodic boundary conditions

  • -
  • regress_forces (bool) – Compute forces

  • -
  • otf_graph (bool) – Compute graph On The Fly (OTF)

  • -
  • max_neighbors (int) – Maximum number of neighbors per atom

  • -
  • max_radius (float) – Maximum distance between nieghboring atoms in Angstroms

  • -
  • max_num_elements (int) – Maximum atomic number

  • -
  • num_layers (int) – Number of layers in the GNN

  • -
  • sphere_channels (int) – Number of spherical channels (one set per resolution)

  • -
  • attn_hidden_channels (int) – Number of hidden channels used during SO(2) graph attention

  • -
  • num_heads (int) – Number of attention heads

  • -
  • attn_alpha_head (int) – Number of channels for alpha vector in each attention head

  • -
  • attn_value_head (int) – Number of channels for value vector in each attention head

  • -
  • ffn_hidden_channels (int) – Number of hidden channels used during feedforward network

  • -
  • norm_type (str) – Type of normalization layer ([‘layer_norm’, ‘layer_norm_sh’, ‘rms_norm_sh’])

  • -
  • lmax_list (int) – List of maximum degree of the spherical harmonics (1 to 10)

  • -
  • mmax_list (int) – List of maximum order of the spherical harmonics (0 to lmax)

  • -
  • grid_resolution (int) – Resolution of SO3_Grid

  • -
  • num_sphere_samples (int) – Number of samples used to approximate the integration of the sphere in the output blocks

  • -
  • edge_channels (int) – Number of channels for the edge invariant features

  • -
  • use_atom_edge_embedding (bool) – Whether to use atomic embedding along with relative distance for edge scalar features

  • -
  • share_atom_edge_embedding (bool) – Whether to share atom_edge_embedding across all blocks

  • -
  • use_m_share_rad (bool) – Whether all m components within a type-L vector of one channel share radial function weights

  • -
  • distance_function ("gaussian", "sigmoid", "linearsigmoid", "silu") – Basis function used for distances

  • -
  • attn_activation (str) – Type of activation function for SO(2) graph attention

  • -
  • use_s2_act_attn (bool) – Whether to use attention after S2 activation. Otherwise, use the same attention as Equiformer

  • -
  • use_attn_renorm (bool) – Whether to re-normalize attention weights

  • -
  • ffn_activation (str) – Type of activation function for feedforward network

  • -
  • use_gate_act (bool) – If True, use gate activation. Otherwise, use S2 activation

  • -
  • use_grid_mlp (bool) – If True, use projecting to grids and performing MLPs for FFNs.

  • -
  • use_sep_s2_act (bool) – If True, use separable S2 activation when use_gate_act is False.

  • -
  • alpha_drop (float) – Dropout rate for attention weights

  • -
  • drop_path_rate (float) – Drop path rate

  • -
  • proj_drop (float) – Dropout rate for outputs of attention and FFN in Transformer blocks

  • -
  • weight_init (str) – [‘normal’, ‘uniform’] initialization of weights of linear layers except those in radial functions

  • -
  • enforce_max_neighbors_strictly (bool) – When edges are subselected based on the max_neighbors arg, arbitrarily select amongst equidistant / degenerate edges to have exactly the correct number.

  • -
  • avg_num_nodes (float) – Average number of nodes per graph

  • -
  • avg_degree (float) – Average degree of nodes in the graph

  • -
  • use_energy_lin_ref (bool) – Whether to add the per-atom energy references during prediction. -During training and validation, this should be kept False since we use the lin_ref parameter in the OC22 dataloader to subtract the per-atom linear references from the energy targets. -During prediction (where we don’t have energy targets), this can be set to True to add the per-atom linear references to the predicted energies.

  • -
  • load_energy_lin_ref (bool) – Whether to add nn.Parameters for the per-element energy references. -This additional flag is there to ensure compatibility when strict-loading checkpoints, since the use_energy_lin_ref flag can be either True or False even if the model is trained with linear references. -You can’t have use_energy_lin_ref = True and load_energy_lin_ref = False, since the model will not have the parameters for the linear references. All other combinations are fine.

  • -
-
-
-
-
-property num_params#
-
- -
-
-forward(data)#
-
- -
-
-_init_edge_rot_mat(data, edge_index, edge_distance_vec)#
-
- -
-
-_init_weights(m)#
-
- -
-
-_uniform_init_rad_func_linear_weights(m)#
-
- -
-
-_uniform_init_linear_weights(m)#
-
- -
-
-no_weight_decay() set#
-

Returns a list of parameters with no weight decay.

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/index.html b/autoapi/core/models/equiformer_v2/index.html deleted file mode 100644 index 073a80465..000000000 --- a/autoapi/core/models/equiformer_v2/index.html +++ /dev/null @@ -1,887 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2 — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.equiformer_v2#

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - -

EquiformerV2

Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

-
-
-class core.models.equiformer_v2.EquiformerV2(num_atoms: int, bond_feat_dim: int, num_targets: int, use_pbc: bool = True, regress_forces: bool = True, otf_graph: bool = True, max_neighbors: int = 500, max_radius: float = 5.0, max_num_elements: int = 90, num_layers: int = 12, sphere_channels: int = 128, attn_hidden_channels: int = 128, num_heads: int = 8, attn_alpha_channels: int = 32, attn_value_channels: int = 16, ffn_hidden_channels: int = 512, norm_type: str = 'rms_norm_sh', lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, grid_resolution: int | None = None, num_sphere_samples: int = 128, edge_channels: int = 128, use_atom_edge_embedding: bool = True, share_atom_edge_embedding: bool = False, use_m_share_rad: bool = False, distance_function: str = 'gaussian', num_distance_basis: int = 512, attn_activation: str = 'scaled_silu', use_s2_act_attn: bool = False, use_attn_renorm: bool = True, ffn_activation: str = 'scaled_silu', use_gate_act: bool = False, use_grid_mlp: bool = False, use_sep_s2_act: bool = True, alpha_drop: float = 0.1, drop_path_rate: float = 0.05, proj_drop: float = 0.0, weight_init: str = 'normal', enforce_max_neighbors_strictly: bool = True, avg_num_nodes: float | None = None, avg_degree: float | None = None, use_energy_lin_ref: bool | None = False, load_energy_lin_ref: bool | None = False)#
-

Bases: fairchem.core.models.base.BaseModel

-

Equiformer with graph attention built upon SO(2) convolution and feedforward network built upon S2 activation

-
-
Parameters:
-
    -
  • use_pbc (bool) – Use periodic boundary conditions

  • -
  • regress_forces (bool) – Compute forces

  • -
  • otf_graph (bool) – Compute graph On The Fly (OTF)

  • -
  • max_neighbors (int) – Maximum number of neighbors per atom

  • -
  • max_radius (float) – Maximum distance between nieghboring atoms in Angstroms

  • -
  • max_num_elements (int) – Maximum atomic number

  • -
  • num_layers (int) – Number of layers in the GNN

  • -
  • sphere_channels (int) – Number of spherical channels (one set per resolution)

  • -
  • attn_hidden_channels (int) – Number of hidden channels used during SO(2) graph attention

  • -
  • num_heads (int) – Number of attention heads

  • -
  • attn_alpha_head (int) – Number of channels for alpha vector in each attention head

  • -
  • attn_value_head (int) – Number of channels for value vector in each attention head

  • -
  • ffn_hidden_channels (int) – Number of hidden channels used during feedforward network

  • -
  • norm_type (str) – Type of normalization layer ([‘layer_norm’, ‘layer_norm_sh’, ‘rms_norm_sh’])

  • -
  • lmax_list (int) – List of maximum degree of the spherical harmonics (1 to 10)

  • -
  • mmax_list (int) – List of maximum order of the spherical harmonics (0 to lmax)

  • -
  • grid_resolution (int) – Resolution of SO3_Grid

  • -
  • num_sphere_samples (int) – Number of samples used to approximate the integration of the sphere in the output blocks

  • -
  • edge_channels (int) – Number of channels for the edge invariant features

  • -
  • use_atom_edge_embedding (bool) – Whether to use atomic embedding along with relative distance for edge scalar features

  • -
  • share_atom_edge_embedding (bool) – Whether to share atom_edge_embedding across all blocks

  • -
  • use_m_share_rad (bool) – Whether all m components within a type-L vector of one channel share radial function weights

  • -
  • distance_function ("gaussian", "sigmoid", "linearsigmoid", "silu") – Basis function used for distances

  • -
  • attn_activation (str) – Type of activation function for SO(2) graph attention

  • -
  • use_s2_act_attn (bool) – Whether to use attention after S2 activation. Otherwise, use the same attention as Equiformer

  • -
  • use_attn_renorm (bool) – Whether to re-normalize attention weights

  • -
  • ffn_activation (str) – Type of activation function for feedforward network

  • -
  • use_gate_act (bool) – If True, use gate activation. Otherwise, use S2 activation

  • -
  • use_grid_mlp (bool) – If True, use projecting to grids and performing MLPs for FFNs.

  • -
  • use_sep_s2_act (bool) – If True, use separable S2 activation when use_gate_act is False.

  • -
  • alpha_drop (float) – Dropout rate for attention weights

  • -
  • drop_path_rate (float) – Drop path rate

  • -
  • proj_drop (float) – Dropout rate for outputs of attention and FFN in Transformer blocks

  • -
  • weight_init (str) – [‘normal’, ‘uniform’] initialization of weights of linear layers except those in radial functions

  • -
  • enforce_max_neighbors_strictly (bool) – When edges are subselected based on the max_neighbors arg, arbitrarily select amongst equidistant / degenerate edges to have exactly the correct number.

  • -
  • avg_num_nodes (float) – Average number of nodes per graph

  • -
  • avg_degree (float) – Average degree of nodes in the graph

  • -
  • use_energy_lin_ref (bool) – Whether to add the per-atom energy references during prediction. -During training and validation, this should be kept False since we use the lin_ref parameter in the OC22 dataloader to subtract the per-atom linear references from the energy targets. -During prediction (where we don’t have energy targets), this can be set to True to add the per-atom linear references to the predicted energies.

  • -
  • load_energy_lin_ref (bool) – Whether to add nn.Parameters for the per-element energy references. -This additional flag is there to ensure compatibility when strict-loading checkpoints, since the use_energy_lin_ref flag can be either True or False even if the model is trained with linear references. -You can’t have use_energy_lin_ref = True and load_energy_lin_ref = False, since the model will not have the parameters for the linear references. All other combinations are fine.

  • -
-
-
-
-
-property num_params#
-
- -
-
-forward(data)#
-
- -
-
-_init_edge_rot_mat(data, edge_index, edge_distance_vec)#
-
- -
-
-_init_weights(m)#
-
- -
-
-_uniform_init_rad_func_linear_weights(m)#
-
- -
-
-_uniform_init_linear_weights(m)#
-
- -
-
-no_weight_decay() set#
-

Returns a list of parameters with no weight decay.

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/input_block/index.html b/autoapi/core/models/equiformer_v2/input_block/index.html deleted file mode 100644 index 571bcd5ff..000000000 --- a/autoapi/core/models/equiformer_v2/input_block/index.html +++ /dev/null @@ -1,778 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.input_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.input_block

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.equiformer_v2.input_block#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

EdgeDegreeEmbedding

-
param sphere_channels:
-

Number of spherical channels

-
-
-

-
-
-class core.models.equiformer_v2.input_block.EdgeDegreeEmbedding(sphere_channels: int, lmax_list: list[int], mmax_list: list[int], SO3_rotation, mappingReduced, max_num_elements: int, edge_channels_list, use_atom_edge_embedding: bool, rescale_factor)#
-

Bases: torch.nn.Module

-
-
Parameters:
-
    -
  • sphere_channels (int) – Number of spherical channels

  • -
  • (list (edge_channels_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • (list – SO3_Rotation): Class to calculate Wigner-D matrices and rotate embeddings

  • -
  • mappingReduced (CoefficientMappingModule) – Class to convert l and m indices once node embedding is rotated

  • -
  • max_num_elements (int) – Maximum number of atomic numbers

  • -
  • (list – int): List of sizes of invariant edge embedding. For example, [input_channels, hidden_channels, hidden_channels]. -The last one will be used as hidden size when use_atom_edge_embedding is True.

  • -
  • use_atom_edge_embedding (bool) – Whether to use atomic embedding along with relative distance for edge scalar features

  • -
  • rescale_factor (float) – Rescale the sum aggregation

  • -
-
-
-
-
-forward(atomic_numbers, edge_distance, edge_index)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/layer_norm/index.html b/autoapi/core/models/equiformer_v2/layer_norm/index.html deleted file mode 100644 index f9498a9bd..000000000 --- a/autoapi/core/models/equiformer_v2/layer_norm/index.html +++ /dev/null @@ -1,981 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.layer_norm — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.equiformer_v2.layer_norm#

-

1. Normalize features of shape (N, sphere_basis, C), -with sphere_basis = (lmax + 1) ** 2.

-

2. The difference from layer_norm.py is that all type-L vectors have -the same number of channels and input features are of shape (N, sphere_basis, C).

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - -

EquivariantLayerNormArray

Base class for all neural network modules.

EquivariantLayerNormArraySphericalHarmonics

    -
  1. Normalize over L = 0.

  2. -
-

EquivariantRMSNormArraySphericalHarmonics

    -
  1. Normalize across all m components from degrees L >= 0.

  2. -
-

EquivariantRMSNormArraySphericalHarmonicsV2

    -
  1. Normalize across all m components from degrees L >= 0.

  2. -
-

EquivariantDegreeLayerScale

    -
  1. Similar to Layer Scale used in CaiT (Going Deeper With Image Transformers (ICCV'21)), we scale the output of both attention and FFN.

  2. -
-

-
-
-

Functions#

- - - - - - - - - -

get_normalization_layer(norm_type, lmax, num_channels)

get_l_to_all_m_expand_index(lmax)

-
-
-core.models.equiformer_v2.layer_norm.get_normalization_layer(norm_type: str, lmax: int, num_channels: int, eps: float = 1e-05, affine: bool = True, normalization: str = 'component')#
-
- -
-
-core.models.equiformer_v2.layer_norm.get_l_to_all_m_expand_index(lmax: int)#
-
- -
-
-class core.models.equiformer_v2.layer_norm.EquivariantLayerNormArray(lmax: int, num_channels: int, eps: float = 1e-05, affine: bool = True, normalization: str = 'component')#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-__repr__() str#
-

Return repr(self).

-
- -
-
-forward(node_input)#
-

Assume input is of shape [N, sphere_basis, C]

-
- -
- -
-
-class core.models.equiformer_v2.layer_norm.EquivariantLayerNormArraySphericalHarmonics(lmax: int, num_channels: int, eps: float = 1e-05, affine: bool = True, normalization: str = 'component', std_balance_degrees: bool = True)#
-

Bases: torch.nn.Module

-
    -
  1. Normalize over L = 0.

  2. -
  3. Normalize across all m components from degrees L > 0.

  4. -
  5. Do not normalize separately for different L (L > 0).

  6. -
-
-
-__repr__() str#
-

Return repr(self).

-
- -
-
-forward(node_input)#
-

Assume input is of shape [N, sphere_basis, C]

-
- -
- -
-
-class core.models.equiformer_v2.layer_norm.EquivariantRMSNormArraySphericalHarmonics(lmax: int, num_channels: int, eps: float = 1e-05, affine: bool = True, normalization: str = 'component')#
-

Bases: torch.nn.Module

-
    -
  1. Normalize across all m components from degrees L >= 0.

  2. -
-
-
-__repr__() str#
-

Return repr(self).

-
- -
-
-forward(node_input)#
-

Assume input is of shape [N, sphere_basis, C]

-
- -
- -
-
-class core.models.equiformer_v2.layer_norm.EquivariantRMSNormArraySphericalHarmonicsV2(lmax: int, num_channels: int, eps: float = 1e-05, affine: bool = True, normalization: str = 'component', centering: bool = True, std_balance_degrees: bool = True)#
-

Bases: torch.nn.Module

-
    -
  1. Normalize across all m components from degrees L >= 0.

  2. -
  3. Expand weights and multiply with normalized feature to prevent slicing and concatenation.

  4. -
-
-
-__repr__() str#
-

Return repr(self).

-
- -
-
-forward(node_input)#
-

Assume input is of shape [N, sphere_basis, C]

-
- -
- -
-
-class core.models.equiformer_v2.layer_norm.EquivariantDegreeLayerScale(lmax: int, num_channels: int, scale_factor: float = 2.0)#
-

Bases: torch.nn.Module

-
    -
  1. Similar to Layer Scale used in CaiT (Going Deeper With Image Transformers (ICCV’21)), we scale the output of both attention and FFN.

  2. -
  3. For degree L > 0, we scale down the square root of 2 * L, which is to emulate halving the number of channels when using higher L.

  4. -
-
-
-__repr__() str#
-

Return repr(self).

-
- -
-
-forward(node_input)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/module_list/index.html b/autoapi/core/models/equiformer_v2/module_list/index.html deleted file mode 100644 index 2fc5bd961..000000000 --- a/autoapi/core/models/equiformer_v2/module_list/index.html +++ /dev/null @@ -1,780 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.module_list — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.module_list

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.equiformer_v2.module_list#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

ModuleListInfo

Holds submodules in a list.

-
-
-class core.models.equiformer_v2.module_list.ModuleListInfo(info_str, modules=None)#
-

Bases: torch.nn.ModuleList

-

Holds submodules in a list.

-

ModuleList can be indexed like a regular Python list, but -modules it contains are properly registered, and will be visible by all -Module methods.

-
-
Parameters:
-

modules (iterable, optional) – an iterable of modules to add

-
-
-

Example:

-
class MyModule(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.linears = nn.ModuleList([nn.Linear(10, 10) for i in range(10)])
-
-    def forward(self, x):
-        # ModuleList can act as an iterable, or be indexed using ints
-        for i, l in enumerate(self.linears):
-            x = self.linears[i // 2](x) + l(x)
-        return x
-
-
-
-
-__repr__() str#
-

Return a custom repr for ModuleList that compresses repeated module representations.

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/radial_function/index.html b/autoapi/core/models/equiformer_v2/radial_function/index.html deleted file mode 100644 index aee3864ea..000000000 --- a/autoapi/core/models/equiformer_v2/radial_function/index.html +++ /dev/null @@ -1,758 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.radial_function — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.radial_function

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.equiformer_v2.radial_function#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

RadialFunction

Contruct a radial function (linear layers + layer normalization + SiLU) given a list of channels

-
-
-class core.models.equiformer_v2.radial_function.RadialFunction(channels_list)#
-

Bases: torch.nn.Module

-

Contruct a radial function (linear layers + layer normalization + SiLU) given a list of channels

-
-
-forward(inputs)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/so2_ops/index.html b/autoapi/core/models/equiformer_v2/so2_ops/index.html deleted file mode 100644 index f63faf3f6..000000000 --- a/autoapi/core/models/equiformer_v2/so2_ops/index.html +++ /dev/null @@ -1,842 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.so2_ops — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.so2_ops

- -
- -
-
- - - - -
- -
-

core.models.equiformer_v2.so2_ops#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

SO2_m_Convolution

SO(2) Conv: Perform an SO(2) convolution on features corresponding to +- m

SO2_Convolution

SO(2) Block: Perform SO(2) convolutions for all m (orders)

SO2_Linear

SO(2) Linear: Perform SO(2) linear for all m (orders).

-
-
-class core.models.equiformer_v2.so2_ops.SO2_m_Convolution(m: int, sphere_channels: int, m_output_channels: int, lmax_list: list[int], mmax_list: list[int])#
-

Bases: torch.nn.Module

-

SO(2) Conv: Perform an SO(2) convolution on features corresponding to +- m

-
-
Parameters:
-
    -
  • m (int) – Order of the spherical harmonic coefficients

  • -
  • sphere_channels (int) – Number of spherical channels

  • -
  • m_output_channels (int) – Number of output channels used during the SO(2) conv

  • -
  • (list (mmax_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
-
-
-
-
-forward(x_m)#
-
- -
- -
-
-class core.models.equiformer_v2.so2_ops.SO2_Convolution(sphere_channels: int, m_output_channels: int, lmax_list: list[int], mmax_list: list[int], mappingReduced, internal_weights: bool = True, edge_channels_list: list[int] | None = None, extra_m0_output_channels: int | None = None)#
-

Bases: torch.nn.Module

-

SO(2) Block: Perform SO(2) convolutions for all m (orders)

-
-
Parameters:
-
    -
  • sphere_channels (int) – Number of spherical channels

  • -
  • m_output_channels (int) – Number of output channels used during the SO(2) conv

  • -
  • (list (edge_channels_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • mappingReduced (CoefficientMappingModule) – Used to extract a subset of m components

  • -
  • internal_weights (bool) – If True, not using radial function to multiply inputs features

  • -
  • (list – int): List of sizes of invariant edge embedding. For example, [input_channels, hidden_channels, hidden_channels].

  • -
  • extra_m0_output_channels (int) – If not None, return out_embedding (SO3_Embedding) and extra_m0_features (Tensor).

  • -
-
-
-
-
-forward(x, x_edge)#
-
- -
- -
-
-class core.models.equiformer_v2.so2_ops.SO2_Linear(sphere_channels: int, m_output_channels: int, lmax_list: list[int], mmax_list: list[int], mappingReduced, internal_weights: bool = False, edge_channels_list: list[int] | None = None)#
-

Bases: torch.nn.Module

-

SO(2) Linear: Perform SO(2) linear for all m (orders).

-
-
Parameters:
-
    -
  • sphere_channels (int) – Number of spherical channels

  • -
  • m_output_channels (int) – Number of output channels used during the SO(2) conv

  • -
  • (list (edge_channels_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • mappingReduced (CoefficientMappingModule) – Used to extract a subset of m components

  • -
  • internal_weights (bool) – If True, not using radial function to multiply inputs features

  • -
  • (list – int): List of sizes of invariant edge embedding. For example, [input_channels, hidden_channels, hidden_channels].

  • -
-
-
-
-
-forward(x, x_edge)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/so3/index.html b/autoapi/core/models/equiformer_v2/so3/index.html deleted file mode 100644 index 326f3c965..000000000 --- a/autoapi/core/models/equiformer_v2/so3/index.html +++ /dev/null @@ -1,1133 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.so3 — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.equiformer_v2.so3#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - - - - -

CoefficientMappingModule

Helper module for coefficients used to reshape lval <--> m and to get coefficients of specific degree or order

SO3_Embedding

Helper functions for performing operations on irreps embedding

SO3_Rotation

Helper functions for Wigner-D rotations

SO3_Grid

Helper functions for grid representation of the irreps

SO3_Linear

Base class for all neural network modules.

SO3_LinearV2

Base class for all neural network modules.

-
-
-class core.models.equiformer_v2.so3.CoefficientMappingModule(lmax_list: list[int], mmax_list: list[int])#
-

Bases: torch.nn.Module

-

Helper module for coefficients used to reshape lval <–> m and to get coefficients of specific degree or order

-
-
Parameters:
-
    -
  • (list (mmax_list) – int): List of maximum degree of the spherical harmonics

  • -
  • (list – int): List of maximum order of the spherical harmonics

  • -
-
-
-
-
-complex_idx(m: int, lmax: int, m_complex, l_harmonic)#
-

Add m_complex and l_harmonic to the input arguments -since we cannot use self.m_complex.

-
- -
-
-coefficient_idx(lmax: int, mmax: int)#
-
- -
-
-get_rotate_inv_rescale(lmax: int, mmax: int)#
-
- -
-
-__repr__() str#
-

Return repr(self).

-
- -
- -
-
-class core.models.equiformer_v2.so3.SO3_Embedding(length: int, lmax_list: list[int], num_channels: int, device: torch.device, dtype: torch.dtype)#
-

Helper functions for performing operations on irreps embedding

-
-
Parameters:
-
    -
  • length (int) – Batch size

  • -
  • (list (lmax_list) – int): List of maximum degree of the spherical harmonics

  • -
  • num_channels (int) – Number of channels

  • -
  • device – Device of the output

  • -
  • dtype – type of the output tensors

  • -
-
-
-
-
-clone() SO3_Embedding#
-
- -
-
-set_embedding(embedding) None#
-
- -
-
-set_lmax_mmax(lmax_list: list[int], mmax_list: list[int]) None#
-
- -
-
-_expand_edge(edge_index: torch.Tensor) None#
-
- -
-
-expand_edge(edge_index: torch.Tensor)#
-
- -
-
-_reduce_edge(edge_index: torch.Tensor, num_nodes: int)#
-
- -
-
-_m_primary(mapping)#
-
- -
-
-_l_primary(mapping)#
-
- -
-
-_rotate(SO3_rotation, lmax_list: list[int], mmax_list: list[int])#
-
- -
-
-_rotate_inv(SO3_rotation, mappingReduced)#
-
- -
-
-_grid_act(SO3_grid, act, mappingReduced)#
-
- -
-
-to_grid(SO3_grid, lmax=-1)#
-
- -
-
-_from_grid(x_grid, SO3_grid, lmax: int = -1)#
-
- -
- -
-
-class core.models.equiformer_v2.so3.SO3_Rotation(lmax: int)#
-

Bases: torch.nn.Module

-

Helper functions for Wigner-D rotations

-
-
Parameters:
-

(list (lmax_list) – int): List of maximum degree of the spherical harmonics

-
-
-
-
-set_wigner(rot_mat3x3)#
-
- -
-
-rotate(embedding, out_lmax: int, out_mmax: int)#
-
- -
-
-rotate_inv(embedding, in_lmax: int, in_mmax: int)#
-
- -
-
-RotationToWignerDMatrix(edge_rot_mat, start_lmax: int, end_lmax: int) torch.Tensor#
-
- -
- -
-
-class core.models.equiformer_v2.so3.SO3_Grid(lmax: int, mmax: int, normalization: str = 'integral', resolution: int | None = None)#
-

Bases: torch.nn.Module

-

Helper functions for grid representation of the irreps

-
-
Parameters:
-
    -
  • lmax (int) – Maximum degree of the spherical harmonics

  • -
  • mmax (int) – Maximum order of the spherical harmonics

  • -
-
-
-
-
-get_to_grid_mat(device)#
-
- -
-
-get_from_grid_mat(device)#
-
- -
-
-to_grid(embedding, lmax: int, mmax: int)#
-
- -
-
-from_grid(grid, lmax: int, mmax: int)#
-
- -
- -
-
-class core.models.equiformer_v2.so3.SO3_Linear(in_features: int, out_features: int, lmax: int, bias: bool = True)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(input_embedding, output_scale=None)#
-
- -
-
-__repr__() str#
-

Return repr(self).

-
- -
- -
-
-class core.models.equiformer_v2.so3.SO3_LinearV2(in_features: int, out_features: int, lmax: int, bias: bool = True)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(input_embedding)#
-
- -
-
-__repr__() str#
-

Return repr(self).

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.html b/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.html deleted file mode 100644 index da925b802..000000000 --- a/autoapi/core/models/equiformer_v2/trainers/energy_trainer/index.html +++ /dev/null @@ -1,799 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.trainers.energy_trainer — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.trainers.energy_trainer

- -
- -
-
- - - - -
- -
-

core.models.equiformer_v2.trainers.energy_trainer#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

EquiformerV2EnergyTrainer

Trainer class for the Structure to Energy & Force (S2EF) and Initial State to

-
-
-class core.models.equiformer_v2.trainers.energy_trainer.EquiformerV2EnergyTrainer(task, model, outputs, dataset, optimizer, loss_fns, eval_metrics, identifier, timestamp_id=None, run_dir=None, is_debug=False, print_every=100, seed=None, logger='wandb', local_rank=0, amp=False, cpu=False, slurm=None, noddp=False, name='ocp')#
-

Bases: fairchem.core.trainers.OCPTrainer

-

Trainer class for the Structure to Energy & Force (S2EF) and Initial State to -Relaxed State (IS2RS) tasks.

-
-

Note

-

Examples of configurations for task, model, dataset and optimizer -can be found in configs/ocp_s2ef -and configs/ocp_is2rs.

-
-
-
Parameters:
-
    -
  • task (dict) – Task configuration.

  • -
  • model (dict) – Model configuration.

  • -
  • outputs (dict) – Output property configuration.

  • -
  • dataset (dict) – Dataset configuration. The dataset needs to be a SinglePointLMDB dataset.

  • -
  • optimizer (dict) – Optimizer configuration.

  • -
  • loss_fns (dict) – Loss function configuration.

  • -
  • eval_metrics (dict) – Evaluation metrics configuration.

  • -
  • identifier (str) – Experiment identifier that is appended to log directory.

  • -
  • run_dir (str, optional) – Path to the run directory where logs are to be saved. -(default: None)

  • -
  • is_debug (bool, optional) – Run in debug mode. -(default: False)

  • -
  • print_every (int, optional) – Frequency of printing logs. -(default: 100)

  • -
  • seed (int, optional) – Random number seed. -(default: None)

  • -
  • logger (str, optional) – Type of logger to be used. -(default: wandb)

  • -
  • local_rank (int, optional) – Local rank of the process, only applicable for distributed training. -(default: 0)

  • -
  • amp (bool, optional) – Run using automatic mixed precision. -(default: False)

  • -
  • slurm (dict) – Slurm configuration. Currently just for keeping track. -(default: {})

  • -
  • noddp (bool, optional) – Run model without DDP.

  • -
-
-
-
-
-load_extras()#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.html b/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.html deleted file mode 100644 index e53b754e3..000000000 --- a/autoapi/core/models/equiformer_v2/trainers/forces_trainer/index.html +++ /dev/null @@ -1,799 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.trainers.forces_trainer — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.trainers.forces_trainer

- -
- -
-
- - - - -
- -
-

core.models.equiformer_v2.trainers.forces_trainer#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

EquiformerV2ForcesTrainer

Trainer class for the Structure to Energy & Force (S2EF) and Initial State to

-
-
-class core.models.equiformer_v2.trainers.forces_trainer.EquiformerV2ForcesTrainer(task, model, outputs, dataset, optimizer, loss_fns, eval_metrics, identifier, timestamp_id=None, run_dir=None, is_debug=False, print_every=100, seed=None, logger='wandb', local_rank=0, amp=False, cpu=False, slurm=None, noddp=False, name='ocp')#
-

Bases: fairchem.core.trainers.OCPTrainer

-

Trainer class for the Structure to Energy & Force (S2EF) and Initial State to -Relaxed State (IS2RS) tasks.

-
-

Note

-

Examples of configurations for task, model, dataset and optimizer -can be found in configs/ocp_s2ef -and configs/ocp_is2rs.

-
-
-
Parameters:
-
    -
  • task (dict) – Task configuration.

  • -
  • model (dict) – Model configuration.

  • -
  • outputs (dict) – Output property configuration.

  • -
  • dataset (dict) – Dataset configuration. The dataset needs to be a SinglePointLMDB dataset.

  • -
  • optimizer (dict) – Optimizer configuration.

  • -
  • loss_fns (dict) – Loss function configuration.

  • -
  • eval_metrics (dict) – Evaluation metrics configuration.

  • -
  • identifier (str) – Experiment identifier that is appended to log directory.

  • -
  • run_dir (str, optional) – Path to the run directory where logs are to be saved. -(default: None)

  • -
  • is_debug (bool, optional) – Run in debug mode. -(default: False)

  • -
  • print_every (int, optional) – Frequency of printing logs. -(default: 100)

  • -
  • seed (int, optional) – Random number seed. -(default: None)

  • -
  • logger (str, optional) – Type of logger to be used. -(default: wandb)

  • -
  • local_rank (int, optional) – Local rank of the process, only applicable for distributed training. -(default: 0)

  • -
  • amp (bool, optional) – Run using automatic mixed precision. -(default: False)

  • -
  • slurm (dict) – Slurm configuration. Currently just for keeping track. -(default: {})

  • -
  • noddp (bool, optional) – Run model without DDP.

  • -
-
-
-
-
-load_extras() None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/trainers/index.html b/autoapi/core/models/equiformer_v2/trainers/index.html deleted file mode 100644 index 89769d251..000000000 --- a/autoapi/core/models/equiformer_v2/trainers/index.html +++ /dev/null @@ -1,725 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.trainers — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.trainers

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.equiformer_v2.trainers#

-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/trainers/lr_scheduler/index.html b/autoapi/core/models/equiformer_v2/trainers/lr_scheduler/index.html deleted file mode 100644 index 1451ebb8b..000000000 --- a/autoapi/core/models/equiformer_v2/trainers/lr_scheduler/index.html +++ /dev/null @@ -1,900 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.trainers.lr_scheduler — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.equiformer_v2.trainers.lr_scheduler#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

CosineLRLambda

MultistepLRLambda

LRScheduler

Notes

-

-
-
-

Functions#

- - - - - - - - - - - - -

multiply(obj, num)

cosine_lr_lambda(current_step, scheduler_params)

multistep_lr_lambda(→ float)

-
-
-core.models.equiformer_v2.trainers.lr_scheduler.multiply(obj, num)#
-
- -
-
-core.models.equiformer_v2.trainers.lr_scheduler.cosine_lr_lambda(current_step: int, scheduler_params)#
-
- -
-
-class core.models.equiformer_v2.trainers.lr_scheduler.CosineLRLambda(scheduler_params)#
-
-
-__call__(current_step: int)#
-
- -
- -
-
-core.models.equiformer_v2.trainers.lr_scheduler.multistep_lr_lambda(current_step: int, scheduler_params) float#
-
- -
-
-class core.models.equiformer_v2.trainers.lr_scheduler.MultistepLRLambda(scheduler_params)#
-
-
-__call__(current_step: int) float#
-
- -
- -
-
-class core.models.equiformer_v2.trainers.lr_scheduler.LRScheduler(optimizer, config)#
-

Notes

-
    -
  1. scheduler.step() is called for every step for OC20 training.

  2. -
  3. We use “scheduler_params” in .yml to specify scheduler parameters.

  4. -
  5. -
    For cosine learning rate, we use LambdaLR with lambda function being cosine:

    scheduler: LambdaLR -scheduler_params:

    -
    -

    lambda_type: cosine -…

    -
    -
    -
    -
  6. -
  7. -
    Following 3., if cosine is used, scheduler_params in .yml looks like:

    scheduler: LambdaLR -scheduler_params:

    -
    -

    lambda_type: cosine -warmup_epochs: … -warmup_factor: … -lr_min_factor: …

    -
    -
    -
    -
  8. -
  9. -
    Following 3., if multistep is used, scheduler_params in .yml looks like:

    scheduler: LambdaLR -scheduler_params:

    -
    -

    lambda_type: multistep -warmup_epochs: … -warmup_factor: … -decay_epochs: … (list) -decay_rate: …

    -
    -
    -
    -
  10. -
-
-
Parameters:
-
    -
  • optimizer (obj) – torch optim object

  • -
  • config (dict) – Optim dict from the input config

  • -
-
-
-
-
-step(metrics=None, epoch=None)#
-
- -
-
-filter_kwargs(config)#
-
- -
-
-get_lr() float | None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/transformer_block/index.html b/autoapi/core/models/equiformer_v2/transformer_block/index.html deleted file mode 100644 index 2f6d2e887..000000000 --- a/autoapi/core/models/equiformer_v2/transformer_block/index.html +++ /dev/null @@ -1,890 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.transformer_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.transformer_block

- -
- -
-
- - - - -
- -
-

core.models.equiformer_v2.transformer_block#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

SO2EquivariantGraphAttention

SO2EquivariantGraphAttention: Perform MLP attention + non-linear message passing

FeedForwardNetwork

FeedForwardNetwork: Perform feedforward network with S2 activation or gate activation

TransBlockV2

-
param sphere_channels:
-

Number of spherical channels

-
-
-

-
-
-class core.models.equiformer_v2.transformer_block.SO2EquivariantGraphAttention(sphere_channels: int, hidden_channels: int, num_heads: int, attn_alpha_channels: int, attn_value_channels: int, output_channels: int, lmax_list: list[int], mmax_list: list[int], SO3_rotation, mappingReduced, SO3_grid, max_num_elements: int, edge_channels_list, use_atom_edge_embedding: bool = True, use_m_share_rad: bool = False, activation='scaled_silu', use_s2_act_attn: bool = False, use_attn_renorm: bool = True, use_gate_act: bool = False, use_sep_s2_act: bool = True, alpha_drop: float = 0.0)#
-

Bases: torch.nn.Module

-
-
SO2EquivariantGraphAttention: Perform MLP attention + non-linear message passing

SO(2) Convolution with radial function -> S2 Activation -> SO(2) Convolution -> attention weights and non-linear messages -attention weights * non-linear messages -> Linear

-
-
-
-
Parameters:
-
    -
  • sphere_channels (int) – Number of spherical channels

  • -
  • hidden_channels (int) – Number of hidden channels used during the SO(2) conv

  • -
  • num_heads (int) – Number of attention heads

  • -
  • attn_alpha_head (int) – Number of channels for alpha vector in each attention head

  • -
  • attn_value_head (int) – Number of channels for value vector in each attention head

  • -
  • output_channels (int) – Number of output channels

  • -
  • (list (edge_channels_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • (list – SO3_Rotation): Class to calculate Wigner-D matrices and rotate embeddings

  • -
  • mappingReduced (CoefficientMappingModule) – Class to convert l and m indices once node embedding is rotated

  • -
  • SO3_grid (SO3_grid) – Class used to convert from grid the spherical harmonic representations

  • -
  • max_num_elements (int) – Maximum number of atomic numbers

  • -
  • (list – int): List of sizes of invariant edge embedding. For example, [input_channels, hidden_channels, hidden_channels]. -The last one will be used as hidden size when use_atom_edge_embedding is True.

  • -
  • use_atom_edge_embedding (bool) – Whether to use atomic embedding along with relative distance for edge scalar features

  • -
  • use_m_share_rad (bool) – Whether all m components within a type-L vector of one channel share radial function weights

  • -
  • activation (str) – Type of activation function

  • -
  • use_s2_act_attn (bool) – Whether to use attention after S2 activation. Otherwise, use the same attention as Equiformer

  • -
  • use_attn_renorm (bool) – Whether to re-normalize attention weights

  • -
  • use_gate_act (bool) – If True, use gate activation. Otherwise, use S2 activation.

  • -
  • use_sep_s2_act (bool) – If True, use separable S2 activation when use_gate_act is False.

  • -
  • alpha_drop (float) – Dropout rate for attention weights

  • -
-
-
-
-
-forward(x: torch.Tensor, atomic_numbers, edge_distance: torch.Tensor, edge_index)#
-
- -
- -
-
-class core.models.equiformer_v2.transformer_block.FeedForwardNetwork(sphere_channels: int, hidden_channels: int, output_channels: int, lmax_list: list[int], mmax_list: list[int], SO3_grid, activation: str = 'scaled_silu', use_gate_act: bool = False, use_grid_mlp: bool = False, use_sep_s2_act: bool = True)#
-

Bases: torch.nn.Module

-

FeedForwardNetwork: Perform feedforward network with S2 activation or gate activation

-
-
Parameters:
-
    -
  • sphere_channels (int) – Number of spherical channels

  • -
  • hidden_channels (int) – Number of hidden channels used during feedforward network

  • -
  • output_channels (int) – Number of output channels

  • -
  • (list (mmax_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • SO3_grid (SO3_grid) – Class used to convert from grid the spherical harmonic representations

  • -
  • activation (str) – Type of activation function

  • -
  • use_gate_act (bool) – If True, use gate activation. Otherwise, use S2 activation

  • -
  • use_grid_mlp (bool) – If True, use projecting to grids and performing MLPs.

  • -
  • use_sep_s2_act (bool) – If True, use separable grid MLP when use_grid_mlp is True.

  • -
-
-
-
-
-forward(input_embedding)#
-
- -
- -
-
-class core.models.equiformer_v2.transformer_block.TransBlockV2(sphere_channels: int, attn_hidden_channels: int, num_heads: int, attn_alpha_channels: int, attn_value_channels: int, ffn_hidden_channels: int, output_channels: int, lmax_list: list[int], mmax_list: list[int], SO3_rotation, mappingReduced, SO3_grid, max_num_elements: int, edge_channels_list: list[int], use_atom_edge_embedding: bool = True, use_m_share_rad: bool = False, attn_activation: str = 'silu', use_s2_act_attn: bool = False, use_attn_renorm: bool = True, ffn_activation: str = 'silu', use_gate_act: bool = False, use_grid_mlp: bool = False, use_sep_s2_act: bool = True, norm_type: str = 'rms_norm_sh', alpha_drop: float = 0.0, drop_path_rate: float = 0.0, proj_drop: float = 0.0)#
-

Bases: torch.nn.Module

-
-
Parameters:
-
    -
  • sphere_channels (int) – Number of spherical channels

  • -
  • attn_hidden_channels (int) – Number of hidden channels used during SO(2) graph attention

  • -
  • num_heads (int) – Number of attention heads

  • -
  • attn_alpha_head (int) – Number of channels for alpha vector in each attention head

  • -
  • attn_value_head (int) – Number of channels for value vector in each attention head

  • -
  • ffn_hidden_channels (int) – Number of hidden channels used during feedforward network

  • -
  • output_channels (int) – Number of output channels

  • -
  • (list (edge_channels_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • (list – SO3_Rotation): Class to calculate Wigner-D matrices and rotate embeddings

  • -
  • mappingReduced (CoefficientMappingModule) – Class to convert l and m indices once node embedding is rotated

  • -
  • SO3_grid (SO3_grid) – Class used to convert from grid the spherical harmonic representations

  • -
  • max_num_elements (int) – Maximum number of atomic numbers

  • -
  • (list – int): List of sizes of invariant edge embedding. For example, [input_channels, hidden_channels, hidden_channels]. -The last one will be used as hidden size when use_atom_edge_embedding is True.

  • -
  • use_atom_edge_embedding (bool) – Whether to use atomic embedding along with relative distance for edge scalar features

  • -
  • use_m_share_rad (bool) – Whether all m components within a type-L vector of one channel share radial function weights

  • -
  • attn_activation (str) – Type of activation function for SO(2) graph attention

  • -
  • use_s2_act_attn (bool) – Whether to use attention after S2 activation. Otherwise, use the same attention as Equiformer

  • -
  • use_attn_renorm (bool) – Whether to re-normalize attention weights

  • -
  • ffn_activation (str) – Type of activation function for feedforward network

  • -
  • use_gate_act (bool) – If True, use gate activation. Otherwise, use S2 activation

  • -
  • use_grid_mlp (bool) – If True, use projecting to grids and performing MLPs for FFN.

  • -
  • use_sep_s2_act (bool) – If True, use separable S2 activation when use_gate_act is False.

  • -
  • norm_type (str) – Type of normalization layer ([‘layer_norm’, ‘layer_norm_sh’])

  • -
  • alpha_drop (float) – Dropout rate for attention weights

  • -
  • drop_path_rate (float) – Drop path rate

  • -
  • proj_drop (float) – Dropout rate for outputs of attention and FFN

  • -
-
-
-
-
-forward(x, atomic_numbers, edge_distance, edge_index, batch)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/equiformer_v2/wigner/index.html b/autoapi/core/models/equiformer_v2/wigner/index.html deleted file mode 100644 index 59e70c17b..000000000 --- a/autoapi/core/models/equiformer_v2/wigner/index.html +++ /dev/null @@ -1,774 +0,0 @@ - - - - - - - - - - - core.models.equiformer_v2.wigner — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.equiformer_v2.wigner

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.equiformer_v2.wigner#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

wigner_D(→ torch.Tensor)

_z_rot_mat(→ torch.Tensor)

-
-
-

Attributes#

- - - - - - -

_Jd

-
-
-core.models.equiformer_v2.wigner._Jd#
-
- -
-
-core.models.equiformer_v2.wigner.wigner_D(lv: int, alpha: torch.Tensor, beta: torch.Tensor, gamma: torch.Tensor) torch.Tensor#
-
- -
-
-core.models.equiformer_v2.wigner._z_rot_mat(angle: torch.Tensor, lv: int) torch.Tensor#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/escn/escn/index.html b/autoapi/core/models/escn/escn/index.html deleted file mode 100644 index 0eb61d401..000000000 --- a/autoapi/core/models/escn/escn/index.html +++ /dev/null @@ -1,1045 +0,0 @@ - - - - - - - - - - - core.models.escn.escn — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.escn.escn#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - - - - - - - - - - -

eSCN

Equivariant Spherical Channel Network

LayerBlock

Layer block: Perform one layer (message passing and aggregation) of the GNN

MessageBlock

Message block: Perform message passing

SO2Block

SO(2) Block: Perform SO(2) convolutions for all m (orders)

SO2Conv

SO(2) Conv: Perform an SO(2) convolution

EdgeBlock

Edge Block: Compute invariant edge representation from edge diatances and atomic numbers

EnergyBlock

Energy Block: Output block computing the energy

ForceBlock

Force Block: Output block computing the per atom forces

-
-
-class core.models.escn.escn.eSCN(num_atoms: int, bond_feat_dim: int, num_targets: int, use_pbc: bool = True, regress_forces: bool = True, otf_graph: bool = False, max_neighbors: int = 40, cutoff: float = 8.0, max_num_elements: int = 90, num_layers: int = 8, lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, sphere_channels: int = 128, hidden_channels: int = 256, edge_channels: int = 128, use_grid: bool = True, num_sphere_samples: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False)#
-

Bases: fairchem.core.models.base.BaseModel

-

Equivariant Spherical Channel Network -Paper: Reducing SO(3) Convolutions to SO(2) for Efficient Equivariant GNNs

-
-
Parameters:
-
    -
  • use_pbc (bool) – Use periodic boundary conditions

  • -
  • regress_forces (bool) – Compute forces

  • -
  • otf_graph (bool) – Compute graph On The Fly (OTF)

  • -
  • max_neighbors (int) – Maximum number of neighbors per atom

  • -
  • cutoff (float) – Maximum distance between nieghboring atoms in Angstroms

  • -
  • max_num_elements (int) – Maximum atomic number

  • -
  • num_layers (int) – Number of layers in the GNN

  • -
  • lmax_list (int) – List of maximum degree of the spherical harmonics (1 to 10)

  • -
  • mmax_list (int) – List of maximum order of the spherical harmonics (0 to lmax)

  • -
  • sphere_channels (int) – Number of spherical channels (one set per resolution)

  • -
  • hidden_channels (int) – Number of hidden units in message passing

  • -
  • num_sphere_samples (int) – Number of samples used to approximate the integration of the sphere in the output blocks

  • -
  • edge_channels (int) – Number of channels for the edge invariant features

  • -
  • distance_function ("gaussian", "sigmoid", "linearsigmoid", "silu") – Basis function used for distances

  • -
  • basis_width_scalar (float) – Width of distance basis function

  • -
  • distance_resolution (float) – Distance between distance basis functions in Angstroms

  • -
  • show_timing_info (bool) – Show timing and memory info

  • -
-
-
-
-
-property num_params: int#
-
- -
-
-forward(data)#
-
- -
-
-_init_edge_rot_mat(data, edge_index, edge_distance_vec)#
-
- -
- -
-
-class core.models.escn.escn.LayerBlock(layer_idx: int, sphere_channels: int, hidden_channels: int, edge_channels: int, lmax_list: list[int], mmax_list: list[int], distance_expansion, max_num_elements: int, SO3_grid: fairchem.core.models.escn.so3.SO3_Grid, act)#
-

Bases: torch.nn.Module

-

Layer block: Perform one layer (message passing and aggregation) of the GNN

-
-
Parameters:
-
    -
  • layer_idx (int) – Layer number

  • -
  • sphere_channels (int) – Number of spherical channels

  • -
  • hidden_channels (int) – Number of hidden channels used during the SO(2) conv

  • -
  • edge_channels (int) – Size of invariant edge embedding

  • -
  • (list (mmax_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • distance_expansion (func) – Function used to compute distance embedding

  • -
  • max_num_elements (int) – Maximum number of atomic numbers

  • -
  • SO3_grid (SO3_grid) – Class used to convert from grid the spherical harmonic representations

  • -
  • act (function) – Non-linear activation function

  • -
-
-
-
-
-forward(x, atomic_numbers, edge_distance, edge_index, SO3_edge_rot, mappingReduced)#
-
- -
- -
-
-class core.models.escn.escn.MessageBlock(layer_idx: int, sphere_channels: int, hidden_channels: int, edge_channels: int, lmax_list: list[int], mmax_list: list[int], distance_expansion, max_num_elements: int, SO3_grid: fairchem.core.models.escn.so3.SO3_Grid, act)#
-

Bases: torch.nn.Module

-

Message block: Perform message passing

-
-
Parameters:
-
    -
  • layer_idx (int) – Layer number

  • -
  • sphere_channels (int) – Number of spherical channels

  • -
  • hidden_channels (int) – Number of hidden channels used during the SO(2) conv

  • -
  • edge_channels (int) – Size of invariant edge embedding

  • -
  • (list (mmax_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • distance_expansion (func) – Function used to compute distance embedding

  • -
  • max_num_elements (int) – Maximum number of atomic numbers

  • -
  • SO3_grid (SO3_grid) – Class used to convert from grid the spherical harmonic representations

  • -
  • act (function) – Non-linear activation function

  • -
-
-
-
-
-forward(x, atomic_numbers, edge_distance, edge_index, SO3_edge_rot, mappingReduced)#
-
- -
- -
-
-class core.models.escn.escn.SO2Block(sphere_channels: int, hidden_channels: int, edge_channels: int, lmax_list: list[int], mmax_list: list[int], act)#
-

Bases: torch.nn.Module

-

SO(2) Block: Perform SO(2) convolutions for all m (orders)

-
-
Parameters:
-
    -
  • sphere_channels (int) – Number of spherical channels

  • -
  • hidden_channels (int) – Number of hidden channels used during the SO(2) conv

  • -
  • edge_channels (int) – Size of invariant edge embedding

  • -
  • (list (mmax_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • act (function) – Non-linear activation function

  • -
-
-
-
-
-forward(x, x_edge, mappingReduced)#
-
- -
- -
-
-class core.models.escn.escn.SO2Conv(m: int, sphere_channels: int, hidden_channels: int, edge_channels: int, lmax_list: list[int], mmax_list: list[int], act)#
-

Bases: torch.nn.Module

-

SO(2) Conv: Perform an SO(2) convolution

-
-
Parameters:
-
    -
  • m (int) – Order of the spherical harmonic coefficients

  • -
  • sphere_channels (int) – Number of spherical channels

  • -
  • hidden_channels (int) – Number of hidden channels used during the SO(2) conv

  • -
  • edge_channels (int) – Size of invariant edge embedding

  • -
  • (list (mmax_list) – int): List of degrees (l) for each resolution

  • -
  • (list – int): List of orders (m) for each resolution

  • -
  • act (function) – Non-linear activation function

  • -
-
-
-
-
-forward(x_m, x_edge) torch.Tensor#
-
- -
- -
-
-class core.models.escn.escn.EdgeBlock(edge_channels, distance_expansion, max_num_elements, act)#
-

Bases: torch.nn.Module

-

Edge Block: Compute invariant edge representation from edge diatances and atomic numbers

-
-
Parameters:
-
    -
  • edge_channels (int) – Size of invariant edge embedding

  • -
  • distance_expansion (func) – Function used to compute distance embedding

  • -
  • max_num_elements (int) – Maximum number of atomic numbers

  • -
  • act (function) – Non-linear activation function

  • -
-
-
-
-
-forward(edge_distance, source_element, target_element)#
-
- -
- -
-
-class core.models.escn.escn.EnergyBlock(num_channels: int, num_sphere_samples: int, act)#
-

Bases: torch.nn.Module

-

Energy Block: Output block computing the energy

-
-
Parameters:
-
    -
  • num_channels (int) – Number of channels

  • -
  • num_sphere_samples (int) – Number of samples used to approximate the integral on the sphere

  • -
  • act (function) – Non-linear activation function

  • -
-
-
-
-
-forward(x_pt) torch.Tensor#
-
- -
- -
-
-class core.models.escn.escn.ForceBlock(num_channels: int, num_sphere_samples: int, act)#
-

Bases: torch.nn.Module

-

Force Block: Output block computing the per atom forces

-
-
Parameters:
-
    -
  • num_channels (int) – Number of channels

  • -
  • num_sphere_samples (int) – Number of samples used to approximate the integral on the sphere

  • -
  • act (function) – Non-linear activation function

  • -
-
-
-
-
-forward(x_pt, sphere_points) torch.Tensor#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/escn/index.html b/autoapi/core/models/escn/index.html deleted file mode 100644 index 28e870102..000000000 --- a/autoapi/core/models/escn/index.html +++ /dev/null @@ -1,807 +0,0 @@ - - - - - - - - - - - core.models.escn — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.escn

- -
- -
-
- - - - -
- -
-

core.models.escn#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - -

eSCN

Equivariant Spherical Channel Network

-
-
-class core.models.escn.eSCN(num_atoms: int, bond_feat_dim: int, num_targets: int, use_pbc: bool = True, regress_forces: bool = True, otf_graph: bool = False, max_neighbors: int = 40, cutoff: float = 8.0, max_num_elements: int = 90, num_layers: int = 8, lmax_list: list[int] | None = None, mmax_list: list[int] | None = None, sphere_channels: int = 128, hidden_channels: int = 256, edge_channels: int = 128, use_grid: bool = True, num_sphere_samples: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False)#
-

Bases: fairchem.core.models.base.BaseModel

-

Equivariant Spherical Channel Network -Paper: Reducing SO(3) Convolutions to SO(2) for Efficient Equivariant GNNs

-
-
Parameters:
-
    -
  • use_pbc (bool) – Use periodic boundary conditions

  • -
  • regress_forces (bool) – Compute forces

  • -
  • otf_graph (bool) – Compute graph On The Fly (OTF)

  • -
  • max_neighbors (int) – Maximum number of neighbors per atom

  • -
  • cutoff (float) – Maximum distance between nieghboring atoms in Angstroms

  • -
  • max_num_elements (int) – Maximum atomic number

  • -
  • num_layers (int) – Number of layers in the GNN

  • -
  • lmax_list (int) – List of maximum degree of the spherical harmonics (1 to 10)

  • -
  • mmax_list (int) – List of maximum order of the spherical harmonics (0 to lmax)

  • -
  • sphere_channels (int) – Number of spherical channels (one set per resolution)

  • -
  • hidden_channels (int) – Number of hidden units in message passing

  • -
  • num_sphere_samples (int) – Number of samples used to approximate the integration of the sphere in the output blocks

  • -
  • edge_channels (int) – Number of channels for the edge invariant features

  • -
  • distance_function ("gaussian", "sigmoid", "linearsigmoid", "silu") – Basis function used for distances

  • -
  • basis_width_scalar (float) – Width of distance basis function

  • -
  • distance_resolution (float) – Distance between distance basis functions in Angstroms

  • -
  • show_timing_info (bool) – Show timing and memory info

  • -
-
-
-
-
-property num_params: int#
-
- -
-
-forward(data)#
-
- -
-
-_init_edge_rot_mat(data, edge_index, edge_distance_vec)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/escn/so3/index.html b/autoapi/core/models/escn/so3/index.html deleted file mode 100644 index b33103f00..000000000 --- a/autoapi/core/models/escn/so3/index.html +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - - - - - - - core.models.escn.so3 — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.escn.so3#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

CoefficientMapping

Helper functions for coefficients used to reshape l<-->m and to get coefficients of specific degree or order

SO3_Embedding

Helper functions for irreps embedding

SO3_Rotation

Helper functions for Wigner-D rotations

SO3_Grid

Helper functions for grid representation of the irreps

-
-
-

Attributes#

- - - - - - -

_Jd

-
-
-core.models.escn.so3._Jd#
-
- -
-
-class core.models.escn.so3.CoefficientMapping(lmax_list: list[int], mmax_list: list[int], device)#
-

Helper functions for coefficients used to reshape l<–>m and to get coefficients of specific degree or order

-
-
Parameters:
-
    -
  • (list (mmax_list) – int): List of maximum degree of the spherical harmonics

  • -
  • (list – int): List of maximum order of the spherical harmonics

  • -
  • device – Device of the output

  • -
-
-
-
-
-complex_idx(m, lmax: int = -1)#
-
- -
-
-coefficient_idx(lmax: int, mmax: int) torch.Tensor#
-
- -
- -
-
-class core.models.escn.so3.SO3_Embedding(length: int, lmax_list: list[int], num_channels: int, device: torch.device, dtype: torch.dtype)#
-

Bases: torch.nn.Module

-

Helper functions for irreps embedding

-
-
Parameters:
-
    -
  • length (int) – Batch size

  • -
  • (list (lmax_list) – int): List of maximum degree of the spherical harmonics

  • -
  • num_channels (int) – Number of channels

  • -
  • device – Device of the output

  • -
  • dtype – type of the output tensors

  • -
-
-
-
-
-clone() SO3_Embedding#
-
- -
-
-set_embedding(embedding) None#
-
- -
-
-set_lmax_mmax(lmax_list, mmax_list) None#
-
- -
-
-_expand_edge(edge_index) None#
-
- -
-
-expand_edge(edge_index) SO3_Embedding#
-
- -
-
-_reduce_edge(edge_index, num_nodes: int) None#
-
- -
-
-_m_primary(mapping) None#
-
- -
-
-_l_primary(mapping) None#
-
- -
-
-_rotate(SO3_rotation, lmax_list, mmax_list) None#
-
- -
-
-_rotate_inv(SO3_rotation, mappingReduced) None#
-
- -
-
-_grid_act(SO3_grid, act, mappingReduced) None#
-
- -
-
-to_grid(SO3_grid, lmax: int = -1) torch.Tensor#
-
- -
-
-_from_grid(x_grid, SO3_grid, lmax: int = -1) None#
-
- -
- -
-
-class core.models.escn.so3.SO3_Rotation(rot_mat3x3: torch.Tensor, lmax: list[int])#
-

Bases: torch.nn.Module

-

Helper functions for Wigner-D rotations

-
-
Parameters:
-
    -
  • rot_mat3x3 (tensor) – Rotation matrix

  • -
  • (list (lmax_list) – int): List of maximum degree of the spherical harmonics

  • -
-
-
-
-
-set_lmax(lmax) None#
-
- -
-
-rotate(embedding, out_lmax, out_mmax) torch.Tensor#
-
- -
-
-rotate_inv(embedding, in_lmax, in_mmax) torch.Tensor#
-
- -
-
-RotationToWignerDMatrix(edge_rot_mat: torch.Tensor, start_lmax: int, end_lmax: int) torch.Tensor#
-
- -
-
-wigner_D(lval, alpha, beta, gamma)#
-
- -
-
-_z_rot_mat(angle: torch.Tensor, lv: int) torch.Tensor#
-
- -
- -
-
-class core.models.escn.so3.SO3_Grid(lmax: int, mmax: int)#
-

Bases: torch.nn.Module

-

Helper functions for grid representation of the irreps

-
-
Parameters:
-
    -
  • lmax (int) – Maximum degree of the spherical harmonics

  • -
  • mmax (int) – Maximum order of the spherical harmonics

  • -
-
-
-
-
-_initialize(device: torch.device) None#
-
- -
-
-get_to_grid_mat(device: torch.device)#
-
- -
-
-get_from_grid_mat(device: torch.device)#
-
- -
-
-to_grid(embedding: torch.Tensor, lmax: int, mmax: int) torch.Tensor#
-
- -
-
-from_grid(grid: torch.Tensor, lmax: int, mmax: int) torch.Tensor#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/index.html b/autoapi/core/models/gemnet/index.html deleted file mode 100644 index 6272a5517..000000000 --- a/autoapi/core/models/gemnet/index.html +++ /dev/null @@ -1,885 +0,0 @@ - - - - - - - - - - - core.models.gemnet — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet#

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - -

GemNetT

GemNet-T, triplets-only variant of GemNet

-
-
-class core.models.gemnet.GemNetT(num_atoms: int | None, bond_feat_dim: int, num_targets: int, num_spherical: int, num_radial: int, num_blocks: int, emb_size_atom: int, emb_size_edge: int, emb_size_trip: int, emb_size_rbf: int, emb_size_cbf: int, emb_size_bil_trip: int, num_before_skip: int, num_after_skip: int, num_concat: int, num_atom: int, regress_forces: bool = True, direct_forces: bool = False, cutoff: float = 6.0, max_neighbors: int = 50, rbf: dict | None = None, envelope: dict | None = None, cbf: dict | None = None, extensive: bool = True, otf_graph: bool = False, use_pbc: bool = True, output_init: str = 'HeOrthogonal', activation: str = 'swish', num_elements: int = 83, scale_file: str | None = None)#
-

Bases: fairchem.core.models.base.BaseModel

-

GemNet-T, triplets-only variant of GemNet

-
-
Parameters:
-
    -
  • (int) (bond_feat_dim)

  • -
  • (int)

  • -
  • num_targets (int) – Number of prediction targets.

  • -
  • num_spherical (int) – Controls maximum frequency.

  • -
  • num_radial (int) – Controls maximum frequency.

  • -
  • num_blocks (int) – Number of building blocks to be stacked.

  • -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_trip (int) – (Down-projected) Embedding size in the triplet message passing block.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • emb_size_bil_trip (int) – Embedding size of the edge embeddings in the triplet-based message passing block after the bilinear layer.

  • -
  • num_before_skip (int) – Number of residual blocks before the first skip connection.

  • -
  • num_after_skip (int) – Number of residual blocks after the first skip connection.

  • -
  • num_concat (int) – Number of residual blocks after the concatenation.

  • -
  • num_atom (int) – Number of residual blocks in the atom embedding blocks.

  • -
  • regress_forces (bool) – Whether to predict forces. Default: True

  • -
  • direct_forces (bool) – If True predict forces based on aggregation of interatomic directions. -If False predict forces based on negative gradient of energy potential.

  • -
  • cutoff (float) – Embedding cutoff for interactomic directions in Angstrom.

  • -
  • rbf (dict) – Name and hyperparameters of the radial basis function.

  • -
  • envelope (dict) – Name and hyperparameters of the envelope function.

  • -
  • cbf (dict) – Name and hyperparameters of the cosine basis function.

  • -
  • extensive (bool) – Whether the output should be extensive (proportional to the number of atoms)

  • -
  • output_init (str) – Initialization method for the final dense layer.

  • -
  • activation (str) – Name of the activation function.

  • -
  • scale_file (str) – Path to the json file containing the scaling factors.

  • -
-
-
-
-
-property num_params#
-
- -
-
-get_triplets(edge_index, num_atoms)#
-

Get all b->a for each edge c->a. -It is possible that b=c, as long as the edges are distinct.

-
-
Returns:
-

    -
  • id3_ba (torch.Tensor, shape (num_triplets,)) – Indices of input edge b->a of each triplet b->a<-c

  • -
  • id3_ca (torch.Tensor, shape (num_triplets,)) – Indices of output edge c->a of each triplet b->a<-c

  • -
  • id3_ragged_idx (torch.Tensor, shape (num_triplets,)) – Indices enumerating the copies of id3_ca for creating a padded matrix

  • -
-

-
-
-
- -
-
-select_symmetric_edges(tensor: torch.Tensor, mask: torch.Tensor, reorder_idx: torch.Tensor, inverse_neg) torch.Tensor#
-
- -
-
-reorder_symmetric_edges(edge_index, cell_offsets, neighbors, edge_dist, edge_vector)#
-

Reorder edges to make finding counter-directional edges easier.

-

Some edges are only present in one direction in the data, -since every atom has a maximum number of neighbors. Since we only use i->j -edges here, we lose some j->i edges and add others by -making it symmetric. -We could fix this by merging edge_index with its counter-edges, -including the cell_offsets, and then running torch.unique. -But this does not seem worth it.

-
- -
-
-select_edges(data, edge_index, cell_offsets, neighbors, edge_dist, edge_vector, cutoff=None)#
-
- -
-
-generate_interaction_graph(data)#
-
- -
-
-forward(data)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/initializers/index.html b/autoapi/core/models/gemnet/initializers/index.html deleted file mode 100644 index 87988f8b8..000000000 --- a/autoapi/core/models/gemnet/initializers/index.html +++ /dev/null @@ -1,765 +0,0 @@ - - - - - - - - - - - core.models.gemnet.initializers — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet.initializers

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.gemnet.initializers#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

_standardize(kernel)

Makes sure that N*Var(W) = 1 and E[W] = 0

he_orthogonal_init(→ torch.Tensor)

Generate a weight matrix with variance according to He (Kaiming) initialization.

-
-
-core.models.gemnet.initializers._standardize(kernel)#
-

Makes sure that N*Var(W) = 1 and E[W] = 0

-
- -
-
-core.models.gemnet.initializers.he_orthogonal_init(tensor: torch.Tensor) torch.Tensor#
-

Generate a weight matrix with variance according to He (Kaiming) initialization. -Based on a random (semi-)orthogonal matrix neural networks -are expected to learn better when features are decorrelated -(stated by eg. “Reducing overfitting in deep networks by decorrelating representations”, -“Dropout: a simple way to prevent neural networks from overfitting”, -“Exact solutions to the nonlinear dynamics of learning in deep linear neural networks”)

-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/layers/atom_update_block/index.html b/autoapi/core/models/gemnet/layers/atom_update_block/index.html deleted file mode 100644 index 5bea5cefd..000000000 --- a/autoapi/core/models/gemnet/layers/atom_update_block/index.html +++ /dev/null @@ -1,840 +0,0 @@ - - - - - - - - - - - core.models.gemnet.layers.atom_update_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet.layers.atom_update_block

- -
- -
-
- - - - -
- -
-

core.models.gemnet.layers.atom_update_block#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

AtomUpdateBlock

Aggregate the message embeddings of the atoms

OutputBlock

Combines the atom update block and subsequent final dense layer.

-
-
-class core.models.gemnet.layers.atom_update_block.AtomUpdateBlock(emb_size_atom: int, emb_size_edge: int, emb_size_rbf: int, nHidden: int, activation=None, name: str = 'atom_update')#
-

Bases: torch.nn.Module

-

Aggregate the message embeddings of the atoms

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_atom – Embedding size of the edges.

  • -
  • nHidden (int) – Number of residual blocks.

  • -
  • activation (callable/str) – Name of the activation function to use in the dense layers.

  • -
-
-
-
-
-get_mlp(units_in, units, nHidden, activation)#
-
- -
-
-forward(h, m, rbf, id_j)#
-
-
Returns:
-

h – Atom embedding.

-
-
Return type:
-

torch.Tensor, shape=(nAtoms, emb_size_atom)

-
-
-
- -
- -
-
-class core.models.gemnet.layers.atom_update_block.OutputBlock(emb_size_atom: int, emb_size_edge: int, emb_size_rbf: int, nHidden: int, num_targets: int, activation=None, direct_forces: bool = True, output_init: str = 'HeOrthogonal', name: str = 'output', **kwargs)#
-

Bases: AtomUpdateBlock

-

Combines the atom update block and subsequent final dense layer.

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_atom – Embedding size of the edges.

  • -
  • nHidden (int) – Number of residual blocks.

  • -
  • num_targets (int) – Number of targets.

  • -
  • activation (str) – Name of the activation function to use in the dense layers except for the final dense layer.

  • -
  • direct_forces (bool) – If true directly predict forces without taking the gradient of the energy potential.

  • -
  • output_init (int) – Kernel initializer of the final dense layer.

  • -
-
-
-
-
-reset_parameters() None#
-
- -
-
-forward(h, m, rbf, id_j)#
-
-
Returns:
-

    -
  • (E, F) (tuple)

  • -
  • - E (torch.Tensor, shape=(nAtoms, num_targets))

  • -
  • - F (torch.Tensor, shape=(nEdges, num_targets))

  • -
  • Energy and force prediction

  • -
-

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/layers/basis_utils/index.html b/autoapi/core/models/gemnet/layers/basis_utils/index.html deleted file mode 100644 index 3c394beea..000000000 --- a/autoapi/core/models/gemnet/layers/basis_utils/index.html +++ /dev/null @@ -1,887 +0,0 @@ - - - - - - - - - - - core.models.gemnet.layers.basis_utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet.layers.basis_utils

- -
- -
-
- - - - -
- -
-

core.models.gemnet.layers.basis_utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - -

Jn(r, n)

numerical spherical bessel functions of order n

Jn_zeros(n, k)

Compute the first k zeros of the spherical bessel functions up to order n (excluded)

spherical_bessel_formulas(n)

Computes the sympy formulas for the spherical bessel functions up to order n (excluded)

bessel_basis(n, k)

Compute the sympy formulas for the normalized and rescaled spherical bessel functions up to

sph_harm_prefactor(l_degree, m_order)

Computes the constant pre-factor for the spherical harmonic of degree l and order m.

associated_legendre_polynomials(L_maxdegree[, ...])

Computes string formulas of the associated legendre polynomials up to degree L (excluded).

real_sph_harm(L_maxdegree, use_theta[, use_phi, ...])

Computes formula strings of the the real part of the spherical harmonics up to degree L (excluded).

-
-
-core.models.gemnet.layers.basis_utils.Jn(r: float, n: int)#
-

numerical spherical bessel functions of order n

-
- -
-
-core.models.gemnet.layers.basis_utils.Jn_zeros(n: int, k: int)#
-

Compute the first k zeros of the spherical bessel functions up to order n (excluded)

-
- -
-
-core.models.gemnet.layers.basis_utils.spherical_bessel_formulas(n: int)#
-

Computes the sympy formulas for the spherical bessel functions up to order n (excluded)

-
- -
-
-core.models.gemnet.layers.basis_utils.bessel_basis(n: int, k: int)#
-

Compute the sympy formulas for the normalized and rescaled spherical bessel functions up to -order n (excluded) and maximum frequency k (excluded).

-
-
Returns:
-

-
list

Bessel basis formulas taking in a single argument x. -Has length n where each element has length k. -> In total n*k many.

-
-
-

-
-
Return type:
-

bess_basis

-
-
-
- -
-
-core.models.gemnet.layers.basis_utils.sph_harm_prefactor(l_degree: int, m_order: int)#
-

Computes the constant pre-factor for the spherical harmonic of degree l and order m.

-
-
Parameters:
-
    -
  • l_degree (int) – Degree of the spherical harmonic. l >= 0

  • -
  • m_order (int) – Order of the spherical harmonic. -l <= m <= l

  • -
-
-
Returns:
-

factor

-
-
Return type:
-

float

-
-
-
- -
-
-core.models.gemnet.layers.basis_utils.associated_legendre_polynomials(L_maxdegree: int, zero_m_only: bool = True, pos_m_only: bool = True)#
-

Computes string formulas of the associated legendre polynomials up to degree L (excluded).

-
-
Parameters:
-
    -
  • L_maxdegree (int) – Degree up to which to calculate the associated legendre polynomials (degree L is excluded).

  • -
  • zero_m_only (bool) – If True only calculate the polynomials for the polynomials where m=0.

  • -
  • pos_m_only (bool) – If True only calculate the polynomials for the polynomials where m>=0. Overwritten by zero_m_only.

  • -
-
-
Returns:
-

polynomials – Contains the sympy functions of the polynomials (in total L many if zero_m_only is True else L^2 many).

-
-
Return type:
-

list

-
-
-
- -
-
-core.models.gemnet.layers.basis_utils.real_sph_harm(L_maxdegree: int, use_theta: bool, use_phi: bool = True, zero_m_only: bool = True)#
-

Computes formula strings of the the real part of the spherical harmonics up to degree L (excluded). -Variables are either spherical coordinates phi and theta (or cartesian coordinates x,y,z) on the UNIT SPHERE.

-
-
Parameters:
-
    -
  • L_maxdegree (int) – Degree up to which to calculate the spherical harmonics (degree L is excluded).

  • -
  • use_theta (bool) –

      -
    • True: Expects the input of the formula strings to contain theta.

    • -
    • False: Expects the input of the formula strings to contain z.

    • -
    -

  • -
  • use_phi (bool) –

      -
    • True: Expects the input of the formula strings to contain phi.

    • -
    • False: Expects the input of the formula strings to contain x and y.

    • -
    -

    Does nothing if zero_m_only is True

    -

  • -
  • zero_m_only (bool) – If True only calculate the harmonics where m=0.

  • -
-
-
Returns:
-

Y_lm_real – Computes formula strings of the the real part of the spherical harmonics up -to degree L (where degree L is not excluded). -In total L^2 many sph harm exist up to degree L (excluded). However, if zero_m_only only is True then -the total count is reduced to be only L many.

-
-
Return type:
-

list

-
-
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/layers/efficient/index.html b/autoapi/core/models/gemnet/layers/efficient/index.html deleted file mode 100644 index 0fcb7942e..000000000 --- a/autoapi/core/models/gemnet/layers/efficient/index.html +++ /dev/null @@ -1,847 +0,0 @@ - - - - - - - - - - - core.models.gemnet.layers.efficient — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet.layers.efficient#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

EfficientInteractionDownProjection

Down projection in the efficient reformulation.

EfficientInteractionBilinear

Efficient reformulation of the bilinear layer and subsequent summation.

-
-
-class core.models.gemnet.layers.efficient.EfficientInteractionDownProjection(num_spherical: int, num_radial: int, emb_size_interm: int)#
-

Bases: torch.nn.Module

-

Down projection in the efficient reformulation.

-
-
Parameters:
-
    -
  • emb_size_interm (int) – Intermediate embedding size (down-projection size).

  • -
  • kernel_initializer (callable) – Initializer of the weight matrix.

  • -
-
-
-
-
-reset_parameters() None#
-
- -
-
-forward(rbf, sph, id_ca, id_ragged_idx)#
-
-
Parameters:
-
    -
  • rbf (torch.Tensor, shape=(1, nEdges, num_radial))

  • -
  • sph (torch.Tensor, shape=(nEdges, Kmax, num_spherical))

  • -
  • id_ca

  • -
  • id_ragged_idx

  • -
-
-
Returns:
-

    -
  • rbf_W1 (torch.Tensor, shape=(nEdges, emb_size_interm, num_spherical))

  • -
  • sph (torch.Tensor, shape=(nEdges, Kmax, num_spherical)) – Kmax = maximum number of neighbors of the edges

  • -
-

-
-
-
- -
- -
-
-class core.models.gemnet.layers.efficient.EfficientInteractionBilinear(emb_size: int, emb_size_interm: int, units_out: int)#
-

Bases: torch.nn.Module

-

Efficient reformulation of the bilinear layer and subsequent summation.

-
-
Parameters:
-
    -
  • units_out (int) – Embedding output size of the bilinear layer.

  • -
  • kernel_initializer (callable) – Initializer of the weight matrix.

  • -
-
-
-
-
-reset_parameters() None#
-
- -
-
-forward(basis, m, id_reduce, id_ragged_idx) torch.Tensor#
-
-
Parameters:
-
    -
  • basis

  • -
  • m (quadruplets: m = m_db , triplets: m = m_ba)

  • -
  • id_reduce

  • -
  • id_ragged_idx

  • -
-
-
Returns:
-

m_ca – Edge embeddings.

-
-
Return type:
-

torch.Tensor, shape=(nEdges, units_out)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/layers/embedding_block/index.html b/autoapi/core/models/gemnet/layers/embedding_block/index.html deleted file mode 100644 index ae2d77450..000000000 --- a/autoapi/core/models/gemnet/layers/embedding_block/index.html +++ /dev/null @@ -1,821 +0,0 @@ - - - - - - - - - - - core.models.gemnet.layers.embedding_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet.layers.embedding_block

- -
- -
-
- - - - -
- -
-

core.models.gemnet.layers.embedding_block#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

AtomEmbedding

Initial atom embeddings based on the atom type

EdgeEmbedding

Edge embedding based on the concatenation of atom embeddings and subsequent dense layer.

-
-
-class core.models.gemnet.layers.embedding_block.AtomEmbedding(emb_size, num_elements: int)#
-

Bases: torch.nn.Module

-

Initial atom embeddings based on the atom type

-
-
Parameters:
-

emb_size (int) – Atom embeddings size

-
-
-
-
-forward(Z)#
-
-
Returns:
-

h – Atom embeddings.

-
-
Return type:
-

torch.Tensor, shape=(nAtoms, emb_size)

-
-
-
- -
- -
-
-class core.models.gemnet.layers.embedding_block.EdgeEmbedding(atom_features, edge_features, out_features, activation=None)#
-

Bases: torch.nn.Module

-

Edge embedding based on the concatenation of atom embeddings and subsequent dense layer.

-
-
Parameters:
-
    -
  • emb_size (int) – Embedding size after the dense layer.

  • -
  • activation (str) – Activation function used in the dense layer.

  • -
-
-
-
-
-forward(h, m_rbf, idx_s, idx_t)#
-
-
Parameters:
-
    -
  • h

  • -
  • m_rbf (shape (nEdges, nFeatures)) – in embedding block: m_rbf = rbf ; In interaction block: m_rbf = m_st

  • -
  • idx_s

  • -
  • idx_t

  • -
-
-
Returns:
-

m_st – Edge embeddings.

-
-
Return type:
-

torch.Tensor, shape=(nEdges, emb_size)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/layers/index.html b/autoapi/core/models/gemnet/layers/index.html deleted file mode 100644 index 02e68e19a..000000000 --- a/autoapi/core/models/gemnet/layers/index.html +++ /dev/null @@ -1,730 +0,0 @@ - - - - - - - - - - - core.models.gemnet.layers — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet.layers

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.gemnet.layers#

-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/layers/interaction_block/index.html b/autoapi/core/models/gemnet/layers/interaction_block/index.html deleted file mode 100644 index bb37dc9bc..000000000 --- a/autoapi/core/models/gemnet/layers/interaction_block/index.html +++ /dev/null @@ -1,830 +0,0 @@ - - - - - - - - - - - core.models.gemnet.layers.interaction_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet.layers.interaction_block

- -
- -
-
- - - - -
- -
-

core.models.gemnet.layers.interaction_block#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

InteractionBlockTripletsOnly

Interaction block for GemNet-T/dT.

TripletInteraction

Triplet-based message passing block.

-
-
-class core.models.gemnet.layers.interaction_block.InteractionBlockTripletsOnly(emb_size_atom: int, emb_size_edge: int, emb_size_trip: int, emb_size_rbf: int, emb_size_cbf: int, emb_size_bil_trip: int, num_before_skip: int, num_after_skip: int, num_concat: int, num_atom: int, activation: str | None = None, name: str = 'Interaction')#
-

Bases: torch.nn.Module

-

Interaction block for GemNet-T/dT.

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_trip (int) – (Down-projected) Embedding size in the triplet message passing block.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • emb_size_bil_trip (int) – Embedding size of the edge embeddings in the triplet-based message passing block after the bilinear layer.

  • -
  • num_before_skip (int) – Number of residual blocks before the first skip connection.

  • -
  • num_after_skip (int) – Number of residual blocks after the first skip connection.

  • -
  • num_concat (int) – Number of residual blocks after the concatenation.

  • -
  • num_atom (int) – Number of residual blocks in the atom embedding blocks.

  • -
  • activation (str) – Name of the activation function to use in the dense layers except for the final dense layer.

  • -
-
-
-
-
-forward(h: torch.Tensor, m: torch.Tensor, rbf3, cbf3, id3_ragged_idx, id_swap, id3_ba, id3_ca, rbf_h, idx_s, idx_t)#
-
-
Returns:
-

    -
  • h (torch.Tensor, shape=(nEdges, emb_size_atom)) – Atom embeddings.

  • -
  • m (torch.Tensor, shape=(nEdges, emb_size_edge)) – Edge embeddings (c->a).

  • -
-

-
-
-
- -
- -
-
-class core.models.gemnet.layers.interaction_block.TripletInteraction(emb_size_edge: int, emb_size_trip: int, emb_size_bilinear: int, emb_size_rbf: int, emb_size_cbf: int, activation: str | None = None, name: str = 'TripletInteraction', **kwargs)#
-

Bases: torch.nn.Module

-

Triplet-based message passing block.

-
-
Parameters:
-
    -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_trip (int) – (Down-projected) Embedding size of the edge embeddings after the hadamard product with rbf.

  • -
  • emb_size_bilinear (int) – Embedding size of the edge embeddings after the bilinear layer.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • activation (str) – Name of the activation function to use in the dense layers except for the final dense layer.

  • -
-
-
-
-
-forward(m: torch.Tensor, rbf3, cbf3, id3_ragged_idx, id_swap, id3_ba, id3_ca)#
-
-
Returns:
-

m – Edge embeddings (c->a).

-
-
Return type:
-

torch.Tensor, shape=(nEdges, emb_size_edge)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/layers/radial_basis/index.html b/autoapi/core/models/gemnet/layers/radial_basis/index.html deleted file mode 100644 index 955af7b43..000000000 --- a/autoapi/core/models/gemnet/layers/radial_basis/index.html +++ /dev/null @@ -1,896 +0,0 @@ - - - - - - - - - - - core.models.gemnet.layers.radial_basis — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet.layers.radial_basis#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - -

PolynomialEnvelope

Polynomial envelope function that ensures a smooth cutoff.

ExponentialEnvelope

Exponential envelope function that ensures a smooth cutoff,

SphericalBesselBasis

1D spherical Bessel basis

BernsteinBasis

Bernstein polynomial basis,

RadialBasis

-
param num_radial:
-

Controls maximum frequency.

-
-
-

-
-
-class core.models.gemnet.layers.radial_basis.PolynomialEnvelope(exponent: int)#
-

Bases: torch.nn.Module

-

Polynomial envelope function that ensures a smooth cutoff.

-
-
Parameters:
-

exponent (int) – Exponent of the envelope function.

-
-
-
-
-forward(d_scaled: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet.layers.radial_basis.ExponentialEnvelope#
-

Bases: torch.nn.Module

-

Exponential envelope function that ensures a smooth cutoff, -as proposed in Unke, Chmiela, Gastegger, Schütt, Sauceda, Müller 2021. -SpookyNet: Learning Force Fields with Electronic Degrees of Freedom -and Nonlocal Effects

-
-
-forward(d_scaled: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet.layers.radial_basis.SphericalBesselBasis(num_radial: int, cutoff: float)#
-

Bases: torch.nn.Module

-

1D spherical Bessel basis

-
-
Parameters:
-
    -
  • num_radial (int) – Controls maximum frequency.

  • -
  • cutoff (float) – Cutoff distance in Angstrom.

  • -
-
-
-
-
-forward(d_scaled: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet.layers.radial_basis.BernsteinBasis(num_radial: int, pregamma_initial: float = 0.45264)#
-

Bases: torch.nn.Module

-

Bernstein polynomial basis, -as proposed in Unke, Chmiela, Gastegger, Schütt, Sauceda, Müller 2021. -SpookyNet: Learning Force Fields with Electronic Degrees of Freedom -and Nonlocal Effects

-
-
Parameters:
-
    -
  • num_radial (int) – Controls maximum frequency.

  • -
  • pregamma_initial (float) – Initial value of exponential coefficient gamma. -Default: gamma = 0.5 * a_0**-1 = 0.94486, -inverse softplus -> pregamma = log e**gamma - 1 = 0.45264

  • -
-
-
-
-
-forward(d_scaled: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet.layers.radial_basis.RadialBasis(num_radial: int, cutoff: float, rbf: dict[str, str] | None = None, envelope: dict[str, str | int] | None = None)#
-

Bases: torch.nn.Module

-
-
Parameters:
-
    -
  • num_radial (int) – Controls maximum frequency.

  • -
  • cutoff (float) – Cutoff distance in Angstrom.

  • -
  • rbf (dict = {"name": "gaussian"}) – Basis function and its hyperparameters.

  • -
  • envelope (dict = {"name": "polynomial", "exponent": 5}) – Envelope function and its hyperparameters.

  • -
-
-
-
-
-forward(d)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/layers/spherical_basis/index.html b/autoapi/core/models/gemnet/layers/spherical_basis/index.html deleted file mode 100644 index 2330399d9..000000000 --- a/autoapi/core/models/gemnet/layers/spherical_basis/index.html +++ /dev/null @@ -1,771 +0,0 @@ - - - - - - - - - - - core.models.gemnet.layers.spherical_basis — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet.layers.spherical_basis

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.gemnet.layers.spherical_basis#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

CircularBasisLayer

2D Fourier Bessel Basis

-
-
-class core.models.gemnet.layers.spherical_basis.CircularBasisLayer(num_spherical: int, radial_basis: core.models.gemnet.layers.radial_basis.RadialBasis, cbf, efficient: bool = False)#
-

Bases: torch.nn.Module

-

2D Fourier Bessel Basis

-
-
Parameters:
-
    -
  • num_spherical (int) – Controls maximum frequency.

  • -
  • radial_basis (RadialBasis) – Radial basis functions

  • -
  • cbf (dict) – Name and hyperparameters of the cosine basis function

  • -
  • efficient (bool) – Whether to use the “efficient” summation order

  • -
-
-
-
-
-forward(D_ca, cosφ_cab, id3_ca)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet/utils/index.html b/autoapi/core/models/gemnet/utils/index.html deleted file mode 100644 index 0483c117e..000000000 --- a/autoapi/core/models/gemnet/utils/index.html +++ /dev/null @@ -1,890 +0,0 @@ - - - - - - - - - - - core.models.gemnet.utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet.utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

read_json(path)

update_json(→ None)

write_json(→ None)

read_value_json(path, key)

ragged_range(→ torch.Tensor)

Multiple concatenated ranges.

repeat_blocks(→ torch.Tensor)

Repeat blocks of indices.

calculate_interatomic_vectors(→ tuple[torch.Tensor, ...)

Calculate the vectors connecting the given atom pairs,

inner_product_normalized(→ torch.Tensor)

Calculate the inner product between the given normalized vectors,

mask_neighbors(→ torch.Tensor)

-
-
-core.models.gemnet.utils.read_json(path: str)#
-
- -
-
-core.models.gemnet.utils.update_json(path: str, data) None#
-
- -
-
-core.models.gemnet.utils.write_json(path: str, data) None#
-
- -
-
-core.models.gemnet.utils.read_value_json(path: str, key: str)#
-
- -
-
-core.models.gemnet.utils.ragged_range(sizes: torch.Tensor) torch.Tensor#
-

Multiple concatenated ranges.

-

Examples

-

sizes = [1 4 2 3] -Return: [0 0 1 2 3 0 1 0 1 2]

-
- -
-
-core.models.gemnet.utils.repeat_blocks(sizes: torch.Tensor, repeats: int | torch.Tensor, continuous_indexing: bool = True, start_idx: int = 0, block_inc: int = 0, repeat_inc: int = 0) torch.Tensor#
-

Repeat blocks of indices. -Adapted from https://stackoverflow.com/questions/51154989/numpy-vectorized-function-to-repeat-blocks-of-consecutive-elements

-

continuous_indexing: Whether to keep increasing the index after each block -start_idx: Starting index -block_inc: Number to increment by after each block,

-
-

either global or per block. Shape: len(sizes) - 1

-
-
-
repeat_inc: Number to increment by after each repetition,

either global or per block

-
-
-

Examples

-

sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = False -Return: [0 0 0 0 1 2 0 1 2 0 1 0 1 0 1] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True -Return: [0 0 0 1 2 3 1 2 3 4 5 4 5 4 5] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -repeat_inc = 4 -Return: [0 4 8 1 2 3 5 6 7 4 5 8 9 12 13] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -start_idx = 5 -Return: [5 5 5 6 7 8 6 7 8 9 10 9 10 9 10] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -block_inc = 1 -Return: [0 0 0 2 3 4 2 3 4 6 7 6 7 6 7] -sizes = [0,3,2] ; repeats = [3,2,3] ; continuous_indexing = True -Return: [0 1 2 0 1 2 3 4 3 4 3 4] -sizes = [2,3,2] ; repeats = [2,0,2] ; continuous_indexing = True -Return: [0 1 0 1 5 6 5 6]

-
- -
-
-core.models.gemnet.utils.calculate_interatomic_vectors(R: torch.Tensor, id_s: torch.Tensor, id_t: torch.Tensor, offsets_st: torch.Tensor) tuple[torch.Tensor, torch.Tensor]#
-

Calculate the vectors connecting the given atom pairs, -considering offsets from periodic boundary conditions (PBC).

-
-
Parameters:
-
    -
  • R (Tensor, shape = (nAtoms, 3)) – Atom positions.

  • -
  • id_s (Tensor, shape = (nEdges,)) – Indices of the source atom of the edges.

  • -
  • id_t (Tensor, shape = (nEdges,)) – Indices of the target atom of the edges.

  • -
  • offsets_st (Tensor, shape = (nEdges,)) – PBC offsets of the edges. -Subtract this from the correct direction.

  • -
-
-
Returns:
-

(D_st, V_st)

-
-
D_st: Tensor, shape = (nEdges,)

Distance from atom t to s.

-
-
V_st: Tensor, shape = (nEdges,)

Unit direction from atom t to s.

-
-
-

-
-
Return type:
-

tuple

-
-
-
- -
-
-core.models.gemnet.utils.inner_product_normalized(x: torch.Tensor, y: torch.Tensor) torch.Tensor#
-

Calculate the inner product between the given normalized vectors, -giving a result between -1 and 1.

-
- -
-
-core.models.gemnet.utils.mask_neighbors(neighbors: torch.Tensor, edge_mask: torch.Tensor) torch.Tensor#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/gemnet/index.html b/autoapi/core/models/gemnet_gp/gemnet/index.html deleted file mode 100644 index 8ed899d7c..000000000 --- a/autoapi/core/models/gemnet_gp/gemnet/index.html +++ /dev/null @@ -1,856 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.gemnet — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_gp.gemnet#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

GraphParallelGemNetT

GemNet-T, triplets-only variant of GemNet

-
-
-class core.models.gemnet_gp.gemnet.GraphParallelGemNetT(num_atoms: int | None, bond_feat_dim: int, num_targets: int, num_spherical: int, num_radial: int, num_blocks: int, emb_size_atom: int, emb_size_edge: int, emb_size_trip: int, emb_size_rbf: int, emb_size_cbf: int, emb_size_bil_trip: int, num_before_skip: int, num_after_skip: int, num_concat: int, num_atom: int, regress_forces: bool = True, direct_forces: bool = False, cutoff: float = 6.0, max_neighbors: int = 50, rbf: dict | None = None, envelope: dict | None = None, cbf: dict | None = None, extensive: bool = True, otf_graph: bool = False, use_pbc: bool = True, output_init: str = 'HeOrthogonal', activation: str = 'swish', scale_num_blocks: bool = False, scatter_atoms: bool = True, scale_file: str | None = None)#
-

Bases: fairchem.core.models.base.BaseModel

-

GemNet-T, triplets-only variant of GemNet

-
-
Parameters:
-
    -
  • (int) (bond_feat_dim)

  • -
  • (int)

  • -
  • num_targets (int) – Number of prediction targets.

  • -
  • num_spherical (int) – Controls maximum frequency.

  • -
  • num_radial (int) – Controls maximum frequency.

  • -
  • num_blocks (int) – Number of building blocks to be stacked.

  • -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_trip (int) – (Down-projected) Embedding size in the triplet message passing block.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • emb_size_bil_trip (int) – Embedding size of the edge embeddings in the triplet-based message passing block after the bilinear layer.

  • -
  • num_before_skip (int) – Number of residual blocks before the first skip connection.

  • -
  • num_after_skip (int) – Number of residual blocks after the first skip connection.

  • -
  • num_concat (int) – Number of residual blocks after the concatenation.

  • -
  • num_atom (int) – Number of residual blocks in the atom embedding blocks.

  • -
  • regress_forces (bool) – Whether to predict forces. Default: True

  • -
  • direct_forces (bool) – If True predict forces based on aggregation of interatomic directions. -If False predict forces based on negative gradient of energy potential.

  • -
  • cutoff (float) – Embedding cutoff for interactomic directions in Angstrom.

  • -
  • rbf (dict) – Name and hyperparameters of the radial basis function.

  • -
  • envelope (dict) – Name and hyperparameters of the envelope function.

  • -
  • cbf (dict) – Name and hyperparameters of the cosine basis function.

  • -
  • extensive (bool) – Whether the output should be extensive (proportional to the number of atoms)

  • -
  • output_init (str) – Initialization method for the final dense layer.

  • -
  • activation (str) – Name of the activation function.

  • -
  • scale_file (str) – Path to the json file containing the scaling factors.

  • -
-
-
-
-
-property num_params#
-
- -
-
-get_triplets(edge_index, num_atoms)#
-

Get all b->a for each edge c->a. -It is possible that b=c, as long as the edges are distinct.

-
-
Returns:
-

    -
  • id3_ba (torch.Tensor, shape (num_triplets,)) – Indices of input edge b->a of each triplet b->a<-c

  • -
  • id3_ca (torch.Tensor, shape (num_triplets,)) – Indices of output edge c->a of each triplet b->a<-c

  • -
  • id3_ragged_idx (torch.Tensor, shape (num_triplets,)) – Indices enumerating the copies of id3_ca for creating a padded matrix

  • -
-

-
-
-
- -
-
-select_symmetric_edges(tensor: torch.Tensor, mask, reorder_idx, inverse_neg) torch.Tensor#
-
- -
-
-reorder_symmetric_edges(edge_index, cell_offsets, neighbors, edge_dist, edge_vector)#
-

Reorder edges to make finding counter-directional edges easier.

-

Some edges are only present in one direction in the data, -since every atom has a maximum number of neighbors. Since we only use i->j -edges here, we lose some j->i edges and add others by -making it symmetric. -We could fix this by merging edge_index with its counter-edges, -including the cell_offsets, and then running torch.unique. -But this does not seem worth it.

-
- -
-
-select_edges(data, edge_index, cell_offsets, neighbors, edge_dist, edge_vector, cutoff=None)#
-
- -
-
-generate_interaction_graph(data)#
-
- -
-
-forward(data)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/initializers/index.html b/autoapi/core/models/gemnet_gp/initializers/index.html deleted file mode 100644 index 47c36a893..000000000 --- a/autoapi/core/models/gemnet_gp/initializers/index.html +++ /dev/null @@ -1,765 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.initializers — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_gp.initializers

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.gemnet_gp.initializers#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

_standardize(kernel)

Makes sure that N*Var(W) = 1 and E[W] = 0

he_orthogonal_init(→ torch.Tensor)

Generate a weight matrix with variance according to He (Kaiming) initialization.

-
-
-core.models.gemnet_gp.initializers._standardize(kernel)#
-

Makes sure that N*Var(W) = 1 and E[W] = 0

-
- -
-
-core.models.gemnet_gp.initializers.he_orthogonal_init(tensor: torch.Tensor) torch.Tensor#
-

Generate a weight matrix with variance according to He (Kaiming) initialization. -Based on a random (semi-)orthogonal matrix neural networks -are expected to learn better when features are decorrelated -(stated by eg. “Reducing overfitting in deep networks by decorrelating representations”, -“Dropout: a simple way to prevent neural networks from overfitting”, -“Exact solutions to the nonlinear dynamics of learning in deep linear neural networks”)

-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.html b/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.html deleted file mode 100644 index f67c0e67a..000000000 --- a/autoapi/core/models/gemnet_gp/layers/atom_update_block/index.html +++ /dev/null @@ -1,881 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.layers.atom_update_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_gp.layers.atom_update_block#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

AtomUpdateBlock

Aggregate the message embeddings of the atoms

OutputBlock

Combines the atom update block and subsequent final dense layer.

-
-
-

Functions#

- - - - - - -

scatter_sum(→ torch.Tensor)

Clone of torch_scatter.scatter_sum but without in-place operations

-
-
-core.models.gemnet_gp.layers.atom_update_block.scatter_sum(src: torch.Tensor, index: torch.Tensor, dim: int = -1, out: torch.Tensor | None = None, dim_size: int | None = None) torch.Tensor#
-

Clone of torch_scatter.scatter_sum but without in-place operations

-
- -
-
-class core.models.gemnet_gp.layers.atom_update_block.AtomUpdateBlock(emb_size_atom: int, emb_size_edge: int, emb_size_rbf: int, nHidden: int, activation: str | None = None, name: str = 'atom_update')#
-

Bases: torch.nn.Module

-

Aggregate the message embeddings of the atoms

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_atom – Embedding size of the edges.

  • -
  • nHidden (int) – Number of residual blocks.

  • -
  • activation (callable/str) – Name of the activation function to use in the dense layers.

  • -
-
-
-
-
-get_mlp(units_in: int, units: int, nHidden: int, activation: str | None)#
-
- -
-
-forward(nAtoms: int, m: int, rbf, id_j)#
-
-
Returns:
-

h – Atom embedding.

-
-
Return type:
-

torch.Tensor, shape=(nAtoms, emb_size_atom)

-
-
-
- -
- -
-
-class core.models.gemnet_gp.layers.atom_update_block.OutputBlock(emb_size_atom: int, emb_size_edge: int, emb_size_rbf: int, nHidden: int, num_targets: int, activation: str | None = None, direct_forces: bool = True, output_init: str = 'HeOrthogonal', name: str = 'output', **kwargs)#
-

Bases: AtomUpdateBlock

-

Combines the atom update block and subsequent final dense layer.

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_atom – Embedding size of the edges.

  • -
  • nHidden (int) – Number of residual blocks.

  • -
  • num_targets (int) – Number of targets.

  • -
  • activation (str) – Name of the activation function to use in the dense layers except for the final dense layer.

  • -
  • direct_forces (bool) – If true directly predict forces without taking the gradient of the energy potential.

  • -
  • output_init (int) – Kernel initializer of the final dense layer.

  • -
-
-
-
-
-dense_rbf_F: core.models.gemnet_gp.layers.base_layers.Dense#
-
- -
-
-out_forces: core.models.gemnet_gp.layers.base_layers.Dense#
-
- -
-
-out_energy: core.models.gemnet_gp.layers.base_layers.Dense#
-
- -
-
-reset_parameters() None#
-
- -
-
-forward(nAtoms: int, m, rbf, id_j: torch.Tensor)#
-
-
Returns:
-

    -
  • (E, F) (tuple)

  • -
  • - E (torch.Tensor, shape=(nAtoms, num_targets))

  • -
  • - F (torch.Tensor, shape=(nEdges, num_targets))

  • -
  • Energy and force prediction

  • -
-

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/layers/basis_utils/index.html b/autoapi/core/models/gemnet_gp/layers/basis_utils/index.html deleted file mode 100644 index cf35a0325..000000000 --- a/autoapi/core/models/gemnet_gp/layers/basis_utils/index.html +++ /dev/null @@ -1,887 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.layers.basis_utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_gp.layers.basis_utils

- -
- -
-
- - - - -
- -
-

core.models.gemnet_gp.layers.basis_utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - -

Jn(r, n)

numerical spherical bessel functions of order n

Jn_zeros(n, k)

Compute the first k zeros of the spherical bessel functions up to order n (excluded)

spherical_bessel_formulas(n)

Computes the sympy formulas for the spherical bessel functions up to order n (excluded)

bessel_basis(n, k)

Compute the sympy formulas for the normalized and rescaled spherical bessel functions up to

sph_harm_prefactor(→ float)

Computes the constant pre-factor for the spherical harmonic of degree l and order m.

associated_legendre_polynomials(L_maxdegree[, ...])

Computes string formulas of the associated legendre polynomials up to degree L (excluded).

real_sph_harm(L_maxdegree, use_theta[, use_phi, ...])

Computes formula strings of the the real part of the spherical harmonics up to degree L (excluded).

-
-
-core.models.gemnet_gp.layers.basis_utils.Jn(r: float, n: int)#
-

numerical spherical bessel functions of order n

-
- -
-
-core.models.gemnet_gp.layers.basis_utils.Jn_zeros(n: int, k: int)#
-

Compute the first k zeros of the spherical bessel functions up to order n (excluded)

-
- -
-
-core.models.gemnet_gp.layers.basis_utils.spherical_bessel_formulas(n)#
-

Computes the sympy formulas for the spherical bessel functions up to order n (excluded)

-
- -
-
-core.models.gemnet_gp.layers.basis_utils.bessel_basis(n: int, k: int)#
-

Compute the sympy formulas for the normalized and rescaled spherical bessel functions up to -order n (excluded) and maximum frequency k (excluded).

-
-
Returns:
-

-
list

Bessel basis formulas taking in a single argument x. -Has length n where each element has length k. -> In total n*k many.

-
-
-

-
-
Return type:
-

bess_basis

-
-
-
- -
-
-core.models.gemnet_gp.layers.basis_utils.sph_harm_prefactor(l_degree: int, m_order: int) float#
-

Computes the constant pre-factor for the spherical harmonic of degree l and order m.

-
-
Parameters:
-
    -
  • l_degree (int) – Degree of the spherical harmonic. l >= 0

  • -
  • m_order (int) – Order of the spherical harmonic. -l <= m <= l

  • -
-
-
Returns:
-

factor

-
-
Return type:
-

float

-
-
-
- -
-
-core.models.gemnet_gp.layers.basis_utils.associated_legendre_polynomials(L_maxdegree: int, zero_m_only: bool = True, pos_m_only: bool = True)#
-

Computes string formulas of the associated legendre polynomials up to degree L (excluded).

-
-
Parameters:
-
    -
  • L_maxdegree (int) – Degree up to which to calculate the associated legendre polynomials (degree L is excluded).

  • -
  • zero_m_only (bool) – If True only calculate the polynomials for the polynomials where m=0.

  • -
  • pos_m_only (bool) – If True only calculate the polynomials for the polynomials where m>=0. Overwritten by zero_m_only.

  • -
-
-
Returns:
-

polynomials – Contains the sympy functions of the polynomials (in total L many if zero_m_only is True else L^2 many).

-
-
Return type:
-

list

-
-
-
- -
-
-core.models.gemnet_gp.layers.basis_utils.real_sph_harm(L_maxdegree: int, use_theta: bool, use_phi: bool = True, zero_m_only: bool = True)#
-

Computes formula strings of the the real part of the spherical harmonics up to degree L (excluded). -Variables are either spherical coordinates phi and theta (or cartesian coordinates x,y,z) on the UNIT SPHERE.

-
-
Parameters:
-
    -
  • L_maxdegree (int) – Degree up to which to calculate the spherical harmonics (degree L is excluded).

  • -
  • use_theta (bool) –

      -
    • True: Expects the input of the formula strings to contain theta.

    • -
    • False: Expects the input of the formula strings to contain z.

    • -
    -

  • -
  • use_phi (bool) –

      -
    • True: Expects the input of the formula strings to contain phi.

    • -
    • False: Expects the input of the formula strings to contain x and y.

    • -
    -

    Does nothing if zero_m_only is True

    -

  • -
  • zero_m_only (bool) – If True only calculate the harmonics where m=0.

  • -
-
-
Returns:
-

Y_lm_real – Computes formula strings of the the real part of the spherical harmonics up -to degree L (where degree L is not excluded). -In total L^2 many sph harm exist up to degree L (excluded). However, if zero_m_only only is True then -the total count is reduced to be only L many.

-
-
Return type:
-

list

-
-
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/layers/efficient/index.html b/autoapi/core/models/gemnet_gp/layers/efficient/index.html deleted file mode 100644 index 2be95b677..000000000 --- a/autoapi/core/models/gemnet_gp/layers/efficient/index.html +++ /dev/null @@ -1,847 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.layers.efficient — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_gp.layers.efficient#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

EfficientInteractionDownProjection

Down projection in the efficient reformulation.

EfficientInteractionBilinear

Efficient reformulation of the bilinear layer and subsequent summation.

-
-
-class core.models.gemnet_gp.layers.efficient.EfficientInteractionDownProjection(num_spherical: int, num_radial: int, emb_size_interm: int)#
-

Bases: torch.nn.Module

-

Down projection in the efficient reformulation.

-
-
Parameters:
-
    -
  • emb_size_interm (int) – Intermediate embedding size (down-projection size).

  • -
  • kernel_initializer (callable) – Initializer of the weight matrix.

  • -
-
-
-
-
-reset_parameters() None#
-
- -
-
-forward(rbf: torch.Tensor, sph: torch.Tensor, id_ca, id_ragged_idx, Kmax: int) tuple[torch.Tensor, torch.Tensor]#
-
-
Parameters:
-
    -
  • rbf (torch.Tensor, shape=(1, nEdges, num_radial))

  • -
  • sph (torch.Tensor, shape=(nEdges, Kmax, num_spherical))

  • -
  • id_ca

  • -
  • id_ragged_idx

  • -
-
-
Returns:
-

    -
  • rbf_W1 (torch.Tensor, shape=(nEdges, emb_size_interm, num_spherical))

  • -
  • sph (torch.Tensor, shape=(nEdges, Kmax, num_spherical)) – Kmax = maximum number of neighbors of the edges

  • -
-

-
-
-
- -
- -
-
-class core.models.gemnet_gp.layers.efficient.EfficientInteractionBilinear(emb_size: int, emb_size_interm: int, units_out: int)#
-

Bases: torch.nn.Module

-

Efficient reformulation of the bilinear layer and subsequent summation.

-
-
Parameters:
-
    -
  • units_out (int) – Embedding output size of the bilinear layer.

  • -
  • kernel_initializer (callable) – Initializer of the weight matrix.

  • -
-
-
-
-
-reset_parameters() None#
-
- -
-
-forward(basis: tuple[torch.Tensor, torch.Tensor], m, id_reduce, id_ragged_idx, edge_offset, Kmax: int) torch.Tensor#
-
-
Parameters:
-
    -
  • basis

  • -
  • m (quadruplets: m = m_db , triplets: m = m_ba)

  • -
  • id_reduce

  • -
  • id_ragged_idx

  • -
-
-
Returns:
-

m_ca – Edge embeddings.

-
-
Return type:
-

torch.Tensor, shape=(nEdges, units_out)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/layers/embedding_block/index.html b/autoapi/core/models/gemnet_gp/layers/embedding_block/index.html deleted file mode 100644 index 9c6b01404..000000000 --- a/autoapi/core/models/gemnet_gp/layers/embedding_block/index.html +++ /dev/null @@ -1,821 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.layers.embedding_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_gp.layers.embedding_block

- -
- -
-
- - - - -
- -
-

core.models.gemnet_gp.layers.embedding_block#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

AtomEmbedding

Initial atom embeddings based on the atom type

EdgeEmbedding

Edge embedding based on the concatenation of atom embeddings and subsequent dense layer.

-
-
-class core.models.gemnet_gp.layers.embedding_block.AtomEmbedding(emb_size: int)#
-

Bases: torch.nn.Module

-

Initial atom embeddings based on the atom type

-
-
Parameters:
-

emb_size (int) – Atom embeddings size

-
-
-
-
-forward(Z) torch.Tensor#
-
-
Returns:
-

h – Atom embeddings.

-
-
Return type:
-

torch.Tensor, shape=(nAtoms, emb_size)

-
-
-
- -
- -
-
-class core.models.gemnet_gp.layers.embedding_block.EdgeEmbedding(atom_features: int, edge_features: int, num_out_features: int, activation: str | None = None)#
-

Bases: torch.nn.Module

-

Edge embedding based on the concatenation of atom embeddings and subsequent dense layer.

-
-
Parameters:
-
    -
  • emb_size (int) – Embedding size after the dense layer.

  • -
  • activation (str) – Activation function used in the dense layer.

  • -
-
-
-
-
-forward(h, m_rbf, idx_s, idx_t) torch.Tensor#
-
-
Parameters:
-
    -
  • h

  • -
  • m_rbf (shape (nEdges, nFeatures)) – in embedding block: m_rbf = rbf ; In interaction block: m_rbf = m_st

  • -
  • idx_s

  • -
  • idx_t

  • -
-
-
Returns:
-

m_st – Edge embeddings.

-
-
Return type:
-

torch.Tensor, shape=(nEdges, emb_size)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/layers/index.html b/autoapi/core/models/gemnet_gp/layers/index.html deleted file mode 100644 index 9470bc6c8..000000000 --- a/autoapi/core/models/gemnet_gp/layers/index.html +++ /dev/null @@ -1,730 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.layers — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_gp.layers

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.gemnet_gp.layers#

-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/layers/interaction_block/index.html b/autoapi/core/models/gemnet_gp/layers/interaction_block/index.html deleted file mode 100644 index d50ea25a6..000000000 --- a/autoapi/core/models/gemnet_gp/layers/interaction_block/index.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.layers.interaction_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_gp.layers.interaction_block

- -
- -
-
- - - - -
- -
-

core.models.gemnet_gp.layers.interaction_block#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

InteractionBlockTripletsOnly

Interaction block for GemNet-T/dT.

TripletInteraction

Triplet-based message passing block.

-
-
-class core.models.gemnet_gp.layers.interaction_block.InteractionBlockTripletsOnly(emb_size_atom: int, emb_size_edge: int, emb_size_trip: int, emb_size_rbf: int, emb_size_cbf: int, emb_size_bil_trip: int, num_before_skip: int, num_after_skip: int, num_concat: int, num_atom: int, activation: str | None = None, name: str = 'Interaction')#
-

Bases: torch.nn.Module

-

Interaction block for GemNet-T/dT.

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_trip (int) – (Down-projected) Embedding size in the triplet message passing block.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • emb_size_bil_trip (int) – Embedding size of the edge embeddings in the triplet-based message passing block after the bilinear layer.

  • -
  • num_before_skip (int) – Number of residual blocks before the first skip connection.

  • -
  • num_after_skip (int) – Number of residual blocks after the first skip connection.

  • -
  • num_concat (int) – Number of residual blocks after the concatenation.

  • -
  • num_atom (int) – Number of residual blocks in the atom embedding blocks.

  • -
  • activation (str) – Name of the activation function to use in the dense layers except for the final dense layer.

  • -
-
-
-
-
-forward(h: torch.Tensor, m: torch.Tensor, rbf3, cbf3, id3_ragged_idx, id_swap, id3_ba, id3_ca, rbf_h, idx_s, idx_t, edge_offset, Kmax, nAtoms)#
-
-
Returns:
-

    -
  • h (torch.Tensor, shape=(nEdges, emb_size_atom)) – Atom embeddings.

  • -
  • m (torch.Tensor, shape=(nEdges, emb_size_edge)) – Edge embeddings (c->a).

  • -
  • Node (h)

  • -
  • Edge (m, rbf3, id_swap, rbf_h, idx_s, idx_t, cbf3[0], cbf3[1] (dense))

  • -
  • Triplet (id3_ragged_idx, id3_ba, id3_ca)

  • -
-

-
-
-
- -
- -
-
-class core.models.gemnet_gp.layers.interaction_block.TripletInteraction(emb_size_edge: int, emb_size_trip: int, emb_size_bilinear: int, emb_size_rbf: int, emb_size_cbf: int, activation: str | None = None, name: str = 'TripletInteraction', **kwargs)#
-

Bases: torch.nn.Module

-

Triplet-based message passing block.

-
-
Parameters:
-
    -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_trip (int) – (Down-projected) Embedding size of the edge embeddings after the hadamard product with rbf.

  • -
  • emb_size_bilinear (int) – Embedding size of the edge embeddings after the bilinear layer.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • activation (str) – Name of the activation function to use in the dense layers except for the final dense layer.

  • -
-
-
-
-
-forward(m: torch.Tensor, rbf3, cbf3, id3_ragged_idx, id_swap, id3_ba, id3_ca, edge_offset, Kmax)#
-
-
Returns:
-

m – Edge embeddings (c->a).

-
-
Return type:
-

torch.Tensor, shape=(nEdges, emb_size_edge)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/layers/radial_basis/index.html b/autoapi/core/models/gemnet_gp/layers/radial_basis/index.html deleted file mode 100644 index 44dcf564a..000000000 --- a/autoapi/core/models/gemnet_gp/layers/radial_basis/index.html +++ /dev/null @@ -1,896 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.layers.radial_basis — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_gp.layers.radial_basis#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - -

PolynomialEnvelope

Polynomial envelope function that ensures a smooth cutoff.

ExponentialEnvelope

Exponential envelope function that ensures a smooth cutoff,

SphericalBesselBasis

1D spherical Bessel basis

BernsteinBasis

Bernstein polynomial basis,

RadialBasis

-
param num_radial:
-

Controls maximum frequency.

-
-
-

-
-
-class core.models.gemnet_gp.layers.radial_basis.PolynomialEnvelope(exponent: int)#
-

Bases: torch.nn.Module

-

Polynomial envelope function that ensures a smooth cutoff.

-
-
Parameters:
-

exponent (int) – Exponent of the envelope function.

-
-
-
-
-forward(d_scaled: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet_gp.layers.radial_basis.ExponentialEnvelope#
-

Bases: torch.nn.Module

-

Exponential envelope function that ensures a smooth cutoff, -as proposed in Unke, Chmiela, Gastegger, Schütt, Sauceda, Müller 2021. -SpookyNet: Learning Force Fields with Electronic Degrees of Freedom -and Nonlocal Effects

-
-
-forward(d_scaled) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet_gp.layers.radial_basis.SphericalBesselBasis(num_radial: int, cutoff: float)#
-

Bases: torch.nn.Module

-

1D spherical Bessel basis

-
-
Parameters:
-
    -
  • num_radial (int) – Controls maximum frequency.

  • -
  • cutoff (float) – Cutoff distance in Angstrom.

  • -
-
-
-
-
-forward(d_scaled)#
-
- -
- -
-
-class core.models.gemnet_gp.layers.radial_basis.BernsteinBasis(num_radial: int, pregamma_initial: float = 0.45264)#
-

Bases: torch.nn.Module

-

Bernstein polynomial basis, -as proposed in Unke, Chmiela, Gastegger, Schütt, Sauceda, Müller 2021. -SpookyNet: Learning Force Fields with Electronic Degrees of Freedom -and Nonlocal Effects

-
-
Parameters:
-
    -
  • num_radial (int) – Controls maximum frequency.

  • -
  • pregamma_initial (float) – Initial value of exponential coefficient gamma. -Default: gamma = 0.5 * a_0**-1 = 0.94486, -inverse softplus -> pregamma = log e**gamma - 1 = 0.45264

  • -
-
-
-
-
-forward(d_scaled) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet_gp.layers.radial_basis.RadialBasis(num_radial: int, cutoff: float, rbf: dict[str, str] | None = None, envelope: dict[str, str | int] | None = None)#
-

Bases: torch.nn.Module

-
-
Parameters:
-
    -
  • num_radial (int) – Controls maximum frequency.

  • -
  • cutoff (float) – Cutoff distance in Angstrom.

  • -
  • rbf (dict = {"name": "gaussian"}) – Basis function and its hyperparameters.

  • -
  • envelope (dict = {"name": "polynomial", "exponent": 5}) – Envelope function and its hyperparameters.

  • -
-
-
-
-
-forward(d)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.html b/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.html deleted file mode 100644 index 73e18f92d..000000000 --- a/autoapi/core/models/gemnet_gp/layers/spherical_basis/index.html +++ /dev/null @@ -1,771 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.layers.spherical_basis — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_gp.layers.spherical_basis

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.gemnet_gp.layers.spherical_basis#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

CircularBasisLayer

2D Fourier Bessel Basis

-
-
-class core.models.gemnet_gp.layers.spherical_basis.CircularBasisLayer(num_spherical: int, radial_basis: core.models.gemnet_gp.layers.radial_basis.RadialBasis, cbf, efficient: bool = False)#
-

Bases: torch.nn.Module

-

2D Fourier Bessel Basis

-
-
Parameters:
-
    -
  • num_spherical (int) – Controls maximum frequency.

  • -
  • radial_basis (RadialBasis) – Radial basis functions

  • -
  • cbf (dict) – Name and hyperparameters of the cosine basis function

  • -
  • efficient (bool) – Whether to use the “efficient” summation order

  • -
-
-
-
-
-forward(D_ca, cosφ_cab, id3_ca)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_gp/utils/index.html b/autoapi/core/models/gemnet_gp/utils/index.html deleted file mode 100644 index 3944bab0b..000000000 --- a/autoapi/core/models/gemnet_gp/utils/index.html +++ /dev/null @@ -1,890 +0,0 @@ - - - - - - - - - - - core.models.gemnet_gp.utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_gp.utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

read_json(path)

update_json(→ None)

write_json(→ None)

read_value_json(path, key)

ragged_range(sizes)

Multiple concatenated ranges.

repeat_blocks(→ torch.Tensor)

Repeat blocks of indices.

calculate_interatomic_vectors(→ tuple[torch.Tensor, ...)

Calculate the vectors connecting the given atom pairs,

inner_product_normalized(→ torch.Tensor)

Calculate the inner product between the given normalized vectors,

mask_neighbors(neighbors, edge_mask)

-
-
-core.models.gemnet_gp.utils.read_json(path: str)#
-
- -
-
-core.models.gemnet_gp.utils.update_json(path: str, data) None#
-
- -
-
-core.models.gemnet_gp.utils.write_json(path: str, data) None#
-
- -
-
-core.models.gemnet_gp.utils.read_value_json(path: str, key)#
-
- -
-
-core.models.gemnet_gp.utils.ragged_range(sizes)#
-

Multiple concatenated ranges.

-

Examples

-

sizes = [1 4 2 3] -Return: [0 0 1 2 3 0 1 0 1 2]

-
- -
-
-core.models.gemnet_gp.utils.repeat_blocks(sizes: torch.Tensor, repeats, continuous_indexing: bool = True, start_idx: int = 0, block_inc: int = 0, repeat_inc: int = 0) torch.Tensor#
-

Repeat blocks of indices. -Adapted from https://stackoverflow.com/questions/51154989/numpy-vectorized-function-to-repeat-blocks-of-consecutive-elements

-

continuous_indexing: Whether to keep increasing the index after each block -start_idx: Starting index -block_inc: Number to increment by after each block,

-
-

either global or per block. Shape: len(sizes) - 1

-
-
-
repeat_inc: Number to increment by after each repetition,

either global or per block

-
-
-

Examples

-

sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = False -Return: [0 0 0 0 1 2 0 1 2 0 1 0 1 0 1] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True -Return: [0 0 0 1 2 3 1 2 3 4 5 4 5 4 5] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -repeat_inc = 4 -Return: [0 4 8 1 2 3 5 6 7 4 5 8 9 12 13] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -start_idx = 5 -Return: [5 5 5 6 7 8 6 7 8 9 10 9 10 9 10] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -block_inc = 1 -Return: [0 0 0 2 3 4 2 3 4 6 7 6 7 6 7] -sizes = [0,3,2] ; repeats = [3,2,3] ; continuous_indexing = True -Return: [0 1 2 0 1 2 3 4 3 4 3 4] -sizes = [2,3,2] ; repeats = [2,0,2] ; continuous_indexing = True -Return: [0 1 0 1 5 6 5 6]

-
- -
-
-core.models.gemnet_gp.utils.calculate_interatomic_vectors(R: torch.Tensor, id_s: torch.Tensor, id_t: torch.Tensor, offsets_st: torch.Tensor | None) tuple[torch.Tensor, torch.Tensor]#
-

Calculate the vectors connecting the given atom pairs, -considering offsets from periodic boundary conditions (PBC).

-
-
Parameters:
-
    -
  • R (Tensor, shape = (nAtoms, 3)) – Atom positions.

  • -
  • id_s (Tensor, shape = (nEdges,)) – Indices of the source atom of the edges.

  • -
  • id_t (Tensor, shape = (nEdges,)) – Indices of the target atom of the edges.

  • -
  • offsets_st (Tensor, shape = (nEdges,)) – PBC offsets of the edges. -Subtract this from the correct direction.

  • -
-
-
Returns:
-

(D_st, V_st)

-
-
D_st: Tensor, shape = (nEdges,)

Distance from atom t to s.

-
-
V_st: Tensor, shape = (nEdges,)

Unit direction from atom t to s.

-
-
-

-
-
Return type:
-

tuple

-
-
-
- -
-
-core.models.gemnet_gp.utils.inner_product_normalized(x: torch.Tensor, y: torch.Tensor) torch.Tensor#
-

Calculate the inner product between the given normalized vectors, -giving a result between -1 and 1.

-
- -
-
-core.models.gemnet_gp.utils.mask_neighbors(neighbors: torch.Tensor, edge_mask: torch.Tensor)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/index.html b/autoapi/core/models/gemnet_oc/index.html deleted file mode 100644 index afaecd744..000000000 --- a/autoapi/core/models/gemnet_oc/index.html +++ /dev/null @@ -1,1013 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_oc#

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - -

GemNetOC

-
param num_atoms (int):
-

-
-

-
-
-class core.models.gemnet_oc.GemNetOC(num_atoms: int | None, bond_feat_dim: int, num_targets: int, num_spherical: int, num_radial: int, num_blocks: int, emb_size_atom: int, emb_size_edge: int, emb_size_trip_in: int, emb_size_trip_out: int, emb_size_quad_in: int, emb_size_quad_out: int, emb_size_aint_in: int, emb_size_aint_out: int, emb_size_rbf: int, emb_size_cbf: int, emb_size_sbf: int, num_before_skip: int, num_after_skip: int, num_concat: int, num_atom: int, num_output_afteratom: int, num_atom_emb_layers: int = 0, num_global_out_layers: int = 2, regress_forces: bool = True, direct_forces: bool = False, use_pbc: bool = True, scale_backprop_forces: bool = False, cutoff: float = 6.0, cutoff_qint: float | None = None, cutoff_aeaint: float | None = None, cutoff_aint: float | None = None, max_neighbors: int = 50, max_neighbors_qint: int | None = None, max_neighbors_aeaint: int | None = None, max_neighbors_aint: int | None = None, enforce_max_neighbors_strictly: bool = True, rbf: dict[str, str] | None = None, rbf_spherical: dict | None = None, envelope: dict[str, str | int] | None = None, cbf: dict[str, str] | None = None, sbf: dict[str, str] | None = None, extensive: bool = True, forces_coupled: bool = False, output_init: str = 'HeOrthogonal', activation: str = 'silu', quad_interaction: bool = False, atom_edge_interaction: bool = False, edge_atom_interaction: bool = False, atom_interaction: bool = False, scale_basis: bool = False, qint_tags: list | None = None, num_elements: int = 83, otf_graph: bool = False, scale_file: str | None = None, **kwargs)#
-

Bases: fairchem.core.models.base.BaseModel

-
-
Parameters:
-
    -
  • (int) (bond_feat_dim)

  • -
  • (int)

  • -
  • num_targets (int) – Number of prediction targets.

  • -
  • num_spherical (int) – Controls maximum frequency.

  • -
  • num_radial (int) – Controls maximum frequency.

  • -
  • num_blocks (int) – Number of building blocks to be stacked.

  • -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_trip_in (int) – (Down-projected) embedding size of the quadruplet edge embeddings -before the bilinear layer.

  • -
  • emb_size_trip_out (int) – (Down-projected) embedding size of the quadruplet edge embeddings -after the bilinear layer.

  • -
  • emb_size_quad_in (int) – (Down-projected) embedding size of the quadruplet edge embeddings -before the bilinear layer.

  • -
  • emb_size_quad_out (int) – (Down-projected) embedding size of the quadruplet edge embeddings -after the bilinear layer.

  • -
  • emb_size_aint_in (int) – Embedding size in the atom interaction before the bilinear layer.

  • -
  • emb_size_aint_out (int) – Embedding size in the atom interaction after the bilinear layer.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • emb_size_sbf (int) – Embedding size of the spherical basis transformation (two angles).

  • -
  • num_before_skip (int) – Number of residual blocks before the first skip connection.

  • -
  • num_after_skip (int) – Number of residual blocks after the first skip connection.

  • -
  • num_concat (int) – Number of residual blocks after the concatenation.

  • -
  • num_atom (int) – Number of residual blocks in the atom embedding blocks.

  • -
  • num_output_afteratom (int) – Number of residual blocks in the output blocks -after adding the atom embedding.

  • -
  • num_atom_emb_layers (int) – Number of residual blocks for transforming atom embeddings.

  • -
  • num_global_out_layers (int) – Number of final residual blocks before the output.

  • -
  • regress_forces (bool) – Whether to predict forces. Default: True

  • -
  • direct_forces (bool) – If True predict forces based on aggregation of interatomic directions. -If False predict forces based on negative gradient of energy potential.

  • -
  • use_pbc (bool) – Whether to use periodic boundary conditions.

  • -
  • scale_backprop_forces (bool) – Whether to scale up the energy and then scales down the forces -to prevent NaNs and infs in backpropagated forces.

  • -
  • cutoff (float) – Embedding cutoff for interatomic connections and embeddings in Angstrom.

  • -
  • cutoff_qint (float) – Quadruplet interaction cutoff in Angstrom. -Optional. Uses cutoff per default.

  • -
  • cutoff_aeaint (float) – Edge-to-atom and atom-to-edge interaction cutoff in Angstrom. -Optional. Uses cutoff per default.

  • -
  • cutoff_aint (float) – Atom-to-atom interaction cutoff in Angstrom. -Optional. Uses maximum of all other cutoffs per default.

  • -
  • max_neighbors (int) – Maximum number of neighbors for interatomic connections and embeddings.

  • -
  • max_neighbors_qint (int) – Maximum number of quadruplet interactions per embedding. -Optional. Uses max_neighbors per default.

  • -
  • max_neighbors_aeaint (int) – Maximum number of edge-to-atom and atom-to-edge interactions per embedding. -Optional. Uses max_neighbors per default.

  • -
  • max_neighbors_aint (int) – Maximum number of atom-to-atom interactions per atom. -Optional. Uses maximum of all other neighbors per default.

  • -
  • enforce_max_neighbors_strictly (bool) – When subselected edges based on max_neighbors args, arbitrarily -select amongst degenerate edges to have exactly the correct number.

  • -
  • rbf (dict) – Name and hyperparameters of the radial basis function.

  • -
  • rbf_spherical (dict) – Name and hyperparameters of the radial basis function used as part of the -circular and spherical bases. -Optional. Uses rbf per default.

  • -
  • envelope (dict) – Name and hyperparameters of the envelope function.

  • -
  • cbf (dict) – Name and hyperparameters of the circular basis function.

  • -
  • sbf (dict) – Name and hyperparameters of the spherical basis function.

  • -
  • extensive (bool) – Whether the output should be extensive (proportional to the number of atoms)

  • -
  • forces_coupled (bool) – If True, enforce that |F_st| = |F_ts|. No effect if direct_forces is False.

  • -
  • output_init (str) – Initialization method for the final dense layer.

  • -
  • activation (str) – Name of the activation function.

  • -
  • scale_file (str) – Path to the pytorch file containing the scaling factors.

  • -
  • quad_interaction (bool) – Whether to use quadruplet interactions (with dihedral angles)

  • -
  • atom_edge_interaction (bool) – Whether to use atom-to-edge interactions

  • -
  • edge_atom_interaction (bool) – Whether to use edge-to-atom interactions

  • -
  • atom_interaction (bool) – Whether to use atom-to-atom interactions

  • -
  • scale_basis (bool) – Whether to use a scaling layer in the raw basis function for better -numerical stability.

  • -
  • qint_tags (list) – Which atom tags to use quadruplet interactions for. -0=sub-surface bulk, 1=surface, 2=adsorbate atoms.

  • -
-
-
-
-
-property num_params: int#
-
- -
-
-set_cutoffs(cutoff, cutoff_qint, cutoff_aeaint, cutoff_aint)#
-
- -
-
-set_max_neighbors(max_neighbors, max_neighbors_qint, max_neighbors_aeaint, max_neighbors_aint)#
-
- -
-
-init_basis_functions(num_radial, num_spherical, rbf, rbf_spherical, envelope, cbf, sbf, scale_basis)#
-
- -
-
-init_shared_basis_layers(num_radial, num_spherical, emb_size_rbf, emb_size_cbf, emb_size_sbf)#
-
- -
-
-calculate_quad_angles(V_st, V_qint_st, quad_idx)#
-

Calculate angles for quadruplet-based message passing.

-
-
Parameters:
-
    -
  • V_st (Tensor, shape = (nAtoms, 3)) – Normalized directions from s to t

  • -
  • V_qint_st (Tensor, shape = (nAtoms, 3)) – Normalized directions from s to t for the quadruplet -interaction graph

  • -
  • quad_idx (dict of torch.Tensor) – Indices relevant for quadruplet interactions.

  • -
-
-
Returns:
-

    -
  • cosφ_cab (Tensor, shape = (num_triplets_inint,)) – Cosine of angle between atoms c -> a <- b.

  • -
  • cosφ_abd (Tensor, shape = (num_triplets_qint,)) – Cosine of angle between atoms a -> b -> d.

  • -
  • angle_cabd (Tensor, shape = (num_quadruplets,)) – Dihedral angle between atoms c <- a-b -> d.

  • -
-

-
-
-
- -
-
-select_symmetric_edges(tensor: torch.Tensor, mask: torch.Tensor, reorder_idx: torch.Tensor, opposite_neg) torch.Tensor#
-

Use a mask to remove values of removed edges and then -duplicate the values for the correct edge direction.

-
-
Parameters:
-
    -
  • tensor (torch.Tensor) – Values to symmetrize for the new tensor.

  • -
  • mask (torch.Tensor) – Mask defining which edges go in the correct direction.

  • -
  • reorder_idx (torch.Tensor) – Indices defining how to reorder the tensor values after -concatenating the edge values of both directions.

  • -
  • opposite_neg (bool) – Whether the edge in the opposite direction should use the -negative tensor value.

  • -
-
-
Returns:
-

tensor_ordered – A tensor with symmetrized values.

-
-
Return type:
-

torch.Tensor

-
-
-
- -
-
-symmetrize_edges(graph, batch_idx)#
-

Symmetrize edges to ensure existence of counter-directional edges.

-

Some edges are only present in one direction in the data, -since every atom has a maximum number of neighbors. -We only use i->j edges here. So we lose some j->i edges -and add others by making it symmetric.

-
- -
-
-subselect_edges(data, graph, cutoff=None, max_neighbors=None)#
-

Subselect edges using a stricter cutoff and max_neighbors.

-
- -
-
-generate_graph_dict(data, cutoff, max_neighbors)#
-

Generate a radius/nearest neighbor graph.

-
- -
-
-subselect_graph(data, graph, cutoff, max_neighbors, cutoff_orig, max_neighbors_orig)#
-

If the new cutoff and max_neighbors is different from the original, -subselect the edges of a given graph.

-
- -
-
-get_graphs_and_indices(data)#
-

“Generate embedding and interaction graphs and indices.

-
- -
-
-get_bases(main_graph, a2a_graph, a2ee2a_graph, qint_graph, trip_idx_e2e, trip_idx_a2e, trip_idx_e2a, quad_idx, num_atoms)#
-

Calculate and transform basis functions.

-
- -
-
-forward(data)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/initializers/index.html b/autoapi/core/models/gemnet_oc/initializers/index.html deleted file mode 100644 index 7536f0822..000000000 --- a/autoapi/core/models/gemnet_oc/initializers/index.html +++ /dev/null @@ -1,797 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.initializers — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_oc.initializers

- -
- -
-
- - - - -
- -
-

core.models.gemnet_oc.initializers#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - -

_standardize(kernel)

Makes sure that N*Var(W) = 1 and E[W] = 0

he_orthogonal_init(→ torch.Tensor)

Generate a weight matrix with variance according to He (Kaiming) initialization.

grid_init(→ torch.Tensor)

Generate a weight matrix so that each input value corresponds to one value on a regular grid between start and end.

log_grid_init(→ torch.Tensor)

Generate a weight matrix so that each input value corresponds to one value on a regular logarithmic grid between 10^start and 10^end.

get_initializer(name, **init_kwargs)

-
-
-core.models.gemnet_oc.initializers._standardize(kernel)#
-

Makes sure that N*Var(W) = 1 and E[W] = 0

-
- -
-
-core.models.gemnet_oc.initializers.he_orthogonal_init(tensor: torch.Tensor) torch.Tensor#
-

Generate a weight matrix with variance according to He (Kaiming) initialization. -Based on a random (semi-)orthogonal matrix neural networks -are expected to learn better when features are decorrelated -(stated by eg. “Reducing overfitting in deep networks by decorrelating representations”, -“Dropout: a simple way to prevent neural networks from overfitting”, -“Exact solutions to the nonlinear dynamics of learning in deep linear neural networks”)

-
- -
-
-core.models.gemnet_oc.initializers.grid_init(tensor: torch.Tensor, start: int = -1, end: int = 1) torch.Tensor#
-

Generate a weight matrix so that each input value corresponds to one value on a regular grid between start and end.

-
- -
-
-core.models.gemnet_oc.initializers.log_grid_init(tensor: torch.Tensor, start: int = -4, end: int = 0) torch.Tensor#
-

Generate a weight matrix so that each input value corresponds to one value on a regular logarithmic grid between 10^start and 10^end.

-
- -
-
-core.models.gemnet_oc.initializers.get_initializer(name, **init_kwargs)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/interaction_indices/index.html b/autoapi/core/models/gemnet_oc/interaction_indices/index.html deleted file mode 100644 index a4dc9c3ee..000000000 --- a/autoapi/core/models/gemnet_oc/interaction_indices/index.html +++ /dev/null @@ -1,876 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.interaction_indices — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_oc.interaction_indices

- -
- -
-
- - - - -
- -
-

core.models.gemnet_oc.interaction_indices#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - -

get_triplets(graph, num_atoms)

Get all input edges b->a for each output edge c->a.

get_mixed_triplets(graph_in, graph_out, num_atoms[, ...])

Get all output edges (ingoing or outgoing) for each incoming edge.

get_quadruplets(main_graph, qint_graph, num_atoms)

Get all d->b for each edge c->a and connection b->a

-
-
-core.models.gemnet_oc.interaction_indices.get_triplets(graph, num_atoms: int)#
-

Get all input edges b->a for each output edge c->a. -It is possible that b=c, as long as the edges are distinct -(i.e. atoms b and c stem from different unit cells).

-
-
Parameters:
-
    -
  • graph (dict of torch.Tensor) – Contains the graph’s edge_index.

  • -
  • num_atoms (int) – Total number of atoms.

  • -
-
-
Returns:
-

-
in: torch.Tensor, shape (num_triplets,)

Indices of input edge b->a of each triplet b->a<-c

-
-
out: torch.Tensor, shape (num_triplets,)

Indices of output edge c->a of each triplet b->a<-c

-
-
out_agg: torch.Tensor, shape (num_triplets,)

Indices enumerating the intermediate edges of each output edge. -Used for creating a padded matrix and aggregating via matmul.

-
-
-

-
-
Return type:
-

Dictionary containing the entries

-
-
-
- -
-
-core.models.gemnet_oc.interaction_indices.get_mixed_triplets(graph_in, graph_out, num_atoms, to_outedge=False, return_adj=False, return_agg_idx=False)#
-

Get all output edges (ingoing or outgoing) for each incoming edge. -It is possible that in atom=out atom, as long as the edges are distinct -(i.e. they stem from different unit cells). In edges and out edges stem -from separate graphs (hence “mixed”) with shared atoms.

-
-
Parameters:
-
    -
  • graph_in (dict of torch.Tensor) – Contains the input graph’s edge_index and cell_offset.

  • -
  • graph_out (dict of torch.Tensor) – Contains the output graph’s edge_index and cell_offset. -Input and output graphs use the same atoms, but different edges.

  • -
  • num_atoms (int) – Total number of atoms.

  • -
  • to_outedge (bool) – Whether to map the output to the atom’s outgoing edges a->c -instead of the ingoing edges c->a.

  • -
  • return_adj (bool) – Whether to output the adjacency (incidence) matrix between output -edges and atoms adj_edges.

  • -
  • return_agg_idx (bool) – Whether to output the indices enumerating the intermediate edges -of each output edge.

  • -
-
-
Returns:
-

-
in: torch.Tensor, shape (num_triplets,)

Indices of input edges

-
-
out: torch.Tensor, shape (num_triplets,)

Indices of output edges

-
-
adj_edges: SparseTensor, shape (num_edges, num_atoms)

Adjacency (incidence) matrix between output edges and atoms, -with values specifying the input edges. -Only returned if return_adj is True.

-
-
out_agg: torch.Tensor, shape (num_triplets,)

Indices enumerating the intermediate edges of each output edge. -Used for creating a padded matrix and aggregating via matmul. -Only returned if return_agg_idx is True.

-
-
-

-
-
Return type:
-

Dictionary containing the entries

-
-
-
- -
-
-core.models.gemnet_oc.interaction_indices.get_quadruplets(main_graph, qint_graph, num_atoms)#
-

Get all d->b for each edge c->a and connection b->a -Careful about periodic images! -Separate interaction cutoff not supported.

-
-
Parameters:
-
    -
  • main_graph (dict of torch.Tensor) – Contains the main graph’s edge_index and cell_offset. -The main graph defines which edges are embedded.

  • -
  • qint_graph (dict of torch.Tensor) – Contains the quadruplet interaction graph’s edge_index and -cell_offset. main_graph and qint_graph use the same atoms, -but different edges.

  • -
  • num_atoms (int) – Total number of atoms.

  • -
-
-
Returns:
-

-
triplet_in[‘in’]: torch.Tensor, shape (nTriplets,)

Indices of input edge d->b in triplet d->b->a.

-
-
triplet_in[‘out’]: torch.Tensor, shape (nTriplets,)

Interaction indices of output edge b->a in triplet d->b->a.

-
-
triplet_out[‘in’]: torch.Tensor, shape (nTriplets,)

Interaction indices of input edge b->a in triplet c->a<-b.

-
-
triplet_out[‘out’]: torch.Tensor, shape (nTriplets,)

Indices of output edge c->a in triplet c->a<-b.

-
-
out: torch.Tensor, shape (nQuadruplets,)

Indices of output edge c->a in quadruplet

-
-
trip_in_to_quad: torch.Tensor, shape (nQuadruplets,)

Indices to map from input triplet d->b->a -to quadruplet d->b->a<-c.

-
-
trip_out_to_quad: torch.Tensor, shape (nQuadruplets,)

Indices to map from output triplet c->a<-b -to quadruplet d->b->a<-c.

-
-
out_agg: torch.Tensor, shape (num_triplets,)

Indices enumerating the intermediate edges of each output edge. -Used for creating a padded matrix and aggregating via matmul.

-
-
-

-
-
Return type:
-

Dictionary containing the entries

-
-
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.html b/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.html deleted file mode 100644 index 36a5261ea..000000000 --- a/autoapi/core/models/gemnet_oc/layers/atom_update_block/index.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers.atom_update_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_oc.layers.atom_update_block

- -
- -
-
- - - - -
- -
-

core.models.gemnet_oc.layers.atom_update_block#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

AtomUpdateBlock

Aggregate the message embeddings of the atoms

OutputBlock

Combines the atom update block and subsequent final dense layer.

-
-
-class core.models.gemnet_oc.layers.atom_update_block.AtomUpdateBlock(emb_size_atom: int, emb_size_edge: int, emb_size_rbf: int, nHidden: int, activation=None)#
-

Bases: torch.nn.Module

-

Aggregate the message embeddings of the atoms

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis.

  • -
  • nHidden (int) – Number of residual blocks.

  • -
  • activation (callable/str) – Name of the activation function to use in the dense layers.

  • -
-
-
-
-
-get_mlp(units_in: int, units: int, nHidden: int, activation)#
-
- -
-
-forward(h: torch.Tensor, m, basis_rad, idx_atom)#
-
-
Returns:
-

h – Atom embedding.

-
-
Return type:
-

torch.Tensor, shape=(nAtoms, emb_size_atom)

-
-
-
- -
- -
-
-class core.models.gemnet_oc.layers.atom_update_block.OutputBlock(emb_size_atom: int, emb_size_edge: int, emb_size_rbf: int, nHidden: int, nHidden_afteratom: int, activation: str | None = None, direct_forces: bool = True)#
-

Bases: AtomUpdateBlock

-

Combines the atom update block and subsequent final dense layer.

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis.

  • -
  • nHidden (int) – Number of residual blocks before adding the atom embedding.

  • -
  • nHidden_afteratom (int) – Number of residual blocks after adding the atom embedding.

  • -
  • activation (str) – Name of the activation function to use in the dense layers.

  • -
  • direct_forces (bool) – If true directly predict forces, i.e. without taking the gradient -of the energy potential.

  • -
-
-
-
-
-forward(h: torch.Tensor, m: torch.Tensor, basis_rad, idx_atom)#
-
-
Returns:
-

    -
  • torch.Tensor, shape=(nAtoms, emb_size_atom) – Output atom embeddings.

  • -
  • torch.Tensor, shape=(nEdges, emb_size_edge) – Output edge embeddings.

  • -
-

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/base_layers/index.html b/autoapi/core/models/gemnet_oc/layers/base_layers/index.html deleted file mode 100644 index 971cd092a..000000000 --- a/autoapi/core/models/gemnet_oc/layers/base_layers/index.html +++ /dev/null @@ -1,864 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers.base_layers — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_oc.layers.base_layers

- -
- -
-
- - - - -
- -
-

core.models.gemnet_oc.layers.base_layers#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

Dense

Combines dense layer with scaling for silu activation.

ScaledSiLU

Base class for all neural network modules.

ResidualLayer

Residual block with output scaled by 1/sqrt(2).

-
-
-class core.models.gemnet_oc.layers.base_layers.Dense(in_features: int, out_features: int, bias: bool = False, activation: str | None = None)#
-

Bases: torch.nn.Module

-

Combines dense layer with scaling for silu activation.

-
-
Parameters:
-
    -
  • in_features (int) – Input embedding size.

  • -
  • out_features (int) – Output embedding size.

  • -
  • bias (bool) – True if use bias.

  • -
  • activation (str) – Name of the activation function to use.

  • -
-
-
-
-
-reset_parameters(initializer=he_orthogonal_init) None#
-
- -
-
-forward(x)#
-
- -
- -
-
-class core.models.gemnet_oc.layers.base_layers.ScaledSiLU#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(x)#
-
- -
- -
-
-class core.models.gemnet_oc.layers.base_layers.ResidualLayer(units: int, nLayers: int = 2, layer=Dense, **layer_kwargs)#
-

Bases: torch.nn.Module

-

Residual block with output scaled by 1/sqrt(2).

-
-
Parameters:
-
    -
  • units (int) – Input and output embedding size.

  • -
  • nLayers (int) – Number of dense layers.

  • -
  • layer (torch.nn.Module) – Class for the layers inside the residual block.

  • -
  • layer_kwargs (str) – Keyword arguments for initializing the layers.

  • -
-
-
-
-
-forward(input)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/basis_utils/index.html b/autoapi/core/models/gemnet_oc/layers/basis_utils/index.html deleted file mode 100644 index 1215b32a6..000000000 --- a/autoapi/core/models/gemnet_oc/layers/basis_utils/index.html +++ /dev/null @@ -1,904 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers.basis_utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_oc.layers.basis_utils#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - -

Jn(r, n)

numerical spherical bessel functions of order n

Jn_zeros(n, k)

Compute the first k zeros of the spherical bessel functions

spherical_bessel_formulas(n)

Computes the sympy formulas for the spherical bessel functions

bessel_basis(n, k)

Compute the sympy formulas for the normalized and rescaled spherical bessel

sph_harm_prefactor(l_degree, m_order)

Computes the constant pre-factor for the spherical harmonic

associated_legendre_polynomials(L_maxdegree[, ...])

Computes string formulas of the associated legendre polynomials

real_sph_harm(→ None)

Computes formula strings of the the real part of the spherical harmonics

get_sph_harm_basis(L_maxdegree[, zero_m_only])

Get a function calculating the spherical harmonics basis from z and phi.

-
-
-core.models.gemnet_oc.layers.basis_utils.Jn(r: float, n: int)#
-

numerical spherical bessel functions of order n

-
- -
-
-core.models.gemnet_oc.layers.basis_utils.Jn_zeros(n: int, k: int)#
-

Compute the first k zeros of the spherical bessel functions -up to order n (excluded)

-
- -
-
-core.models.gemnet_oc.layers.basis_utils.spherical_bessel_formulas(n: int)#
-

Computes the sympy formulas for the spherical bessel functions -up to order n (excluded)

-
- -
-
-core.models.gemnet_oc.layers.basis_utils.bessel_basis(n: int, k: int)#
-

Compute the sympy formulas for the normalized and rescaled spherical bessel -functions up to order n (excluded) and maximum frequency k (excluded).

-
-
Returns:
-

bess_basis – Bessel basis formulas taking in a single argument x. -Has length n where each element has length k. -> In total n*k many.

-
-
Return type:
-

list

-
-
-
- -
-
-core.models.gemnet_oc.layers.basis_utils.sph_harm_prefactor(l_degree: int, m_order: int)#
-

Computes the constant pre-factor for the spherical harmonic -of degree l and order m.

-
-
Parameters:
-
    -
  • l_degree (int) – Degree of the spherical harmonic. l >= 0

  • -
  • m_order (int) – Order of the spherical harmonic. -l <= m <= l

  • -
-
-
Returns:
-

factor

-
-
Return type:
-

float

-
-
-
- -
-
-core.models.gemnet_oc.layers.basis_utils.associated_legendre_polynomials(L_maxdegree: int, zero_m_only: bool = True, pos_m_only: bool = True)#
-

Computes string formulas of the associated legendre polynomials -up to degree L (excluded).

-
-
Parameters:
-
    -
  • L_maxdegree (int) – Degree up to which to calculate the associated legendre polynomials -(degree L is excluded).

  • -
  • zero_m_only (bool) – If True only calculate the polynomials for the polynomials where m=0.

  • -
  • pos_m_only (bool) – If True only calculate the polynomials for the polynomials where m>=0. -Overwritten by zero_m_only.

  • -
-
-
Returns:
-

polynomials – Contains the sympy functions of the polynomials -(in total L many if zero_m_only is True else L^2 many).

-
-
Return type:
-

list

-
-
-
- -
-
-core.models.gemnet_oc.layers.basis_utils.real_sph_harm(L_maxdegree: int, use_theta: bool, use_phi: bool = True, zero_m_only: bool = True) None#
-

Computes formula strings of the the real part of the spherical harmonics -up to degree L (excluded). Variables are either spherical coordinates phi -and theta (or cartesian coordinates x,y,z) on the UNIT SPHERE.

-
-
Parameters:
-
    -
  • L_maxdegree (int) – Degree up to which to calculate the spherical harmonics -(degree L is excluded).

  • -
  • use_theta (bool) –

      -
    • True: Expects the input of the formula strings to contain theta.

    • -
    • False: Expects the input of the formula strings to contain z.

    • -
    -

  • -
  • use_phi (bool) –

      -
    • True: Expects the input of the formula strings to contain phi.

    • -
    • False: Expects the input of the formula strings to contain x and y.

    • -
    -

    Does nothing if zero_m_only is True

    -

  • -
  • zero_m_only (bool) – If True only calculate the harmonics where m=0.

  • -
-
-
Returns:
-

Y_lm_real – Computes formula strings of the the real part of the spherical -harmonics up to degree L (where degree L is not excluded). -In total L^2 many sph harm exist up to degree L (excluded). -However, if zero_m_only only is True then the total count -is reduced to L.

-
-
Return type:
-

list

-
-
-
- -
-
-core.models.gemnet_oc.layers.basis_utils.get_sph_harm_basis(L_maxdegree: int, zero_m_only: bool = True)#
-

Get a function calculating the spherical harmonics basis from z and phi.

-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/efficient/index.html b/autoapi/core/models/gemnet_oc/layers/efficient/index.html deleted file mode 100644 index 2715a48be..000000000 --- a/autoapi/core/models/gemnet_oc/layers/efficient/index.html +++ /dev/null @@ -1,868 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers.efficient — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_oc.layers.efficient#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

BasisEmbedding

Embed a basis (CBF, SBF), optionally using the efficient reformulation.

EfficientInteractionBilinear

Efficient reformulation of the bilinear layer and subsequent summation.

-
-
-class core.models.gemnet_oc.layers.efficient.BasisEmbedding(num_radial: int, emb_size_interm: int, num_spherical: int | None = None)#
-

Bases: torch.nn.Module

-

Embed a basis (CBF, SBF), optionally using the efficient reformulation.

-
-
Parameters:
-
    -
  • num_radial (int) – Number of radial basis functions.

  • -
  • emb_size_interm (int) – Intermediate embedding size of triplets/quadruplets.

  • -
  • num_spherical (int) – Number of circular/spherical basis functions. -Only required if there is a circular/spherical basis.

  • -
-
-
-
-
-weight: torch.nn.Parameter#
-
- -
-
-reset_parameters() None#
-
- -
-
-forward(rad_basis, sph_basis=None, idx_rad_outer=None, idx_rad_inner=None, idx_sph_outer=None, idx_sph_inner=None, num_atoms=None)#
-
-
Parameters:
-
    -
  • rad_basis (torch.Tensor, shape=(num_edges, num_radial or num_orders * num_radial)) – Raw radial basis.

  • -
  • sph_basis (torch.Tensor, shape=(num_triplets or num_quadruplets, num_spherical)) – Raw spherical or circular basis.

  • -
  • idx_rad_outer (torch.Tensor, shape=(num_edges)) – Atom associated with each radial basis value. -Optional, used for efficient edge aggregation.

  • -
  • idx_rad_inner (torch.Tensor, shape=(num_edges)) – Enumerates radial basis values per atom. -Optional, used for efficient edge aggregation.

  • -
  • idx_sph_outer (torch.Tensor, shape=(num_triplets or num_quadruplets)) – Edge associated with each circular/spherical basis value. -Optional, used for efficient triplet/quadruplet aggregation.

  • -
  • idx_sph_inner (torch.Tensor, shape=(num_triplets or num_quadruplets)) – Enumerates circular/spherical basis values per edge. -Optional, used for efficient triplet/quadruplet aggregation.

  • -
  • num_atoms (int) – Total number of atoms. -Optional, used for efficient edge aggregation.

  • -
-
-
Returns:
-

    -
  • rad_W1 (torch.Tensor, shape=(num_edges, emb_size_interm, num_spherical))

  • -
  • sph (torch.Tensor, shape=(num_edges, Kmax, num_spherical)) – Kmax = maximum number of neighbors of the edges

  • -
-

-
-
-
- -
- -
-
-class core.models.gemnet_oc.layers.efficient.EfficientInteractionBilinear(emb_size_in: int, emb_size_interm: int, emb_size_out: int)#
-

Bases: torch.nn.Module

-

Efficient reformulation of the bilinear layer and subsequent summation.

-
-
Parameters:
-
    -
  • emb_size_in (int) – Embedding size of input triplets/quadruplets.

  • -
  • emb_size_interm (int) – Intermediate embedding size of the basis transformation.

  • -
  • emb_size_out (int) – Embedding size of output triplets/quadruplets.

  • -
-
-
-
-
-forward(basis, m, idx_agg_outer, idx_agg_inner, idx_agg2_outer=None, idx_agg2_inner=None, agg2_out_size=None)#
-
-
Parameters:
-
    -
  • basis (Tuple (torch.Tensor, torch.Tensor),) –

    -
    shapes=((num_edges, emb_size_interm, num_spherical),

    (num_edges, num_spherical, Kmax))

    -
    -
    -

    First element: Radial basis multiplied with weight matrix -Second element: Circular/spherical basis

    -

  • -
  • m (torch.Tensor, shape=(num_edges, emb_size_in)) – Input edge embeddings

  • -
  • idx_agg_outer (torch.Tensor, shape=(num_triplets or num_quadruplets)) – Output edge aggregating this intermediate triplet/quadruplet edge.

  • -
  • idx_agg_inner (torch.Tensor, shape=(num_triplets or num_quadruplets)) – Enumerates intermediate edges per output edge.

  • -
  • idx_agg2_outer (torch.Tensor, shape=(num_edges)) – Output atom aggregating this edge.

  • -
  • idx_agg2_inner (torch.Tensor, shape=(num_edges)) – Enumerates edges per output atom.

  • -
  • agg2_out_size (int) – Number of output embeddings when aggregating twice. Typically -the number of atoms.

  • -
-
-
Returns:
-

m_ca – Aggregated edge/atom embeddings.

-
-
Return type:
-

torch.Tensor, shape=(num_edges, emb_size)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/embedding_block/index.html b/autoapi/core/models/gemnet_oc/layers/embedding_block/index.html deleted file mode 100644 index 43bfd3eb0..000000000 --- a/autoapi/core/models/gemnet_oc/layers/embedding_block/index.html +++ /dev/null @@ -1,823 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers.embedding_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_oc.layers.embedding_block

- -
- -
-
- - - - -
- -
-

core.models.gemnet_oc.layers.embedding_block#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

AtomEmbedding

Initial atom embeddings based on the atom type

EdgeEmbedding

Edge embedding based on the concatenation of atom embeddings

-
-
-class core.models.gemnet_oc.layers.embedding_block.AtomEmbedding(emb_size: int, num_elements: int)#
-

Bases: torch.nn.Module

-

Initial atom embeddings based on the atom type

-
-
Parameters:
-

emb_size (int) – Atom embeddings size

-
-
-
-
-forward(Z) torch.Tensor#
-
-
Returns:
-

h – Atom embeddings.

-
-
Return type:
-

torch.Tensor, shape=(nAtoms, emb_size)

-
-
-
- -
- -
-
-class core.models.gemnet_oc.layers.embedding_block.EdgeEmbedding(atom_features: int, edge_features: int, out_features: int, activation: str | None = None)#
-

Bases: torch.nn.Module

-

Edge embedding based on the concatenation of atom embeddings -and a subsequent dense layer.

-
-
Parameters:
-
    -
  • atom_features (int) – Embedding size of the atom embedding.

  • -
  • edge_features (int) – Embedding size of the input edge embedding.

  • -
  • out_features (int) – Embedding size after the dense layer.

  • -
  • activation (str) – Activation function used in the dense layer.

  • -
-
-
-
-
-forward(h: torch.Tensor, m: torch.Tensor, edge_index) torch.Tensor#
-
-
Parameters:
-
    -
  • h (torch.Tensor, shape (num_atoms, atom_features)) – Atom embeddings.

  • -
  • m (torch.Tensor, shape (num_edges, edge_features)) – Radial basis in embedding block, -edge embedding in interaction block.

  • -
-
-
Returns:
-

m_st – Edge embeddings.

-
-
Return type:
-

torch.Tensor, shape=(nEdges, emb_size)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/force_scaler/index.html b/autoapi/core/models/gemnet_oc/layers/force_scaler/index.html deleted file mode 100644 index 045700ad3..000000000 --- a/autoapi/core/models/gemnet_oc/layers/force_scaler/index.html +++ /dev/null @@ -1,790 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers.force_scaler — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_oc.layers.force_scaler

- -
- -
-
- - - - -
- -
-

core.models.gemnet_oc.layers.force_scaler#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

ForceScaler

Scales up the energy and then scales down the forces

-
-
-class core.models.gemnet_oc.layers.force_scaler.ForceScaler(init_scale: float = 2.0**8, growth_factor: float = 2.0, backoff_factor: float = 0.5, growth_interval: int = 2000, max_force_iters: int = 50, enabled: bool = True)#
-

Scales up the energy and then scales down the forces -to prevent NaNs and infs in calculations using AMP. -Inspired by torch.cuda.amp.GradScaler.

-
-
-scale(energy)#
-
- -
-
-unscale(forces)#
-
- -
-
-calc_forces(energy, pos)#
-
- -
-
-calc_forces_and_update(energy, pos)#
-
- -
-
-update() None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/index.html b/autoapi/core/models/gemnet_oc/layers/index.html deleted file mode 100644 index c4447ce92..000000000 --- a/autoapi/core/models/gemnet_oc/layers/index.html +++ /dev/null @@ -1,731 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_oc.layers

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.gemnet_oc.layers#

-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/interaction_block/index.html b/autoapi/core/models/gemnet_oc/layers/interaction_block/index.html deleted file mode 100644 index 96a01149e..000000000 --- a/autoapi/core/models/gemnet_oc/layers/interaction_block/index.html +++ /dev/null @@ -1,941 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers.interaction_block — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_oc.layers.interaction_block#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

InteractionBlock

Interaction block for GemNet-Q/dQ.

QuadrupletInteraction

Quadruplet-based message passing block.

TripletInteraction

Triplet-based message passing block.

PairInteraction

Pair-based message passing block.

-
-
-class core.models.gemnet_oc.layers.interaction_block.InteractionBlock(emb_size_atom: int, emb_size_edge: int, emb_size_trip_in: int, emb_size_trip_out: int, emb_size_quad_in: int, emb_size_quad_out: int, emb_size_a2a_in: int, emb_size_a2a_out: int, emb_size_rbf: int, emb_size_cbf: int, emb_size_sbf: int, num_before_skip: int, num_after_skip: int, num_concat: int, num_atom: int, num_atom_emb_layers: int = 0, quad_interaction: bool = False, atom_edge_interaction: bool = False, edge_atom_interaction: bool = False, atom_interaction: bool = False, activation=None)#
-

Bases: torch.nn.Module

-

Interaction block for GemNet-Q/dQ.

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_trip_in (int) – (Down-projected) embedding size of the quadruplet edge embeddings -before the bilinear layer.

  • -
  • emb_size_trip_out (int) – (Down-projected) embedding size of the quadruplet edge embeddings -after the bilinear layer.

  • -
  • emb_size_quad_in (int) – (Down-projected) embedding size of the quadruplet edge embeddings -before the bilinear layer.

  • -
  • emb_size_quad_out (int) – (Down-projected) embedding size of the quadruplet edge embeddings -after the bilinear layer.

  • -
  • emb_size_a2a_in (int) – Embedding size in the atom interaction before the bilinear layer.

  • -
  • emb_size_a2a_out (int) – Embedding size in the atom interaction after the bilinear layer.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • emb_size_sbf (int) – Embedding size of the spherical basis transformation (two angles).

  • -
  • num_before_skip (int) – Number of residual blocks before the first skip connection.

  • -
  • num_after_skip (int) – Number of residual blocks after the first skip connection.

  • -
  • num_concat (int) – Number of residual blocks after the concatenation.

  • -
  • num_atom (int) – Number of residual blocks in the atom embedding blocks.

  • -
  • num_atom_emb_layers (int) – Number of residual blocks for transforming atom embeddings.

  • -
  • quad_interaction (bool) – Whether to use quadruplet interactions.

  • -
  • atom_edge_interaction (bool) – Whether to use atom-to-edge interactions.

  • -
  • edge_atom_interaction (bool) – Whether to use edge-to-atom interactions.

  • -
  • atom_interaction (bool) – Whether to use atom-to-atom interactions.

  • -
  • activation (str) – Name of the activation function to use in the dense layers.

  • -
-
-
-
-
-forward(h, m, bases_qint, bases_e2e, bases_a2e, bases_e2a, basis_a2a_rad, basis_atom_update, edge_index_main, a2ee2a_graph, a2a_graph, id_swap, trip_idx_e2e, trip_idx_a2e, trip_idx_e2a, quad_idx)#
-
-
Returns:
-

    -
  • h (torch.Tensor, shape=(nEdges, emb_size_atom)) – Atom embeddings.

  • -
  • m (torch.Tensor, shape=(nEdges, emb_size_edge)) – Edge embeddings (c->a).

  • -
-

-
-
-
- -
- -
-
-class core.models.gemnet_oc.layers.interaction_block.QuadrupletInteraction(emb_size_edge, emb_size_quad_in, emb_size_quad_out, emb_size_rbf, emb_size_cbf, emb_size_sbf, symmetric_mp=True, activation=None)#
-

Bases: torch.nn.Module

-

Quadruplet-based message passing block.

-
-
Parameters:
-
    -
  • emb_size_edge (int) – Embedding size of the edges.

  • -
  • emb_size_quad_in (int) – (Down-projected) embedding size of the quadruplet edge embeddings -before the bilinear layer.

  • -
  • emb_size_quad_out (int) – (Down-projected) embedding size of the quadruplet edge embeddings -after the bilinear layer.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • emb_size_sbf (int) – Embedding size of the spherical basis transformation (two angles).

  • -
  • symmetric_mp (bool) – Whether to use symmetric message passing and -update the edges in both directions.

  • -
  • activation (str) – Name of the activation function to use in the dense layers.

  • -
-
-
-
-
-forward(m, bases, idx, id_swap)#
-
-
Returns:
-

m – Edge embeddings (c->a).

-
-
Return type:
-

torch.Tensor, shape=(nEdges, emb_size_edge)

-
-
-
- -
- -
-
-class core.models.gemnet_oc.layers.interaction_block.TripletInteraction(emb_size_in: int, emb_size_out: int, emb_size_trip_in: int, emb_size_trip_out: int, emb_size_rbf: int, emb_size_cbf: int, symmetric_mp: bool = True, swap_output: bool = True, activation=None)#
-

Bases: torch.nn.Module

-

Triplet-based message passing block.

-
-
Parameters:
-
    -
  • emb_size_in (int) – Embedding size of the input embeddings.

  • -
  • emb_size_out (int) – Embedding size of the output embeddings.

  • -
  • emb_size_trip_in (int) – (Down-projected) embedding size of the quadruplet edge embeddings -before the bilinear layer.

  • -
  • emb_size_trip_out (int) – (Down-projected) embedding size of the quadruplet edge embeddings -after the bilinear layer.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • emb_size_cbf (int) – Embedding size of the circular basis transformation (one angle).

  • -
  • symmetric_mp (bool) – Whether to use symmetric message passing and -update the edges in both directions.

  • -
  • swap_output (bool) – Whether to swap the output embedding directions. -Only relevant if symmetric_mp is False.

  • -
  • activation (str) – Name of the activation function to use in the dense layers.

  • -
-
-
-
-
-forward(m, bases, idx, id_swap, expand_idx=None, idx_agg2=None, idx_agg2_inner=None, agg2_out_size=None)#
-
-
Returns:
-

m – Edge embeddings.

-
-
Return type:
-

torch.Tensor, shape=(nEdges, emb_size_edge)

-
-
-
- -
- -
-
-class core.models.gemnet_oc.layers.interaction_block.PairInteraction(emb_size_atom, emb_size_pair_in, emb_size_pair_out, emb_size_rbf, activation=None)#
-

Bases: torch.nn.Module

-

Pair-based message passing block.

-
-
Parameters:
-
    -
  • emb_size_atom (int) – Embedding size of the atoms.

  • -
  • emb_size_pair_in (int) – Embedding size of the atom pairs before the bilinear layer.

  • -
  • emb_size_pair_out (int) – Embedding size of the atom pairs after the bilinear layer.

  • -
  • emb_size_rbf (int) – Embedding size of the radial basis transformation.

  • -
  • activation (str) – Name of the activation function to use in the dense layers.

  • -
-
-
-
-
-forward(h, rad_basis, edge_index, target_neighbor_idx)#
-
-
Returns:
-

h – Atom embeddings.

-
-
Return type:
-

torch.Tensor, shape=(num_atoms, emb_size_atom)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/radial_basis/index.html b/autoapi/core/models/gemnet_oc/layers/radial_basis/index.html deleted file mode 100644 index 88c919afc..000000000 --- a/autoapi/core/models/gemnet_oc/layers/radial_basis/index.html +++ /dev/null @@ -1,950 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers.radial_basis — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_oc.layers.radial_basis#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - - - - -

PolynomialEnvelope

Polynomial envelope function that ensures a smooth cutoff.

ExponentialEnvelope

Exponential envelope function that ensures a smooth cutoff,

GaussianBasis

Base class for all neural network modules.

SphericalBesselBasis

First-order spherical Bessel basis

BernsteinBasis

Bernstein polynomial basis,

RadialBasis

-
param num_radial:
-

Number of basis functions. Controls the maximum frequency.

-
-
-

-
-
-class core.models.gemnet_oc.layers.radial_basis.PolynomialEnvelope(exponent: int)#
-

Bases: torch.nn.Module

-

Polynomial envelope function that ensures a smooth cutoff.

-
-
Parameters:
-

exponent (int) – Exponent of the envelope function.

-
-
-
-
-forward(d_scaled: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet_oc.layers.radial_basis.ExponentialEnvelope#
-

Bases: torch.nn.Module

-

Exponential envelope function that ensures a smooth cutoff, -as proposed in Unke, Chmiela, Gastegger, Schütt, Sauceda, Müller 2021. -SpookyNet: Learning Force Fields with Electronic Degrees of Freedom -and Nonlocal Effects

-
-
-forward(d_scaled: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet_oc.layers.radial_basis.GaussianBasis(start: float = 0.0, stop: float = 5.0, num_gaussians: int = 50, trainable: bool = False)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(dist: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet_oc.layers.radial_basis.SphericalBesselBasis(num_radial: int, cutoff: float)#
-

Bases: torch.nn.Module

-

First-order spherical Bessel basis

-
-
Parameters:
-
    -
  • num_radial (int) – Number of basis functions. Controls the maximum frequency.

  • -
  • cutoff (float) – Cutoff distance in Angstrom.

  • -
-
-
-
-
-forward(d_scaled: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet_oc.layers.radial_basis.BernsteinBasis(num_radial: int, pregamma_initial: float = 0.45264)#
-

Bases: torch.nn.Module

-

Bernstein polynomial basis, -as proposed in Unke, Chmiela, Gastegger, Schütt, Sauceda, Müller 2021. -SpookyNet: Learning Force Fields with Electronic Degrees of Freedom -and Nonlocal Effects

-
-
Parameters:
-
    -
  • num_radial (int) – Number of basis functions. Controls the maximum frequency.

  • -
  • pregamma_initial (float) – Initial value of exponential coefficient gamma. -Default: gamma = 0.5 * a_0**-1 = 0.94486, -inverse softplus -> pregamma = log e**gamma - 1 = 0.45264

  • -
-
-
-
-
-forward(d_scaled: torch.Tensor) torch.Tensor#
-
- -
- -
-
-class core.models.gemnet_oc.layers.radial_basis.RadialBasis(num_radial: int, cutoff: float, rbf: dict[str, str] | None = None, envelope: dict[str, str | int] | None = None, scale_basis: bool = False)#
-

Bases: torch.nn.Module

-
-
Parameters:
-
    -
  • num_radial (int) – Number of basis functions. Controls the maximum frequency.

  • -
  • cutoff (float) – Cutoff distance in Angstrom.

  • -
  • rbf (dict = {"name": "gaussian"}) – Basis function and its hyperparameters.

  • -
  • envelope (dict = {"name": "polynomial", "exponent": 5}) – Envelope function and its hyperparameters.

  • -
  • scale_basis (bool) – Whether to scale the basis values for better numerical stability.

  • -
-
-
-
-
-forward(d: torch.Tensor) torch.Tensor#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.html b/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.html deleted file mode 100644 index 32e0c4f00..000000000 --- a/autoapi/core/models/gemnet_oc/layers/spherical_basis/index.html +++ /dev/null @@ -1,804 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.layers.spherical_basis — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.gemnet_oc.layers.spherical_basis

- -
- -
-
- - - - -
- -
-

core.models.gemnet_oc.layers.spherical_basis#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

CircularBasisLayer

2D Fourier Bessel Basis

SphericalBasisLayer

3D Fourier Bessel Basis

-
-
-class core.models.gemnet_oc.layers.spherical_basis.CircularBasisLayer(num_spherical: int, radial_basis: core.models.gemnet_oc.layers.radial_basis.RadialBasis, cbf: dict, scale_basis: bool = False)#
-

Bases: torch.nn.Module

-

2D Fourier Bessel Basis

-
-
Parameters:
-
    -
  • num_spherical (int) – Number of basis functions. Controls the maximum frequency.

  • -
  • radial_basis (RadialBasis) – Radial basis function.

  • -
  • cbf (dict) – Name and hyperparameters of the circular basis function.

  • -
  • scale_basis (bool) – Whether to scale the basis values for better numerical stability.

  • -
-
-
-
-
-forward(D_ca, cosφ_cab)#
-
- -
- -
-
-class core.models.gemnet_oc.layers.spherical_basis.SphericalBasisLayer(num_spherical: int, radial_basis: core.models.gemnet_oc.layers.radial_basis.RadialBasis, sbf: dict, scale_basis: bool = False)#
-

Bases: torch.nn.Module

-

3D Fourier Bessel Basis

-
-
Parameters:
-
    -
  • num_spherical (int) – Number of basis functions. Controls the maximum frequency.

  • -
  • radial_basis (RadialBasis) – Radial basis functions.

  • -
  • sbf (dict) – Name and hyperparameters of the spherical basis function.

  • -
  • scale_basis (bool) – Whether to scale the basis values for better numerical stability.

  • -
-
-
-
-
-forward(D_ca, cosφ_cab, θ_cabd)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/gemnet_oc/utils/index.html b/autoapi/core/models/gemnet_oc/utils/index.html deleted file mode 100644 index 4be609102..000000000 --- a/autoapi/core/models/gemnet_oc/utils/index.html +++ /dev/null @@ -1,974 +0,0 @@ - - - - - - - - - - - core.models.gemnet_oc.utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.gemnet_oc.utils#

-

Copyright (c) Meta, Inc. and its affiliates. -This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ragged_range(sizes)

Multiple concatenated ranges.

repeat_blocks(→ torch.Tensor)

Repeat blocks of indices.

masked_select_sparsetensor_flat(...)

calculate_interatomic_vectors(R, id_s, id_t, offsets_st)

Calculate the vectors connecting the given atom pairs,

inner_product_clamped(→ torch.Tensor)

Calculate the inner product between the given normalized vectors,

get_angle(→ torch.Tensor)

Calculate angles between atoms c -> a <- b.

vector_rejection(R_ab, P_n)

Project the vector R_ab onto a plane with normal vector P_n.

get_projected_angle(→ torch.Tensor)

Project the vector R_ab onto a plane with normal vector P_n,

mask_neighbors(neighbors, edge_mask)

get_neighbor_order(→ torch.Tensor)

Give a mask that filters out edges so that each atom has at most

get_inner_idx(idx, dim_size)

Assign an inner index to each element (neighbor) with the same index.

get_edge_id(edge_idx, cell_offsets, num_atoms)

-
-
-core.models.gemnet_oc.utils.ragged_range(sizes)#
-

Multiple concatenated ranges.

-

Examples

-

sizes = [1 4 2 3] -Return: [0 0 1 2 3 0 1 0 1 2]

-
- -
-
-core.models.gemnet_oc.utils.repeat_blocks(sizes, repeats, continuous_indexing: bool = True, start_idx: int = 0, block_inc: int = 0, repeat_inc: int = 0) torch.Tensor#
-

Repeat blocks of indices. -Adapted from https://stackoverflow.com/questions/51154989/numpy-vectorized-function-to-repeat-blocks-of-consecutive-elements

-

continuous_indexing: Whether to keep increasing the index after each block -start_idx: Starting index -block_inc: Number to increment by after each block,

-
-

either global or per block. Shape: len(sizes) - 1

-
-
-
repeat_inc: Number to increment by after each repetition,

either global or per block

-
-
-

Examples

-

sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = False -Return: [0 0 0 0 1 2 0 1 2 0 1 0 1 0 1] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True -Return: [0 0 0 1 2 3 1 2 3 4 5 4 5 4 5] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -repeat_inc = 4 -Return: [0 4 8 1 2 3 5 6 7 4 5 8 9 12 13] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -start_idx = 5 -Return: [5 5 5 6 7 8 6 7 8 9 10 9 10 9 10] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -block_inc = 1 -Return: [0 0 0 2 3 4 2 3 4 6 7 6 7 6 7] -sizes = [0,3,2] ; repeats = [3,2,3] ; continuous_indexing = True -Return: [0 1 2 0 1 2 3 4 3 4 3 4] -sizes = [2,3,2] ; repeats = [2,0,2] ; continuous_indexing = True -Return: [0 1 0 1 5 6 5 6]

-
- -
-
-core.models.gemnet_oc.utils.masked_select_sparsetensor_flat(src, mask) torch_sparse.SparseTensor#
-
- -
-
-core.models.gemnet_oc.utils.calculate_interatomic_vectors(R, id_s, id_t, offsets_st)#
-

Calculate the vectors connecting the given atom pairs, -considering offsets from periodic boundary conditions (PBC).

-
-
Parameters:
-
    -
  • R (Tensor, shape = (nAtoms, 3)) – Atom positions.

  • -
  • id_s (Tensor, shape = (nEdges,)) – Indices of the source atom of the edges.

  • -
  • id_t (Tensor, shape = (nEdges,)) – Indices of the target atom of the edges.

  • -
  • offsets_st (Tensor, shape = (nEdges,)) – PBC offsets of the edges. -Subtract this from the correct direction.

  • -
-
-
Returns:
-

(D_st, V_st)

-
-
D_st: Tensor, shape = (nEdges,)

Distance from atom t to s.

-
-
V_st: Tensor, shape = (nEdges,)

Unit direction from atom t to s.

-
-
-

-
-
Return type:
-

tuple

-
-
-
- -
-
-core.models.gemnet_oc.utils.inner_product_clamped(x, y) torch.Tensor#
-

Calculate the inner product between the given normalized vectors, -giving a result between -1 and 1.

-
- -
-
-core.models.gemnet_oc.utils.get_angle(R_ac, R_ab) torch.Tensor#
-

Calculate angles between atoms c -> a <- b.

-
-
Parameters:
-
    -
  • R_ac (Tensor, shape = (N, 3)) – Vector from atom a to c.

  • -
  • R_ab (Tensor, shape = (N, 3)) – Vector from atom a to b.

  • -
-
-
Returns:
-

angle_cab – Angle between atoms c <- a -> b.

-
-
Return type:
-

Tensor, shape = (N,)

-
-
-
- -
-
-core.models.gemnet_oc.utils.vector_rejection(R_ab, P_n)#
-

Project the vector R_ab onto a plane with normal vector P_n.

-
-
Parameters:
-
    -
  • R_ab (Tensor, shape = (N, 3)) – Vector from atom a to b.

  • -
  • P_n (Tensor, shape = (N, 3)) – Normal vector of a plane onto which to project R_ab.

  • -
-
-
Returns:
-

R_ab_proj – Projected vector (orthogonal to P_n).

-
-
Return type:
-

Tensor, shape = (N, 3)

-
-
-
- -
-
-core.models.gemnet_oc.utils.get_projected_angle(R_ab, P_n, eps: float = 0.0001) torch.Tensor#
-

Project the vector R_ab onto a plane with normal vector P_n, -then calculate the angle w.r.t. the (x [cross] P_n), -or (y [cross] P_n) if the former would be ill-defined/numerically unstable.

-
-
Parameters:
-
    -
  • R_ab (Tensor, shape = (N, 3)) – Vector from atom a to b.

  • -
  • P_n (Tensor, shape = (N, 3)) – Normal vector of a plane onto which to project R_ab.

  • -
  • eps (float) – Norm of projection below which to use the y-axis instead of x.

  • -
-
-
Returns:
-

angle_ab – Angle on plane w.r.t. x- or y-axis.

-
-
Return type:
-

Tensor, shape = (N)

-
-
-
- -
-
-core.models.gemnet_oc.utils.mask_neighbors(neighbors, edge_mask)#
-
- -
-
-core.models.gemnet_oc.utils.get_neighbor_order(num_atoms: int, index, atom_distance) torch.Tensor#
-

Give a mask that filters out edges so that each atom has at most -max_num_neighbors_threshold neighbors.

-
- -
-
-core.models.gemnet_oc.utils.get_inner_idx(idx, dim_size)#
-

Assign an inner index to each element (neighbor) with the same index. -For example, with idx=[0 0 0 1 1 1 1 2 2] this returns [0 1 2 0 1 2 3 0 1]. -These indices allow reshape neighbor indices into a dense matrix. -idx has to be sorted for this to work.

-
- -
-
-core.models.gemnet_oc.utils.get_edge_id(edge_idx, cell_offsets, num_atoms: int)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/index.html b/autoapi/core/models/index.html deleted file mode 100644 index 6d35b252b..000000000 --- a/autoapi/core/models/index.html +++ /dev/null @@ -1,900 +0,0 @@ - - - - - - - - - - - core.models — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models

- -
- -
-
- - - - -
- -
-

core.models#

-
-

Subpackages#

-
- -
-
-
-

Submodules#

- -
-
-

Package Contents#

-
-

Functions#

- - - - - - -

model_name_to_local_file(→ str)

Download a pretrained checkpoint if it does not exist already

-
-
-

Attributes#

- - - - - - -

available_pretrained_models

-
-
-core.models.available_pretrained_models#
-
- -
-
-core.models.model_name_to_local_file(model_name: str, local_cache: str | pathlib.Path) str#
-

Download a pretrained checkpoint if it does not exist already

-
-
Parameters:
-
    -
  • model_name (str) – the model name. See available_pretrained_checkpoints.

  • -
  • local_cache (str or Path) – path to local cache directory

  • -
-
-
Returns:
-

local path to checkpoint file

-
-
Return type:
-

str

-
-
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/painn/index.html b/autoapi/core/models/painn/index.html deleted file mode 100644 index dab4d3ce9..000000000 --- a/autoapi/core/models/painn/index.html +++ /dev/null @@ -1,824 +0,0 @@ - - - - - - - - - - - core.models.painn — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.painn#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - -

PaiNN

PaiNN model based on the description in Schütt et al. (2021):

-
-
-class core.models.painn.PaiNN(num_atoms: int, bond_feat_dim: int, num_targets: int, hidden_channels: int = 512, num_layers: int = 6, num_rbf: int = 128, cutoff: float = 12.0, max_neighbors: int = 50, rbf: dict[str, str] | None = None, envelope: dict[str, str | int] | None = None, regress_forces: bool = True, direct_forces: bool = True, use_pbc: bool = True, otf_graph: bool = True, num_elements: int = 83, scale_file: str | None = None)#
-

Bases: fairchem.core.models.base.BaseModel

-

PaiNN model based on the description in Schütt et al. (2021): -Equivariant message passing for the prediction of tensorial properties -and molecular spectra, https://arxiv.org/abs/2102.03150.

-
-
-property num_params: int#
-
- -
-
-reset_parameters() None#
-
- -
-
-select_symmetric_edges(tensor, mask, reorder_idx, inverse_neg) torch.Tensor#
-
- -
-
-symmetrize_edges(edge_index, cell_offsets, neighbors, batch_idx, reorder_tensors, reorder_tensors_invneg)#
-

Symmetrize edges to ensure existence of counter-directional edges.

-

Some edges are only present in one direction in the data, -since every atom has a maximum number of neighbors. -If symmetric_edge_symmetrization is False, -we only use i->j edges here. So we lose some j->i edges -and add others by making it symmetric. -If symmetric_edge_symmetrization is True, -we always use both directions.

-
- -
-
-generate_graph_values(data)#
-
- -
-
-forward(data)#
-
- -
-
-__repr__() str#
-

Return repr(self).

-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/painn/utils/index.html b/autoapi/core/models/painn/utils/index.html deleted file mode 100644 index 3cc7bf371..000000000 --- a/autoapi/core/models/painn/utils/index.html +++ /dev/null @@ -1,788 +0,0 @@ - - - - - - - - - - - core.models.painn.utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.painn.utils

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.painn.utils#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

repeat_blocks(→ torch.Tensor)

Repeat blocks of indices.

get_edge_id(edge_idx, cell_offsets, num_atoms)

-
-
-core.models.painn.utils.repeat_blocks(sizes, repeats, continuous_indexing: bool = True, start_idx: int = 0, block_inc: int = 0, repeat_inc: int = 0) torch.Tensor#
-

Repeat blocks of indices. -Adapted from https://stackoverflow.com/questions/51154989/numpy-vectorized-function-to-repeat-blocks-of-consecutive-elements

-

continuous_indexing: Whether to keep increasing the index after each block -start_idx: Starting index -block_inc: Number to increment by after each block,

-
-

either global or per block. Shape: len(sizes) - 1

-
-
-
repeat_inc: Number to increment by after each repetition,

either global or per block

-
-
-

Examples

-

sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = False -Return: [0 0 0 0 1 2 0 1 2 0 1 0 1 0 1] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True -Return: [0 0 0 1 2 3 1 2 3 4 5 4 5 4 5] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -repeat_inc = 4 -Return: [0 4 8 1 2 3 5 6 7 4 5 8 9 12 13] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -start_idx = 5 -Return: [5 5 5 6 7 8 6 7 8 9 10 9 10 9 10] -sizes = [1,3,2] ; repeats = [3,2,3] ; continuous_indexing = True ; -block_inc = 1 -Return: [0 0 0 2 3 4 2 3 4 6 7 6 7 6 7] -sizes = [0,3,2] ; repeats = [3,2,3] ; continuous_indexing = True -Return: [0 1 2 0 1 2 3 4 3 4 3 4] -sizes = [2,3,2] ; repeats = [2,0,2] ; continuous_indexing = True -Return: [0 1 0 1 5 6 5 6]

-
- -
-
-core.models.painn.utils.get_edge_id(edge_idx, cell_offsets, num_atoms: int)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/schnet/index.html b/autoapi/core/models/schnet/index.html deleted file mode 100644 index 5ddbc3144..000000000 --- a/autoapi/core/models/schnet/index.html +++ /dev/null @@ -1,824 +0,0 @@ - - - - - - - - - - - core.models.schnet — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.schnet

- -
- -
-
- - - - -
- -
-

core.models.schnet#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

SchNetWrap

Wrapper around the continuous-filter convolutional neural network SchNet from the

-
-
-class core.models.schnet.SchNetWrap(num_atoms: int, bond_feat_dim: int, num_targets: int, use_pbc: bool = True, regress_forces: bool = True, otf_graph: bool = False, hidden_channels: int = 128, num_filters: int = 128, num_interactions: int = 6, num_gaussians: int = 50, cutoff: float = 10.0, readout: str = 'add')#
-

Bases: torch_geometric.nn.SchNet, fairchem.core.models.base.BaseModel

-

Wrapper around the continuous-filter convolutional neural network SchNet from the -“SchNet: A Continuous-filter Convolutional Neural Network for Modeling -Quantum Interactions”. Each layer uses interaction -block of the form:

-
-\[\mathbf{x}^{\prime}_i = \sum_{j \in \mathcal{N}(i)} \mathbf{x}_j \odot -h_{\mathbf{\Theta}} ( \exp(-\gamma(\mathbf{e}_{j,i} - \mathbf{\mu}))),\]
-
-
Parameters:
-
    -
  • num_atoms (int) – Unused argument

  • -
  • bond_feat_dim (int) – Unused argument

  • -
  • num_targets (int) – Number of targets to predict.

  • -
  • use_pbc (bool, optional) – If set to True, account for periodic boundary conditions. -(default: True)

  • -
  • regress_forces (bool, optional) – If set to True, predict forces by differentiating -energy with respect to positions. -(default: True)

  • -
  • otf_graph (bool, optional) – If set to True, compute graph edges on the fly. -(default: False)

  • -
  • hidden_channels (int, optional) – Number of hidden channels. -(default: 128)

  • -
  • num_filters (int, optional) – Number of filters to use. -(default: 128)

  • -
  • num_interactions (int, optional) – Number of interaction blocks -(default: 6)

  • -
  • num_gaussians (int, optional) – The number of gaussians \(\mu\). -(default: 50)

  • -
  • cutoff (float, optional) – Cutoff distance for interatomic interactions. -(default: 10.0)

  • -
  • readout (string, optional) – Whether to apply "add" or -"mean" global aggregation. (default: "add")

  • -
-
-
-
-
-property num_params: int#
-
- -
-
-_forward(data)#
-
- -
-
-forward(data)#
-
-
Parameters:
-
    -
  • z (torch.Tensor) – Atomic number of each atom with shape -[num_atoms].

  • -
  • pos (torch.Tensor) – Coordinates of each atom with shape -[num_atoms, 3].

  • -
  • batch (torch.Tensor, optional) – Batch indices assigning each atom -to a separate molecule with shape [num_atoms]. -(default: None)

  • -
-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/scn/index.html b/autoapi/core/models/scn/index.html deleted file mode 100644 index 265b950b3..000000000 --- a/autoapi/core/models/scn/index.html +++ /dev/null @@ -1,870 +0,0 @@ - - - - - - - - - - - core.models.scn — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.scn#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - -

SphericalChannelNetwork

Spherical Channel Network

-
-
-class core.models.scn.SphericalChannelNetwork(num_atoms: int, bond_feat_dim: int, num_targets: int, use_pbc: bool = True, regress_forces: bool = True, otf_graph: bool = False, max_num_neighbors: int = 20, cutoff: float = 8.0, max_num_elements: int = 90, num_interactions: int = 8, lmax: int = 6, mmax: int = 1, num_resolutions: int = 2, sphere_channels: int = 128, sphere_channels_reduce: int = 128, hidden_channels: int = 256, num_taps: int = -1, use_grid: bool = True, num_bands: int = 1, num_sphere_samples: int = 128, num_basis_functions: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False, direct_forces: bool = True)#
-

Bases: fairchem.core.models.base.BaseModel

-

Spherical Channel Network -Paper: Spherical Channels for Modeling Atomic Interactions

-
-
Parameters:
-
    -
  • use_pbc (bool) – Use periodic boundary conditions

  • -
  • regress_forces (bool) – Compute forces

  • -
  • otf_graph (bool) – Compute graph On The Fly (OTF)

  • -
  • max_num_neighbors (int) – Maximum number of neighbors per atom

  • -
  • cutoff (float) – Maximum distance between nieghboring atoms in Angstroms

  • -
  • max_num_elements (int) – Maximum atomic number

  • -
  • num_interactions (int) – Number of layers in the GNN

  • -
  • lmax (int) – Maximum degree of the spherical harmonics (1 to 10)

  • -
  • mmax (int) – Maximum order of the spherical harmonics (0 or 1)

  • -
  • num_resolutions (int) – Number of resolutions used to compute messages, further away atoms has lower resolution (1 or 2)

  • -
  • sphere_channels (int) – Number of spherical channels

  • -
  • sphere_channels_reduce (int) – Number of spherical channels used during message passing (downsample or upsample)

  • -
  • hidden_channels (int) – Number of hidden units in message passing

  • -
  • num_taps (int) – Number of taps or rotations used during message passing (1 or otherwise set automatically based on mmax)

  • -
  • use_grid (bool) – Use non-linear pointwise convolution during aggregation

  • -
  • num_bands (int) – Number of bands used during message aggregation for the 1x1 pointwise convolution (1 or 2)

  • -
  • num_sphere_samples (int) – Number of samples used to approximate the integration of the sphere in the output blocks

  • -
  • num_basis_functions (int) – Number of basis functions used for distance and atomic number blocks

  • -
  • distance_function ("gaussian", "sigmoid", "linearsigmoid", "silu") – Basis function used for distances

  • -
  • basis_width_scalar (float) – Width of distance basis function

  • -
  • distance_resolution (float) – Distance between distance basis functions in Angstroms

  • -
  • show_timing_info (bool) – Show timing and memory info

  • -
-
-
-
-
-property num_params: int#
-
- -
-
-energy_fc1: torch.nn.Linear#
-
- -
-
-energy_fc2: torch.nn.Linear#
-
- -
-
-energy_fc3: torch.nn.Linear#
-
- -
-
-force_fc1: torch.nn.Linear#
-
- -
-
-force_fc2: torch.nn.Linear#
-
- -
-
-force_fc3: torch.nn.Linear#
-
- -
-
-forward(data)#
-
- -
-
-_forward_helper(data)#
-
- -
-
-_init_edge_rot_mat(data, edge_index, edge_distance_vec)#
-
- -
-
-_rank_edge_distances(edge_distance, edge_index, max_num_neighbors: int) torch.Tensor#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/scn/sampling/index.html b/autoapi/core/models/scn/sampling/index.html deleted file mode 100644 index 29a375324..000000000 --- a/autoapi/core/models/scn/sampling/index.html +++ /dev/null @@ -1,758 +0,0 @@ - - - - - - - - - - - core.models.scn.sampling — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.models.scn.sampling

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.models.scn.sampling#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

CalcSpherePoints(→ torch.Tensor)

CalcSpherePointsRandom(→ torch.Tensor)

-
-
-core.models.scn.sampling.CalcSpherePoints(num_points: int, device: str = 'cpu') torch.Tensor#
-
- -
-
-core.models.scn.sampling.CalcSpherePointsRandom(num_points: int, device) torch.Tensor#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/scn/scn/index.html b/autoapi/core/models/scn/scn/index.html deleted file mode 100644 index cf7dcde05..000000000 --- a/autoapi/core/models/scn/scn/index.html +++ /dev/null @@ -1,1019 +0,0 @@ - - - - - - - - - - - core.models.scn.scn — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.scn.scn#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

SphericalChannelNetwork

Spherical Channel Network

EdgeBlock

Base class for all neural network modules.

MessageBlock

Base class for all neural network modules.

DistanceBlock

Base class for all neural network modules.

-
-
-class core.models.scn.scn.SphericalChannelNetwork(num_atoms: int, bond_feat_dim: int, num_targets: int, use_pbc: bool = True, regress_forces: bool = True, otf_graph: bool = False, max_num_neighbors: int = 20, cutoff: float = 8.0, max_num_elements: int = 90, num_interactions: int = 8, lmax: int = 6, mmax: int = 1, num_resolutions: int = 2, sphere_channels: int = 128, sphere_channels_reduce: int = 128, hidden_channels: int = 256, num_taps: int = -1, use_grid: bool = True, num_bands: int = 1, num_sphere_samples: int = 128, num_basis_functions: int = 128, distance_function: str = 'gaussian', basis_width_scalar: float = 1.0, distance_resolution: float = 0.02, show_timing_info: bool = False, direct_forces: bool = True)#
-

Bases: fairchem.core.models.base.BaseModel

-

Spherical Channel Network -Paper: Spherical Channels for Modeling Atomic Interactions

-
-
Parameters:
-
    -
  • use_pbc (bool) – Use periodic boundary conditions

  • -
  • regress_forces (bool) – Compute forces

  • -
  • otf_graph (bool) – Compute graph On The Fly (OTF)

  • -
  • max_num_neighbors (int) – Maximum number of neighbors per atom

  • -
  • cutoff (float) – Maximum distance between nieghboring atoms in Angstroms

  • -
  • max_num_elements (int) – Maximum atomic number

  • -
  • num_interactions (int) – Number of layers in the GNN

  • -
  • lmax (int) – Maximum degree of the spherical harmonics (1 to 10)

  • -
  • mmax (int) – Maximum order of the spherical harmonics (0 or 1)

  • -
  • num_resolutions (int) – Number of resolutions used to compute messages, further away atoms has lower resolution (1 or 2)

  • -
  • sphere_channels (int) – Number of spherical channels

  • -
  • sphere_channels_reduce (int) – Number of spherical channels used during message passing (downsample or upsample)

  • -
  • hidden_channels (int) – Number of hidden units in message passing

  • -
  • num_taps (int) – Number of taps or rotations used during message passing (1 or otherwise set automatically based on mmax)

  • -
  • use_grid (bool) – Use non-linear pointwise convolution during aggregation

  • -
  • num_bands (int) – Number of bands used during message aggregation for the 1x1 pointwise convolution (1 or 2)

  • -
  • num_sphere_samples (int) – Number of samples used to approximate the integration of the sphere in the output blocks

  • -
  • num_basis_functions (int) – Number of basis functions used for distance and atomic number blocks

  • -
  • distance_function ("gaussian", "sigmoid", "linearsigmoid", "silu") – Basis function used for distances

  • -
  • basis_width_scalar (float) – Width of distance basis function

  • -
  • distance_resolution (float) – Distance between distance basis functions in Angstroms

  • -
  • show_timing_info (bool) – Show timing and memory info

  • -
-
-
-
-
-property num_params: int#
-
- -
-
-energy_fc1: torch.nn.Linear#
-
- -
-
-energy_fc2: torch.nn.Linear#
-
- -
-
-energy_fc3: torch.nn.Linear#
-
- -
-
-force_fc1: torch.nn.Linear#
-
- -
-
-force_fc2: torch.nn.Linear#
-
- -
-
-force_fc3: torch.nn.Linear#
-
- -
-
-forward(data)#
-
- -
-
-_forward_helper(data)#
-
- -
-
-_init_edge_rot_mat(data, edge_index, edge_distance_vec)#
-
- -
-
-_rank_edge_distances(edge_distance, edge_index, max_num_neighbors: int) torch.Tensor#
-
- -
- -
-
-class core.models.scn.scn.EdgeBlock(num_resolutions: int, sphere_channels_reduce, hidden_channels_list, cutoff_list, sphharm_list, sphere_channels, distance_expansion, max_num_elements: int, num_basis_functions: int, num_gaussians: int, use_grid: bool, act)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(x, atomic_numbers, edge_distance, edge_index, cutoff_index)#
-
- -
- -
-
-class core.models.scn.scn.MessageBlock(sphere_channels_reduce, hidden_channels, num_basis_functions, sphharm, act)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(x, x_edge, edge_index)#
-
- -
- -
-
-class core.models.scn.scn.DistanceBlock(in_channels, num_basis_functions: int, distance_expansion, max_num_elements: int, act)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(edge_distance, source_element, target_element)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/scn/smearing/index.html b/autoapi/core/models/scn/smearing/index.html deleted file mode 100644 index 11e847dff..000000000 --- a/autoapi/core/models/scn/smearing/index.html +++ /dev/null @@ -1,950 +0,0 @@ - - - - - - - - - - - core.models.scn.smearing — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.scn.smearing#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

GaussianSmearing

Base class for all neural network modules.

SigmoidSmearing

Base class for all neural network modules.

LinearSigmoidSmearing

Base class for all neural network modules.

SiLUSmearing

Base class for all neural network modules.

-
-
-class core.models.scn.smearing.GaussianSmearing(start: float = -5.0, stop: float = 5.0, num_gaussians: int = 50, basis_width_scalar: float = 1.0)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(dist) torch.Tensor#
-
- -
- -
-
-class core.models.scn.smearing.SigmoidSmearing(start=-5.0, stop=5.0, num_sigmoid=50, basis_width_scalar=1.0)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(dist) torch.Tensor#
-
- -
- -
-
-class core.models.scn.smearing.LinearSigmoidSmearing(start: float = -5.0, stop: float = 5.0, num_sigmoid: int = 50, basis_width_scalar: float = 1.0)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(dist) torch.Tensor#
-
- -
- -
-
-class core.models.scn.smearing.SiLUSmearing(start: float = -5.0, stop: float = 5.0, num_output: int = 50, basis_width_scalar: float = 1.0)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(dist)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/models/scn/spherical_harmonics/index.html b/autoapi/core/models/scn/spherical_harmonics/index.html deleted file mode 100644 index b0e4dd6db..000000000 --- a/autoapi/core/models/scn/spherical_harmonics/index.html +++ /dev/null @@ -1,888 +0,0 @@ - - - - - - - - - - - core.models.scn.spherical_harmonics — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.models.scn.spherical_harmonics#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

SphericalHarmonicsHelper

Helper functions for spherical harmonics calculations and representations

-
-
-

Functions#

- - - - - - - - - -

wigner_D(l, alpha, beta, gamma)

_z_rot_mat(angle, l)

-
-
-

Attributes#

- - - - - - -

_Jd

-
-
-core.models.scn.spherical_harmonics._Jd#
-
- -
-
-class core.models.scn.spherical_harmonics.SphericalHarmonicsHelper(lmax: int, mmax: int, num_taps: int, num_bands: int)#
-

Helper functions for spherical harmonics calculations and representations

-
-
Parameters:
-
    -
  • lmax (int) – Maximum degree of the spherical harmonics

  • -
  • mmax (int) – Maximum order of the spherical harmonics

  • -
  • num_taps (int) – Number of taps or rotations (1 or otherwise set automatically based on mmax)

  • -
  • num_bands (int) – Number of bands used during message aggregation for the 1x1 pointwise convolution (1 or 2)

  • -
-
-
-
-
-InitWignerDMatrix(edge_rot_mat) None#
-
- -
-
-InitYRotMapping()#
-
- -
-
-ToGrid(x, channels) torch.Tensor#
-
- -
-
-FromGrid(x_grid, channels) torch.Tensor#
-
- -
-
-CombineYRotations(x) torch.Tensor#
-
- -
-
-Rotate(x) torch.Tensor#
-
- -
-
-FlipGrid(grid, num_channels: int) torch.Tensor#
-
- -
-
-RotateInv(x) torch.Tensor#
-
- -
-
-RotateWigner(x, wigner) torch.Tensor#
-
- -
-
-RotationMatrix(rot_x: float, rot_y: float, rot_z: float) torch.Tensor#
-
- -
-
-RotationToWignerDMatrix(edge_rot_mat, start_lmax, end_lmax)#
-
- -
- -
-
-core.models.scn.spherical_harmonics.wigner_D(l, alpha, beta, gamma)#
-
- -
-
-core.models.scn.spherical_harmonics._z_rot_mat(angle, l)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/evaluator/index.html b/autoapi/core/modules/evaluator/index.html deleted file mode 100644 index 7a5ba2eec..000000000 --- a/autoapi/core/modules/evaluator/index.html +++ /dev/null @@ -1,948 +0,0 @@ - - - - - - - - - - - core.modules.evaluator — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.modules.evaluator#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

Evaluator

-
-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

forcesx_mae(prediction, target[, key])

forcesx_mse(prediction, target[, key])

forcesy_mae(prediction, target[, key])

forcesy_mse(prediction, target[, key])

forcesz_mae(prediction, target[, key])

forcesz_mse(prediction, target[, key])

energy_forces_within_threshold(→ dict[str, float | int])

energy_within_threshold(→ dict[str, float | int])

average_distance_within_threshold(→ dict[str, float | int])

min_diff(pred_pos, dft_pos, cell, pbc)

cosine_similarity(prediction, target[, key])

mae(→ dict[str, float | int])

mse(→ dict[str, float | int])

magnitude_error(→ dict[str, float | int])

-
-
-

Attributes#

- - - - - - -

NONE

-
-
-core.modules.evaluator.NONE#
-
- -
-
-class core.modules.evaluator.Evaluator(task: str | None = None, eval_metrics: dict | None = None)#
-
-
-task_metrics: ClassVar[dict[str, str]]#
-
- -
-
-task_primary_metric: ClassVar[dict[str, str | None]]#
-
- -
-
-eval(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], prev_metrics=None)#
-
- -
-
-update(key, stat, metrics)#
-
- -
- -
-
-core.modules.evaluator.forcesx_mae(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = NONE)#
-
- -
-
-core.modules.evaluator.forcesx_mse(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = NONE)#
-
- -
-
-core.modules.evaluator.forcesy_mae(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = None)#
-
- -
-
-core.modules.evaluator.forcesy_mse(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = None)#
-
- -
-
-core.modules.evaluator.forcesz_mae(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = None)#
-
- -
-
-core.modules.evaluator.forcesz_mse(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = None)#
-
- -
-
-core.modules.evaluator.energy_forces_within_threshold(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = None) dict[str, float | int]#
-
- -
-
-core.modules.evaluator.energy_within_threshold(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = None) dict[str, float | int]#
-
- -
-
-core.modules.evaluator.average_distance_within_threshold(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = None) dict[str, float | int]#
-
- -
-
-core.modules.evaluator.min_diff(pred_pos: torch.Tensor, dft_pos: torch.Tensor, cell: torch.Tensor, pbc: torch.Tensor)#
-
- -
-
-core.modules.evaluator.cosine_similarity(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = NONE)#
-
- -
-
-core.modules.evaluator.mae(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = NONE) dict[str, float | int]#
-
- -
-
-core.modules.evaluator.mse(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = NONE) dict[str, float | int]#
-
- -
-
-core.modules.evaluator.magnitude_error(prediction: dict[str, torch.Tensor], target: dict[str, torch.Tensor], key: collections.abc.Hashable = NONE, p: int = 2) dict[str, float | int]#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/exponential_moving_average/index.html b/autoapi/core/modules/exponential_moving_average/index.html deleted file mode 100644 index f14406bdd..000000000 --- a/autoapi/core/modules/exponential_moving_average/index.html +++ /dev/null @@ -1,861 +0,0 @@ - - - - - - - - - - - core.modules.exponential_moving_average — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.modules.exponential_moving_average#

-

Copied (and improved) from: -fadel/pytorch_ema (MIT license)

-
-

Module Contents#

-
-

Classes#

- - - - - - -

ExponentialMovingAverage

Maintains (exponential) moving average of a set of parameters.

-
-
-class core.modules.exponential_moving_average.ExponentialMovingAverage(parameters: collections.abc.Iterable[torch.nn.Parameter], decay: float, use_num_updates: bool = False)#
-

Maintains (exponential) moving average of a set of parameters.

-
-
Parameters:
-
    -
  • parameters – Iterable of torch.nn.Parameter (typically from -model.parameters()).

  • -
  • decay – The exponential decay.

  • -
  • use_num_updates – Whether to use number of updates when computing -averages.

  • -
-
-
-
-
-_get_parameters(parameters: collections.abc.Iterable[torch.nn.Parameter] | None) collections.abc.Iterable[torch.nn.Parameter]#
-
- -
-
-update(parameters: collections.abc.Iterable[torch.nn.Parameter] | None = None) None#
-

Update currently maintained parameters.

-

Call this every time the parameters are updated, such as the result of -the optimizer.step() call.

-
-
Parameters:
-

parameters – Iterable of torch.nn.Parameter; usually the same set of -parameters used to initialize this object. If None, the -parameters with which this ExponentialMovingAverage was -initialized will be used.

-
-
-
- -
-
-copy_to(parameters: collections.abc.Iterable[torch.nn.Parameter] | None = None) None#
-

Copy current parameters into given collection of parameters.

-
-
Parameters:
-

parameters – Iterable of torch.nn.Parameter; the parameters to be -updated with the stored moving averages. If None, the -parameters with which this ExponentialMovingAverage was -initialized will be used.

-
-
-
- -
-
-store(parameters: collections.abc.Iterable[torch.nn.Parameter] | None = None) None#
-

Save the current parameters for restoring later.

-
-
Parameters:
-

parameters – Iterable of torch.nn.Parameter; the parameters to be -temporarily stored. If None, the parameters of with which this -ExponentialMovingAverage was initialized will be used.

-
-
-
- -
-
-restore(parameters: collections.abc.Iterable[torch.nn.Parameter] | None = None) None#
-

Restore the parameters stored with the store method. -Useful to validate the model with EMA parameters without affecting the -original optimization process. Store the parameters before the -copy_to method. After validation (or model saving), use this to -restore the former parameters.

-
-
Parameters:
-

parameters – Iterable of torch.nn.Parameter; the parameters to be -updated with the stored parameters. If None, the -parameters with which this ExponentialMovingAverage was -initialized will be used.

-
-
-
- -
-
-state_dict() dict#
-

Returns the state of the ExponentialMovingAverage as a dict.

-
- -
-
-load_state_dict(state_dict: dict) None#
-

Loads the ExponentialMovingAverage state.

-
-
Parameters:
-

state_dict (dict) – EMA state. Should be an object returned -from a call to state_dict().

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/index.html b/autoapi/core/modules/index.html deleted file mode 100644 index f1c616619..000000000 --- a/autoapi/core/modules/index.html +++ /dev/null @@ -1,747 +0,0 @@ - - - - - - - - - - - core.modules — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.modules

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.modules#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/loss/index.html b/autoapi/core/modules/loss/index.html deleted file mode 100644 index afa06221e..000000000 --- a/autoapi/core/modules/loss/index.html +++ /dev/null @@ -1,894 +0,0 @@ - - - - - - - - - - - core.modules.loss — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.modules.loss

- -
- -
-
- - - - -
- -
-

core.modules.loss#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

L2MAELoss

Base class for all neural network modules.

AtomwiseL2Loss

Base class for all neural network modules.

DDPLoss

Base class for all neural network modules.

-
-
-class core.modules.loss.L2MAELoss(reduction: str = 'mean')#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(input: torch.Tensor, target: torch.Tensor)#
-
- -
- -
-
-class core.modules.loss.AtomwiseL2Loss(reduction: str = 'mean')#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(input: torch.Tensor, target: torch.Tensor, natoms: torch.Tensor)#
-
- -
- -
-
-class core.modules.loss.DDPLoss(loss_fn, loss_name: str = 'mae', reduction: str = 'mean')#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-forward(input: torch.Tensor, target: torch.Tensor, natoms: torch.Tensor | None = None, batch_size: int | None = None)#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/normalizer/index.html b/autoapi/core/modules/normalizer/index.html deleted file mode 100644 index 5a3af1469..000000000 --- a/autoapi/core/modules/normalizer/index.html +++ /dev/null @@ -1,788 +0,0 @@ - - - - - - - - - - - core.modules.normalizer — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.modules.normalizer

- -
- -
-
- - - - -
- -
-

core.modules.normalizer#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

Normalizer

Normalize a Tensor and restore it later.

-
-
-class core.modules.normalizer.Normalizer(tensor: torch.Tensor | None = None, mean=None, std=None, device=None)#
-

Normalize a Tensor and restore it later.

-
-
-to(device) None#
-
- -
-
-norm(tensor: torch.Tensor) torch.Tensor#
-
- -
-
-denorm(normed_tensor: torch.Tensor) torch.Tensor#
-
- -
-
-state_dict()#
-
- -
-
-load_state_dict(state_dict) None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/scaling/compat/index.html b/autoapi/core/modules/scaling/compat/index.html deleted file mode 100644 index 881a1a79e..000000000 --- a/autoapi/core/modules/scaling/compat/index.html +++ /dev/null @@ -1,778 +0,0 @@ - - - - - - - - - - - core.modules.scaling.compat — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.modules.scaling.compat

- -
- -
-
- - - - -
- -
-

core.modules.scaling.compat#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

_load_scale_dict(scale_file)

Loads scale factors from either:

load_scales_compat(→ None)

-
-
-

Attributes#

- - - - - - -

ScaleDict

-
-
-core.modules.scaling.compat.ScaleDict#
-
- -
-
-core.modules.scaling.compat._load_scale_dict(scale_file: str | ScaleDict | None)#
-

Loads scale factors from either: -- a JSON file mapping scale factor names to scale values -- a python dictionary pickled object (loaded using torch.load) mapping scale factor names to scale values -- a dictionary mapping scale factor names to scale values

-
- -
-
-core.modules.scaling.compat.load_scales_compat(module: torch.nn.Module, scale_file: str | ScaleDict | None) None#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/scaling/fit/index.html b/autoapi/core/modules/scaling/fit/index.html deleted file mode 100644 index 19f1bbb88..000000000 --- a/autoapi/core/modules/scaling/fit/index.html +++ /dev/null @@ -1,765 +0,0 @@ - - - - - - - - - - - core.modules.scaling.fit — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.modules.scaling.fit

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.modules.scaling.fit#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - -

_prefilled_input(→ str)

_train_batch(→ None)

main(→ None)

-
-
-core.modules.scaling.fit._prefilled_input(prompt: str, prefill: str = '') str#
-
- -
-
-core.modules.scaling.fit._train_batch(trainer: fairchem.core.trainers.base_trainer.BaseTrainer, batch) None#
-
- -
-
-core.modules.scaling.fit.main(*, num_batches: int = 16) None#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/scaling/index.html b/autoapi/core/modules/scaling/index.html deleted file mode 100644 index 8eb61c088..000000000 --- a/autoapi/core/modules/scaling/index.html +++ /dev/null @@ -1,885 +0,0 @@ - - - - - - - - - - - core.modules.scaling — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.modules.scaling#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - -

ScaleFactor

Base class for all neural network modules.

-
-
-class core.modules.scaling.ScaleFactor(name: str | None = None, enforce_consistency: bool = True)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-property fitted: bool#
-
- -
-
-scale_factor: torch.Tensor#
-
- -
-
-name: str | None#
-
- -
-
-index_fn: IndexFn | None#
-
- -
-
-stats: _Stats | None#
-
- -
-
-_enforce_consistency(state_dict, prefix, _local_metadata, _strict, _missing_keys, _unexpected_keys, _error_msgs) None#
-
- -
-
-reset_() None#
-
- -
-
-set_(scale: float | torch.Tensor) None#
-
- -
-
-initialize_(*, index_fn: IndexFn | None = None) None#
-
- -
-
-fit_context_()#
-
- -
-
-fit_()#
-
- -
-
-_observe(x: torch.Tensor, ref: torch.Tensor | None = None) None#
-
- -
-
-forward(x: torch.Tensor, *, ref: torch.Tensor | None = None) torch.Tensor#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/scaling/scale_factor/index.html b/autoapi/core/modules/scaling/scale_factor/index.html deleted file mode 100644 index 27e69f364..000000000 --- a/autoapi/core/modules/scaling/scale_factor/index.html +++ /dev/null @@ -1,961 +0,0 @@ - - - - - - - - - - - core.modules.scaling.scale_factor — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.modules.scaling.scale_factor#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

_Stats

dict() -> new empty dictionary

ScaleFactor

Base class for all neural network modules.

-
-
-

Functions#

- - - - - - -

_check_consistency(→ None)

-
-
-

Attributes#

- - - - - - -

IndexFn

-
-
-class core.modules.scaling.scale_factor._Stats#
-

Bases: TypedDict

-

dict() -> new empty dictionary -dict(mapping) -> new dictionary initialized from a mapping object’s

-
-

(key, value) pairs

-
-
-
dict(iterable) -> new dictionary initialized as if via:

d = {} -for k, v in iterable:

-
-

d[k] = v

-
-
-
dict(**kwargs) -> new dictionary initialized with the name=value pairs

in the keyword argument list. For example: dict(one=1, two=2)

-
-
-
-
-variance_in: float#
-
- -
-
-variance_out: float#
-
- -
-
-n_samples: int#
-
- -
- -
-
-core.modules.scaling.scale_factor.IndexFn#
-
- -
-
-core.modules.scaling.scale_factor._check_consistency(old: torch.Tensor, new: torch.Tensor, key: str) None#
-
- -
-
-class core.modules.scaling.scale_factor.ScaleFactor(name: str | None = None, enforce_consistency: bool = True)#
-

Bases: torch.nn.Module

-

Base class for all neural network modules.

-

Your models should also subclass this class.

-

Modules can also contain other Modules, allowing to nest them in -a tree structure. You can assign the submodules as regular attributes:

-
import torch.nn as nn
-import torch.nn.functional as F
-
-class Model(nn.Module):
-    def __init__(self):
-        super().__init__()
-        self.conv1 = nn.Conv2d(1, 20, 5)
-        self.conv2 = nn.Conv2d(20, 20, 5)
-
-    def forward(self, x):
-        x = F.relu(self.conv1(x))
-        return F.relu(self.conv2(x))
-
-
-

Submodules assigned in this way will be registered, and will have their -parameters converted too when you call to(), etc.

-
-

Note

-

As per the example above, an __init__() call to the parent class -must be made before assignment on the child.

-
-
-
Variables:
-

training (bool) – Boolean represents whether this module is in training or -evaluation mode.

-
-
-
-
-property fitted: bool#
-
- -
-
-scale_factor: torch.Tensor#
-
- -
-
-name: str | None#
-
- -
-
-index_fn: IndexFn | None#
-
- -
-
-stats: _Stats | None#
-
- -
-
-_enforce_consistency(state_dict, prefix, _local_metadata, _strict, _missing_keys, _unexpected_keys, _error_msgs) None#
-
- -
-
-reset_() None#
-
- -
-
-set_(scale: float | torch.Tensor) None#
-
- -
-
-initialize_(*, index_fn: IndexFn | None = None) None#
-
- -
-
-fit_context_()#
-
- -
-
-fit_()#
-
- -
-
-_observe(x: torch.Tensor, ref: torch.Tensor | None = None) None#
-
- -
-
-forward(x: torch.Tensor, *, ref: torch.Tensor | None = None) torch.Tensor#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/scaling/util/index.html b/autoapi/core/modules/scaling/util/index.html deleted file mode 100644 index 1acf157d1..000000000 --- a/autoapi/core/modules/scaling/util/index.html +++ /dev/null @@ -1,745 +0,0 @@ - - - - - - - - - - - core.modules.scaling.util — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.modules.scaling.util

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.modules.scaling.util#

-
-

Module Contents#

-
-

Functions#

- - - - - - -

ensure_fitted(→ None)

-
-
-core.modules.scaling.util.ensure_fitted(module: torch.nn.Module, warn: bool = False) None#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/scheduler/index.html b/autoapi/core/modules/scheduler/index.html deleted file mode 100644 index 35cebe461..000000000 --- a/autoapi/core/modules/scheduler/index.html +++ /dev/null @@ -1,784 +0,0 @@ - - - - - - - - - - - core.modules.scheduler — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.modules.scheduler

- -
- -
-
- - - - -
- -
-

core.modules.scheduler#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

LRScheduler

Learning rate scheduler class for torch.optim learning rate schedulers

-
-
-class core.modules.scheduler.LRScheduler(optimizer, config)#
-

Learning rate scheduler class for torch.optim learning rate schedulers

-

Notes

-

If no learning rate scheduler is specified in the config the default -scheduler is warmup_lr_lambda (fairchem.core.common.utils) not no scheduler, -this is for backward-compatibility reasons. To run without a lr scheduler -specify scheduler: “Null” in the optim section of the config.

-
-
Parameters:
-
    -
  • optimizer (obj) – torch optim object

  • -
  • config (dict) – Optim dict from the input config

  • -
-
-
-
-
-step(metrics=None, epoch=None) None#
-
- -
-
-filter_kwargs(config)#
-
- -
-
-get_lr()#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/modules/transforms/index.html b/autoapi/core/modules/transforms/index.html deleted file mode 100644 index 1150e4fb0..000000000 --- a/autoapi/core/modules/transforms/index.html +++ /dev/null @@ -1,775 +0,0 @@ - - - - - - - - - - - core.modules.transforms — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.modules.transforms

- -
- -
-
- - - - -
- -
-

core.modules.transforms#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

DataTransforms

-
-
-

Functions#

- - - - - - -

decompose_tensor(→ torch_geometric.data.Data)

-
-
-class core.modules.transforms.DataTransforms(config)#
-
-
-__call__(data_object)#
-
- -
- -
-
-core.modules.transforms.decompose_tensor(data_object, config) torch_geometric.data.Data#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/preprocessing/index.html b/autoapi/core/preprocessing/index.html deleted file mode 100644 index be269a6de..000000000 --- a/autoapi/core/preprocessing/index.html +++ /dev/null @@ -1,1010 +0,0 @@ - - - - - - - - - - - core.preprocessing — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.preprocessing#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - -

AtomsToGraphs

A class to help convert periodic atomic structures to graphs.

-
-
-class core.preprocessing.AtomsToGraphs(max_neigh: int = 200, radius: int = 6, r_energy: bool = False, r_forces: bool = False, r_distances: bool = False, r_edges: bool = True, r_fixed: bool = True, r_pbc: bool = False, r_stress: bool = False, r_data_keys: collections.abc.Sequence[str] | None = None)#
-

A class to help convert periodic atomic structures to graphs.

-

The AtomsToGraphs class takes in periodic atomic structures in form of ASE atoms objects and converts -them into graph representations for use in PyTorch. The primary purpose of this class is to determine the -nearest neighbors within some radius around each individual atom, taking into account PBC, and set the -pair index and distance between atom pairs appropriately. Lastly, atomic properties and the graph information -are put into a PyTorch geometric data object for use with PyTorch.

-
-
Parameters:
-
    -
  • max_neigh (int) – Maximum number of neighbors to consider.

  • -
  • radius (int or float) – Cutoff radius in Angstroms to search for neighbors.

  • -
  • r_energy (bool) – Return the energy with other properties. Default is False, so the energy will not be returned.

  • -
  • r_forces (bool) – Return the forces with other properties. Default is False, so the forces will not be returned.

  • -
  • r_stress (bool) – Return the stress with other properties. Default is False, so the stress will not be returned.

  • -
  • r_distances (bool) – Return the distances with other properties.

  • -
  • False (Default is)

  • -
  • returned. (so the periodic boundary conditions will not be)

  • -
  • r_edges (bool) – Return interatomic edges with other properties. Default is True, so edges will be returned.

  • -
  • r_fixed (bool) – Return a binary vector with flags for fixed (1) vs free (0) atoms.

  • -
  • True (Default is)

  • -
  • returned.

  • -
  • r_pbc (bool) – Return the periodic boundary conditions with other properties.

  • -
  • False

  • -
  • returned.

  • -
  • r_data_keys (sequence of str, optional) – Return values corresponding to given keys in atoms.info data with other

  • -
  • None (properties. Default is)

  • -
  • properties. (so no data will be returned as)

  • -
-
-
-
-
-max_neigh#
-

Maximum number of neighbors to consider.

-
-
Type:
-

int

-
-
-
- -
-
-radius#
-

Cutoff radius in Angstoms to search for neighbors.

-
-
Type:
-

int or float

-
-
-
- -
-
-r_energy#
-

Return the energy with other properties. Default is False, so the energy will not be returned.

-
-
Type:
-

bool

-
-
-
- -
-
-r_forces#
-

Return the forces with other properties. Default is False, so the forces will not be returned.

-
-
Type:
-

bool

-
-
-
- -
-
-r_stress#
-

Return the stress with other properties. Default is False, so the stress will not be returned.

-
-
Type:
-

bool

-
-
-
- -
-
-r_distances#
-

Return the distances with other properties.

-
-
Type:
-

bool

-
-
-
- -
-
-Default is False, so the distances will not be returned.
-
- -
-
-r_edges#
-

Return interatomic edges with other properties. Default is True, so edges will be returned.

-
-
Type:
-

bool

-
-
-
- -
-
-r_fixed#
-

Return a binary vector with flags for fixed (1) vs free (0) atoms.

-
-
Type:
-

bool

-
-
-
- -
-
-Default is True, so the fixed indices will be returned.
-
- -
-
-r_pbc#
-

Return the periodic boundary conditions with other properties.

-
-
Type:
-

bool

-
-
-
- -
-
-Default is False, so the periodic boundary conditions will not be returned.
-
- -
-
-r_data_keys#
-

Return values corresponding to given keys in atoms.info data with other

-
-
Type:
-

sequence of str, optional

-
-
-
- -
-
-properties. Default is None, so no data will be returned as properties.
-
- -
-
-_get_neighbors_pymatgen(atoms: ase.Atoms)#
-

Preforms nearest neighbor search and returns edge index, distances, -and cell offsets

-
- -
-
-_reshape_features(c_index, n_index, n_distance, offsets)#
-

Stack center and neighbor index and reshapes distances, -takes in np.arrays and returns torch tensors

-
- -
-
-convert(atoms: ase.Atoms, sid=None)#
-

Convert a single atomic structure to a graph.

-
-
Parameters:
-
    -
  • atoms (ase.atoms.Atoms) – An ASE atoms object.

  • -
  • sid (uniquely identifying object) – An identifier that can be used to track the structure in downstream

  • -
  • integers. (tasks. Common sids used in OCP datasets include unique strings or)

  • -
-
-
Returns:
-

A torch geometic data object with positions, atomic_numbers, tags, -and optionally, energy, forces, distances, edges, and periodic boundary conditions. -Optional properties can included by setting r_property=True when constructing the class.

-
-
Return type:
-

data (torch_geometric.data.Data)

-
-
-
- -
-
-convert_all(atoms_collection, processed_file_path: str | None = None, collate_and_save=False, disable_tqdm=False)#
-

Convert all atoms objects in a list or in an ase.db to graphs.

-
-
Parameters:
-
    -
  • atoms_collection (list of ase.atoms.Atoms or ase.db.sqlite.SQLite3Database)

  • -
  • database. (Either a list of ASE atoms objects or an ASE)

  • -
  • processed_file_path (str)

  • -
  • None. (A string of the path to where the processed file will be written. Default is)

  • -
  • collate_and_save (bool) – A boolean to collate and save or not. Default is False, so will not write a file.

  • -
-
-
Returns:
-

A list of torch geometric data objects containing molecular graph info and properties.

-
-
Return type:
-

data_list (list of torch_geometric.data.Data)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/download_data/index.html b/autoapi/core/scripts/download_data/index.html deleted file mode 100644 index 254c8b336..000000000 --- a/autoapi/core/scripts/download_data/index.html +++ /dev/null @@ -1,834 +0,0 @@ - - - - - - - - - - - core.scripts.download_data — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.scripts.download_data#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - -

get_data(→ None)

uncompress_data(→ str)

preprocess_data(→ None)

verify_count(→ None)

cleanup(→ None)

-
-
-

Attributes#

- - - - - - - - - - - - - - - -

DOWNLOAD_LINKS_s2ef

DOWNLOAD_LINKS_is2re

S2EF_COUNTS

parser

-
- -
- -
- -
- -
-
-core.scripts.download_data.S2EF_COUNTS#
-
- -
-
-core.scripts.download_data.get_data(datadir: str, task: str, split: str | None, del_intmd_files: bool) None#
-
- -
-
-core.scripts.download_data.uncompress_data(compressed_dir: str) str#
-
- -
-
-core.scripts.download_data.preprocess_data(uncompressed_dir: str, output_path: str) None#
-
- -
-
-core.scripts.download_data.verify_count(output_path: str, task: str, split: str) None#
-
- -
-
-core.scripts.download_data.cleanup(filename: str, dirname: str) None#
-
- -
-
-core.scripts.download_data.parser#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/gif_maker_parallelized/index.html b/autoapi/core/scripts/gif_maker_parallelized/index.html deleted file mode 100644 index d46644534..000000000 --- a/autoapi/core/scripts/gif_maker_parallelized/index.html +++ /dev/null @@ -1,791 +0,0 @@ - - - - - - - - - - - core.scripts.gif_maker_parallelized — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts.gif_maker_parallelized

- -
- -
-
- - - - -
- -
-

core.scripts.gif_maker_parallelized#

-

Script to generate gifs from traj

-

Note: -This is just a quick way to generate gifs and visalizations from traj, there are many parameters and settings in the code that people can vary to make visualizations better. We have chosen these settings as this seem to work fine for most of our systems.

-

Requirements:

-

povray -ffmpeg -ase==3.21

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - -

pov_from_atoms(→ None)

parallelize_generation(→ None)

get_parser(→ argparse.ArgumentParser)

-
-
-

Attributes#

- - - - - - -

parser

-
-
-core.scripts.gif_maker_parallelized.pov_from_atoms(mp_args) None#
-
- -
-
-core.scripts.gif_maker_parallelized.parallelize_generation(traj_path, out_path: str, n_procs) None#
-
- -
-
-core.scripts.gif_maker_parallelized.get_parser() argparse.ArgumentParser#
-
- -
-
-core.scripts.gif_maker_parallelized.parser: argparse.ArgumentParser#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/hpo/run_tune/index.html b/autoapi/core/scripts/hpo/run_tune/index.html deleted file mode 100644 index e46790ba5..000000000 --- a/autoapi/core/scripts/hpo/run_tune/index.html +++ /dev/null @@ -1,755 +0,0 @@ - - - - - - - - - - - core.scripts.hpo.run_tune — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts.hpo.run_tune

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.scripts.hpo.run_tune#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

ocp_trainable(→ None)

main(→ None)

-
-
-core.scripts.hpo.run_tune.ocp_trainable(config, checkpoint_dir=None) None#
-
- -
-
-core.scripts.hpo.run_tune.main() None#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/hpo/run_tune_pbt/index.html b/autoapi/core/scripts/hpo/run_tune_pbt/index.html deleted file mode 100644 index b42a96beb..000000000 --- a/autoapi/core/scripts/hpo/run_tune_pbt/index.html +++ /dev/null @@ -1,755 +0,0 @@ - - - - - - - - - - - core.scripts.hpo.run_tune_pbt — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts.hpo.run_tune_pbt

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.scripts.hpo.run_tune_pbt#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

ocp_trainable(→ None)

main(→ None)

-
-
-core.scripts.hpo.run_tune_pbt.ocp_trainable(config, checkpoint_dir=None) None#
-
- -
-
-core.scripts.hpo.run_tune_pbt.main() None#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/index.html b/autoapi/core/scripts/index.html deleted file mode 100644 index 7ab9edc7a..000000000 --- a/autoapi/core/scripts/index.html +++ /dev/null @@ -1,747 +0,0 @@ - - - - - - - - - - - core.scripts — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.scripts#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/make_challenge_submission_file/index.html b/autoapi/core/scripts/make_challenge_submission_file/index.html deleted file mode 100644 index 9c3bd2bb9..000000000 --- a/autoapi/core/scripts/make_challenge_submission_file/index.html +++ /dev/null @@ -1,789 +0,0 @@ - - - - - - - - - - - core.scripts.make_challenge_submission_file — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts.make_challenge_submission_file

- -
- -
-
- - - - -
- -
-

core.scripts.make_challenge_submission_file#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-

ONLY for use in the NeurIPS 2021 Open Catalyst Challenge. For all other submissions -please use make_submission_file.py.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - -

write_is2re_relaxations(→ None)

write_predictions(→ None)

main(→ None)

-
-
-

Attributes#

- - - - - - -

parser

-
-
-core.scripts.make_challenge_submission_file.write_is2re_relaxations(path: str, filename: str, hybrid) None#
-
- -
-
-core.scripts.make_challenge_submission_file.write_predictions(path: str, filename: str) None#
-
- -
-
-core.scripts.make_challenge_submission_file.main(args: argparse.Namespace) None#
-
- -
-
-core.scripts.make_challenge_submission_file.parser#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/make_lmdb_sizes/index.html b/autoapi/core/scripts/make_lmdb_sizes/index.html deleted file mode 100644 index 83340ea16..000000000 --- a/autoapi/core/scripts/make_lmdb_sizes/index.html +++ /dev/null @@ -1,776 +0,0 @@ - - - - - - - - - - - core.scripts.make_lmdb_sizes — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts.make_lmdb_sizes

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.scripts.make_lmdb_sizes#

-

This script provides the functionality to generate metadata.npz files necessary -for load_balancing the DataLoader.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

get_data(index)

main(→ None)

-
-
-

Attributes#

- - - - - - -

parser

-
-
-core.scripts.make_lmdb_sizes.get_data(index)#
-
- -
-
-core.scripts.make_lmdb_sizes.main(args) None#
-
- -
-
-core.scripts.make_lmdb_sizes.parser#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/make_submission_file/index.html b/autoapi/core/scripts/make_submission_file/index.html deleted file mode 100644 index c0c4e8e7b..000000000 --- a/autoapi/core/scripts/make_submission_file/index.html +++ /dev/null @@ -1,797 +0,0 @@ - - - - - - - - - - - core.scripts.make_submission_file — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts.make_submission_file

- -
- -
-
- - - - -
- -
-

core.scripts.make_submission_file#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - -

write_is2re_relaxations(→ None)

write_predictions(→ None)

main(→ None)

-
-
-

Attributes#

- - - - - - - - - -

SPLITS

parser

-
-
-core.scripts.make_submission_file.SPLITS#
-
- -
-
-core.scripts.make_submission_file.write_is2re_relaxations(args) None#
-
- -
-
-core.scripts.make_submission_file.write_predictions(args) None#
-
- -
-
-core.scripts.make_submission_file.main(args: argparse.Namespace) None#
-
- -
-
-core.scripts.make_submission_file.parser#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/preprocess_ef/index.html b/autoapi/core/scripts/preprocess_ef/index.html deleted file mode 100644 index 6b093afa1..000000000 --- a/autoapi/core/scripts/preprocess_ef/index.html +++ /dev/null @@ -1,786 +0,0 @@ - - - - - - - - - - - core.scripts.preprocess_ef — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts.preprocess_ef

- -
- -
-
- - - - -
- -
-

core.scripts.preprocess_ef#

-

Creates LMDB files with extracted graph features from provided *.extxyz files -for the S2EF task.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - -

write_images_to_lmdb(mp_arg)

main(→ None)

get_parser(→ argparse.ArgumentParser)

-
-
-

Attributes#

- - - - - - -

parser

-
-
-core.scripts.preprocess_ef.write_images_to_lmdb(mp_arg)#
-
- -
-
-core.scripts.preprocess_ef.main(args: argparse.Namespace) None#
-
- -
-
-core.scripts.preprocess_ef.get_parser() argparse.ArgumentParser#
-
- -
-
-core.scripts.preprocess_ef.parser: argparse.ArgumentParser#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/preprocess_relaxed/index.html b/autoapi/core/scripts/preprocess_relaxed/index.html deleted file mode 100644 index fa66a4761..000000000 --- a/autoapi/core/scripts/preprocess_relaxed/index.html +++ /dev/null @@ -1,776 +0,0 @@ - - - - - - - - - - - core.scripts.preprocess_relaxed — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts.preprocess_relaxed

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.scripts.preprocess_relaxed#

-

Creates LMDB files with extracted graph features from provided *.extxyz files -for the S2EF task.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

write_images_to_lmdb(→ None)

main(→ None)

-
-
-

Attributes#

- - - - - - -

parser

-
-
-core.scripts.preprocess_relaxed.write_images_to_lmdb(mp_arg) None#
-
- -
-
-core.scripts.preprocess_relaxed.main(args, split) None#
-
- -
-
-core.scripts.preprocess_relaxed.parser#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/scripts/uncompress/index.html b/autoapi/core/scripts/uncompress/index.html deleted file mode 100644 index 1460f5c60..000000000 --- a/autoapi/core/scripts/uncompress/index.html +++ /dev/null @@ -1,796 +0,0 @@ - - - - - - - - - - - core.scripts.uncompress — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.scripts.uncompress

- -
- -
-
- - - - -
- -
-

core.scripts.uncompress#

-

Uncompresses downloaded S2EF datasets to be used by the LMDB preprocessing -script - preprocess_ef.py

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - -

read_lzma(→ None)

decompress_list_of_files(→ None)

get_parser(→ argparse.ArgumentParser)

main(→ None)

-
-
-

Attributes#

- - - - - - -

parser

-
-
-core.scripts.uncompress.read_lzma(inpfile: str, outfile: str) None#
-
- -
-
-core.scripts.uncompress.decompress_list_of_files(ip_op_pair: tuple[str, str]) None#
-
- -
-
-core.scripts.uncompress.get_parser() argparse.ArgumentParser#
-
- -
-
-core.scripts.uncompress.main(args: argparse.Namespace) None#
-
- -
-
-core.scripts.uncompress.parser: argparse.ArgumentParser#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tasks/index.html b/autoapi/core/tasks/index.html deleted file mode 100644 index 46fb87885..000000000 --- a/autoapi/core/tasks/index.html +++ /dev/null @@ -1,840 +0,0 @@ - - - - - - - - - - - core.tasks — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tasks#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

PredictTask

RelaxationTask

TrainTask

ValidateTask

-
-
-class core.tasks.PredictTask(config)#
-

Bases: BaseTask

-
-
-run() None#
-
- -
- -
-
-class core.tasks.RelaxationTask(config)#
-

Bases: BaseTask

-
-
-run() None#
-
- -
- -
-
-class core.tasks.TrainTask(config)#
-

Bases: BaseTask

-
-
-_process_error(e: RuntimeError) None#
-
- -
-
-run() None#
-
- -
- -
-
-class core.tasks.ValidateTask(config)#
-

Bases: BaseTask

-
-
-run() None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tasks/task/index.html b/autoapi/core/tasks/task/index.html deleted file mode 100644 index f0759eac0..000000000 --- a/autoapi/core/tasks/task/index.html +++ /dev/null @@ -1,861 +0,0 @@ - - - - - - - - - - - core.tasks.task — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tasks.task#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - -

BaseTask

TrainTask

PredictTask

ValidateTask

RelaxationTask

-
-
-class core.tasks.task.BaseTask(config)#
-
-
-setup(trainer) None#
-
- -
-
-abstract run()#
-
- -
- -
-
-class core.tasks.task.TrainTask(config)#
-

Bases: BaseTask

-
-
-_process_error(e: RuntimeError) None#
-
- -
-
-run() None#
-
- -
- -
-
-class core.tasks.task.PredictTask(config)#
-

Bases: BaseTask

-
-
-run() None#
-
- -
- -
-
-class core.tasks.task.ValidateTask(config)#
-

Bases: BaseTask

-
-
-run() None#
-
- -
- -
-
-class core.tasks.task.RelaxationTask(config)#
-

Bases: BaseTask

-
-
-run() None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/common/test_ase_calculator/index.html b/autoapi/core/tests/common/test_ase_calculator/index.html deleted file mode 100644 index 9566d3349..000000000 --- a/autoapi/core/tests/common/test_ase_calculator/index.html +++ /dev/null @@ -1,770 +0,0 @@ - - - - - - - - - - - core.tests.common.test_ase_calculator — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.tests.common.test_ase_calculator

- -
- -
-
- - - - -
- -
-

core.tests.common.test_ase_calculator#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - -

atoms(→ ase.Atoms)

checkpoint_path(request, tmp_path)

test_calculator_setup(checkpoint_path)

test_relaxation_final_energy(→ None)

test_random_seed_final_energy(atoms, tmp_path)

-
-
-core.tests.common.test_ase_calculator.atoms() ase.Atoms#
-
- -
-
-core.tests.common.test_ase_calculator.checkpoint_path(request, tmp_path)#
-
- -
-
-core.tests.common.test_ase_calculator.test_calculator_setup(checkpoint_path)#
-
- -
-
-core.tests.common.test_ase_calculator.test_relaxation_final_energy(atoms, tmp_path, snapshot) None#
-
- -
-
-core.tests.common.test_ase_calculator.test_random_seed_final_energy(atoms, tmp_path)#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/common/test_data_parallel_batch_sampler/index.html b/autoapi/core/tests/common/test_data_parallel_batch_sampler/index.html deleted file mode 100644 index e8a98acd7..000000000 --- a/autoapi/core/tests/common/test_data_parallel_batch_sampler/index.html +++ /dev/null @@ -1,926 +0,0 @@ - - - - - - - - - - - core.tests.common.test_data_parallel_batch_sampler — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tests.common.test_data_parallel_batch_sampler#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

_temp_file(name)

valid_path_dataset()

invalid_path_dataset()

invalid_dataset()

test_lowercase(→ None)

test_invalid_mode(→ None)

test_invalid_dataset(→ None)

test_invalid_path_dataset(→ None)

test_valid_dataset(→ None)

test_disabled(→ None)

test_single_node(→ None)

test_stateful_distributed_sampler_noshuffle(→ None)

test_stateful_distributed_sampler_vs_distributed_sampler(→ None)

test_stateful_distributed_sampler(→ None)

test_stateful_distributed_sampler_numreplicas(→ None)

test_stateful_distributed_sampler_numreplicas_drop_last(→ None)

-
-
-

Attributes#

- - - - - - - - - - - - - - - -

DATA

SIZE_ATOMS

SIZE_NEIGHBORS

T_co

-
-
-core.tests.common.test_data_parallel_batch_sampler.DATA = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.SIZE_ATOMS = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.SIZE_NEIGHBORS = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.T_co#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler._temp_file(name: str)#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.valid_path_dataset()#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.invalid_path_dataset()#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.invalid_dataset()#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_lowercase(invalid_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_invalid_mode(invalid_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_invalid_dataset(invalid_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_invalid_path_dataset(invalid_path_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_valid_dataset(valid_path_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_disabled(valid_path_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_single_node(valid_path_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_noshuffle(valid_path_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_vs_distributed_sampler(valid_path_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler(valid_path_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_numreplicas(valid_path_dataset) None#
-
- -
-
-core.tests.common.test_data_parallel_batch_sampler.test_stateful_distributed_sampler_numreplicas_drop_last(valid_path_dataset) None#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/common/test_yaml_loader/index.html b/autoapi/core/tests/common/test_yaml_loader/index.html deleted file mode 100644 index ebf1b35bf..000000000 --- a/autoapi/core/tests/common/test_yaml_loader/index.html +++ /dev/null @@ -1,757 +0,0 @@ - - - - - - - - - - - core.tests.common.test_yaml_loader — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.tests.common.test_yaml_loader

- -
- -
-
- - - - -
- -
-

core.tests.common.test_yaml_loader#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - -

invalid_yaml_config()

valid_yaml_config()

test_invalid_config(invalid_yaml_config)

test_valid_config(valid_yaml_config)

-
-
-core.tests.common.test_yaml_loader.invalid_yaml_config()#
-
- -
-
-core.tests.common.test_yaml_loader.valid_yaml_config()#
-
- -
-
-core.tests.common.test_yaml_loader.test_invalid_config(invalid_yaml_config)#
-
- -
-
-core.tests.common.test_yaml_loader.test_valid_config(valid_yaml_config)#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/conftest/index.html b/autoapi/core/tests/conftest/index.html deleted file mode 100644 index 2bd46dc68..000000000 --- a/autoapi/core/tests/conftest/index.html +++ /dev/null @@ -1,881 +0,0 @@ - - - - - - - - - - - core.tests.conftest — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tests.conftest#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

Approx

Wrapper object for approximately compared numpy arrays.

_ApproxNumpyFormatter

ApproxExtension

By default, syrupy uses the __repr__ of the expected (snapshot) and actual values

-
-
-

Functions#

- - - - - - - - - -

_try_parse_approx(→ Approx | None)

Parse the string representation of an Approx object.

snapshot(snapshot)

-
-
-

Attributes#

- - - - - - - - - -

DEFAULT_RTOL

DEFAULT_ATOL

-
-
-core.tests.conftest.DEFAULT_RTOL = 0.001#
-
- -
-
-core.tests.conftest.DEFAULT_ATOL = 0.001#
-
- -
-
-class core.tests.conftest.Approx(data: numpy.ndarray | list, *, rtol: float | None = None, atol: float | None = None)#
-

Wrapper object for approximately compared numpy arrays.

-
-
-__repr__() str#
-

Return repr(self).

-
- -
- -
-
-class core.tests.conftest._ApproxNumpyFormatter(data)#
-
-
-__repr__() str#
-

Return repr(self).

-
- -
- -
-
-core.tests.conftest._try_parse_approx(data: syrupy.types.SerializableData) Approx | None#
-

Parse the string representation of an Approx object. -We can just use eval here, since we know the string is safe.

-
- -
-
-class core.tests.conftest.ApproxExtension#
-

Bases: syrupy.extensions.amber.AmberSnapshotExtension

-

By default, syrupy uses the __repr__ of the expected (snapshot) and actual values -to serialize them into strings. Then, it compares the strings to see if they match.

-

However, this behavior is not ideal for comparing floats/ndarrays. For example, -if we have a snapshot with a float value of 0.1, and the actual value is 0.10000000000000001, -then the strings will not match, even though the values are effectively equal.

-

To work around this, we override the serialize method to seralize the expected value -into a special representation. Then, we override the matches function (which originally does a -simple string comparison) to parse the expected and actual values into numpy arrays. -Finally, we compare the arrays using np.allclose.

-
-
-matches(*, serialized_data: syrupy.types.SerializableData, snapshot_data: syrupy.types.SerializableData) bool#
-
- -
-
-serialize(data, **kwargs)#
-
- -
- -
-
-core.tests.conftest.snapshot(snapshot)#
-
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/datasets/test_ase_datasets/index.html b/autoapi/core/tests/datasets/test_ase_datasets/index.html deleted file mode 100644 index d3947230a..000000000 --- a/autoapi/core/tests/datasets/test_ase_datasets/index.html +++ /dev/null @@ -1,816 +0,0 @@ - - - - - - - - - - - core.tests.datasets.test_ase_datasets — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tests.datasets.test_ase_datasets#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - -

ase_dataset(request, tmp_path_factory)

test_ase_dataset(ase_dataset)

test_ase_read_dataset(→ None)

test_ase_metadata_guesser(→ None)

test_db_add_delete(→ None)

test_ase_multiread_dataset(→ None)

test_empty_dataset(tmp_path)

-
-
-

Attributes#

- - - - - - - - - -

structures

calc

-
-
-core.tests.datasets.test_ase_datasets.structures#
-
- -
-
-core.tests.datasets.test_ase_datasets.calc#
-
- -
-
-core.tests.datasets.test_ase_datasets.ase_dataset(request, tmp_path_factory)#
-
- -
-
-core.tests.datasets.test_ase_datasets.test_ase_dataset(ase_dataset)#
-
- -
-
-core.tests.datasets.test_ase_datasets.test_ase_read_dataset(tmp_path) None#
-
- -
-
-core.tests.datasets.test_ase_datasets.test_ase_metadata_guesser(ase_dataset) None#
-
- -
-
-core.tests.datasets.test_ase_datasets.test_db_add_delete(tmp_path) None#
-
- -
-
-core.tests.datasets.test_ase_datasets.test_ase_multiread_dataset(tmp_path) None#
-
- -
-
-core.tests.datasets.test_ase_datasets.test_empty_dataset(tmp_path)#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/datasets/test_ase_lmdb/index.html b/autoapi/core/tests/datasets/test_ase_lmdb/index.html deleted file mode 100644 index 71281fe3b..000000000 --- a/autoapi/core/tests/datasets/test_ase_lmdb/index.html +++ /dev/null @@ -1,856 +0,0 @@ - - - - - - - - - - - core.tests.datasets.test_ase_lmdb — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tests.datasets.test_ase_lmdb#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

generate_random_structure()

ase_lmbd_path(tmp_path_factory)

test_aselmdb_write(→ None)

test_aselmdb_count(→ None)

test_aselmdb_delete(→ None)

test_aselmdb_randomreads(→ None)

test_aselmdb_constraintread(→ None)

test_update_keyvalue_pair(→ None)

test_update_atoms(→ None)

test_metadata(→ None)

-
-
-

Attributes#

- - - - - - - - - - - - -

N_WRITES

N_READS

test_structures

-
-
-core.tests.datasets.test_ase_lmdb.N_WRITES = 100#
-
- -
-
-core.tests.datasets.test_ase_lmdb.N_READS = 200#
-
- -
-
-core.tests.datasets.test_ase_lmdb.test_structures#
-
- -
-
-core.tests.datasets.test_ase_lmdb.generate_random_structure()#
-
- -
-
-core.tests.datasets.test_ase_lmdb.ase_lmbd_path(tmp_path_factory)#
-
- -
-
-core.tests.datasets.test_ase_lmdb.test_aselmdb_write(ase_lmbd_path) None#
-
- -
-
-core.tests.datasets.test_ase_lmdb.test_aselmdb_count(ase_lmbd_path) None#
-
- -
-
-core.tests.datasets.test_ase_lmdb.test_aselmdb_delete(ase_lmbd_path) None#
-
- -
-
-core.tests.datasets.test_ase_lmdb.test_aselmdb_randomreads(ase_lmbd_path) None#
-
- -
-
-core.tests.datasets.test_ase_lmdb.test_aselmdb_constraintread(ase_lmbd_path) None#
-
- -
-
-core.tests.datasets.test_ase_lmdb.test_update_keyvalue_pair(ase_lmbd_path) None#
-
- -
-
-core.tests.datasets.test_ase_lmdb.test_update_atoms(ase_lmbd_path) None#
-
- -
-
-core.tests.datasets.test_ase_lmdb.test_metadata(ase_lmbd_path) None#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/evaluator/test_evaluator/index.html b/autoapi/core/tests/evaluator/test_evaluator/index.html deleted file mode 100644 index 8846ee339..000000000 --- a/autoapi/core/tests/evaluator/test_evaluator/index.html +++ /dev/null @@ -1,850 +0,0 @@ - - - - - - - - - - - core.tests.evaluator.test_evaluator — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tests.evaluator.test_evaluator#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - -

TestMetrics

TestS2EFEval

TestIS2RSEval

TestIS2REEval

-
-
-

Functions#

- - - - - - - - - - - - -

load_evaluator_s2ef(→ None)

load_evaluator_is2rs(→ None)

load_evaluator_is2re(→ None)

-
-
-core.tests.evaluator.test_evaluator.load_evaluator_s2ef(request) None#
-
- -
-
-core.tests.evaluator.test_evaluator.load_evaluator_is2rs(request) None#
-
- -
-
-core.tests.evaluator.test_evaluator.load_evaluator_is2re(request) None#
-
- -
-
-class core.tests.evaluator.test_evaluator.TestMetrics#
-
-
-test_cosine_similarity() None#
-
- -
-
-test_magnitude_error() None#
-
- -
- -
-
-class core.tests.evaluator.test_evaluator.TestS2EFEval#
-
-
-test_metrics_exist() None#
-
- -
- -
-
-class core.tests.evaluator.test_evaluator.TestIS2RSEval#
-
-
-test_metrics_exist() None#
-
- -
- -
-
-class core.tests.evaluator.test_evaluator.TestIS2REEval#
-
-
-test_metrics_exist() None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/index.html b/autoapi/core/tests/index.html deleted file mode 100644 index f0431322a..000000000 --- a/autoapi/core/tests/index.html +++ /dev/null @@ -1,741 +0,0 @@ - - - - - - - - - - - core.tests — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.tests

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.tests#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/models/test_dimenetpp/index.html b/autoapi/core/tests/models/test_dimenetpp/index.html deleted file mode 100644 index 1c87d0086..000000000 --- a/autoapi/core/tests/models/test_dimenetpp/index.html +++ /dev/null @@ -1,777 +0,0 @@ - - - - - - - - - - - core.tests.models.test_dimenetpp — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.tests.models.test_dimenetpp

- -
- -
-
- - - - -
- -
-

core.tests.models.test_dimenetpp#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestDimeNet

-
-
-

Functions#

- - - - - - - - - -

load_data(→ None)

load_model(→ None)

-
-
-core.tests.models.test_dimenetpp.load_data(request) None#
-
- -
-
-core.tests.models.test_dimenetpp.load_model(request) None#
-
- -
-
-class core.tests.models.test_dimenetpp.TestDimeNet#
-
-
-test_rotation_invariance() None#
-
- -
-
-test_energy_force_shape(snapshot) None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/models/test_gemnet/index.html b/autoapi/core/tests/models/test_gemnet/index.html deleted file mode 100644 index 13ac8cd89..000000000 --- a/autoapi/core/tests/models/test_gemnet/index.html +++ /dev/null @@ -1,777 +0,0 @@ - - - - - - - - - - - core.tests.models.test_gemnet — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.tests.models.test_gemnet

- -
- -
-
- - - - -
- -
-

core.tests.models.test_gemnet#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestGemNetT

-
-
-

Functions#

- - - - - - - - - -

load_data(→ None)

load_model(→ None)

-
-
-core.tests.models.test_gemnet.load_data(request) None#
-
- -
-
-core.tests.models.test_gemnet.load_model(request) None#
-
- -
-
-class core.tests.models.test_gemnet.TestGemNetT#
-
-
-test_rotation_invariance() None#
-
- -
-
-test_energy_force_shape(snapshot) None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/models/test_gemnet_oc/index.html b/autoapi/core/tests/models/test_gemnet_oc/index.html deleted file mode 100644 index f67545b98..000000000 --- a/autoapi/core/tests/models/test_gemnet_oc/index.html +++ /dev/null @@ -1,777 +0,0 @@ - - - - - - - - - - - core.tests.models.test_gemnet_oc — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.tests.models.test_gemnet_oc

- -
- -
-
- - - - -
- -
-

core.tests.models.test_gemnet_oc#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestGemNetOC

-
-
-

Functions#

- - - - - - - - - -

load_data(→ None)

load_model(→ None)

-
-
-core.tests.models.test_gemnet_oc.load_data(request) None#
-
- -
-
-core.tests.models.test_gemnet_oc.load_model(request) None#
-
- -
-
-class core.tests.models.test_gemnet_oc.TestGemNetOC#
-
-
-test_rotation_invariance() None#
-
- -
-
-test_energy_force_shape(snapshot) None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/models/test_gemnet_oc_scaling_mismatch/index.html b/autoapi/core/tests/models/test_gemnet_oc_scaling_mismatch/index.html deleted file mode 100644 index 35ca9efdf..000000000 --- a/autoapi/core/tests/models/test_gemnet_oc_scaling_mismatch/index.html +++ /dev/null @@ -1,762 +0,0 @@ - - - - - - - - - - - core.tests.models.test_gemnet_oc_scaling_mismatch — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tests.models.test_gemnet_oc_scaling_mismatch#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestGemNetOC

-
-
-class core.tests.models.test_gemnet_oc_scaling_mismatch.TestGemNetOC#
-
-
-test_no_scaling_mismatch() None#
-
- -
-
-test_scaling_mismatch() None#
-
- -
-
-test_no_file_exists() None#
-
- -
-
-test_not_fitted() None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/models/test_schnet/index.html b/autoapi/core/tests/models/test_schnet/index.html deleted file mode 100644 index 0ee14446d..000000000 --- a/autoapi/core/tests/models/test_schnet/index.html +++ /dev/null @@ -1,777 +0,0 @@ - - - - - - - - - - - core.tests.models.test_schnet — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.tests.models.test_schnet

- -
- -
-
- - - - -
- -
-

core.tests.models.test_schnet#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestSchNet

-
-
-

Functions#

- - - - - - - - - -

load_data(→ None)

load_model(→ None)

-
-
-core.tests.models.test_schnet.load_data(request) None#
-
- -
-
-core.tests.models.test_schnet.load_model(request) None#
-
- -
-
-class core.tests.models.test_schnet.TestSchNet#
-
-
-test_rotation_invariance() None#
-
- -
-
-test_energy_force_shape(snapshot) None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/preprocessing/index.html b/autoapi/core/tests/preprocessing/index.html deleted file mode 100644 index 18194439f..000000000 --- a/autoapi/core/tests/preprocessing/index.html +++ /dev/null @@ -1,728 +0,0 @@ - - - - - - - - - - - core.tests.preprocessing — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.tests.preprocessing

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.tests.preprocessing#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Submodules#

- -
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/preprocessing/test_atoms_to_graphs/index.html b/autoapi/core/tests/preprocessing/test_atoms_to_graphs/index.html deleted file mode 100644 index d3de0529f..000000000 --- a/autoapi/core/tests/preprocessing/test_atoms_to_graphs/index.html +++ /dev/null @@ -1,792 +0,0 @@ - - - - - - - - - - - core.tests.preprocessing.test_atoms_to_graphs — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tests.preprocessing.test_atoms_to_graphs#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestAtomsToGraphs

-
-
-

Functions#

- - - - - - -

atoms_to_graphs_internals(→ None)

-
-
-core.tests.preprocessing.test_atoms_to_graphs.atoms_to_graphs_internals(request) None#
-
- -
-
-class core.tests.preprocessing.test_atoms_to_graphs.TestAtomsToGraphs#
-
-
-test_gen_neighbors_pymatgen() None#
-
- -
-
-test_convert() None#
-
- -
-
-test_convert_all() None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/preprocessing/test_pbc/index.html b/autoapi/core/tests/preprocessing/test_pbc/index.html deleted file mode 100644 index 62c7e0fba..000000000 --- a/autoapi/core/tests/preprocessing/test_pbc/index.html +++ /dev/null @@ -1,778 +0,0 @@ - - - - - - - - - - - core.tests.preprocessing.test_pbc — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

core.tests.preprocessing.test_pbc

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

core.tests.preprocessing.test_pbc#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestPBC

-
-
-

Functions#

- - - - - - -

load_data(→ None)

-
-
-core.tests.preprocessing.test_pbc.load_data(request) None#
-
- -
-
-class core.tests.preprocessing.test_pbc.TestPBC#
-
-
-test_pbc_distances() None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/tests/preprocessing/test_radius_graph_pbc/index.html b/autoapi/core/tests/preprocessing/test_radius_graph_pbc/index.html deleted file mode 100644 index 856115c70..000000000 --- a/autoapi/core/tests/preprocessing/test_radius_graph_pbc/index.html +++ /dev/null @@ -1,802 +0,0 @@ - - - - - - - - - - - core.tests.preprocessing.test_radius_graph_pbc — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.tests.preprocessing.test_radius_graph_pbc#

-

Copyright (c) Facebook, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestRadiusGraphPBC

-
-
-

Functions#

- - - - - - - - - -

load_data(→ None)

check_features_match(→ bool)

-
-
-core.tests.preprocessing.test_radius_graph_pbc.load_data(request) None#
-
- -
-
-core.tests.preprocessing.test_radius_graph_pbc.check_features_match(edge_index_1, cell_offsets_1, edge_index_2, cell_offsets_2) bool#
-
- -
-
-class core.tests.preprocessing.test_radius_graph_pbc.TestRadiusGraphPBC#
-
-
-test_radius_graph_pbc() None#
-
- -
-
-test_bulk() None#
-
- -
-
-test_molecule() None#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/trainers/index.html b/autoapi/core/trainers/index.html deleted file mode 100644 index 171209d98..000000000 --- a/autoapi/core/trainers/index.html +++ /dev/null @@ -1,1008 +0,0 @@ - - - - - - - - - - - core.trainers — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.trainers#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - - - - -

BaseTrainer

Helper class that provides a standard way to create an ABC using

OCPTrainer

Trainer class for the Structure to Energy & Force (S2EF) and Initial State to

-
-
-class core.trainers.BaseTrainer(task, model, outputs, dataset, optimizer, loss_fns, eval_metrics, identifier: str, timestamp_id: str | None = None, run_dir: str | None = None, is_debug: bool = False, print_every: int = 100, seed: int | None = None, logger: str = 'wandb', local_rank: int = 0, amp: bool = False, cpu: bool = False, name: str = 'ocp', slurm=None, noddp: bool = False)#
-

Bases: abc.ABC

-

Helper class that provides a standard way to create an ABC using -inheritance.

-
-
-property _unwrapped_model#
-
- -
-
-abstract train(disable_eval_tqdm: bool = False) None#
-

Run model training iterations.

-
- -
-
-static _get_timestamp(device: torch.device, suffix: str | None) str#
-
- -
-
-load() None#
-
- -
-
-set_seed(seed) None#
-
- -
-
-load_seed_from_config() None#
-
- -
-
-load_logger() None#
-
- -
-
-get_sampler(dataset, batch_size: int, shuffle: bool) fairchem.core.common.data_parallel.BalancedBatchSampler#
-
- -
-
-get_dataloader(dataset, sampler) torch.utils.data.DataLoader#
-
- -
-
-load_datasets() None#
-
- -
-
-load_task()#
-
- -
-
-load_model() None#
-
- -
-
-load_checkpoint(checkpoint_path: str, checkpoint: dict | None = None) None#
-
- -
-
-load_loss() None#
-
- -
-
-load_optimizer() None#
-
- -
-
-load_extras() None#
-
- -
-
-save(metrics=None, checkpoint_file: str = 'checkpoint.pt', training_state: bool = True) str | None#
-
- -
-
-update_best(primary_metric, val_metrics, disable_eval_tqdm: bool = True) None#
-
- -
-
-validate(split: str = 'val', disable_tqdm: bool = False)#
-
- -
-
-_backward(loss) None#
-
- -
-
-save_results(predictions: dict[str, numpy.typing.NDArray], results_file: str | None, keys: collections.abc.Sequence[str] | None = None) None#
-
- -
- -
-
-class core.trainers.OCPTrainer(task, model, outputs, dataset, optimizer, loss_fns, eval_metrics, identifier, timestamp_id=None, run_dir=None, is_debug=False, print_every=100, seed=None, logger='wandb', local_rank=0, amp=False, cpu=False, slurm=None, noddp=False, name='ocp')#
-

Bases: fairchem.core.trainers.base_trainer.BaseTrainer

-

Trainer class for the Structure to Energy & Force (S2EF) and Initial State to -Relaxed State (IS2RS) tasks.

-
-

Note

-

Examples of configurations for task, model, dataset and optimizer -can be found in configs/ocp_s2ef -and configs/ocp_is2rs.

-
-
-
Parameters:
-
    -
  • task (dict) – Task configuration.

  • -
  • model (dict) – Model configuration.

  • -
  • outputs (dict) – Output property configuration.

  • -
  • dataset (dict) – Dataset configuration. The dataset needs to be a SinglePointLMDB dataset.

  • -
  • optimizer (dict) – Optimizer configuration.

  • -
  • loss_fns (dict) – Loss function configuration.

  • -
  • eval_metrics (dict) – Evaluation metrics configuration.

  • -
  • identifier (str) – Experiment identifier that is appended to log directory.

  • -
  • run_dir (str, optional) – Path to the run directory where logs are to be saved. -(default: None)

  • -
  • is_debug (bool, optional) – Run in debug mode. -(default: False)

  • -
  • print_every (int, optional) – Frequency of printing logs. -(default: 100)

  • -
  • seed (int, optional) – Random number seed. -(default: None)

  • -
  • logger (str, optional) – Type of logger to be used. -(default: wandb)

  • -
  • local_rank (int, optional) – Local rank of the process, only applicable for distributed training. -(default: 0)

  • -
  • amp (bool, optional) – Run using automatic mixed precision. -(default: False)

  • -
  • slurm (dict) – Slurm configuration. Currently just for keeping track. -(default: {})

  • -
  • noddp (bool, optional) – Run model without DDP.

  • -
-
-
-
-
-train(disable_eval_tqdm: bool = False) None#
-

Run model training iterations.

-
- -
-
-_forward(batch)#
-
- -
-
-_compute_loss(out, batch)#
-
- -
-
-_compute_metrics(out, batch, evaluator, metrics=None)#
-
- -
-
-predict(data_loader, per_image: bool = True, results_file: str | None = None, disable_tqdm: bool = False)#
-
- -
-
-run_relaxations(split='val')#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/core/trainers/ocp_trainer/index.html b/autoapi/core/trainers/ocp_trainer/index.html deleted file mode 100644 index 9cbcb1ee1..000000000 --- a/autoapi/core/trainers/ocp_trainer/index.html +++ /dev/null @@ -1,835 +0,0 @@ - - - - - - - - - - - core.trainers.ocp_trainer — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

core.trainers.ocp_trainer#

-

Copyright (c) Meta, Inc. and its affiliates.

-

This source code is licensed under the MIT license found in the -LICENSE file in the root directory of this source tree.

-
-

Module Contents#

-
-

Classes#

- - - - - - -

OCPTrainer

Trainer class for the Structure to Energy & Force (S2EF) and Initial State to

-
-
-class core.trainers.ocp_trainer.OCPTrainer(task, model, outputs, dataset, optimizer, loss_fns, eval_metrics, identifier, timestamp_id=None, run_dir=None, is_debug=False, print_every=100, seed=None, logger='wandb', local_rank=0, amp=False, cpu=False, slurm=None, noddp=False, name='ocp')#
-

Bases: fairchem.core.trainers.base_trainer.BaseTrainer

-

Trainer class for the Structure to Energy & Force (S2EF) and Initial State to -Relaxed State (IS2RS) tasks.

-
-

Note

-

Examples of configurations for task, model, dataset and optimizer -can be found in configs/ocp_s2ef -and configs/ocp_is2rs.

-
-
-
Parameters:
-
    -
  • task (dict) – Task configuration.

  • -
  • model (dict) – Model configuration.

  • -
  • outputs (dict) – Output property configuration.

  • -
  • dataset (dict) – Dataset configuration. The dataset needs to be a SinglePointLMDB dataset.

  • -
  • optimizer (dict) – Optimizer configuration.

  • -
  • loss_fns (dict) – Loss function configuration.

  • -
  • eval_metrics (dict) – Evaluation metrics configuration.

  • -
  • identifier (str) – Experiment identifier that is appended to log directory.

  • -
  • run_dir (str, optional) – Path to the run directory where logs are to be saved. -(default: None)

  • -
  • is_debug (bool, optional) – Run in debug mode. -(default: False)

  • -
  • print_every (int, optional) – Frequency of printing logs. -(default: 100)

  • -
  • seed (int, optional) – Random number seed. -(default: None)

  • -
  • logger (str, optional) – Type of logger to be used. -(default: wandb)

  • -
  • local_rank (int, optional) – Local rank of the process, only applicable for distributed training. -(default: 0)

  • -
  • amp (bool, optional) – Run using automatic mixed precision. -(default: False)

  • -
  • slurm (dict) – Slurm configuration. Currently just for keeping track. -(default: {})

  • -
  • noddp (bool, optional) – Run model without DDP.

  • -
-
-
-
-
-train(disable_eval_tqdm: bool = False) None#
-

Run model training iterations.

-
- -
-
-_forward(batch)#
-
- -
-
-_compute_loss(out, batch)#
-
- -
-
-_compute_metrics(out, batch, evaluator, metrics=None)#
-
- -
-
-predict(data_loader, per_image: bool = True, results_file: str | None = None, disable_tqdm: bool = False)#
-
- -
-
-run_relaxations(split='val')#
-
- -
- -
-
-
- - - - -
- - - - - - - - -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/core/adsorbate/index.html b/autoapi/data/oc/core/adsorbate/index.html deleted file mode 100644 index 82e9c7630..000000000 --- a/autoapi/data/oc/core/adsorbate/index.html +++ /dev/null @@ -1,809 +0,0 @@ - - - - - - - - - - - data.oc.core.adsorbate — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.core.adsorbate#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

Adsorbate

Initializes an adsorbate object in one of 4 ways:

-
-
-

Functions#

- - - - - - -

randomly_rotate_adsorbate(adsorbate_atoms[, mode, ...])

-
-
-class data.oc.core.adsorbate.Adsorbate(adsorbate_atoms: ase.Atoms = None, adsorbate_id_from_db: int = None, adsorbate_smiles_from_db: str = None, adsorbate_db_path: str = ADSORBATES_PKL_PATH, adsorbate_db: Dict[int, Tuple[Any, Ellipsis]] = None, adsorbate_binding_indices: list = None)#
-

Initializes an adsorbate object in one of 4 ways: -- Directly pass in an ase.Atoms object.

-
-

For this, you should also provide the index of the binding atom.

-
-
    -
  • Pass in index of adsorbate to select from adsorbate database.

  • -
  • Pass in the SMILES string of the adsorbate to select from the database.

  • -
  • Randomly sample an adsorbate from the adsorbate database.

  • -
-
-
Parameters:
-
    -
  • adsorbate_atoms (ase.Atoms) – Adsorbate structure.

  • -
  • adsorbate_id_from_db (int) – Index of adsorbate to select.

  • -
  • adsorbate_smiles_from_db (str) – A SMILES string of the desired adsorbate.

  • -
  • adsorbate_db_path (str) – Path to adsorbate database.

  • -
  • adsorbate_binding_indices (list) – The index/indices of the adsorbate atoms which are expected to bind.

  • -
-
-
-
-
-__len__()#
-
- -
-
-__str__()#
-

Return str(self).

-
- -
-
-__repr__()#
-

Return repr(self).

-
- -
-
-_get_adsorbate_from_random(adsorbate_db)#
-
- -
-
-_load_adsorbate(adsorbate: Tuple[Any, Ellipsis]) None#
-

Saves the fields from an adsorbate stored in a database. Fields added -after the first revision are conditionally added for backwards -compatibility with older database files.

-
- -
- -
-
-data.oc.core.adsorbate.randomly_rotate_adsorbate(adsorbate_atoms: ase.Atoms, mode: str = 'random', binding_idx: int = None)#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/core/adsorbate_slab_config/index.html b/autoapi/data/oc/core/adsorbate_slab_config/index.html deleted file mode 100644 index a6c32a020..000000000 --- a/autoapi/data/oc/core/adsorbate_slab_config/index.html +++ /dev/null @@ -1,1003 +0,0 @@ - - - - - - - - - - - data.oc.core.adsorbate_slab_config — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.core.adsorbate_slab_config#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

AdsorbateSlabConfig

Initializes a list of adsorbate-catalyst systems for a given Adsorbate and Slab.

-
-
-

Functions#

- - - - - - - - - - - - - - - -

get_random_sites_on_triangle(vertices[, num_sites])

Sample num_sites random sites uniformly on a given 3D triangle.

custom_tile_atoms(atoms)

Tile the atoms so that the center tile has the indices and positions of the

get_interstitial_distances(adsorbate_slab_config)

Check to see if there is any atomic overlap between surface atoms

there_is_overlap(adsorbate_slab_config)

Check to see if there is any atomic overlap between surface atoms

-
-
-class data.oc.core.adsorbate_slab_config.AdsorbateSlabConfig(slab: fairchem.data.oc.core.Slab, adsorbate: fairchem.data.oc.core.Adsorbate, num_sites: int = 100, num_augmentations_per_site: int = 1, interstitial_gap: float = 0.1, mode: str = 'random')#
-

Initializes a list of adsorbate-catalyst systems for a given Adsorbate and Slab.

-
-
Parameters:
-
    -
  • slab (Slab) – Slab object.

  • -
  • adsorbate (Adsorbate) – Adsorbate object.

  • -
  • num_sites (int) – Number of sites to sample.

  • -
  • num_augmentations_per_site (int) – Number of augmentations of the adsorbate per site. Total number of -generated structures will be num_sites * num_augmentations_per_site.

  • -
  • interstitial_gap (float) – Minimum distance in Angstroms between adsorbate and slab atoms.

  • -
  • mode (str) –

    “random”, “heuristic”, or “random_site_heuristic_placement”. -This affects surface site sampling and adsorbate placement on each site.

    -

    In “random”, we do a Delaunay triangulation of the surface atoms, then -sample sites uniformly at random within each triangle. When placing the -adsorbate, we randomly rotate it along xyz, and place it such that the -center of mass is at the site.

    -

    In “heuristic”, we use Pymatgen’s AdsorbateSiteFinder to find the most -energetically favorable sites, i.e., ontop, bridge, or hollow sites. -When placing the adsorbate, we randomly rotate it along z with only -slight rotation along x and y, and place it such that the binding atom -is at the site.

    -

    In “random_site_heuristic_placement”, we do a Delaunay triangulation of -the surface atoms, then sample sites uniformly at random within each -triangle. When placing the adsorbate, we randomly rotate it along z with -only slight rotation along x and y, and place it such that the binding -atom is at the site.

    -

    In all cases, the adsorbate is placed at the closest position of no -overlap with the slab plus interstitial_gap along the surface normal.

    -

  • -
-
-
-
-
-get_binding_sites(num_sites: int)#
-

Returns up to num_sites sites given the surface atoms’ positions.

-
- -
-
-place_adsorbate_on_site(adsorbate: fairchem.data.oc.core.Adsorbate, site: numpy.ndarray, interstitial_gap: float = 0.1)#
-

Place the adsorbate at the given binding site.

-
- -
-
-place_adsorbate_on_sites(sites: list, num_augmentations_per_site: int = 1, interstitial_gap: float = 0.1)#
-

Place the adsorbate at the given binding sites.

-
- -
-
-_get_scaled_normal(adsorbate_c: ase.Atoms, slab_c: ase.Atoms, site: numpy.ndarray, unit_normal: numpy.ndarray, interstitial_gap: float = 0.1)#
-

Get the scaled normal that gives a proximate configuration without atomic -overlap by:

-
-
    -
  1. Projecting the adsorbate and surface atoms onto the surface plane.

  2. -
  3. -
    Identify all adsorbate atom - surface atom combinations for which

    an itersection when translating along the normal would occur. -This is where the distance between the projected points is less than -r_surface_atom + r_adsorbate_atom

    -
    -
    -
  4. -
  5. -
    Explicitly solve for the scaled normal at which the distance between

    surface atom and adsorbate atom = r_surface_atom + r_adsorbate_atom + -interstitial_gap. This exploits the superposition of vectors and the -distance formula, so it requires root finding.

    -
    -
    -
  6. -
-
-

Assumes that the adsorbate’s binding atom or center-of-mass (depending -on mode) is already placed at the site.

-
-
Parameters:
-
    -
  • adsorbate_c (ase.Atoms) – A copy of the adsorbate with coordinates at the site

  • -
  • slab_c (ase.Atoms) – A copy of the slab

  • -
  • site (np.ndarray) – the coordinate of the site

  • -
  • adsorbate_atoms (ase.Atoms) – the translated adsorbate

  • -
  • unit_normal (np.ndarray) – the unit vector normal to the surface

  • -
  • interstitial_gap (float) – the desired distance between the covalent radii of the -closest surface and adsorbate atom

  • -
-
-
Returns:
-

the magnitude of the normal vector for placement

-
-
Return type:
-

(float)

-
-
-
- -
-
-_find_combos_to_check(adsorbate_c2: ase.Atoms, slab_c2: ase.Atoms, unit_normal: numpy.ndarray, interstitial_gap: float)#
-

Find the pairs of surface and adsorbate atoms that would have an intersection event -while traversing the normal vector. For each pair, return pertanent information for -finding the point of intersection. -:param adsorbate_c2: A copy of the adsorbate with coordinates at the centered site -:type adsorbate_c2: ase.Atoms -:param slab_c2: A copy of the slab with atoms wrapped s.t. things are centered

-
-

about the site

-
-
-
Parameters:
-
    -
  • unit_normal (np.ndarray) – the unit vector normal to the surface

  • -
  • interstitial_gap (float) – the desired distance between the covalent radii of the -closest surface and adsorbate atom

  • -
-
-
Returns:
-

-
each entry in the list corresponds to one pair to check. With the
-
following information:

[(adsorbate_idx, slab_idx), r_adsorbate_atom + r_slab_atom, slab_atom_position]

-
-
-
-
-

-
-
Return type:
-

(list[lists])

-
-
-
- -
-
-_get_projected_points(adsorbate_c2: ase.Atoms, slab_c2: ase.Atoms, unit_normal: numpy.ndarray)#
-

Find the x and y coordinates of each atom projected onto the surface plane. -:param adsorbate_c2: A copy of the adsorbate with coordinates at the centered site -:type adsorbate_c2: ase.Atoms -:param slab_c2: A copy of the slab with atoms wrapped s.t. things are centered

-
-

about the site

-
-
-
Parameters:
-

unit_normal (np.ndarray) – the unit vector normal to the surface

-
-
Returns:
-

{“ads”: [[x1, y1], [x2, y2], …], “slab”: [[x1, y1], [x2, y2], …],}

-
-
Return type:
-

(dict)

-
-
-
- -
-
-get_metadata_dict(ind)#
-

Returns a dict containing the atoms object and metadata for -one specified config, used for writing to files.

-
- -
- -
-
-data.oc.core.adsorbate_slab_config.get_random_sites_on_triangle(vertices: numpy.ndarray, num_sites: int = 10)#
-

Sample num_sites random sites uniformly on a given 3D triangle. -Following Sec. 4.2 from https://www.cs.princeton.edu/~funk/tog02.pdf.

-
- -
-
-data.oc.core.adsorbate_slab_config.custom_tile_atoms(atoms: ase.Atoms)#
-

Tile the atoms so that the center tile has the indices and positions of the -untiled structure.

-
-
Parameters:
-

atoms (ase.Atoms) – the atoms object to be tiled

-
-
Returns:
-

-
the tiled atoms which has been repeated 3 times in

the x and y directions but maintains the original indices on the central -unit cell.

-
-
-

-
-
Return type:
-

(ase.Atoms)

-
-
-
- -
-
-data.oc.core.adsorbate_slab_config.get_interstitial_distances(adsorbate_slab_config: ase.Atoms)#
-

Check to see if there is any atomic overlap between surface atoms -and adsorbate atoms.

-
-
Parameters:
-

adsorbate_slab_configuration (ase.Atoms) – an slab atoms object with an -adsorbate placed

-
-
Returns:
-

True if there is atomic overlap, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
-
-data.oc.core.adsorbate_slab_config.there_is_overlap(adsorbate_slab_config: ase.Atoms)#
-

Check to see if there is any atomic overlap between surface atoms -and adsorbate atoms.

-
-
Parameters:
-

adsorbate_slab_configuration (ase.Atoms) – an slab atoms object with an -adsorbate placed

-
-
Returns:
-

True if there is atomic overlap, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/core/bulk/index.html b/autoapi/data/oc/core/bulk/index.html deleted file mode 100644 index 452e6ea0b..000000000 --- a/autoapi/data/oc/core/bulk/index.html +++ /dev/null @@ -1,805 +0,0 @@ - - - - - - - - - - - data.oc.core.bulk — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.core.bulk#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

Bulk

Initializes a bulk object in one of 4 ways:

-
-
-class data.oc.core.bulk.Bulk(bulk_atoms: ase.Atoms = None, bulk_id_from_db: int = None, bulk_src_id_from_db: str = None, bulk_db_path: str = BULK_PKL_PATH, bulk_db: List[Dict[str, Any]] = None)#
-

Initializes a bulk object in one of 4 ways: -- Directly pass in an ase.Atoms object. -- Pass in index of bulk to select from bulk database. -- Pass in the src_id of the bulk to select from the bulk database. -- Randomly sample a bulk from bulk database if no other option is passed.

-
-
Parameters:
-
    -
  • bulk_atoms (ase.Atoms) – Bulk structure.

  • -
  • bulk_id_from_db (int) – Index of bulk in database pkl to select.

  • -
  • bulk_src_id_from_db (int) – Src id of bulk to select (e.g. “mp-30”).

  • -
  • bulk_db_path (str) – Path to bulk database.

  • -
  • bulk_db (List[Dict[str, Any]]) – Already-loaded database.

  • -
-
-
-
-
-_get_bulk_from_random(bulk_db)#
-
- -
-
-set_source_dataset_id(src_id: str)#
-
- -
-
-set_bulk_id_from_db(bulk_id_from_db: int)#
-
- -
-
-get_slabs(max_miller=2, precomputed_slabs_dir=None)#
-

Returns a list of possible slabs for this bulk instance.

-
- -
-
-__len__()#
-
- -
-
-__str__()#
-

Return str(self).

-
- -
-
-__repr__()#
-

Return repr(self).

-
- -
-
-__eq__(other) bool#
-

Return self==value.

-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/core/index.html b/autoapi/data/oc/core/index.html deleted file mode 100644 index 9a2baefdf..000000000 --- a/autoapi/data/oc/core/index.html +++ /dev/null @@ -1,1271 +0,0 @@ - - - - - - - - - - - data.oc.core — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.core#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - -

Bulk

Initializes a bulk object in one of 4 ways:

Slab

Initializes a slab object, i.e. a particular slab tiled along xyz, in

Adsorbate

Initializes an adsorbate object in one of 4 ways:

AdsorbateSlabConfig

Initializes a list of adsorbate-catalyst systems for a given Adsorbate and Slab.

MultipleAdsorbateSlabConfig

Class to represent a slab with multiple adsorbates on it. This class only

-
-
-class data.oc.core.Bulk(bulk_atoms: ase.Atoms = None, bulk_id_from_db: int = None, bulk_src_id_from_db: str = None, bulk_db_path: str = BULK_PKL_PATH, bulk_db: List[Dict[str, Any]] = None)#
-

Initializes a bulk object in one of 4 ways: -- Directly pass in an ase.Atoms object. -- Pass in index of bulk to select from bulk database. -- Pass in the src_id of the bulk to select from the bulk database. -- Randomly sample a bulk from bulk database if no other option is passed.

-
-
Parameters:
-
    -
  • bulk_atoms (ase.Atoms) – Bulk structure.

  • -
  • bulk_id_from_db (int) – Index of bulk in database pkl to select.

  • -
  • bulk_src_id_from_db (int) – Src id of bulk to select (e.g. “mp-30”).

  • -
  • bulk_db_path (str) – Path to bulk database.

  • -
  • bulk_db (List[Dict[str, Any]]) – Already-loaded database.

  • -
-
-
-
-
-_get_bulk_from_random(bulk_db)#
-
- -
-
-set_source_dataset_id(src_id: str)#
-
- -
-
-set_bulk_id_from_db(bulk_id_from_db: int)#
-
- -
-
-get_slabs(max_miller=2, precomputed_slabs_dir=None)#
-

Returns a list of possible slabs for this bulk instance.

-
- -
-
-__len__()#
-
- -
-
-__str__()#
-

Return str(self).

-
- -
-
-__repr__()#
-

Return repr(self).

-
- -
-
-__eq__(other) bool#
-

Return self==value.

-
- -
- -
-
-class data.oc.core.Slab(bulk=None, slab_atoms: ase.Atoms = None, millers: tuple = None, shift: float = None, top: bool = None, oriented_bulk: pymatgen.core.structure.Structure = None, min_ab: float = 0.8)#
-

Initializes a slab object, i.e. a particular slab tiled along xyz, in -one of 2 ways: -- Pass in a Bulk object and a slab 5-tuple containing -(atoms, miller, shift, top, oriented bulk). -- Pass in a Bulk object and randomly sample a slab.

-
-
Parameters:
-
    -
  • bulk (Bulk) – Corresponding Bulk object.

  • -
  • slab_atoms (ase.Atoms) – Slab atoms, tiled and tagged

  • -
  • millers (tuple) – Miller indices of slab.

  • -
  • shift (float) – Shift of slab.

  • -
  • top (bool) – Whether slab is top or bottom.

  • -
  • min_ab (float) – To confirm that the tiled structure spans this distance

  • -
-
-
-
-
-classmethod from_bulk_get_random_slab(bulk=None, max_miller=2, min_ab=8.0, save_path=None)#
-
- -
-
-classmethod from_bulk_get_specific_millers(specific_millers, bulk=None, min_ab=8.0, save_path=None)#
-
- -
-
-classmethod from_bulk_get_all_slabs(bulk=None, max_miller=2, min_ab=8.0, save_path=None)#
-
- -
-
-classmethod from_precomputed_slabs_pkl(bulk=None, precomputed_slabs_pkl=None, max_miller=2, min_ab=8.0)#
-
- -
-
-classmethod from_atoms(atoms: ase.Atoms = None, bulk=None, **kwargs)#
-
- -
-
-has_surface_tagged()#
-
- -
-
-get_metadata_dict()#
-
- -
-
-__len__()#
-
- -
-
-__str__()#
-

Return str(self).

-
- -
-
-__repr__()#
-

Return repr(self).

-
- -
-
-__eq__(other)#
-

Return self==value.

-
- -
- -
-
-class data.oc.core.Adsorbate(adsorbate_atoms: ase.Atoms = None, adsorbate_id_from_db: int = None, adsorbate_smiles_from_db: str = None, adsorbate_db_path: str = ADSORBATES_PKL_PATH, adsorbate_db: Dict[int, Tuple[Any, Ellipsis]] = None, adsorbate_binding_indices: list = None)#
-

Initializes an adsorbate object in one of 4 ways: -- Directly pass in an ase.Atoms object.

-
-

For this, you should also provide the index of the binding atom.

-
-
    -
  • Pass in index of adsorbate to select from adsorbate database.

  • -
  • Pass in the SMILES string of the adsorbate to select from the database.

  • -
  • Randomly sample an adsorbate from the adsorbate database.

  • -
-
-
Parameters:
-
    -
  • adsorbate_atoms (ase.Atoms) – Adsorbate structure.

  • -
  • adsorbate_id_from_db (int) – Index of adsorbate to select.

  • -
  • adsorbate_smiles_from_db (str) – A SMILES string of the desired adsorbate.

  • -
  • adsorbate_db_path (str) – Path to adsorbate database.

  • -
  • adsorbate_binding_indices (list) – The index/indices of the adsorbate atoms which are expected to bind.

  • -
-
-
-
-
-__len__()#
-
- -
-
-__str__()#
-

Return str(self).

-
- -
-
-__repr__()#
-

Return repr(self).

-
- -
-
-_get_adsorbate_from_random(adsorbate_db)#
-
- -
-
-_load_adsorbate(adsorbate: Tuple[Any, Ellipsis]) None#
-

Saves the fields from an adsorbate stored in a database. Fields added -after the first revision are conditionally added for backwards -compatibility with older database files.

-
- -
- -
-
-class data.oc.core.AdsorbateSlabConfig(slab: fairchem.data.oc.core.Slab, adsorbate: fairchem.data.oc.core.Adsorbate, num_sites: int = 100, num_augmentations_per_site: int = 1, interstitial_gap: float = 0.1, mode: str = 'random')#
-

Initializes a list of adsorbate-catalyst systems for a given Adsorbate and Slab.

-
-
Parameters:
-
    -
  • slab (Slab) – Slab object.

  • -
  • adsorbate (Adsorbate) – Adsorbate object.

  • -
  • num_sites (int) – Number of sites to sample.

  • -
  • num_augmentations_per_site (int) – Number of augmentations of the adsorbate per site. Total number of -generated structures will be num_sites * num_augmentations_per_site.

  • -
  • interstitial_gap (float) – Minimum distance in Angstroms between adsorbate and slab atoms.

  • -
  • mode (str) –

    “random”, “heuristic”, or “random_site_heuristic_placement”. -This affects surface site sampling and adsorbate placement on each site.

    -

    In “random”, we do a Delaunay triangulation of the surface atoms, then -sample sites uniformly at random within each triangle. When placing the -adsorbate, we randomly rotate it along xyz, and place it such that the -center of mass is at the site.

    -

    In “heuristic”, we use Pymatgen’s AdsorbateSiteFinder to find the most -energetically favorable sites, i.e., ontop, bridge, or hollow sites. -When placing the adsorbate, we randomly rotate it along z with only -slight rotation along x and y, and place it such that the binding atom -is at the site.

    -

    In “random_site_heuristic_placement”, we do a Delaunay triangulation of -the surface atoms, then sample sites uniformly at random within each -triangle. When placing the adsorbate, we randomly rotate it along z with -only slight rotation along x and y, and place it such that the binding -atom is at the site.

    -

    In all cases, the adsorbate is placed at the closest position of no -overlap with the slab plus interstitial_gap along the surface normal.

    -

  • -
-
-
-
-
-get_binding_sites(num_sites: int)#
-

Returns up to num_sites sites given the surface atoms’ positions.

-
- -
-
-place_adsorbate_on_site(adsorbate: fairchem.data.oc.core.Adsorbate, site: numpy.ndarray, interstitial_gap: float = 0.1)#
-

Place the adsorbate at the given binding site.

-
- -
-
-place_adsorbate_on_sites(sites: list, num_augmentations_per_site: int = 1, interstitial_gap: float = 0.1)#
-

Place the adsorbate at the given binding sites.

-
- -
-
-_get_scaled_normal(adsorbate_c: ase.Atoms, slab_c: ase.Atoms, site: numpy.ndarray, unit_normal: numpy.ndarray, interstitial_gap: float = 0.1)#
-

Get the scaled normal that gives a proximate configuration without atomic -overlap by:

-
-
    -
  1. Projecting the adsorbate and surface atoms onto the surface plane.

  2. -
  3. -
    Identify all adsorbate atom - surface atom combinations for which

    an itersection when translating along the normal would occur. -This is where the distance between the projected points is less than -r_surface_atom + r_adsorbate_atom

    -
    -
    -
  4. -
  5. -
    Explicitly solve for the scaled normal at which the distance between

    surface atom and adsorbate atom = r_surface_atom + r_adsorbate_atom + -interstitial_gap. This exploits the superposition of vectors and the -distance formula, so it requires root finding.

    -
    -
    -
  6. -
-
-

Assumes that the adsorbate’s binding atom or center-of-mass (depending -on mode) is already placed at the site.

-
-
Parameters:
-
    -
  • adsorbate_c (ase.Atoms) – A copy of the adsorbate with coordinates at the site

  • -
  • slab_c (ase.Atoms) – A copy of the slab

  • -
  • site (np.ndarray) – the coordinate of the site

  • -
  • adsorbate_atoms (ase.Atoms) – the translated adsorbate

  • -
  • unit_normal (np.ndarray) – the unit vector normal to the surface

  • -
  • interstitial_gap (float) – the desired distance between the covalent radii of the -closest surface and adsorbate atom

  • -
-
-
Returns:
-

the magnitude of the normal vector for placement

-
-
Return type:
-

(float)

-
-
-
- -
-
-_find_combos_to_check(adsorbate_c2: ase.Atoms, slab_c2: ase.Atoms, unit_normal: numpy.ndarray, interstitial_gap: float)#
-

Find the pairs of surface and adsorbate atoms that would have an intersection event -while traversing the normal vector. For each pair, return pertanent information for -finding the point of intersection. -:param adsorbate_c2: A copy of the adsorbate with coordinates at the centered site -:type adsorbate_c2: ase.Atoms -:param slab_c2: A copy of the slab with atoms wrapped s.t. things are centered

-
-

about the site

-
-
-
Parameters:
-
    -
  • unit_normal (np.ndarray) – the unit vector normal to the surface

  • -
  • interstitial_gap (float) – the desired distance between the covalent radii of the -closest surface and adsorbate atom

  • -
-
-
Returns:
-

-
each entry in the list corresponds to one pair to check. With the
-
following information:

[(adsorbate_idx, slab_idx), r_adsorbate_atom + r_slab_atom, slab_atom_position]

-
-
-
-
-

-
-
Return type:
-

(list[lists])

-
-
-
- -
-
-_get_projected_points(adsorbate_c2: ase.Atoms, slab_c2: ase.Atoms, unit_normal: numpy.ndarray)#
-

Find the x and y coordinates of each atom projected onto the surface plane. -:param adsorbate_c2: A copy of the adsorbate with coordinates at the centered site -:type adsorbate_c2: ase.Atoms -:param slab_c2: A copy of the slab with atoms wrapped s.t. things are centered

-
-

about the site

-
-
-
Parameters:
-

unit_normal (np.ndarray) – the unit vector normal to the surface

-
-
Returns:
-

{“ads”: [[x1, y1], [x2, y2], …], “slab”: [[x1, y1], [x2, y2], …],}

-
-
Return type:
-

(dict)

-
-
-
- -
-
-get_metadata_dict(ind)#
-

Returns a dict containing the atoms object and metadata for -one specified config, used for writing to files.

-
- -
- -
-
-class data.oc.core.MultipleAdsorbateSlabConfig(slab: fairchem.data.oc.core.Slab, adsorbates: List[fairchem.data.oc.core.Adsorbate], num_sites: int = 100, num_configurations: int = 1, interstitial_gap: float = 0.1, mode: str = 'random_site_heuristic_placement')#
-

Bases: fairchem.data.oc.core.AdsorbateSlabConfig

-

Class to represent a slab with multiple adsorbates on it. This class only -returns a fixed combination of adsorbates placed on the surface. Unlike -AdsorbateSlabConfig which enumerates all possible adsorbate placements, this -problem gets combinatorially large.

-
-
Parameters:
-
    -
  • slab (Slab) – Slab object.

  • -
  • adsorbates (List[Adsorbate]) – List of adsorbate objects to place on the slab.

  • -
  • num_sites (int) – Number of sites to sample.

  • -
  • num_configurations (int) – Number of configurations to generate per slab+adsorbate(s) combination. -This corresponds to selecting different site combinations to place -the adsorbates on.

  • -
  • interstitial_gap (float) – Minimum distance, in Angstroms, between adsorbate and slab atoms as -well as the inter-adsorbate distance.

  • -
  • mode (str) –

    “random”, “heuristic”, or “random_site_heuristic_placement”. -This affects surface site sampling and adsorbate placement on each site.

    -

    In “random”, we do a Delaunay triangulation of the surface atoms, then -sample sites uniformly at random within each triangle. When placing the -adsorbate, we randomly rotate it along xyz, and place it such that the -center of mass is at the site.

    -

    In “heuristic”, we use Pymatgen’s AdsorbateSiteFinder to find the most -energetically favorable sites, i.e., ontop, bridge, or hollow sites. -When placing the adsorbate, we randomly rotate it along z with only -slight rotation along x and y, and place it such that the binding atom -is at the site.

    -

    In “random_site_heuristic_placement”, we do a Delaunay triangulation of -the surface atoms, then sample sites uniformly at random within each -triangle. When placing the adsorbate, we randomly rotate it along z with -only slight rotation along x and y, and place it such that the binding -atom is at the site.

    -

    In all cases, the adsorbate is placed at the closest position of no -overlap with the slab plus interstitial_gap along the surface normal.

    -

  • -
-
-
-
-
-place_adsorbates_on_sites(sites: list, num_configurations: int = 1, interstitial_gap: float = 0.1)#
-

Place the adsorbate at the given binding sites.

-

This method generates a fixed number of configurations where sites are -selected to ensure that adsorbate binding indices are at least a fair -distance away from each other (covalent radii + interstitial gap). -While this helps prevent adsorbate overlap it does not gaurantee it -since non-binding adsorbate atoms can overlap if the right combination -of angles is sampled.

-
- -
-
-get_metadata_dict(ind)#
-

Returns a dict containing the atoms object and metadata for -one specified config, used for writing to files.

-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/core/multi_adsorbate_slab_config/index.html b/autoapi/data/oc/core/multi_adsorbate_slab_config/index.html deleted file mode 100644 index 0b6583d6b..000000000 --- a/autoapi/data/oc/core/multi_adsorbate_slab_config/index.html +++ /dev/null @@ -1,813 +0,0 @@ - - - - - - - - - - - data.oc.core.multi_adsorbate_slab_config — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.core.multi_adsorbate_slab_config#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

MultipleAdsorbateSlabConfig

Class to represent a slab with multiple adsorbates on it. This class only

-
-
-

Functions#

- - - - - - -

update_distance_map(prev_distance_map, site_idx, ...)

Given a new site and the adsorbate we plan on placing there,

-
-
-class data.oc.core.multi_adsorbate_slab_config.MultipleAdsorbateSlabConfig(slab: fairchem.data.oc.core.Slab, adsorbates: List[fairchem.data.oc.core.Adsorbate], num_sites: int = 100, num_configurations: int = 1, interstitial_gap: float = 0.1, mode: str = 'random_site_heuristic_placement')#
-

Bases: fairchem.data.oc.core.AdsorbateSlabConfig

-

Class to represent a slab with multiple adsorbates on it. This class only -returns a fixed combination of adsorbates placed on the surface. Unlike -AdsorbateSlabConfig which enumerates all possible adsorbate placements, this -problem gets combinatorially large.

-
-
Parameters:
-
    -
  • slab (Slab) – Slab object.

  • -
  • adsorbates (List[Adsorbate]) – List of adsorbate objects to place on the slab.

  • -
  • num_sites (int) – Number of sites to sample.

  • -
  • num_configurations (int) – Number of configurations to generate per slab+adsorbate(s) combination. -This corresponds to selecting different site combinations to place -the adsorbates on.

  • -
  • interstitial_gap (float) – Minimum distance, in Angstroms, between adsorbate and slab atoms as -well as the inter-adsorbate distance.

  • -
  • mode (str) –

    “random”, “heuristic”, or “random_site_heuristic_placement”. -This affects surface site sampling and adsorbate placement on each site.

    -

    In “random”, we do a Delaunay triangulation of the surface atoms, then -sample sites uniformly at random within each triangle. When placing the -adsorbate, we randomly rotate it along xyz, and place it such that the -center of mass is at the site.

    -

    In “heuristic”, we use Pymatgen’s AdsorbateSiteFinder to find the most -energetically favorable sites, i.e., ontop, bridge, or hollow sites. -When placing the adsorbate, we randomly rotate it along z with only -slight rotation along x and y, and place it such that the binding atom -is at the site.

    -

    In “random_site_heuristic_placement”, we do a Delaunay triangulation of -the surface atoms, then sample sites uniformly at random within each -triangle. When placing the adsorbate, we randomly rotate it along z with -only slight rotation along x and y, and place it such that the binding -atom is at the site.

    -

    In all cases, the adsorbate is placed at the closest position of no -overlap with the slab plus interstitial_gap along the surface normal.

    -

  • -
-
-
-
-
-place_adsorbates_on_sites(sites: list, num_configurations: int = 1, interstitial_gap: float = 0.1)#
-

Place the adsorbate at the given binding sites.

-

This method generates a fixed number of configurations where sites are -selected to ensure that adsorbate binding indices are at least a fair -distance away from each other (covalent radii + interstitial gap). -While this helps prevent adsorbate overlap it does not gaurantee it -since non-binding adsorbate atoms can overlap if the right combination -of angles is sampled.

-
- -
-
-get_metadata_dict(ind)#
-

Returns a dict containing the atoms object and metadata for -one specified config, used for writing to files.

-
- -
- -
-
-data.oc.core.multi_adsorbate_slab_config.update_distance_map(prev_distance_map, site_idx, adsorbate, pseudo_atoms)#
-

Given a new site and the adsorbate we plan on placing there, -update the distance mapping to reflect the new distances from sites to nearest adsorbates. -We incorporate the covalent radii of the placed adsorbate binding atom in our distance -calculation to prevent atom overlap.

-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/core/slab/index.html b/autoapi/data/oc/core/slab/index.html deleted file mode 100644 index c1e462eb8..000000000 --- a/autoapi/data/oc/core/slab/index.html +++ /dev/null @@ -1,1165 +0,0 @@ - - - - - - - - - - - data.oc.core.slab — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.core.slab#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

Slab

Initializes a slab object, i.e. a particular slab tiled along xyz, in

-
-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

tile_and_tag_atoms(unit_slab_struct, bulk_atoms[, min_ab])

This function combines the next three functions that tile, tag,

set_fixed_atom_constraints(atoms)

This function fixes sub-surface atoms of a surface. Also works on systems

tag_surface_atoms([slab_atoms, bulk_atoms])

Sets the tags of an ase.Atoms object. Any atom that we consider a "bulk"

tile_atoms(atoms[, min_ab])

This function will repeat an atoms structure in the direction of the a and b

find_surface_atoms_by_height(surface_atoms)

As discussed in the docstring for find_surface_atoms_with_voronoi,

find_surface_atoms_with_voronoi_given_height(...)

Labels atoms as surface or bulk atoms according to their coordination

calculate_center_of_mass(struct)

Calculates the center of mass of the slab.

calculate_coordination_of_bulk_atoms(bulk_atoms)

Finds all unique atoms in a bulk structure and then determines their

compute_slabs([bulk_atoms, max_miller, specific_millers])

Enumerates all the symmetrically distinct slabs of a bulk structure.

flip_struct(struct)

Flips an atoms object upside down. Normally used to flip slabs.

is_structure_invertible(struct)

This function figures out whether or not an Structure

standardize_bulk(atoms)

There are many ways to define a bulk unit cell. If you change the unit

-
-
-class data.oc.core.slab.Slab(bulk=None, slab_atoms: ase.Atoms = None, millers: tuple = None, shift: float = None, top: bool = None, oriented_bulk: pymatgen.core.structure.Structure = None, min_ab: float = 0.8)#
-

Initializes a slab object, i.e. a particular slab tiled along xyz, in -one of 2 ways: -- Pass in a Bulk object and a slab 5-tuple containing -(atoms, miller, shift, top, oriented bulk). -- Pass in a Bulk object and randomly sample a slab.

-
-
Parameters:
-
    -
  • bulk (Bulk) – Corresponding Bulk object.

  • -
  • slab_atoms (ase.Atoms) – Slab atoms, tiled and tagged

  • -
  • millers (tuple) – Miller indices of slab.

  • -
  • shift (float) – Shift of slab.

  • -
  • top (bool) – Whether slab is top or bottom.

  • -
  • min_ab (float) – To confirm that the tiled structure spans this distance

  • -
-
-
-
-
-classmethod from_bulk_get_random_slab(bulk=None, max_miller=2, min_ab=8.0, save_path=None)#
-
- -
-
-classmethod from_bulk_get_specific_millers(specific_millers, bulk=None, min_ab=8.0, save_path=None)#
-
- -
-
-classmethod from_bulk_get_all_slabs(bulk=None, max_miller=2, min_ab=8.0, save_path=None)#
-
- -
-
-classmethod from_precomputed_slabs_pkl(bulk=None, precomputed_slabs_pkl=None, max_miller=2, min_ab=8.0)#
-
- -
-
-classmethod from_atoms(atoms: ase.Atoms = None, bulk=None, **kwargs)#
-
- -
-
-has_surface_tagged()#
-
- -
-
-get_metadata_dict()#
-
- -
-
-__len__()#
-
- -
-
-__str__()#
-

Return str(self).

-
- -
-
-__repr__()#
-

Return repr(self).

-
- -
-
-__eq__(other)#
-

Return self==value.

-
- -
- -
-
-data.oc.core.slab.tile_and_tag_atoms(unit_slab_struct: pymatgen.core.structure.Structure, bulk_atoms: ase.Atoms, min_ab: float = 8)#
-

This function combines the next three functions that tile, tag, -and constrain the atoms.

-
-
Parameters:
-
    -
  • unit_slab_struct (Structure) – The untiled slab structure

  • -
  • bulk_atoms (ase.Atoms) – Atoms of the corresponding bulk structure, used for tagging

  • -
  • min_ab (float) – The minimum distance in x and y spanned by the tiled structure.

  • -
-
-
Returns:
-

atoms_tiled – A copy of the slab atoms that is tiled, tagged, and constrained

-
-
Return type:
-

ase.Atoms

-
-
-
- -
-
-data.oc.core.slab.set_fixed_atom_constraints(atoms)#
-

This function fixes sub-surface atoms of a surface. Also works on systems -that have surface + adsorbate(s), as long as the bulk atoms are tagged with -0, surface atoms are tagged with 1, and the adsorbate atoms are tagged -with 2 or above.

-

This is used for both surface atoms and the combined surface+adsorbate.

-
-
Parameters:
-

atoms (ase.Atoms) – Atoms object of the slab or slab+adsorbate system, with bulk atoms -tagged as 0, surface atoms tagged as 1, and adsorbate atoms tagged -as 2 or above.

-
-
Returns:
-

atoms – A deep copy of the atoms argument, but where the appropriate -atoms are constrained.

-
-
Return type:
-

ase.Atoms

-
-
-
- -
-
-data.oc.core.slab.tag_surface_atoms(slab_atoms: ase.Atoms = None, bulk_atoms: ase.Atoms = None)#
-

Sets the tags of an ase.Atoms object. Any atom that we consider a “bulk” -atom will have a tag of 0, and any atom that we consider a “surface” atom -will have a tag of 1. We use a combination of Voronoi neighbor algorithms -(adapted from pymatgen.core.surface.Slab.get_surface_sites; see -https://pymatgen.org/pymatgen.core.surface.html) and a distance cutoff.

-
-
Parameters:
-
    -
  • slab_atoms (ase.Atoms) – The slab where you are trying to find surface sites.

  • -
  • bulk_atoms (ase.Atoms) – The bulk structure that the surface was cut from.

  • -
-
-
Returns:
-

slab_atoms – A copy of the slab atoms with the surface atoms tagged as 1.

-
-
Return type:
-

ase.Atoms

-
-
-
- -
-
-data.oc.core.slab.tile_atoms(atoms: ase.Atoms, min_ab: float = 8)#
-

This function will repeat an atoms structure in the direction of the a and b -lattice vectors such that they are at least as wide as the min_ab constant.

-
-
Parameters:
-
    -
  • atoms (ase.Atoms) – The structure to tile.

  • -
  • min_ab (float) – The minimum distance in x and y spanned by the tiled structure.

  • -
-
-
Returns:
-

atoms_tiled – The tiled structure.

-
-
Return type:
-

ase.Atoms

-
-
-
- -
-
-data.oc.core.slab.find_surface_atoms_by_height(surface_atoms)#
-

As discussed in the docstring for find_surface_atoms_with_voronoi, -sometimes we might accidentally tag a surface atom as a bulk atom if there -are multiple coordination environments for that atom type within the bulk. -One heuristic that we use to address this is to simply figure out if an -atom is close to the surface. This function will figure that out.

-

Specifically: We consider an atom a surface atom if it is within 2 -Angstroms of the heighest atom in the z-direction (or more accurately, the -direction of the 3rd unit cell vector).

-
-
Parameters:
-

surface_atoms (ase.Atoms)

-
-
Returns:
-

tags – A list that contains the indices of the surface atoms.

-
-
Return type:
-

list

-
-
-
- -
-
-data.oc.core.slab.find_surface_atoms_with_voronoi_given_height(bulk_atoms, slab_atoms, height_tags)#
-

Labels atoms as surface or bulk atoms according to their coordination -relative to their bulk structure. If an atom’s coordination is less than it -normally is in a bulk, then we consider it a surface atom. We calculate the -coordination using pymatgen’s Voronoi algorithms.

-

Note that if a single element has different sites within a bulk and these -sites have different coordinations, then we consider slab atoms -“under-coordinated” only if they are less coordinated than the most under -undercoordinated bulk atom. For example: Say we have a bulk with two Cu -sites. One site has a coordination of 12 and another a coordination of 9. -If a slab atom has a coordination of 10, we will consider it a bulk atom.

-
-
Parameters:
-
    -
  • bulk_atoms (ase.Atoms) – The bulk structure that the surface was cut from.

  • -
  • slab_atoms (ase.Atoms) – The slab structure.

  • -
  • height_tags (list) – The tags determined by the find_surface_atoms_by_height algo.

  • -
-
-
Returns:
-

tags – A list of 0s and 1s whose indices align with the atoms in -slab_atoms. 0s indicate a bulk atom and 1 indicates a surface atom.

-
-
Return type:
-

list

-
-
-
- -
-
-data.oc.core.slab.calculate_center_of_mass(struct)#
-

Calculates the center of mass of the slab.

-
- -
-
-data.oc.core.slab.calculate_coordination_of_bulk_atoms(bulk_atoms)#
-

Finds all unique atoms in a bulk structure and then determines their -coordination number. Then parses these coordination numbers into a -dictionary whose keys are the elements of the atoms and whose values are -their possible coordination numbers. -For example: bulk_cns = {‘Pt’: {3., 12.}, ‘Pd’: {12.}}

-
-
Parameters:
-

bulk_atoms (ase.Atoms) – The bulk structure.

-
-
Returns:
-

bulk_cn_dict – A dictionary whose keys are the elements of the atoms and whose values -are their possible coordination numbers.

-
-
Return type:
-

dict

-
-
-
- -
-
-data.oc.core.slab.compute_slabs(bulk_atoms: ase.Atoms = None, max_miller: int = 2, specific_millers: list = None)#
-

Enumerates all the symmetrically distinct slabs of a bulk structure. -It will not enumerate slabs with Miller indices above the -max_miller argument. Note that we also look at the bottoms of slabs -if they are distinct from the top. If they are distinct, we flip the -surface so the bottom is pointing upwards.

-
-
Parameters:
-
    -
  • bulk_atoms (ase.Atoms) – The bulk structure.

  • -
  • max_miller (int) – The maximum Miller index of the slabs to enumerate. Increasing this -argument will increase the number of slabs, and the slabs will generally -become larger.

  • -
  • specific_millers (list) – A list of Miller indices that you want to enumerate. If this argument -is not None, then the max_miller argument is ignored.

  • -
-
-
Returns:
-

all_slabs_info – A list of 5-tuples containing pymatgen structure objects for enumerated -slabs, the Miller indices, floats for the shifts, booleans for top, and -the oriented bulk structure.

-
-
Return type:
-

list

-
-
-
- -
-
-data.oc.core.slab.flip_struct(struct: pymatgen.core.structure.Structure)#
-

Flips an atoms object upside down. Normally used to flip slabs.

-
-
Parameters:
-

struct (Structure) – pymatgen structure object of the surface you want to flip

-
-
Returns:
-

flipped_struct – pymatgen structure object of the flipped surface.

-
-
Return type:
-

Structure

-
-
-
- -
-
-data.oc.core.slab.is_structure_invertible(struct: pymatgen.core.structure.Structure)#
-

This function figures out whether or not an Structure -object has symmetricity. In this function, the affine matrix is a rotation -matrix that is multiplied with the XYZ positions of the crystal. If the z,z -component of that is negative, it means symmetry operation exist, it could -be a mirror operation, or one that involves multiple rotations/etc. -Regardless, it means that the top becomes the bottom and vice-versa, and the -structure is the symmetric. i.e. structure_XYZ = structure_XYZ*M.

-

In short: If this function returns False, then the input structure can -be flipped in the z-direction to create a new structure.

-
-
Parameters:
-

struct (Structure) – pymatgen structure object of the slab.

-
-
Returns:
-

    -
  • A boolean indicating whether or not your ase.Atoms object is

  • -
  • symmetric in z-direction (i.e. symmetric with respect to x-y plane).

  • -
-

-
-
-
- -
-
-data.oc.core.slab.standardize_bulk(atoms: ase.Atoms)#
-

There are many ways to define a bulk unit cell. If you change the unit -cell itself but also change the locations of the atoms within the unit -cell, you can effectively get the same bulk structure. To address this, -there is a standardization method used to reduce the degrees of freedom -such that each unit cell only has one “true” configuration. This -function will align a unit cell you give it to fit within this -standardization.

-
-
Parameters:
-

atoms (ase.Atoms) – ase.Atoms object of the bulk you want to standardize.

-
-
Returns:
-

standardized_struct – pymatgen structure object of the standardized bulk.

-
-
Return type:
-

Structure

-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/databases/update/index.html b/autoapi/data/oc/databases/update/index.html deleted file mode 100644 index 4d19a364c..000000000 --- a/autoapi/data/oc/databases/update/index.html +++ /dev/null @@ -1,757 +0,0 @@ - - - - - - - - - - - data.oc.databases.update — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

data.oc.databases.update

- -
- -
-
- - - - -
- -
-

data.oc.databases.update#

-

Script for updating ase pkl and db files from v3.19 to v3.21. -Run it with ase v3.19.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - -

pbc_patch(self)

set_pbc_patch(self, pbc)

update_pkls()

update_dbs()

-
-
-data.oc.databases.update.pbc_patch(self)#
-
- -
-
-data.oc.databases.update.set_pbc_patch(self, pbc)#
-
- -
-
-data.oc.databases.update.update_pkls()#
-
- -
-
-data.oc.databases.update.update_dbs()#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/experimental/merge_traj/index.html b/autoapi/data/oc/experimental/merge_traj/index.html deleted file mode 100644 index 38658e5b0..000000000 --- a/autoapi/data/oc/experimental/merge_traj/index.html +++ /dev/null @@ -1,739 +0,0 @@ - - - - - - - - - - - data.oc.experimental.merge_traj — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

data.oc.experimental.merge_traj

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

data.oc.experimental.merge_traj#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

extract_file(zipname, file_to_unzip, extract_to)

main()

Given a directory containing adsorbate subdirectories, loops through all

-
-
-data.oc.experimental.merge_traj.extract_file(zipname, file_to_unzip, extract_to)#
-
- -
-
-data.oc.experimental.merge_traj.main()#
-

Given a directory containing adsorbate subdirectories, loops through all -runs and merges intermediate checkpoints into a single, full trajectory.

-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/experimental/utils/index.html b/autoapi/data/oc/experimental/utils/index.html deleted file mode 100644 index e53dfb4d3..000000000 --- a/autoapi/data/oc/experimental/utils/index.html +++ /dev/null @@ -1,764 +0,0 @@ - - - - - - - - - - - data.oc.experimental.utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

data.oc.experimental.utils

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

data.oc.experimental.utils#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - -

v0_check(full_traj, initial)

Checks whether the initial structure as gathered from the POSCAR input file

restart_bug_check(full_traj)

Observed that some of the trajectories had a strange identically cyclical

plot_traj(traj, fname)

Plots the energy profile of a given trajectory

-
-
-data.oc.experimental.utils.v0_check(full_traj, initial)#
-

Checks whether the initial structure as gathered from the POSCAR input file -is in agreement with the initial image of the full trajectory. If not, the -trajectory comes fro the V0 dataset which failed to save intermediate -checkpoints.

-

Args -full_traj (list of Atoms objects): Calculated full trajectory. -initial (Atoms object): Starting image provided by POSCAR..

-
- -
-
-data.oc.experimental.utils.restart_bug_check(full_traj)#
-

Observed that some of the trajectories had a strange identically cyclical -behavior - suggesting that a checkpoint was restarted from an earlier -checkpoint rather than the latest. Checks whether the trajectory provided -falls within that bug.

-

Args -full_traj (list of Atoms objects): Calculated full trajectory.

-
- -
-
-data.oc.experimental.utils.plot_traj(traj, fname)#
-

Plots the energy profile of a given trajectory

-

Args -traj (list of Atoms objects): Full trajectory to be plotted -fname (str): Filename to be used as title and save figure as.

-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/index.html b/autoapi/data/oc/index.html deleted file mode 100644 index e8328c9f1..000000000 --- a/autoapi/data/oc/index.html +++ /dev/null @@ -1,732 +0,0 @@ - - - - - - - - - - - data.oc — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

data.oc

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

data.oc#

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/scripts/precompute_sample_structures/index.html b/autoapi/data/oc/scripts/precompute_sample_structures/index.html deleted file mode 100644 index 221e0bd2c..000000000 --- a/autoapi/data/oc/scripts/precompute_sample_structures/index.html +++ /dev/null @@ -1,881 +0,0 @@ - - - - - - - - - - - data.oc.scripts.precompute_sample_structures — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.scripts.precompute_sample_structures#

-

This submodule contains the scripts that the we used to sample the adsorption -structures.

-

Note that some of these scripts were taken from -[GASpy](ulissigroup/GASpy) with permission of author.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - -

enumerate_surfaces_for_saving(bulk_atoms[, max_miller])

Enumerate all the symmetrically distinct surfaces of a bulk structure. It

standardize_bulk(atoms)

There are many ways to define a bulk unit cell. If you change the unit cell

is_structure_invertible(structure)

This function figures out whether or not an pymatgen.Structure object has

flip_struct(struct)

Flips an atoms object upside down. Normally used to flip surfaces.

precompute_enumerate_surface(bulk_database, ...)

-
-
-

Attributes#

- - - - - - - - - - - - -

__authors__

__email__

s

-
-
-data.oc.scripts.precompute_sample_structures.__authors__ = ['Kevin Tran', 'Aini Palizhati', 'Siddharth Goyal', 'Zachary Ulissi']#
-
- -
-
-data.oc.scripts.precompute_sample_structures.__email__ = ['ktran@andrew.cmu.edu']#
-
- -
-
-data.oc.scripts.precompute_sample_structures.enumerate_surfaces_for_saving(bulk_atoms, max_miller=MAX_MILLER)#
-

Enumerate all the symmetrically distinct surfaces of a bulk structure. It -will not enumerate surfaces with Miller indices above the max_miller -argument. Note that we also look at the bottoms of surfaces if they are -distinct from the top. If they are distinct, we flip the surface so the bottom -is pointing upwards.

-
-
Parameters:
-
    -
  • enumerate (bulk_atoms ase.Atoms object of the bulk you want to) – surfaces from.

  • -
  • surfaces (max_miller An integer indicating the maximum Miller index of the) – you are willing to enumerate. Increasing this argument will -increase the number of surfaces, but the surfaces will -generally become larger.

  • -
-
-
Returns:
-

-
pymatgen.Structure

objects for surfaces we have enumerated, the Miller -indices, floats for the shifts, and Booleans for “top”.

-
-
-

-
-
Return type:
-

all_slabs_info A list of 4-tuples containing

-
-
-
- -
-
-data.oc.scripts.precompute_sample_structures.standardize_bulk(atoms)#
-

There are many ways to define a bulk unit cell. If you change the unit cell -itself but also change the locations of the atoms within the unit cell, you -can get effectively the same bulk structure. To address this, there is a -standardization method used to reduce the degrees of freedom such that each -unit cell only has one “true” configuration. This function will align a -unit cell you give it to fit within this standardization.

-
-
Arg:

atoms ase.Atoms object of the bulk you want to standardize

-
-
-
-
Returns:
-

standardized_struct pymatgen.Structure of the standardized bulk

-
-
-
- -
-
-data.oc.scripts.precompute_sample_structures.is_structure_invertible(structure)#
-

This function figures out whether or not an pymatgen.Structure object has -symmetricity. In this function, the affine matrix is a rotation matrix that -is multiplied with the XYZ positions of the crystal. If the z,z component -of that is negative, it means symmetry operation exist, it could be a -mirror operation, or one that involves multiple rotations/etc. Regardless, -it means that the top becomes the bottom and vice-versa, and the structure -is the symmetric. i.e. structure_XYZ = structure_XYZ*M.

-

In short: If this function returns False, then the input structure can -be flipped in the z-direction to create a new structure.

-
-
Arg:

structure A pymatgen.Structure object.

-
-
Returns

A boolean indicating whether or not your ase.Atoms object is -symmetric in z-direction (i.e. symmetric with respect to x-y plane).

-
-
-
- -
-
-data.oc.scripts.precompute_sample_structures.flip_struct(struct)#
-

Flips an atoms object upside down. Normally used to flip surfaces.

-
-
Arg:

atoms pymatgen.Structure object

-
-
-
-
Returns:
-

-
flipped_struct The same ase.Atoms object that was fed as an

argument, but flipped upside down.

-
-
-

-
-
-
- -
-
-data.oc.scripts.precompute_sample_structures.precompute_enumerate_surface(bulk_database, bulk_index, opfile)#
-
- -
-
-data.oc.scripts.precompute_sample_structures.s#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/structure_generator/index.html b/autoapi/data/oc/structure_generator/index.html deleted file mode 100644 index 2944dcd5b..000000000 --- a/autoapi/data/oc/structure_generator/index.html +++ /dev/null @@ -1,859 +0,0 @@ - - - - - - - - - - - data.oc.structure_generator — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.structure_generator#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

StructureGenerator

A class that creates adsorbate/bulk/slab objects given specified indices,

-
-
-

Functions#

- - - - - - - - - - - - - - - -

write_surface(args, slab, bulk_index, surface_index)

Writes vasp inputs and metadata for a specified slab

parse_args()

precompute_slabs(bulk_ind)

run_placements(inputs)

-
-
-

Attributes#

- - - - - - -

args

-
-
-class data.oc.structure_generator.StructureGenerator(args, bulk_index, surface_index, adsorbate_index)#
-

A class that creates adsorbate/bulk/slab objects given specified indices, -and writes vasp input files and metadata for multiple placements of the adsorbate -on the slab. You can choose random, heuristic, or both types of placements.

-

The output directory structure will have the following nested structure, -where “files” represents the vasp input files and the metadata.pkl:

-
-
-
outputdir/
-
bulk0/
-
surface0/

surface/files -ads0/

-
-

heur0/files -heur1/files -rand0/files -…

-
-
-
ads1/

-
-
-
-
surface1/

-
-
-
-
bulk1/

-
-
-
-
-
-

Precomputed surfaces will be calculated and saved out if they don’t -already exist in the provided directory.

-
-
Parameters:
-
    -
  • args (argparse.Namespace) – Contains all command line args

  • -
  • bulk_index (int) – Index of the bulk within the bulk db

  • -
  • surface_index (int) – Index of the surface in the list of all possible surfaces

  • -
  • adsorbate_index (int) – Index of the adsorbate within the adsorbate db

  • -
-
-
-
-
-run()#
-

Create adsorbate/bulk/surface objects, generate adslab placements, -and write to files.

-
- -
-
-_write_adslabs(adslab_obj, mode_str)#
-

Write one set of adslabs (called separately for random and heurstic placements)

-
- -
- -
-
-data.oc.structure_generator.write_surface(args, slab, bulk_index, surface_index)#
-

Writes vasp inputs and metadata for a specified slab

-
- -
-
-data.oc.structure_generator.parse_args()#
-
- -
-
-data.oc.structure_generator.precompute_slabs(bulk_ind)#
-
- -
-
-data.oc.structure_generator.run_placements(inputs)#
-
- -
-
-data.oc.structure_generator.args#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/tests/old_tests/check_energy_and_forces/index.html b/autoapi/data/oc/tests/old_tests/check_energy_and_forces/index.html deleted file mode 100644 index 044ed7c76..000000000 --- a/autoapi/data/oc/tests/old_tests/check_energy_and_forces/index.html +++ /dev/null @@ -1,815 +0,0 @@ - - - - - - - - - - - data.oc.tests.old_tests.check_energy_and_forces — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.tests.old_tests.check_energy_and_forces#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - -

check_relaxed_forces(sid, path, thres)

Check all forces in the final frame of adslab is less than a threshold.

check_adsorption_energy(sid, path, ref_energy, ...)

check_DFT_energy(sid, path[, e_tol])

Given a relaxation trajectory, check to see if 1. final energy is less than the initial

check_positions_across_frames_are_different(sid, path)

Given a relaxation trajectory, make sure positions for two consecutive

read_pkl(fname)

run_checks(args)

create_parser()

-
-
-

Attributes#

- - - - - - -

parser

-
-
-data.oc.tests.old_tests.check_energy_and_forces.check_relaxed_forces(sid, path, thres)#
-

Check all forces in the final frame of adslab is less than a threshold.

-
- -
-
-data.oc.tests.old_tests.check_energy_and_forces.check_adsorption_energy(sid, path, ref_energy, adsorption_energy)#
-
- -
-
-data.oc.tests.old_tests.check_energy_and_forces.check_DFT_energy(sid, path, e_tol=0.05)#
-

Given a relaxation trajectory, check to see if 1. final energy is less than the initial -energy, raise error if not. 2) If the energy decreases throuhghout a trajectory (small spikes are okay). -And 3) if 2 fails, check if it’s just a matter of tolerance being too strict by -considering only the first quarter of the trajectory and sampling every 10th frame -to check for _almost_ monotonic decrease in energies. -If any frame(i+1) energy is higher than frame(i) energy, flag it and plot the trajectory.

-
- -
-
-data.oc.tests.old_tests.check_energy_and_forces.check_positions_across_frames_are_different(sid, path)#
-

Given a relaxation trajectory, make sure positions for two consecutive -frames are not identical.

-
- -
-
-data.oc.tests.old_tests.check_energy_and_forces.read_pkl(fname)#
-
- -
-
-data.oc.tests.old_tests.check_energy_and_forces.run_checks(args)#
-
- -
-
-data.oc.tests.old_tests.check_energy_and_forces.create_parser()#
-
- -
-
-data.oc.tests.old_tests.check_energy_and_forces.parser#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/tests/old_tests/check_inputs/index.html b/autoapi/data/oc/tests/old_tests/check_inputs/index.html deleted file mode 100644 index 6e79a80cc..000000000 --- a/autoapi/data/oc/tests/old_tests/check_inputs/index.html +++ /dev/null @@ -1,843 +0,0 @@ - - - - - - - - - - - data.oc.tests.old_tests.check_inputs — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

data.oc.tests.old_tests.check_inputs

- -
- -
-
- - - - -
- -
-

data.oc.tests.old_tests.check_inputs#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - -

obtain_metadata(input_dir, split)

Get the metadata provided input directory and split of data.

create_df(metadata_lst[, df_name])

Create a df from metadata to used check_dataset.py file

adslabs_are_unique(df[, unique_by])

Test if there are duplicate adslabs given a df. If the input is another

check_commonelems(df, split1, split2[, check])

Given a df containing all the metadata of the calculations, check to see if there are

is_adsorbate_placed_correct(adslab_input, atoms_tag)

Make sure all adsorbate atoms are connected after placement.

_get_connectivity(atoms)

Generate the connectivity of an atoms obj.

-
-
-data.oc.tests.old_tests.check_inputs.obtain_metadata(input_dir, split)#
-

Get the metadata provided input directory and split of data. -:param input_dir: -:type input_dir: str -:param split: ‘val_ood_cat/ads/both’, and ‘test_ood_cat/ads/both’. -:type split: str

-
-
Returns:
-

-
metadata (tuple) adslab properties.

Ex: (‘mp-126’, (1,1,1), 0.025, True, ‘*OH’, (0,0,0), ‘val_ood_ads’)

-
-
-

-
-
-
- -
-
-data.oc.tests.old_tests.check_inputs.create_df(metadata_lst, df_name=None)#
-

Create a df from metadata to used check_dataset.py file -:param metadata_lst A list of adslab properties in tuple form: contain (mpid, miller index, shift, top, adsorbate smile string,

-
-

adsorption cartesion coordinates tuple, and which split the data belongs to). -Ex: (‘mp-126’, (1,1,1), 0.025, True, ‘*OH’, (0,0,0), ‘val_ood_ads’)

-
-
-
Parameters:
-

should (each tuple) – contain (mpid, miller index, shift, top, adsorbate smile string, -adsorption cartesion coordinates tuple, and which split the data belongs to). -Ex: (‘mp-126’, (1,1,1), 0.025, True, ‘*OH’, (0,0,0), ‘val_ood_ads’)

-
-
Returns:
-

df A pandas DataFrame

-
-
-
- -
-
-data.oc.tests.old_tests.check_inputs.adslabs_are_unique(df, unique_by=['mpid', 'miller', 'shift', 'top', 'adsorbate', 'adsorption_site'])#
-

Test if there are duplicate adslabs given a df. If the input is another -format, convert it to df first. -:param df A pd.DataFrame containing metadata of the adslabs being checked.: -:param unique_by df column names that are used to detect duplicates. The default: list is the fingerprints represent a unique adslab.

-
- -
-
-data.oc.tests.old_tests.check_inputs.check_commonelems(df, split1, split2, check='adsorbate')#
-

Given a df containing all the metadata of the calculations, check to see if there are -any bulk or adsorbate duplicates between train and val/test_ood. The dataframe should -have a “split_tag” column indicate which split (i.e. train, val_ood_ads, etc) a data belongs to. -:param df A pd.DataFrame containing metadata of the adslabs being checked.: -:param split1: ‘val_ood_cat/ads/both’, or ‘test_ood_cat/ads/both’. -:param split2 two of the splits from ‘train’: ‘val_ood_cat/ads/both’, or ‘test_ood_cat/ads/both’. -:param ‘val_id’: ‘val_ood_cat/ads/both’, or ‘test_ood_cat/ads/both’. -:param ‘test_id’: ‘val_ood_cat/ads/both’, or ‘test_ood_cat/ads/both’. -:param : ‘val_ood_cat/ads/both’, or ‘test_ood_cat/ads/both’.

-
- -
-
-data.oc.tests.old_tests.check_inputs.is_adsorbate_placed_correct(adslab_input, atoms_tag)#
-

Make sure all adsorbate atoms are connected after placement. -False means there is at least one isolated adsorbate atom. -It should be used after input generation but before DFT to avoid -unneccessarily computations. -:param adslab_input ase.Atoms of the structure in its initial state: -:param atoms_tag: -:type atoms_tag: list

-
-
Returns:
-

-
boolean If there is any stand alone adsorbate atoms after placement,

return False.

-
-
-

-
-
-
- -
-
-data.oc.tests.old_tests.check_inputs._get_connectivity(atoms)#
-

Generate the connectivity of an atoms obj. -:param atoms An ase.Atoms object:

-
-
Returns:
-

matrix The connectivity matrix of the atoms object.

-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.html b/autoapi/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.html deleted file mode 100644 index 064d9c61f..000000000 --- a/autoapi/data/oc/tests/old_tests/compare_inputs_and_trajectory/index.html +++ /dev/null @@ -1,788 +0,0 @@ - - - - - - - - - - - data.oc.tests.old_tests.compare_inputs_and_trajectory — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

data.oc.tests.old_tests.compare_inputs_and_trajectory

- -
- -
-
- - - - -
- -
-

data.oc.tests.old_tests.compare_inputs_and_trajectory#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - -

get_starting_structure_from_input_dir(input_dir)

min_diff(atoms_init, atoms_final)

Calculate atom wise distances of two atoms object,

compare(args)

read_pkl(fname)

create_parser()

-
-
-

Attributes#

- - - - - - -

parser

-
-
-data.oc.tests.old_tests.compare_inputs_and_trajectory.get_starting_structure_from_input_dir(input_dir)#
-
- -
-
-data.oc.tests.old_tests.compare_inputs_and_trajectory.min_diff(atoms_init, atoms_final)#
-

Calculate atom wise distances of two atoms object, -taking into account periodic boundary conditions.

-
- -
-
-data.oc.tests.old_tests.compare_inputs_and_trajectory.compare(args)#
-
- -
-
-data.oc.tests.old_tests.compare_inputs_and_trajectory.read_pkl(fname)#
-
- -
-
-data.oc.tests.old_tests.compare_inputs_and_trajectory.create_parser()#
-
- -
-
-data.oc.tests.old_tests.compare_inputs_and_trajectory.parser#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/tests/test_adsorbate/index.html b/autoapi/data/oc/tests/test_adsorbate/index.html deleted file mode 100644 index 16a8c3a8d..000000000 --- a/autoapi/data/oc/tests/test_adsorbate/index.html +++ /dev/null @@ -1,816 +0,0 @@ - - - - - - - - - - - data.oc.tests.test_adsorbate — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.tests.test_adsorbate#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestAdsorbate

-
-
-

Attributes#

- - - - - - - - - -

_test_db

_test_db_old

-
-
-data.oc.tests.test_adsorbate._test_db#
-
- -
-
-data.oc.tests.test_adsorbate._test_db_old#
-
- -
-
-class data.oc.tests.test_adsorbate.TestAdsorbate#
-
-
-test_adsorbate_init_from_id()#
-
- -
-
-test_adsorbate_init_from_smiles()#
-
- -
-
-test_adsorbate_init_random()#
-
- -
-
-test_adsorbate_init_from_id_with_db()#
-
- -
-
-test_adsorbate_init_from_smiles_with_db()#
-
- -
-
-test_adsorbate_init_random_with_db()#
-
- -
-
-test_adsorbate_init_reaction_string()#
-
- -
-
-test_adsorbate_init_reaction_string_with_old_db()#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/tests/test_adsorbate_slab_config/index.html b/autoapi/data/oc/tests/test_adsorbate_slab_config/index.html deleted file mode 100644 index 95151b7ba..000000000 --- a/autoapi/data/oc/tests/test_adsorbate_slab_config/index.html +++ /dev/null @@ -1,786 +0,0 @@ - - - - - - - - - - - data.oc.tests.test_adsorbate_slab_config — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.tests.test_adsorbate_slab_config#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestAdslab

-
-
-

Functions#

- - - - - - -

load_data(request)

-
-
-data.oc.tests.test_adsorbate_slab_config.load_data(request)#
-
- -
-
-class data.oc.tests.test_adsorbate_slab_config.TestAdslab#
-
-
-test_adslab_init()#
-
- -
-
-test_num_augmentations_per_site()#
-
- -
-
-test_placement_overlap()#
-

Test that the adsorbate does not overlap with the slab.

-
- -
-
-test_is_adsorbate_com_on_normal()#
-
- -
-
-test_is_adsorbate_binding_atom_on_normal()#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/tests/test_bulk/index.html b/autoapi/data/oc/tests/test_bulk/index.html deleted file mode 100644 index d636b93a4..000000000 --- a/autoapi/data/oc/tests/test_bulk/index.html +++ /dev/null @@ -1,839 +0,0 @@ - - - - - - - - - - - data.oc.tests.test_bulk — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.tests.test_bulk#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestBulk

-
-
-

Functions#

- - - - - - -

load_bulk(request)

-
-
-

Attributes#

- - - - - - -

_test_db

-
-
-data.oc.tests.test_bulk.load_bulk(request)#
-
- -
-
-data.oc.tests.test_bulk._test_db#
-
- -
-
-class data.oc.tests.test_bulk.TestBulk#
-
-
-test_bulk_init_from_id()#
-
- -
-
-test_bulk_init_from_src_id()#
-
- -
-
-test_bulk_init_random()#
-
- -
-
-test_bulk_init_from_id_with_db()#
-
- -
-
-test_bulk_init_from_src_id_with_db()#
-
- -
-
-test_bulk_init_random_with_db()#
-
- -
-
-test_unique_slab_enumeration()#
-
- -
-
-test_precomputed_slab()#
-
- -
-
-test_slab_miller_enumeration()#
-
- -
-
-get_max_miller(slabs)#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/tests/test_inputs/index.html b/autoapi/data/oc/tests/test_inputs/index.html deleted file mode 100644 index f26f85fd8..000000000 --- a/autoapi/data/oc/tests/test_inputs/index.html +++ /dev/null @@ -1,764 +0,0 @@ - - - - - - - - - - - data.oc.tests.test_inputs — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

data.oc.tests.test_inputs

- -
- -
-
- - - - -
- -
-

data.oc.tests.test_inputs#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestVasp

-
-
-

Functions#

- - - - - - -

load_data(request)

-
-
-data.oc.tests.test_inputs.load_data(request)#
-
- -
-
-class data.oc.tests.test_inputs.TestVasp#
-
-
-test_cleanup()#
-
- -
-
-test_unique_kpts()#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/tests/test_multi_adsorbate_slab_config/index.html b/autoapi/data/oc/tests/test_multi_adsorbate_slab_config/index.html deleted file mode 100644 index 1278a0b6b..000000000 --- a/autoapi/data/oc/tests/test_multi_adsorbate_slab_config/index.html +++ /dev/null @@ -1,773 +0,0 @@ - - - - - - - - - - - data.oc.tests.test_multi_adsorbate_slab_config — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.tests.test_multi_adsorbate_slab_config#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestMultiAdslab

-
-
-

Functions#

- - - - - - -

load_data(request)

-
-
-data.oc.tests.test_multi_adsorbate_slab_config.load_data(request)#
-
- -
-
-class data.oc.tests.test_multi_adsorbate_slab_config.TestMultiAdslab#
-
-
-test_num_configurations()#
-
- -
-
-test_adsorbate_indices()#
-

Test that the adsorbate indices correspond to the unique adsorbates.

-
- -
-
-test_placement_overlap()#
-

Test that the adsorbate sites do not overlap with each other.

-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/utils/flag_anomaly/index.html b/autoapi/data/oc/utils/flag_anomaly/index.html deleted file mode 100644 index 3e012dd08..000000000 --- a/autoapi/data/oc/utils/flag_anomaly/index.html +++ /dev/null @@ -1,819 +0,0 @@ - - - - - - - - - - - data.oc.utils.flag_anomaly — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.utils.flag_anomaly#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

DetectTrajAnomaly

-
-
-class data.oc.utils.flag_anomaly.DetectTrajAnomaly(init_atoms, final_atoms, atoms_tag, final_slab_atoms=None, surface_change_cutoff_multiplier=1.5, desorption_cutoff_multiplier=1.5)#
-
-
-is_adsorbate_dissociated()#
-

Tests if the initial adsorbate connectivity is maintained.

-
-
Returns:
-

True if the connectivity was not maintained, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
-
-has_surface_changed()#
-

Tests bond breaking / forming events within a tolerance on the surface so -that systems with significant adsorbate induces surface changes may be discarded -since the reference to the relaxed slab may no longer be valid.

-
-
Returns:
-

True if the surface is reconstructed, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
-
-is_adsorbate_desorbed()#
-

If the adsorbate binding atoms have no connection with slab atoms, -consider it desorbed.

-
-
Returns:
-

True if there is desorption, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
-
-_get_connectivity(atoms, cutoff_multiplier=1.0)#
-

Generate the connectivity of an atoms obj.

-
-
Parameters:
-
    -
  • atoms (ase.Atoms) – object which will have its connectivity considered

  • -
  • cutoff_multiplier (float, optional) – cushion for small atom movements when assessing -atom connectivity

  • -
-
-
Returns:
-

The connectivity matrix of the atoms object.

-
-
Return type:
-

(np.ndarray)

-
-
-
- -
-
-is_adsorbate_intercalated()#
-

Ensure the adsorbate isn’t interacting with an atom that is not allowed to relax.

-
-
Returns:
-

True if any adsorbate atom neighbors a frozen atom, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/utils/index.html b/autoapi/data/oc/utils/index.html deleted file mode 100644 index d6ba9664b..000000000 --- a/autoapi/data/oc/utils/index.html +++ /dev/null @@ -1,830 +0,0 @@ - - - - - - - - - - - data.oc.utils — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.utils#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - -

DetectTrajAnomaly

-
-
-class data.oc.utils.DetectTrajAnomaly(init_atoms, final_atoms, atoms_tag, final_slab_atoms=None, surface_change_cutoff_multiplier=1.5, desorption_cutoff_multiplier=1.5)#
-
-
-is_adsorbate_dissociated()#
-

Tests if the initial adsorbate connectivity is maintained.

-
-
Returns:
-

True if the connectivity was not maintained, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
-
-has_surface_changed()#
-

Tests bond breaking / forming events within a tolerance on the surface so -that systems with significant adsorbate induces surface changes may be discarded -since the reference to the relaxed slab may no longer be valid.

-
-
Returns:
-

True if the surface is reconstructed, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
-
-is_adsorbate_desorbed()#
-

If the adsorbate binding atoms have no connection with slab atoms, -consider it desorbed.

-
-
Returns:
-

True if there is desorption, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
-
-_get_connectivity(atoms, cutoff_multiplier=1.0)#
-

Generate the connectivity of an atoms obj.

-
-
Parameters:
-
    -
  • atoms (ase.Atoms) – object which will have its connectivity considered

  • -
  • cutoff_multiplier (float, optional) – cushion for small atom movements when assessing -atom connectivity

  • -
-
-
Returns:
-

The connectivity matrix of the atoms object.

-
-
Return type:
-

(np.ndarray)

-
-
-
- -
-
-is_adsorbate_intercalated()#
-

Ensure the adsorbate isn’t interacting with an atom that is not allowed to relax.

-
-
Returns:
-

True if any adsorbate atom neighbors a frozen atom, otherwise False

-
-
Return type:
-

(bool)

-
-
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/oc/utils/vasp/index.html b/autoapi/data/oc/utils/vasp/index.html deleted file mode 100644 index 4d3b886e9..000000000 --- a/autoapi/data/oc/utils/vasp/index.html +++ /dev/null @@ -1,838 +0,0 @@ - - - - - - - - - - - data.oc.utils.vasp — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.oc.utils.vasp#

-

This submodule contains the scripts that the we used to run VASP.

-

Note that some of these scripts were taken and modified from -[GASpy](ulissigroup/GASpy) with permission of authors.

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - -

_clean_up_inputs(atoms, vasp_flags)

Parses the inputs and makes sure some things are straightened out.

calculate_surface_k_points(atoms)

For surface calculations, it's a good practice to calculate the k-point

write_vasp_input_files(atoms[, outdir, vasp_flags])

Effectively goes through the same motions as the run_vasp function,

-
-
-

Attributes#

- - - - - - - - - - - - - - - -

__author__

__email__

VASP_FLAGS

BULK_VASP_FLAGS

-
-
-data.oc.utils.vasp.__author__ = 'Kevin Tran'#
-
- -
-
-data.oc.utils.vasp.__email__ = 'ktran@andrew.cmu.edu'#
-
- -
-
-data.oc.utils.vasp.VASP_FLAGS#
-
- -
-
-data.oc.utils.vasp.BULK_VASP_FLAGS#
-
- -
-
-data.oc.utils.vasp._clean_up_inputs(atoms, vasp_flags)#
-

Parses the inputs and makes sure some things are straightened out.

-
-
Arg:

atoms ase.Atoms object of the structure we want to relax -vasp_flags A dictionary of settings we want to pass to the Vasp

-
-

calculator

-
-
-
-
-
Returns:
-

-
atoms ase.Atoms object of the structure we want to relax, but

with the unit vectors fixed (if needed)

-
-
-

vasp_flags A modified version of the ‘vasp_flags’ argument

-

-
-
-
- -
-
-data.oc.utils.vasp.calculate_surface_k_points(atoms)#
-

For surface calculations, it’s a good practice to calculate the k-point -mesh given the unit cell size. We do that on-the-spot here.

-
-
Arg:

atoms ase.Atoms object of the structure we want to relax

-
-
-
-
Returns:
-

k_pts A 3-tuple of integers indicating the k-point mesh to use

-
-
-
- -
-
-data.oc.utils.vasp.write_vasp_input_files(atoms, outdir='.', vasp_flags=None)#
-

Effectively goes through the same motions as the run_vasp function, -except it only writes the input files instead of running.

-
-
Parameters:
-
    -
  • relax. (atoms ase.Atoms object that we want to)

  • -
  • files. (outdir A string indicating where you want to save the input) – Defaults to ‘.’

  • -
  • Vasp (vasp_flags A dictionary of settings we want to pass to the) – calculator. Defaults to a standerd set of values if None

  • -
-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/odac/force_field/FF_analysis/index.html b/autoapi/data/odac/force_field/FF_analysis/index.html deleted file mode 100644 index c8f65344c..000000000 --- a/autoapi/data/odac/force_field/FF_analysis/index.html +++ /dev/null @@ -1,826 +0,0 @@ - - - - - - - - - - - data.odac.force_field.FF_analysis — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

data.odac.force_field.FF_analysis

- -
- -
-
- - - - -
- -
-

data.odac.force_field.FF_analysis#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

get_data(infile[, limit])

binned_average(DFT_ads, pred_err, bins)

bin_plot(ax, bins, heights, **kwargs)

get_Fig4a(raw_error_CO2, raw_error_H2O[, b, outfile])

get_Fig4b(int_DFT_CO2, err_CO2, int_DFT_H2O, err_H2O)

get_Fig4c(DFT_CO2, err_CO2[, outfile])

get_Fig4d(DFT_H2O, err_H2O[, outfile])

phys_err(DFT, FF)

chem_err(DFT, FF)

-
-
-

Attributes#

- - - - - - -

infile

-
-
-data.odac.force_field.FF_analysis.get_data(infile, limit=2)#
-
- -
-
-data.odac.force_field.FF_analysis.binned_average(DFT_ads, pred_err, bins)#
-
- -
-
-data.odac.force_field.FF_analysis.bin_plot(ax, bins, heights, **kwargs)#
-
- -
-
-data.odac.force_field.FF_analysis.get_Fig4a(raw_error_CO2, raw_error_H2O, b=20, outfile='Fig5a.png')#
-
- -
-
-data.odac.force_field.FF_analysis.get_Fig4b(int_DFT_CO2, err_CO2, int_DFT_H2O, err_H2O, outfile='Fig5b.png')#
-
- -
-
-data.odac.force_field.FF_analysis.get_Fig4c(DFT_CO2, err_CO2, outfile='Fig5c.png')#
-
- -
-
-data.odac.force_field.FF_analysis.get_Fig4d(DFT_H2O, err_H2O, outfile='Fig5d.png')#
-
- -
-
-data.odac.force_field.FF_analysis.phys_err(DFT, FF)#
-
- -
-
-data.odac.force_field.FF_analysis.chem_err(DFT, FF)#
-
- -
-
-data.odac.force_field.FF_analysis.infile = '/storage/home/hcoda1/8/lbrabson3/p-amedford6-0/s2ef/final/data_w_oms.json'#
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/odac/promising_mof/promising_mof_energies/energy/index.html b/autoapi/data/odac/promising_mof/promising_mof_energies/energy/index.html deleted file mode 100644 index c0335a990..000000000 --- a/autoapi/data/odac/promising_mof/promising_mof_energies/energy/index.html +++ /dev/null @@ -1,1047 +0,0 @@ - - - - - - - - - - - data.odac.promising_mof.promising_mof_energies.energy — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.odac.promising_mof.promising_mof_energies.energy#

-
-

Module Contents#

-
-
-data.odac.promising_mof.promising_mof_energies.energy.raw_ads_energy_data#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.temp_split_string#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_pristine#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_pristine#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_pristine_co2#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_pristine_h2o#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_pristine_co_ads#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_pristine_co_ads_2#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_defective_co2#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_defective_h2o#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_defective_co_ads#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.complete_data_merged_defective_co_ads_2#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.lowest_energy_data_co2#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.current_entry#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.lowest_energy_data_h2o#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.current_entry#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.lowest_energy_data_co_ads#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.current_entry#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.lowest_energy_data_co_ads_2#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.current_entry#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.adsorption_data#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.count = 0#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.lowest_energy_data_co2_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.current_entry#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.lowest_energy_data_h2o_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.current_entry#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.lowest_energy_data_co_ads_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.current_entry#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.lowest_energy_data_co_ads_2_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.current_entry#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.adsorption_data_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.unique_combinations_count#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.def_counts_df#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.mof_name#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.missing_DDEC#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.missing_DDEC_pristine#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.missing_DDEC_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.index_drop_ddec_pristine = []#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.adsorption_data#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.index_drop_ddec_defective = []#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.adsorption_data_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.adsorption_data#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.adsorption_data_defective#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.promising_pristine#
-
- -
-
-data.odac.promising_mof.promising_mof_energies.energy.promising_defective#
-
- -
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/om/omdata/orca/calc/index.html b/autoapi/data/om/omdata/orca/calc/index.html deleted file mode 100644 index fec38c9f3..000000000 --- a/autoapi/data/om/omdata/orca/calc/index.html +++ /dev/null @@ -1,796 +0,0 @@ - - - - - - - - - - - data.om.omdata.orca.calc — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

data.om.omdata.orca.calc#

-
-

Module Contents#

-
-

Functions#

- - - - - - -

write_orca_inputs(atoms, output_directory[, charge, ...])

One-off method to be used if you wanted to write inputs for an arbitrary

-
-
-

Attributes#

- - - - - - - - - - - - - - - - - - - - - -

ORCA_FUNCTIONAL

ORCA_BASIS

ORCA_SIMPLE_INPUT

ORCA_BLOCKS

ORCA_ASE_SIMPLE_INPUT

OPT_PARAMETERS

-
-
-data.om.omdata.orca.calc.ORCA_FUNCTIONAL = 'wB97M-V'#
-
- -
-
-data.om.omdata.orca.calc.ORCA_BASIS = 'def2-TZVPD'#
-
- -
-
-data.om.omdata.orca.calc.ORCA_SIMPLE_INPUT = ['EnGrad', 'RIJCOSX', 'def2/J', 'NoUseSym', 'DIIS', 'NOSOSCF', 'NormalConv', 'DEFGRID3', 'ALLPOP', 'NBO']#
-
- -
-
-data.om.omdata.orca.calc.ORCA_BLOCKS = ['%scf Convergence Tight maxiter 300 end', '%elprop Dipole true Quadrupole true end', '%nbo...#
-
- -
-
-data.om.omdata.orca.calc.ORCA_ASE_SIMPLE_INPUT#
-
- -
-
-data.om.omdata.orca.calc.OPT_PARAMETERS#
-
- -
-
-data.om.omdata.orca.calc.write_orca_inputs(atoms, output_directory, charge=0, mult=1, orcasimpleinput=ORCA_ASE_SIMPLE_INPUT, orcablocks=' '.join(ORCA_BLOCKS))#
-

One-off method to be used if you wanted to write inputs for an arbitrary -system. Primarily used for debugging.

-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/data/om/omdata/orca/recipes/index.html b/autoapi/data/om/omdata/orca/recipes/index.html deleted file mode 100644 index c654ea85c..000000000 --- a/autoapi/data/om/omdata/orca/recipes/index.html +++ /dev/null @@ -1,774 +0,0 @@ - - - - - - - - - - - data.om.omdata.orca.recipes — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

data.om.omdata.orca.recipes

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

data.om.omdata.orca.recipes#

-
-

Module Contents#

-
-

Functions#

- - - - - - - - - -

single_point_calculation(atoms, charge, spin_multiplicity)

Wrapper around QUACC's static job to standardize single-point calculations.

ase_relaxation(atoms, charge, spin_multiplicity[, xc, ...])

Wrapper around QUACC's ase_relax_job to standardize geometry optimizations.

-
-
-data.om.omdata.orca.recipes.single_point_calculation(atoms, charge, spin_multiplicity, xc=ORCA_FUNCTIONAL, basis=ORCA_BASIS, orcasimpleinput=None, orcablocks=None, nprocs=12, outputdir=os.getcwd(), **calc_kwargs)#
-

Wrapper around QUACC’s static job to standardize single-point calculations. -See github.com/Quantum-Accelerators/quacc/blob/main/src/quacc/recipes/orca/core.py#L22 -for more details.

-
-
Parameters:
-
    -
  • atoms (Atoms) – Atoms object

  • -
  • charge (int) – Charge of system

  • -
  • spin_multiplicity (int) – Multiplicity of the system

  • -
  • xc (str) – Exchange-correlaction functional

  • -
  • basis (str) – Basis set

  • -
  • orcasimpleinput (list) – List of orcasimpleinput settings for the calculator

  • -
  • orcablocks (list) – List of orcablocks swaps for the calculator

  • -
  • nprocs (int) – Number of processes to parallelize across

  • -
  • outputdir (str) – Directory to move results to upon completion

  • -
  • calc_kwargs – Additional kwargs for the custom Orca calculator

  • -
-
-
-
- -
-
-data.om.omdata.orca.recipes.ase_relaxation(atoms, charge, spin_multiplicity, xc=ORCA_FUNCTIONAL, basis=ORCA_BASIS, orcasimpleinput=None, orcablocks=None, nprocs=12, opt_params=None, outputdir=os.getcwd(), **calc_kwargs)#
-

Wrapper around QUACC’s ase_relax_job to standardize geometry optimizations. -See github.com/Quantum-Accelerators/quacc/blob/main/src/quacc/recipes/orca/core.py#L22 -for more details.

-
-
Parameters:
-
    -
  • atoms (Atoms) – Atoms object

  • -
  • charge (int) – Charge of system

  • -
  • spin_multiplicity (int) – Multiplicity of the system

  • -
  • xc (str) – Exchange-correlaction functional

  • -
  • basis (str) – Basis set

  • -
  • orcasimpleinput (list) – List of orcasimpleinput settings for the calculator

  • -
  • orcablocks (list) – List of orcablocks swaps for the calculator

  • -
  • nprocs (int) – Number of processes to parallelize across

  • -
  • opt_params (dict) – Dictionary of optimizer parameters

  • -
  • outputdir (str) – Directory to move results to upon completion

  • -
  • calc_kwargs – Additional kwargs for the custom Orca calculator

  • -
-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/client/client/index.html b/autoapi/demo/ocpapi/client/client/index.html deleted file mode 100644 index bc74dc0df..000000000 --- a/autoapi/demo/ocpapi/client/client/index.html +++ /dev/null @@ -1,1061 +0,0 @@ - - - - - - - - - - - demo.ocpapi.client.client — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.client.client#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

Client

Exposes each route in the OCP API as a method.

-
-
-exception demo.ocpapi.client.client.RequestException(method: str, url: str, cause: str)#
-

Bases: Exception

-

Exception raised any time there is an error while making an API call.

-
- -
-
-exception demo.ocpapi.client.client.NonRetryableRequestException(method: str, url: str, cause: str)#
-

Bases: RequestException

-

Exception raised when an API call is rejected for a reason that will -not succeed on retry. For example, this might include a malformed request -or action that is not allowed.

-
- -
-
-exception demo.ocpapi.client.client.RateLimitExceededException(method: str, url: str, retry_after: datetime.timedelta | None = None)#
-

Bases: RequestException

-

Exception raised when an API call is rejected because a rate limit has -been exceeded.

-
-
-retry_after#
-

If known, the time to wait before the next attempt to -call the API should be made.

-
- -
- -
-
-class demo.ocpapi.client.client.Client(host: str = 'open-catalyst-api.metademolab.com', scheme: str = 'https')#
-

Exposes each route in the OCP API as a method.

-
-
-property host: str#
-

The host being called by this client.

-
- -
-
-async get_models() demo.ocpapi.client.models.Models#
-

Fetch the list of models that are supported in the API.

-
-
Raises:
-
-
-
Returns:
-

The models that are supported in the API.

-
-
-
- -
-
-async get_bulks() demo.ocpapi.client.models.Bulks#
-

Fetch the list of bulk materials that are supported in the API.

-
-
Raises:
-
-
-
Returns:
-

The bulks that are supported throughout the API.

-
-
-
- -
-
-async get_adsorbates() demo.ocpapi.client.models.Adsorbates#
-

Fetch the list of adsorbates that are supported in the API.

-
-
Raises:
-
-
-
Returns:
-

The adsorbates that are supported throughout the API.

-
-
-
- -
-
-async get_slabs(bulk: str | demo.ocpapi.client.models.Bulk) demo.ocpapi.client.models.Slabs#
-

Get a unique list of slabs for the input bulk structure.

-
-
Parameters:
-

bulk – If a string, the id of the bulk to use. Otherwise the Bulk -instance to use.

-
-
Raises:
-
-
-
Returns:
-

Slabs for each of the unique surfaces of the material.

-
-
-
- -
-
-async get_adsorbate_slab_configs(adsorbate: str, slab: demo.ocpapi.client.models.Slab) demo.ocpapi.client.models.AdsorbateSlabConfigs#
-

Get a list of possible binding sites for the input adsorbate on the -input slab.

-
-
Parameters:
-
    -
  • adsorbate – Description of the the adsorbate to place.

  • -
  • slab – Information about the slab on which the adsorbate should -be placed.

  • -
-
-
Raises:
-
-
-
Returns:
-

Configurations for each adsorbate binding site on the slab.

-
-
-
- -
-
-async submit_adsorbate_slab_relaxations(adsorbate: str, adsorbate_configs: List[demo.ocpapi.client.models.Atoms], bulk: demo.ocpapi.client.models.Bulk, slab: demo.ocpapi.client.models.Slab, model: str, ephemeral: bool = False) demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem#
-

Starts relaxations of the input adsorbate configurations on the input -slab using energies and forces returned by the input model. Relaxations -are run asynchronously and results can be fetched using the system id -that is returned from this method.

-
-
Parameters:
-
    -
  • adsorbate – Description of the adsorbate being simulated.

  • -
  • adsorbate_configs – List of adsorbate configurations to relax. This -should only include the adsorbates themselves; the surface is -defined in the “slab” field that is a peer to this one.

  • -
  • bulk – Details of the bulk material being simulated.

  • -
  • slab – The structure of the slab on which adsorbates are placed.

  • -
  • model – The model that will be used to evaluate energies and forces -during relaxations.

  • -
  • ephemeral – If False (default), any later attempt to delete the -generated relaxations will be rejected. If True, deleting the -relaxations will be allowed, which is generally useful for -testing when there is no reason for results to be persisted.

  • -
-
-
Raises:
-
-
-
Returns:
-

IDs of the relaxations.

-
-
-
- -
-
-async get_adsorbate_slab_relaxations_request(system_id: str) demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest#
-

Fetches the original relaxations request for the input system.

-
-
Parameters:
-

system_id – The ID of the system to fetch.

-
-
Raises:
-
-
-
Returns:
-

The original request that was made when submitting relaxations.

-
-
-
- -
-
-async get_adsorbate_slab_relaxations_results(system_id: str, config_ids: List[int] | None = None, fields: List[str] | None = None) demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults#
-

Fetches relaxation results for the input system.

-
-
Parameters:
-
    -
  • system_id – The system id of the relaxations.

  • -
  • config_ids – If defined and not empty, a subset of configurations -to fetch. Otherwise all configurations are returned.

  • -
  • fields – If defined and not empty, a subset of fields in each -configuration to fetch. Otherwise all fields are returned.

  • -
-
-
Raises:
-
-
-
Returns:
-

The relaxation results for each configuration in the system.

-
-
-
- -
-
-async delete_adsorbate_slab_relaxations(system_id: str) None#
-

Deletes all relaxation results for the input system.

-
-
Parameters:
-

system_id – The ID of the system to delete.

-
-
Raises:
-
-
-
-
- -
-
-async _run_request(path: str, method: str, **kwargs) str#
-

Helper method that runs the input request on a thread so that -it doesn’t block the event loop on the calling thread.

-
-
Parameters:
-
    -
  • path – The URL path to make the request against.

  • -
  • method – The HTTP method to use (GET, POST, etc.).

  • -
-
-
Raises:
-
-
-
Returns:
-

The response body from the request as a string.

-
-
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/client/index.html b/autoapi/demo/ocpapi/client/index.html deleted file mode 100644 index b03af5367..000000000 --- a/autoapi/demo/ocpapi/client/index.html +++ /dev/null @@ -1,1789 +0,0 @@ - - - - - - - - - - - demo.ocpapi.client — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

demo.ocpapi.client

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

demo.ocpapi.client#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Client

Exposes each route in the OCP API as a method.

Adsorbates

Stores the response from a request to fetch adsorbates supported in the

AdsorbateSlabConfigs

Stores the response from a request to fetch placements of a single

AdsorbateSlabRelaxationResult

Stores information about a single adsorbate slab configuration, including

AdsorbateSlabRelaxationsRequest

Stores the request to submit a new batch of adsorbate slab relaxations.

AdsorbateSlabRelaxationsResults

Stores the response from a request for results of adsorbate slab

AdsorbateSlabRelaxationsSystem

Stores the response from a request to submit a new batch of adsorbate

Atoms

Subset of the fields from an ASE Atoms object that are used within this

Bulk

Stores information about a single bulk material.

Bulks

Stores the response from a request to fetch bulks supported in the API.

Model

Stores information about a single model supported in the API.

Models

Stores the response from a request for models supported in the API.

Slab

Stores all information about a slab that is returned from the API.

SlabMetadata

Stores metadata about a slab that is returned from the API.

Slabs

Stores the response from a request to fetch slabs for a bulk structure.

Status

Relaxation status of a single adsorbate placement on a slab.

-
-
-

Functions#

- - - - - - -

get_results_ui_url(→ Optional[str])

Generates the URL at which results for the input system can be

-
-
-class demo.ocpapi.client.Client(host: str = 'open-catalyst-api.metademolab.com', scheme: str = 'https')#
-

Exposes each route in the OCP API as a method.

-
-
-property host: str#
-

The host being called by this client.

-
- -
-
-async get_models() demo.ocpapi.client.models.Models#
-

Fetch the list of models that are supported in the API.

-
-
Raises:
-
-
-
Returns:
-

The models that are supported in the API.

-
-
-
- -
-
-async get_bulks() demo.ocpapi.client.models.Bulks#
-

Fetch the list of bulk materials that are supported in the API.

-
-
Raises:
-
-
-
Returns:
-

The bulks that are supported throughout the API.

-
-
-
- -
-
-async get_adsorbates() demo.ocpapi.client.models.Adsorbates#
-

Fetch the list of adsorbates that are supported in the API.

-
-
Raises:
-
-
-
Returns:
-

The adsorbates that are supported throughout the API.

-
-
-
- -
-
-async get_slabs(bulk: str | demo.ocpapi.client.models.Bulk) demo.ocpapi.client.models.Slabs#
-

Get a unique list of slabs for the input bulk structure.

-
-
Parameters:
-

bulk – If a string, the id of the bulk to use. Otherwise the Bulk -instance to use.

-
-
Raises:
-
-
-
Returns:
-

Slabs for each of the unique surfaces of the material.

-
-
-
- -
-
-async get_adsorbate_slab_configs(adsorbate: str, slab: demo.ocpapi.client.models.Slab) demo.ocpapi.client.models.AdsorbateSlabConfigs#
-

Get a list of possible binding sites for the input adsorbate on the -input slab.

-
-
Parameters:
-
    -
  • adsorbate – Description of the the adsorbate to place.

  • -
  • slab – Information about the slab on which the adsorbate should -be placed.

  • -
-
-
Raises:
-
-
-
Returns:
-

Configurations for each adsorbate binding site on the slab.

-
-
-
- -
-
-async submit_adsorbate_slab_relaxations(adsorbate: str, adsorbate_configs: List[demo.ocpapi.client.models.Atoms], bulk: demo.ocpapi.client.models.Bulk, slab: demo.ocpapi.client.models.Slab, model: str, ephemeral: bool = False) demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem#
-

Starts relaxations of the input adsorbate configurations on the input -slab using energies and forces returned by the input model. Relaxations -are run asynchronously and results can be fetched using the system id -that is returned from this method.

-
-
Parameters:
-
    -
  • adsorbate – Description of the adsorbate being simulated.

  • -
  • adsorbate_configs – List of adsorbate configurations to relax. This -should only include the adsorbates themselves; the surface is -defined in the “slab” field that is a peer to this one.

  • -
  • bulk – Details of the bulk material being simulated.

  • -
  • slab – The structure of the slab on which adsorbates are placed.

  • -
  • model – The model that will be used to evaluate energies and forces -during relaxations.

  • -
  • ephemeral – If False (default), any later attempt to delete the -generated relaxations will be rejected. If True, deleting the -relaxations will be allowed, which is generally useful for -testing when there is no reason for results to be persisted.

  • -
-
-
Raises:
-
-
-
Returns:
-

IDs of the relaxations.

-
-
-
- -
-
-async get_adsorbate_slab_relaxations_request(system_id: str) demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest#
-

Fetches the original relaxations request for the input system.

-
-
Parameters:
-

system_id – The ID of the system to fetch.

-
-
Raises:
-
-
-
Returns:
-

The original request that was made when submitting relaxations.

-
-
-
- -
-
-async get_adsorbate_slab_relaxations_results(system_id: str, config_ids: List[int] | None = None, fields: List[str] | None = None) demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults#
-

Fetches relaxation results for the input system.

-
-
Parameters:
-
    -
  • system_id – The system id of the relaxations.

  • -
  • config_ids – If defined and not empty, a subset of configurations -to fetch. Otherwise all configurations are returned.

  • -
  • fields – If defined and not empty, a subset of fields in each -configuration to fetch. Otherwise all fields are returned.

  • -
-
-
Raises:
-
-
-
Returns:
-

The relaxation results for each configuration in the system.

-
-
-
- -
-
-async delete_adsorbate_slab_relaxations(system_id: str) None#
-

Deletes all relaxation results for the input system.

-
-
Parameters:
-

system_id – The ID of the system to delete.

-
-
Raises:
-
-
-
-
- -
-
-async _run_request(path: str, method: str, **kwargs) str#
-

Helper method that runs the input request on a thread so that -it doesn’t block the event loop on the calling thread.

-
-
Parameters:
-
    -
  • path – The URL path to make the request against.

  • -
  • method – The HTTP method to use (GET, POST, etc.).

  • -
-
-
Raises:
-
-
-
Returns:
-

The response body from the request as a string.

-
-
-
- -
- -
-
-exception demo.ocpapi.client.NonRetryableRequestException(method: str, url: str, cause: str)#
-

Bases: RequestException

-

Exception raised when an API call is rejected for a reason that will -not succeed on retry. For example, this might include a malformed request -or action that is not allowed.

-
- -
-
-exception demo.ocpapi.client.RateLimitExceededException(method: str, url: str, retry_after: datetime.timedelta | None = None)#
-

Bases: RequestException

-

Exception raised when an API call is rejected because a rate limit has -been exceeded.

-
-
-retry_after#
-

If known, the time to wait before the next attempt to -call the API should be made.

-
- -
- -
-
-exception demo.ocpapi.client.RequestException(method: str, url: str, cause: str)#
-

Bases: Exception

-

Exception raised any time there is an error while making an API call.

-
- -
-
-class demo.ocpapi.client.Adsorbates#
-

Bases: _DataModel

-

Stores the response from a request to fetch adsorbates supported in the -API.

-
-
-adsorbates_supported: List[str]#
-

List of adsorbates that can be used in the API.

-
- -
- -
-
-class demo.ocpapi.client.AdsorbateSlabConfigs#
-

Bases: _DataModel

-

Stores the response from a request to fetch placements of a single -absorbate on a slab.

-
-
-adsorbate_configs: List[Atoms]#
-

List of structures, each representing one possible adsorbate placement.

-
- -
-
-slab: Slab#
-

The structure of the slab on which the adsorbate is placed.

-
- -
- -
-
-class demo.ocpapi.client.AdsorbateSlabRelaxationResult#
-

Bases: _DataModel

-

Stores information about a single adsorbate slab configuration, including -outputs for the model used in relaxations.

-

The API to fetch relaxation results supports requesting a subset of fields -in order to limit the size of response payloads. Optional attributes will -be defined only if they are including the response.

-
-
-config_id: int#
-

ID of the configuration within the system.

-
- -
-
-status: Status#
-

The status of the request for information about this configuration.

-
- -
-
-system_id: str | None#
-

The ID of the system in which the configuration was originally submitted.

-
- -
-
-cell: Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]] | None#
-

3x3 matrix with unit cell vectors.

-
- -
-
-pbc: Tuple[bool, bool, bool] | None#
-

Whether the structure is periodic along the a, b, and c lattice vectors, -respectively.

-
- -
-
-numbers: List[int] | None#
-

The atomic number of each atom in the unit cell.

-
- -
-
-positions: List[Tuple[float, float, float]] | None#
-

The coordinates of each atom in the unit cell, relative to the cartesian -frame.

-
- -
-
-tags: List[int] | None#
-

Labels for each atom in the unit cell where 0 represents a subsurface atom -(fixed during optimization), 1 represents a surface atom, and 2 represents -an adsorbate atom.

-
- -
-
-energy: float | None#
-

The energy of the configuration.

-
- -
-
-energy_trajectory: List[float] | None#
-

The energy of the configuration at each point along the relaxation -trajectory.

-
- -
-
-forces: List[Tuple[float, float, float]] | None#
-

The forces on each atom in the relaxed structure.

-
- -
-
-to_ase_atoms() ase.Atoms#
-

Creates an ase.Atoms object with the positions, element numbers, -etc. populated from values on this object.

-

The predicted energy and forces will also be copied to the new -ase.Atoms object as a SinglePointCalculator (a calculator that -stores the results of an already-run simulation).

-
-
Returns:
-

ase.Atoms object with values from this object.

-
-
-
- -
- -
-
-class demo.ocpapi.client.AdsorbateSlabRelaxationsRequest#
-

Bases: _DataModel

-

Stores the request to submit a new batch of adsorbate slab relaxations.

-
-
-adsorbate: str#
-

Description of the adsorbate.

-
- -
-
-adsorbate_configs: List[Atoms]#
-

List of adsorbate placements being relaxed.

-
- -
-
-bulk: Bulk#
-

Information about the original bulk structure used to create the slab.

-
- -
-
-slab: Slab#
-

The structure of the slab on which adsorbates are placed.

-
- -
-
-model: str#
-

The type of the ML model being used during relaxations.

-
- -
-
-ephemeral: bool | None#
-

Whether the relaxations can be deleted (assume they cannot be deleted if -None).

-
- -
-
-adsorbate_reaction: str | None#
-

If possible, an html-formatted string describing the reaction will be added -to this field.

-
- -
- -
-
-class demo.ocpapi.client.AdsorbateSlabRelaxationsResults#
-

Bases: _DataModel

-

Stores the response from a request for results of adsorbate slab -relaxations.

-
-
-configs: List[AdsorbateSlabRelaxationResult]#
-

List of configurations in the system, each representing one placement of -an adsorbate on a slab surface.

-
- -
-
-omitted_config_ids: List[int]#
-

List of IDs of configurations that were requested but omitted by the -server. Results for these IDs can be requested again.

-
- -
- -
-
-class demo.ocpapi.client.AdsorbateSlabRelaxationsSystem#
-

Bases: _DataModel

-

Stores the response from a request to submit a new batch of adsorbate -slab relaxations.

-
-
-system_id: str#
-

Unique ID for this set of relaxations which can be used to fetch results -later.

-
- -
-
-config_ids: List[int]#
-

The list of IDs assigned to each of the input adsorbate placements, in the -same order in which they were submitted.

-
- -
- -
-
-class demo.ocpapi.client.Atoms#
-

Bases: _DataModel

-

Subset of the fields from an ASE Atoms object that are used within this -API.

-
-
-cell: Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]#
-

3x3 matrix with unit cell vectors.

-
- -
-
-pbc: Tuple[bool, bool, bool]#
-

Whether the structure is periodic along the a, b, and c lattice vectors, -respectively.

-
- -
-
-numbers: List[int]#
-

The atomic number of each atom in the unit cell.

-
- -
-
-positions: List[Tuple[float, float, float]]#
-

The coordinates of each atom in the unit cell, relative to the cartesian -frame.

-
- -
-
-tags: List[int]#
-

Labels for each atom in the unit cell where 0 represents a subsurface atom -(fixed during optimization), 1 represents a surface atom, and 2 represents -an adsorbate atom.

-
- -
-
-to_ase_atoms() ase.Atoms#
-

Creates an ase.Atoms object with the positions, element numbers, -etc. populated from values on this object.

-
-
Returns:
-

ase.Atoms object with values from this object.

-
-
-
- -
- -
-
-class demo.ocpapi.client.Bulk#
-

Bases: _DataModel

-

Stores information about a single bulk material.

-
-
-src_id: str#
-

The ID of the material.

-
- -
-
-formula: str#
-

The chemical formula of the material.

-
- -
-
-elements: List[str]#
-

The list of elements in the material.

-
- -
- -
-
-class demo.ocpapi.client.Bulks#
-

Bases: _DataModel

-

Stores the response from a request to fetch bulks supported in the API.

-
-
-bulks_supported: List[Bulk]#
-

List of bulks that can be used in the API.

-
- -
- -
-
-class demo.ocpapi.client.Model#
-

Bases: _DataModel

-

Stores information about a single model supported in the API.

-
-
-id: str#
-

The ID of the model.

-
- -
- -
-
-class demo.ocpapi.client.Models#
-

Bases: _DataModel

-

Stores the response from a request for models supported in the API.

-
-
-models: List[Model]#
-

The list of models that are supported.

-
- -
- -
-
-class demo.ocpapi.client.Slab#
-

Bases: _DataModel

-

Stores all information about a slab that is returned from the API.

-
-
-atoms: Atoms#
-

The structure of the slab.

-
- -
-
-metadata: SlabMetadata#
-

Extra information about the slab.

-
- -
- -
-
-class demo.ocpapi.client.SlabMetadata#
-

Bases: _DataModel

-

Stores metadata about a slab that is returned from the API.

-
-
-bulk_src_id: str#
-

The ID of the bulk material from which the slab was derived.

-
- -
-
-millers: Tuple[int, int, int]#
-

The Miller indices of the slab relative to bulk structure.

-
- -
-
-shift: float#
-

The position along the vector defined by the Miller indices at which a -cut was taken to generate the slab surface.

-
- -
-
-top: bool#
-

If False, the top and bottom surfaces for this millers/shift pair are -distinct and this slab represents the bottom surface.

-
- -
- -
-
-class demo.ocpapi.client.Slabs#
-

Bases: _DataModel

-

Stores the response from a request to fetch slabs for a bulk structure.

-
-
-slabs: List[Slab]#
-

The list of slabs that were generated from the input bulk structure.

-
- -
- -
-
-class demo.ocpapi.client.Status(*args, **kwds)#
-

Bases: enum.Enum

-

Relaxation status of a single adsorbate placement on a slab.

-
-
-NOT_AVAILABLE = 'not_available'#
-

The configuration exists but the result is not yet available. It is -possible that checking again in the future could yield a result.

-
- -
-
-FAILED_RELAXATION = 'failed_relaxation'#
-

The relaxation failed for this configuration.

-
- -
-
-SUCCESS = 'success'#
-

The relaxation was successful and the requested information about the -configuration was returned.

-
- -
-
-DOES_NOT_EXIST = 'does_not_exist'#
-

The requested configuration does not exist.

-
- -
-
-__str__() str#
-

Return str(self).

-
- -
- -
-
-demo.ocpapi.client.get_results_ui_url(api_host: str, system_id: str) str | None#
-

Generates the URL at which results for the input system can be -visualized.

-
-
Parameters:
-
    -
  • api_host – The API host on which the system was run.

  • -
  • system_id – ID of the system being visualized.

  • -
-
-
Returns:
-

The URL at which the input system can be visualized. None if the -API host is not recognized.

-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/client/models/index.html b/autoapi/demo/ocpapi/client/models/index.html deleted file mode 100644 index 9a90db9c8..000000000 --- a/autoapi/demo/ocpapi/client/models/index.html +++ /dev/null @@ -1,1422 +0,0 @@ - - - - - - - - - - - demo.ocpapi.client.models — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

demo.ocpapi.client.models

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

demo.ocpapi.client.models#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

_DataModel

Base class for all data models.

Model

Stores information about a single model supported in the API.

Models

Stores the response from a request for models supported in the API.

Bulk

Stores information about a single bulk material.

Bulks

Stores the response from a request to fetch bulks supported in the API.

Adsorbates

Stores the response from a request to fetch adsorbates supported in the

Atoms

Subset of the fields from an ASE Atoms object that are used within this

SlabMetadata

Stores metadata about a slab that is returned from the API.

Slab

Stores all information about a slab that is returned from the API.

Slabs

Stores the response from a request to fetch slabs for a bulk structure.

AdsorbateSlabConfigs

Stores the response from a request to fetch placements of a single

AdsorbateSlabRelaxationsSystem

Stores the response from a request to submit a new batch of adsorbate

AdsorbateSlabRelaxationsRequest

Stores the request to submit a new batch of adsorbate slab relaxations.

Status

Relaxation status of a single adsorbate placement on a slab.

AdsorbateSlabRelaxationResult

Stores information about a single adsorbate slab configuration, including

AdsorbateSlabRelaxationsResults

Stores the response from a request for results of adsorbate slab

-
-
-class demo.ocpapi.client.models._DataModel#
-

Base class for all data models.

-
-
-other_fields: dataclasses_json.CatchAll#
-

Fields that may have been added to the API that all not yet supported -explicitly in this class.

-
- -
- -
-
-class demo.ocpapi.client.models.Model#
-

Bases: _DataModel

-

Stores information about a single model supported in the API.

-
-
-id: str#
-

The ID of the model.

-
- -
- -
-
-class demo.ocpapi.client.models.Models#
-

Bases: _DataModel

-

Stores the response from a request for models supported in the API.

-
-
-models: List[Model]#
-

The list of models that are supported.

-
- -
- -
-
-class demo.ocpapi.client.models.Bulk#
-

Bases: _DataModel

-

Stores information about a single bulk material.

-
-
-src_id: str#
-

The ID of the material.

-
- -
-
-formula: str#
-

The chemical formula of the material.

-
- -
-
-elements: List[str]#
-

The list of elements in the material.

-
- -
- -
-
-class demo.ocpapi.client.models.Bulks#
-

Bases: _DataModel

-

Stores the response from a request to fetch bulks supported in the API.

-
-
-bulks_supported: List[Bulk]#
-

List of bulks that can be used in the API.

-
- -
- -
-
-class demo.ocpapi.client.models.Adsorbates#
-

Bases: _DataModel

-

Stores the response from a request to fetch adsorbates supported in the -API.

-
-
-adsorbates_supported: List[str]#
-

List of adsorbates that can be used in the API.

-
- -
- -
-
-class demo.ocpapi.client.models.Atoms#
-

Bases: _DataModel

-

Subset of the fields from an ASE Atoms object that are used within this -API.

-
-
-cell: Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]#
-

3x3 matrix with unit cell vectors.

-
- -
-
-pbc: Tuple[bool, bool, bool]#
-

Whether the structure is periodic along the a, b, and c lattice vectors, -respectively.

-
- -
-
-numbers: List[int]#
-

The atomic number of each atom in the unit cell.

-
- -
-
-positions: List[Tuple[float, float, float]]#
-

The coordinates of each atom in the unit cell, relative to the cartesian -frame.

-
- -
-
-tags: List[int]#
-

Labels for each atom in the unit cell where 0 represents a subsurface atom -(fixed during optimization), 1 represents a surface atom, and 2 represents -an adsorbate atom.

-
- -
-
-to_ase_atoms() ase.Atoms#
-

Creates an ase.Atoms object with the positions, element numbers, -etc. populated from values on this object.

-
-
Returns:
-

ase.Atoms object with values from this object.

-
-
-
- -
- -
-
-class demo.ocpapi.client.models.SlabMetadata#
-

Bases: _DataModel

-

Stores metadata about a slab that is returned from the API.

-
-
-bulk_src_id: str#
-

The ID of the bulk material from which the slab was derived.

-
- -
-
-millers: Tuple[int, int, int]#
-

The Miller indices of the slab relative to bulk structure.

-
- -
-
-shift: float#
-

The position along the vector defined by the Miller indices at which a -cut was taken to generate the slab surface.

-
- -
-
-top: bool#
-

If False, the top and bottom surfaces for this millers/shift pair are -distinct and this slab represents the bottom surface.

-
- -
- -
-
-class demo.ocpapi.client.models.Slab#
-

Bases: _DataModel

-

Stores all information about a slab that is returned from the API.

-
-
-atoms: Atoms#
-

The structure of the slab.

-
- -
-
-metadata: SlabMetadata#
-

Extra information about the slab.

-
- -
- -
-
-class demo.ocpapi.client.models.Slabs#
-

Bases: _DataModel

-

Stores the response from a request to fetch slabs for a bulk structure.

-
-
-slabs: List[Slab]#
-

The list of slabs that were generated from the input bulk structure.

-
- -
- -
-
-class demo.ocpapi.client.models.AdsorbateSlabConfigs#
-

Bases: _DataModel

-

Stores the response from a request to fetch placements of a single -absorbate on a slab.

-
-
-adsorbate_configs: List[Atoms]#
-

List of structures, each representing one possible adsorbate placement.

-
- -
-
-slab: Slab#
-

The structure of the slab on which the adsorbate is placed.

-
- -
- -
-
-class demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem#
-

Bases: _DataModel

-

Stores the response from a request to submit a new batch of adsorbate -slab relaxations.

-
-
-system_id: str#
-

Unique ID for this set of relaxations which can be used to fetch results -later.

-
- -
-
-config_ids: List[int]#
-

The list of IDs assigned to each of the input adsorbate placements, in the -same order in which they were submitted.

-
- -
- -
-
-class demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest#
-

Bases: _DataModel

-

Stores the request to submit a new batch of adsorbate slab relaxations.

-
-
-adsorbate: str#
-

Description of the adsorbate.

-
- -
-
-adsorbate_configs: List[Atoms]#
-

List of adsorbate placements being relaxed.

-
- -
-
-bulk: Bulk#
-

Information about the original bulk structure used to create the slab.

-
- -
-
-slab: Slab#
-

The structure of the slab on which adsorbates are placed.

-
- -
-
-model: str#
-

The type of the ML model being used during relaxations.

-
- -
-
-ephemeral: bool | None#
-

Whether the relaxations can be deleted (assume they cannot be deleted if -None).

-
- -
-
-adsorbate_reaction: str | None#
-

If possible, an html-formatted string describing the reaction will be added -to this field.

-
- -
- -
-
-class demo.ocpapi.client.models.Status(*args, **kwds)#
-

Bases: enum.Enum

-

Relaxation status of a single adsorbate placement on a slab.

-
-
-NOT_AVAILABLE = 'not_available'#
-

The configuration exists but the result is not yet available. It is -possible that checking again in the future could yield a result.

-
- -
-
-FAILED_RELAXATION = 'failed_relaxation'#
-

The relaxation failed for this configuration.

-
- -
-
-SUCCESS = 'success'#
-

The relaxation was successful and the requested information about the -configuration was returned.

-
- -
-
-DOES_NOT_EXIST = 'does_not_exist'#
-

The requested configuration does not exist.

-
- -
-
-__str__() str#
-

Return str(self).

-
- -
- -
-
-class demo.ocpapi.client.models.AdsorbateSlabRelaxationResult#
-

Bases: _DataModel

-

Stores information about a single adsorbate slab configuration, including -outputs for the model used in relaxations.

-

The API to fetch relaxation results supports requesting a subset of fields -in order to limit the size of response payloads. Optional attributes will -be defined only if they are including the response.

-
-
-config_id: int#
-

ID of the configuration within the system.

-
- -
-
-status: Status#
-

The status of the request for information about this configuration.

-
- -
-
-system_id: str | None#
-

The ID of the system in which the configuration was originally submitted.

-
- -
-
-cell: Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]] | None#
-

3x3 matrix with unit cell vectors.

-
- -
-
-pbc: Tuple[bool, bool, bool] | None#
-

Whether the structure is periodic along the a, b, and c lattice vectors, -respectively.

-
- -
-
-numbers: List[int] | None#
-

The atomic number of each atom in the unit cell.

-
- -
-
-positions: List[Tuple[float, float, float]] | None#
-

The coordinates of each atom in the unit cell, relative to the cartesian -frame.

-
- -
-
-tags: List[int] | None#
-

Labels for each atom in the unit cell where 0 represents a subsurface atom -(fixed during optimization), 1 represents a surface atom, and 2 represents -an adsorbate atom.

-
- -
-
-energy: float | None#
-

The energy of the configuration.

-
- -
-
-energy_trajectory: List[float] | None#
-

The energy of the configuration at each point along the relaxation -trajectory.

-
- -
-
-forces: List[Tuple[float, float, float]] | None#
-

The forces on each atom in the relaxed structure.

-
- -
-
-to_ase_atoms() ase.Atoms#
-

Creates an ase.Atoms object with the positions, element numbers, -etc. populated from values on this object.

-

The predicted energy and forces will also be copied to the new -ase.Atoms object as a SinglePointCalculator (a calculator that -stores the results of an already-run simulation).

-
-
Returns:
-

ase.Atoms object with values from this object.

-
-
-
- -
- -
-
-class demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults#
-

Bases: _DataModel

-

Stores the response from a request for results of adsorbate slab -relaxations.

-
-
-configs: List[AdsorbateSlabRelaxationResult]#
-

List of configurations in the system, each representing one placement of -an adsorbate on a slab surface.

-
- -
-
-omitted_config_ids: List[int]#
-

List of IDs of configurations that were requested but omitted by the -server. Results for these IDs can be requested again.

-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/client/ui/index.html b/autoapi/demo/ocpapi/client/ui/index.html deleted file mode 100644 index 5602ea775..000000000 --- a/autoapi/demo/ocpapi/client/ui/index.html +++ /dev/null @@ -1,758 +0,0 @@ - - - - - - - - - - - demo.ocpapi.client.ui — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

demo.ocpapi.client.ui

- -
- -
-
- - - - -
- -
-

demo.ocpapi.client.ui#

-
-

Module Contents#

-
-

Functions#

- - - - - - -

get_results_ui_url(→ Optional[str])

Generates the URL at which results for the input system can be

-
-
-

Attributes#

- - - - - - -

_API_TO_UI_HOSTS

-
-
-demo.ocpapi.client.ui._API_TO_UI_HOSTS: Dict[str, str]#
-
- -
-
-demo.ocpapi.client.ui.get_results_ui_url(api_host: str, system_id: str) str | None#
-

Generates the URL at which results for the input system can be -visualized.

-
-
Parameters:
-
    -
  • api_host – The API host on which the system was run.

  • -
  • system_id – ID of the system being visualized.

  • -
-
-
Returns:
-

The URL at which the input system can be visualized. None if the -API host is not recognized.

-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/index.html b/autoapi/demo/ocpapi/index.html deleted file mode 100644 index 08716229f..000000000 --- a/autoapi/demo/ocpapi/index.html +++ /dev/null @@ -1,2290 +0,0 @@ - - - - - - - - - - - demo.ocpapi — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

demo.ocpapi

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

demo.ocpapi#

-
-

Subpackages#

- -
-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Client

Exposes each route in the OCP API as a method.

Adsorbates

Stores the response from a request to fetch adsorbates supported in the

AdsorbateSlabConfigs

Stores the response from a request to fetch placements of a single

AdsorbateSlabRelaxationResult

Stores information about a single adsorbate slab configuration, including

AdsorbateSlabRelaxationsRequest

Stores the request to submit a new batch of adsorbate slab relaxations.

AdsorbateSlabRelaxationsResults

Stores the response from a request for results of adsorbate slab

AdsorbateSlabRelaxationsSystem

Stores the response from a request to submit a new batch of adsorbate

Atoms

Subset of the fields from an ASE Atoms object that are used within this

Bulk

Stores information about a single bulk material.

Bulks

Stores the response from a request to fetch bulks supported in the API.

Model

Stores information about a single model supported in the API.

Models

Stores the response from a request for models supported in the API.

Slab

Stores all information about a slab that is returned from the API.

SlabMetadata

Stores metadata about a slab that is returned from the API.

Slabs

Stores the response from a request to fetch slabs for a bulk structure.

Status

Relaxation status of a single adsorbate placement on a slab.

AdsorbateBindingSites

Stores the inputs and results of a set of relaxations of adsorbate

AdsorbateSlabRelaxations

Stores the relaxations of adsorbate placements on the surface of a slab.

Lifetime

Represents different lifetimes when running relaxations.

keep_all_slabs

Adslab filter than returns all slabs.

keep_slabs_with_miller_indices

Adslab filter that keeps any slabs with the configured miller indices.

prompt_for_slabs_to_keep

Adslab filter than presents the user with an interactive prompt to choose

RateLimitLogging

Controls logging when rate limits are hit.

-
-
-

Functions#

- - - - - - - - - - - - - - - - - - -

get_results_ui_url(→ Optional[str])

Generates the URL at which results for the input system can be

find_adsorbate_binding_sites(→ AdsorbateBindingSites)

Search for adsorbate binding sites on surfaces of a bulk material.

get_adsorbate_slab_relaxation_results(...)

Wrapper around Client.get_adsorbate_slab_relaxations_results() that

wait_for_adsorbate_slab_relaxations(→ Dict[int, ...)

Blocks until all relaxations in the input system have finished, whether

retry_api_calls(→ Any)

Decorator with sensible defaults for retrying calls to the OCP API.

-
-
-

Attributes#

- - - - - - - - - -

NO_LIMIT

NoLimitType

-
-
-class demo.ocpapi.Client(host: str = 'open-catalyst-api.metademolab.com', scheme: str = 'https')#
-

Exposes each route in the OCP API as a method.

-
-
-property host: str#
-

The host being called by this client.

-
- -
-
-async get_models() demo.ocpapi.client.models.Models#
-

Fetch the list of models that are supported in the API.

-
-
Raises:
-
-
-
Returns:
-

The models that are supported in the API.

-
-
-
- -
-
-async get_bulks() demo.ocpapi.client.models.Bulks#
-

Fetch the list of bulk materials that are supported in the API.

-
-
Raises:
-
-
-
Returns:
-

The bulks that are supported throughout the API.

-
-
-
- -
-
-async get_adsorbates() demo.ocpapi.client.models.Adsorbates#
-

Fetch the list of adsorbates that are supported in the API.

-
-
Raises:
-
-
-
Returns:
-

The adsorbates that are supported throughout the API.

-
-
-
- -
-
-async get_slabs(bulk: str | demo.ocpapi.client.models.Bulk) demo.ocpapi.client.models.Slabs#
-

Get a unique list of slabs for the input bulk structure.

-
-
Parameters:
-

bulk – If a string, the id of the bulk to use. Otherwise the Bulk -instance to use.

-
-
Raises:
-
-
-
Returns:
-

Slabs for each of the unique surfaces of the material.

-
-
-
- -
-
-async get_adsorbate_slab_configs(adsorbate: str, slab: demo.ocpapi.client.models.Slab) demo.ocpapi.client.models.AdsorbateSlabConfigs#
-

Get a list of possible binding sites for the input adsorbate on the -input slab.

-
-
Parameters:
-
    -
  • adsorbate – Description of the the adsorbate to place.

  • -
  • slab – Information about the slab on which the adsorbate should -be placed.

  • -
-
-
Raises:
-
-
-
Returns:
-

Configurations for each adsorbate binding site on the slab.

-
-
-
- -
-
-async submit_adsorbate_slab_relaxations(adsorbate: str, adsorbate_configs: List[demo.ocpapi.client.models.Atoms], bulk: demo.ocpapi.client.models.Bulk, slab: demo.ocpapi.client.models.Slab, model: str, ephemeral: bool = False) demo.ocpapi.client.models.AdsorbateSlabRelaxationsSystem#
-

Starts relaxations of the input adsorbate configurations on the input -slab using energies and forces returned by the input model. Relaxations -are run asynchronously and results can be fetched using the system id -that is returned from this method.

-
-
Parameters:
-
    -
  • adsorbate – Description of the adsorbate being simulated.

  • -
  • adsorbate_configs – List of adsorbate configurations to relax. This -should only include the adsorbates themselves; the surface is -defined in the “slab” field that is a peer to this one.

  • -
  • bulk – Details of the bulk material being simulated.

  • -
  • slab – The structure of the slab on which adsorbates are placed.

  • -
  • model – The model that will be used to evaluate energies and forces -during relaxations.

  • -
  • ephemeral – If False (default), any later attempt to delete the -generated relaxations will be rejected. If True, deleting the -relaxations will be allowed, which is generally useful for -testing when there is no reason for results to be persisted.

  • -
-
-
Raises:
-
-
-
Returns:
-

IDs of the relaxations.

-
-
-
- -
-
-async get_adsorbate_slab_relaxations_request(system_id: str) demo.ocpapi.client.models.AdsorbateSlabRelaxationsRequest#
-

Fetches the original relaxations request for the input system.

-
-
Parameters:
-

system_id – The ID of the system to fetch.

-
-
Raises:
-
-
-
Returns:
-

The original request that was made when submitting relaxations.

-
-
-
- -
-
-async get_adsorbate_slab_relaxations_results(system_id: str, config_ids: List[int] | None = None, fields: List[str] | None = None) demo.ocpapi.client.models.AdsorbateSlabRelaxationsResults#
-

Fetches relaxation results for the input system.

-
-
Parameters:
-
    -
  • system_id – The system id of the relaxations.

  • -
  • config_ids – If defined and not empty, a subset of configurations -to fetch. Otherwise all configurations are returned.

  • -
  • fields – If defined and not empty, a subset of fields in each -configuration to fetch. Otherwise all fields are returned.

  • -
-
-
Raises:
-
-
-
Returns:
-

The relaxation results for each configuration in the system.

-
-
-
- -
-
-async delete_adsorbate_slab_relaxations(system_id: str) None#
-

Deletes all relaxation results for the input system.

-
-
Parameters:
-

system_id – The ID of the system to delete.

-
-
Raises:
-
-
-
-
- -
-
-async _run_request(path: str, method: str, **kwargs) str#
-

Helper method that runs the input request on a thread so that -it doesn’t block the event loop on the calling thread.

-
-
Parameters:
-
    -
  • path – The URL path to make the request against.

  • -
  • method – The HTTP method to use (GET, POST, etc.).

  • -
-
-
Raises:
-
-
-
Returns:
-

The response body from the request as a string.

-
-
-
- -
- -
-
-exception demo.ocpapi.NonRetryableRequestException(method: str, url: str, cause: str)#
-

Bases: RequestException

-

Exception raised when an API call is rejected for a reason that will -not succeed on retry. For example, this might include a malformed request -or action that is not allowed.

-
- -
-
-exception demo.ocpapi.RateLimitExceededException(method: str, url: str, retry_after: datetime.timedelta | None = None)#
-

Bases: RequestException

-

Exception raised when an API call is rejected because a rate limit has -been exceeded.

-
-
-retry_after#
-

If known, the time to wait before the next attempt to -call the API should be made.

-
- -
- -
-
-exception demo.ocpapi.RequestException(method: str, url: str, cause: str)#
-

Bases: Exception

-

Exception raised any time there is an error while making an API call.

-
- -
-
-class demo.ocpapi.Adsorbates#
-

Bases: _DataModel

-

Stores the response from a request to fetch adsorbates supported in the -API.

-
-
-adsorbates_supported: List[str]#
-

List of adsorbates that can be used in the API.

-
- -
- -
-
-class demo.ocpapi.AdsorbateSlabConfigs#
-

Bases: _DataModel

-

Stores the response from a request to fetch placements of a single -absorbate on a slab.

-
-
-adsorbate_configs: List[Atoms]#
-

List of structures, each representing one possible adsorbate placement.

-
- -
-
-slab: Slab#
-

The structure of the slab on which the adsorbate is placed.

-
- -
- -
-
-class demo.ocpapi.AdsorbateSlabRelaxationResult#
-

Bases: _DataModel

-

Stores information about a single adsorbate slab configuration, including -outputs for the model used in relaxations.

-

The API to fetch relaxation results supports requesting a subset of fields -in order to limit the size of response payloads. Optional attributes will -be defined only if they are including the response.

-
-
-config_id: int#
-

ID of the configuration within the system.

-
- -
-
-status: Status#
-

The status of the request for information about this configuration.

-
- -
-
-system_id: str | None#
-

The ID of the system in which the configuration was originally submitted.

-
- -
-
-cell: Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]] | None#
-

3x3 matrix with unit cell vectors.

-
- -
-
-pbc: Tuple[bool, bool, bool] | None#
-

Whether the structure is periodic along the a, b, and c lattice vectors, -respectively.

-
- -
-
-numbers: List[int] | None#
-

The atomic number of each atom in the unit cell.

-
- -
-
-positions: List[Tuple[float, float, float]] | None#
-

The coordinates of each atom in the unit cell, relative to the cartesian -frame.

-
- -
-
-tags: List[int] | None#
-

Labels for each atom in the unit cell where 0 represents a subsurface atom -(fixed during optimization), 1 represents a surface atom, and 2 represents -an adsorbate atom.

-
- -
-
-energy: float | None#
-

The energy of the configuration.

-
- -
-
-energy_trajectory: List[float] | None#
-

The energy of the configuration at each point along the relaxation -trajectory.

-
- -
-
-forces: List[Tuple[float, float, float]] | None#
-

The forces on each atom in the relaxed structure.

-
- -
-
-to_ase_atoms() ase.Atoms#
-

Creates an ase.Atoms object with the positions, element numbers, -etc. populated from values on this object.

-

The predicted energy and forces will also be copied to the new -ase.Atoms object as a SinglePointCalculator (a calculator that -stores the results of an already-run simulation).

-
-
Returns:
-

ase.Atoms object with values from this object.

-
-
-
- -
- -
-
-class demo.ocpapi.AdsorbateSlabRelaxationsRequest#
-

Bases: _DataModel

-

Stores the request to submit a new batch of adsorbate slab relaxations.

-
-
-adsorbate: str#
-

Description of the adsorbate.

-
- -
-
-adsorbate_configs: List[Atoms]#
-

List of adsorbate placements being relaxed.

-
- -
-
-bulk: Bulk#
-

Information about the original bulk structure used to create the slab.

-
- -
-
-slab: Slab#
-

The structure of the slab on which adsorbates are placed.

-
- -
-
-model: str#
-

The type of the ML model being used during relaxations.

-
- -
-
-ephemeral: bool | None#
-

Whether the relaxations can be deleted (assume they cannot be deleted if -None).

-
- -
-
-adsorbate_reaction: str | None#
-

If possible, an html-formatted string describing the reaction will be added -to this field.

-
- -
- -
-
-class demo.ocpapi.AdsorbateSlabRelaxationsResults#
-

Bases: _DataModel

-

Stores the response from a request for results of adsorbate slab -relaxations.

-
-
-configs: List[AdsorbateSlabRelaxationResult]#
-

List of configurations in the system, each representing one placement of -an adsorbate on a slab surface.

-
- -
-
-omitted_config_ids: List[int]#
-

List of IDs of configurations that were requested but omitted by the -server. Results for these IDs can be requested again.

-
- -
- -
-
-class demo.ocpapi.AdsorbateSlabRelaxationsSystem#
-

Bases: _DataModel

-

Stores the response from a request to submit a new batch of adsorbate -slab relaxations.

-
-
-system_id: str#
-

Unique ID for this set of relaxations which can be used to fetch results -later.

-
- -
-
-config_ids: List[int]#
-

The list of IDs assigned to each of the input adsorbate placements, in the -same order in which they were submitted.

-
- -
- -
-
-class demo.ocpapi.Atoms#
-

Bases: _DataModel

-

Subset of the fields from an ASE Atoms object that are used within this -API.

-
-
-cell: Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]#
-

3x3 matrix with unit cell vectors.

-
- -
-
-pbc: Tuple[bool, bool, bool]#
-

Whether the structure is periodic along the a, b, and c lattice vectors, -respectively.

-
- -
-
-numbers: List[int]#
-

The atomic number of each atom in the unit cell.

-
- -
-
-positions: List[Tuple[float, float, float]]#
-

The coordinates of each atom in the unit cell, relative to the cartesian -frame.

-
- -
-
-tags: List[int]#
-

Labels for each atom in the unit cell where 0 represents a subsurface atom -(fixed during optimization), 1 represents a surface atom, and 2 represents -an adsorbate atom.

-
- -
-
-to_ase_atoms() ase.Atoms#
-

Creates an ase.Atoms object with the positions, element numbers, -etc. populated from values on this object.

-
-
Returns:
-

ase.Atoms object with values from this object.

-
-
-
- -
- -
-
-class demo.ocpapi.Bulk#
-

Bases: _DataModel

-

Stores information about a single bulk material.

-
-
-src_id: str#
-

The ID of the material.

-
- -
-
-formula: str#
-

The chemical formula of the material.

-
- -
-
-elements: List[str]#
-

The list of elements in the material.

-
- -
- -
-
-class demo.ocpapi.Bulks#
-

Bases: _DataModel

-

Stores the response from a request to fetch bulks supported in the API.

-
-
-bulks_supported: List[Bulk]#
-

List of bulks that can be used in the API.

-
- -
- -
-
-class demo.ocpapi.Model#
-

Bases: _DataModel

-

Stores information about a single model supported in the API.

-
-
-id: str#
-

The ID of the model.

-
- -
- -
-
-class demo.ocpapi.Models#
-

Bases: _DataModel

-

Stores the response from a request for models supported in the API.

-
-
-models: List[Model]#
-

The list of models that are supported.

-
- -
- -
-
-class demo.ocpapi.Slab#
-

Bases: _DataModel

-

Stores all information about a slab that is returned from the API.

-
-
-atoms: Atoms#
-

The structure of the slab.

-
- -
-
-metadata: SlabMetadata#
-

Extra information about the slab.

-
- -
- -
-
-class demo.ocpapi.SlabMetadata#
-

Bases: _DataModel

-

Stores metadata about a slab that is returned from the API.

-
-
-bulk_src_id: str#
-

The ID of the bulk material from which the slab was derived.

-
- -
-
-millers: Tuple[int, int, int]#
-

The Miller indices of the slab relative to bulk structure.

-
- -
-
-shift: float#
-

The position along the vector defined by the Miller indices at which a -cut was taken to generate the slab surface.

-
- -
-
-top: bool#
-

If False, the top and bottom surfaces for this millers/shift pair are -distinct and this slab represents the bottom surface.

-
- -
- -
-
-class demo.ocpapi.Slabs#
-

Bases: _DataModel

-

Stores the response from a request to fetch slabs for a bulk structure.

-
-
-slabs: List[Slab]#
-

The list of slabs that were generated from the input bulk structure.

-
- -
- -
-
-class demo.ocpapi.Status(*args, **kwds)#
-

Bases: enum.Enum

-

Relaxation status of a single adsorbate placement on a slab.

-
-
-NOT_AVAILABLE = 'not_available'#
-

The configuration exists but the result is not yet available. It is -possible that checking again in the future could yield a result.

-
- -
-
-FAILED_RELAXATION = 'failed_relaxation'#
-

The relaxation failed for this configuration.

-
- -
-
-SUCCESS = 'success'#
-

The relaxation was successful and the requested information about the -configuration was returned.

-
- -
-
-DOES_NOT_EXIST = 'does_not_exist'#
-

The requested configuration does not exist.

-
- -
-
-__str__() str#
-

Return str(self).

-
- -
- -
-
-demo.ocpapi.get_results_ui_url(api_host: str, system_id: str) str | None#
-

Generates the URL at which results for the input system can be -visualized.

-
-
Parameters:
-
    -
  • api_host – The API host on which the system was run.

  • -
  • system_id – ID of the system being visualized.

  • -
-
-
Returns:
-

The URL at which the input system can be visualized. None if the -API host is not recognized.

-
-
-
- -
-
-class demo.ocpapi.AdsorbateBindingSites#
-

Stores the inputs and results of a set of relaxations of adsorbate -placements on the surface of a slab.

-
-
-adsorbate: str#
-

Description of the adsorbate.

-
- -
-
-bulk: fairchem.demo.ocpapi.client.Bulk#
-

The bulk material that was being modeled.

-
- -
-
-model: str#
-

The type of the model that was run.

-
- -
-
-slabs: List[AdsorbateSlabRelaxations]#
-

The list of slabs that were generated from the bulk structure. Each -contains its own list of adsorbate placements.

-
- -
- -
-
-class demo.ocpapi.AdsorbateSlabRelaxations#
-

Stores the relaxations of adsorbate placements on the surface of a slab.

-
-
-slab: fairchem.demo.ocpapi.client.Slab#
-

The slab on which the adsorbate was placed.

-
- -
-
-configs: List[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationResult]#
-

Details of the relaxation of each adsorbate placement, including the -final position.

-
- -
-
-system_id: str#
-

The ID of the system that stores all of the relaxations.

-
- -
-
-api_host: str#
-

The API host on which the relaxations were run.

-
- -
-
-ui_url: str | None#
-

The URL at which results can be visualized.

-
- -
- -
-
-class demo.ocpapi.Lifetime(*args, **kwds)#
-

Bases: enum.Enum

-

Represents different lifetimes when running relaxations.

-
-
-SAVE#
-

The relaxation will be available on API servers indefinitely. It will not -be possible to delete the relaxation in the future.

-
- -
-
-MARK_EPHEMERAL#
-

The relaxation will be saved on API servers, but can be deleted at any time -in the future.

-
- -
-
-DELETE#
-

The relaxation will be deleted from API servers as soon as the results have -been fetched.

-
- -
- -
-
-exception demo.ocpapi.UnsupportedAdsorbateException(adsorbate: str)#
-

Bases: AdsorbatesException

-

Exception raised when an adsorbate is not supported in the API.

-
- -
-
-exception demo.ocpapi.UnsupportedBulkException(bulk: str)#
-

Bases: AdsorbatesException

-

Exception raised when a bulk material is not supported in the API.

-
- -
-
-exception demo.ocpapi.UnsupportedModelException(model: str, allowed_models: List[str])#
-

Bases: AdsorbatesException

-

Exception raised when a model is not supported in the API.

-
- -
-
-async demo.ocpapi.find_adsorbate_binding_sites(adsorbate: str, bulk: str, model: str = 'equiformer_v2_31M_s2ef_all_md', adslab_filter: Callable[[List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]], Awaitable[List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]]] = _DEFAULT_ADSLAB_FILTER, client: fairchem.demo.ocpapi.client.Client = DEFAULT_CLIENT, lifetime: Lifetime = Lifetime.SAVE) AdsorbateBindingSites#
-

Search for adsorbate binding sites on surfaces of a bulk material. -This executes the following steps:

-
-
    -
  1. Ensure that both the adsorbate and bulk are supported in the -OCP API.

  2. -
  3. Enumerate unique surfaces from the bulk material.

  4. -
  5. Enumerate likely binding sites for the input adsorbate on each -of the generated surfaces.

  6. -
  7. -
    Filter the list of generated adsorbate/slab (adslab) configurations

    using the input adslab_filter.

    -
    -
    -
  8. -
  9. Relax each generated surface+adsorbate structure by refining -atomic positions to minimize forces generated by the input model.

  10. -
-
-
-
Parameters:
-
    -
  • adsorbate – Description of the adsorbate to place.

  • -
  • bulk – The ID (typically Materials Project MP ID) of the bulk material -on which the adsorbate will be placed.

  • -
  • model – The type of the model to use when calculating forces during -relaxations.

  • -
  • adslab_filter – A function that modifies the set of adsorbate/slab -configurations that will be relaxed. This can be used to subselect -slabs and/or adsorbate configurations.

  • -
  • client – The OCP API client to use.

  • -
  • lifetime – Whether relaxations should be saved on the server, be marked -as ephemeral (allowing them to deleted in the future), or deleted -immediately.

  • -
-
-
Returns:
-

Details of each adsorbate binding site, including results of relaxing -to locally-optimized positions using the input model.

-
-
Raises:
-
-
-
-
- -
-
-async demo.ocpapi.get_adsorbate_slab_relaxation_results(system_id: str, config_ids: List[int] | None = None, fields: List[str] | None = None, client: fairchem.demo.ocpapi.client.Client = DEFAULT_CLIENT) List[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationResult]#
-

Wrapper around Client.get_adsorbate_slab_relaxations_results() that -handles retries, including re-fetching individual configurations that -are initially omitted.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • system_id – The system ID of the relaxations.

  • -
  • config_ids – If defined and not empty, a subset of configurations -to fetch. Otherwise all configurations are returned.

  • -
  • fields – If defined and not empty, a subset of fields in each -configuration to fetch. Otherwise all fields are returned.

  • -
-
-
Returns:
-

List of relaxation results, one for each adsorbate configuration in -the system.

-
-
-
- -
-
-async demo.ocpapi.wait_for_adsorbate_slab_relaxations(system_id: str, check_immediately: bool = False, slow_interval_sec: float = 30, fast_interval_sec: float = 10, pbar: tqdm.tqdm | None = None, client: fairchem.demo.ocpapi.client.Client = DEFAULT_CLIENT) Dict[int, fairchem.demo.ocpapi.client.Status]#
-

Blocks until all relaxations in the input system have finished, whether -successfully or not.

-

Relaxations are queued in the API, waiting until machines are ready to -run them. Once started, they can take 1-2 minutes to finish. This method -initially sleeps “slow_interval_sec” seconds between each check for any -relaxations having finished. Once at least one result is ready, subsequent -sleeps are for “fast_interval_sec” seconds.

-
-
Parameters:
-
    -
  • system_id – The ID of the system for which relaxations are running.

  • -
  • check_immediately – If False (default), sleep before the first check -for relaxations having finished. If True, check whether relaxations -have finished immediately on entering this function.

  • -
  • slow_interval_sec – The number of seconds to wait between each check -while all are still running.

  • -
  • fast_interval_sec – The number of seconds to wait between each check -when at least one relaxation has finished in the system.

  • -
  • pbar – A tqdm instance that tracks the number of configurations that -have finished. This will be updated with the number of individual -configurations whose relaxations have finished.

  • -
  • client – The client to use when making API calls.

  • -
-
-
Returns:
-

Map of config IDs in the system to their terminal status.

-
-
-
- -
-
-class demo.ocpapi.keep_all_slabs#
-

Adslab filter than returns all slabs.

-
-
-async __call__(adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-
- -
- -
-
-class demo.ocpapi.keep_slabs_with_miller_indices(miller_indices: Iterable[Tuple[int, int, int]])#
-

Adslab filter that keeps any slabs with the configured miller indices. -Slabs with other miller indices will be ignored.

-
-
-async __call__(adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-
- -
- -
-
-class demo.ocpapi.prompt_for_slabs_to_keep#
-

Adslab filter than presents the user with an interactive prompt to choose -which of the input slabs to keep.

-
-
-static _sort_key(adslab: fairchem.demo.ocpapi.client.AdsorbateSlabConfigs) Tuple[Tuple[int, int, int], float, str]#
-

Generates a sort key from the input adslab. Returns the miller indices, -shift, and top/bottom label so that they will be sorted by those values -in that order.

-
- -
-
-async __call__(adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-
- -
- -
-
-demo.ocpapi.NO_LIMIT: NoLimitType = 0#
-
- -
-
-demo.ocpapi.NoLimitType#
-
- -
-
-class demo.ocpapi.RateLimitLogging#
-

Controls logging when rate limits are hit.

-
-
-logger: logging.Logger#
-

The logger to use.

-
- -
-
-action: str#
-

A short description of the action being attempted.

-
- -
- -
-
-demo.ocpapi.retry_api_calls(max_attempts: int | NoLimitType = 3, rate_limit_logging: RateLimitLogging | None = None, fixed_wait_sec: float = 2, max_jitter_sec: float = 1) Any#
-

Decorator with sensible defaults for retrying calls to the OCP API.

-
-
Parameters:
-
    -
  • max_attempts – The maximum number of calls to make. If NO_LIMIT, -retries will be made forever.

  • -
  • rate_limit_logging – If not None, log statements will be generated -using this configuration when a rate limit is hit.

  • -
  • fixed_wait_sec – The fixed number of seconds to wait when retrying an -exception that does not include a retry-after value. The default -value is sensible; this is exposed mostly for testing.

  • -
  • max_jitter_sec – The maximum number of seconds that will be randomly -added to wait times. The default value is sensible; this is exposed -mostly for testing.

  • -
-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/tests/index.html b/autoapi/demo/ocpapi/tests/index.html deleted file mode 100644 index c27d3d6b8..000000000 --- a/autoapi/demo/ocpapi/tests/index.html +++ /dev/null @@ -1,730 +0,0 @@ - - - - - - - - - - - demo.ocpapi.tests — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

demo.ocpapi.tests

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

demo.ocpapi.tests#

-
-

Subpackages#

- -
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/tests/integration/client/test_client/index.html b/autoapi/demo/ocpapi/tests/integration/client/test_client/index.html deleted file mode 100644 index df61c1416..000000000 --- a/autoapi/demo/ocpapi/tests/integration/client/test_client/index.html +++ /dev/null @@ -1,855 +0,0 @@ - - - - - - - - - - - demo.ocpapi.tests.integration.client.test_client — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.tests.integration.client.test_client#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestClient

Tests that calls to a real server are handled correctly.

-
-
-

Functions#

- - - - - - -

_ensure_system_deleted(→ AsyncGenerator[None, None])

Immediately yields control to the caller. When control returns to this

-
-
-

Attributes#

- - - - - - -

log

-
-
-demo.ocpapi.tests.integration.client.test_client.log#
-
- -
-
-async demo.ocpapi.tests.integration.client.test_client._ensure_system_deleted(client: fairchem.demo.ocpapi.client.Client, system_id: str) AsyncGenerator[None, None]#
-

Immediately yields control to the caller. When control returns to this -function, try to delete the system with the input id.

-
- -
-
-class demo.ocpapi.tests.integration.client.test_client.TestClient(methodName='runTest')#
-

Bases: unittest.IsolatedAsyncioTestCase

-

Tests that calls to a real server are handled correctly.

-
-
-CLIENT: fairchem.demo.ocpapi.client.Client#
-
- -
-
-KNOWN_SYSTEM_ID: str = 'f9eacd8f-748c-41dd-ae43-f263dd36d735'#
-
- -
-
-async test_get_models() None#
-
- -
-
-async test_get_bulks() None#
-
- -
-
-async test_get_adsorbates() None#
-
- -
-
-async test_get_slabs() None#
-
- -
-
-async test_get_adsorbate_slab_configs() None#
-
- -
-
-async test_submit_adsorbate_slab_relaxations__gemnet_oc() None#
-
- -
-
-async test_submit_adsorbate_slab_relaxations__equiformer_v2() None#
-
- -
-
-async test_get_adsorbate_slab_relaxations_request() None#
-
- -
-
-async test_get_adsorbate_slab_relaxations_results__all_fields_and_configs() None#
-
- -
-
-async test_get_adsorbate_slab_relaxations_results__limited_fields_and_configs() None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.html b/autoapi/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.html deleted file mode 100644 index 5eba263fd..000000000 --- a/autoapi/demo/ocpapi/tests/integration/workflows/test_adsorbates/index.html +++ /dev/null @@ -1,766 +0,0 @@ - - - - - - - - - - - demo.ocpapi.tests.integration.workflows.test_adsorbates — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.tests.integration.workflows.test_adsorbates#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestAdsorbates

Tests that workflow methods run against a real server execute correctly.

-
-
-class demo.ocpapi.tests.integration.workflows.test_adsorbates.TestAdsorbates(methodName='runTest')#
-

Bases: unittest.IsolatedAsyncioTestCase

-

Tests that workflow methods run against a real server execute correctly.

-
-
-CLIENT: fairchem.demo.ocpapi.client.Client#
-
- -
-
-KNOWN_SYSTEM_ID: str = 'f9eacd8f-748c-41dd-ae43-f263dd36d735'#
-
- -
-
-async test_get_adsorbate_slab_relaxation_results() None#
-
- -
-
-async test_wait_for_adsorbate_slab_relaxations() None#
-
- -
-
-async test_find_adsorbate_binding_sites() None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/tests/unit/client/test_client/index.html b/autoapi/demo/ocpapi/tests/unit/client/test_client/index.html deleted file mode 100644 index 61d127e04..000000000 --- a/autoapi/demo/ocpapi/tests/unit/client/test_client/index.html +++ /dev/null @@ -1,822 +0,0 @@ - - - - - - - - - - - demo.ocpapi.tests.unit.client.test_client — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.tests.unit.client.test_client#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestClient

Tests with mocked responses to ensure that they are handled correctly.

-
-
-class demo.ocpapi.tests.unit.client.test_client.TestClient(methodName='runTest')#
-

Bases: unittest.IsolatedAsyncioTestCase

-

Tests with mocked responses to ensure that they are handled correctly.

-
-
-async _run_common_tests_against_route(method: str, route: str, client_method_name: str, successful_response_code: int, successful_response_body: str, successful_response_object: fairchem.demo.ocpapi.client.models._DataModel | None, client_method_args: Dict[str, Any] | None = None, expected_request_params: Dict[str, Any] | None = None, expected_request_body: Dict[str, Any] | None = None) None#
-
- -
-
-test_host() None#
-
- -
-
-async test_get_models() None#
-
- -
-
-async test_get_bulks() None#
-
- -
-
-async test_get_adsorbates() None#
-
- -
-
-async test_get_slabs__bulk_by_id() None#
-
- -
-
-async test_get_slabs__bulk_by_obj() None#
-
- -
-
-async test_get_adsorbate_slab_configurations() None#
-
- -
-
-async test_submit_adsorbate_slab_relaxations() None#
-
- -
-
-async test_get_adsorbate_slab_relaxations_request() None#
-
- -
-
-async test_get_adsorbate_slab_relaxations_results__all_args() None#
-
- -
-
-async test_get_adsorbate_slab_relaxations_results__req_args_only() None#
-
- -
-
-async test_delete_adsorbate_slab_relaxations() None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/tests/unit/client/test_models/index.html b/autoapi/demo/ocpapi/tests/unit/client/test_models/index.html deleted file mode 100644 index ac2e18e68..000000000 --- a/autoapi/demo/ocpapi/tests/unit/client/test_models/index.html +++ /dev/null @@ -1,1000 +0,0 @@ - - - - - - - - - - - demo.ocpapi.tests.unit.client.test_models — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.tests.unit.client.test_models#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ModelTestWrapper

TestModel

Serde tests for the Model data model.

TestModels

Serde tests for the Models data model.

TestBulk

Serde tests for the Bulk data model.

TestBulks

Serde tests for the Bulks data model.

TestAdsorbates

Serde tests for the Adsorbates data model.

TestAtoms

Serde tests for the Atoms data model.

TestSlabMetadata

Serde tests for the SlabMetadata data model.

TestSlab

Serde tests for the Slab data model.

TestSlabs

Serde tests for the Slabs data model.

TestAdsorbateSlabConfigs

Serde tests for the AdsorbateSlabConfigs data model.

TestAdsorbateSlabRelaxationsSystem

Serde tests for the AdsorbateSlabRelaxationsSystem data model.

TestAdsorbateSlabRelaxationsRequest

Serde tests for the AdsorbateSlabRelaxationsRequest data model.

TestAdsorbateSlabRelaxationsRequest_req_fields_only

Serde tests for the AdsorbateSlabRelaxationsRequest data model in which

TestAdsorbateSlabRelaxationResult

Serde tests for the AdsorbateSlabRelaxationResult data model.

TestAdsorbateSlabRelaxationResult_req_fields_only

Serde tests for the AdsorbateSlabRelaxationResult data model in which

TestAdsorbateSlabRelaxationsResults

Serde tests for the AdsorbateSlabRelaxationsResults data model.

-
-
-

Attributes#

- - - - - - -

T

-
-
-demo.ocpapi.tests.unit.client.test_models.T#
-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.ModelTestWrapper#
-
-
-class ModelTest(*args: Any, obj: T, obj_json: str, **kwargs: Any)#
-

Bases: unittest.TestCase, Generic[T]

-

Base class for all tests below that assert behavior of data models.

-
-
-test_from_json() None#
-
- -
-
-test_to_json() None#
-
- -
-
-assertJsonEqual(first: str, second: str) None#
-

Compares two JSON-formatted strings by deserializing them and then -comparing the generated built-in types.

-
- -
- -
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestModel(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.Model]

-

Serde tests for the Model data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestModels(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.Models]

-

Serde tests for the Models data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestBulk(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.Bulk]

-

Serde tests for the Bulk data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestBulks(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.Bulks]

-

Serde tests for the Bulks data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestAdsorbates(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.Adsorbates]

-

Serde tests for the Adsorbates data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestAtoms(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.Atoms]

-

Serde tests for the Atoms data model.

-
-
-test_to_ase_atoms() None#
-
- -
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestSlabMetadata(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.SlabMetadata]

-

Serde tests for the SlabMetadata data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestSlab(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.Slab]

-

Serde tests for the Slab data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestSlabs(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.Slabs]

-

Serde tests for the Slabs data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabConfigs(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]

-

Serde tests for the AdsorbateSlabConfigs data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsSystem(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationsSystem]

-

Serde tests for the AdsorbateSlabRelaxationsSystem data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsRequest(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationsRequest]

-

Serde tests for the AdsorbateSlabRelaxationsRequest data model.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsRequest_req_fields_only(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationsRequest]

-

Serde tests for the AdsorbateSlabRelaxationsRequest data model in which -optional fields are omitted.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationResult(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationResult]

-

Serde tests for the AdsorbateSlabRelaxationResult data model.

-
-
-test_to_ase_atoms() None#
-
- -
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationResult_req_fields_only(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationResult]

-

Serde tests for the AdsorbateSlabRelaxationResult data model in which -optional fields are omitted.

-
- -
-
-class demo.ocpapi.tests.unit.client.test_models.TestAdsorbateSlabRelaxationsResults(*args: Any, **kwargs: Any)#
-

Bases: ModelTestWrapper[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationsResults]

-

Serde tests for the AdsorbateSlabRelaxationsResults data model.

-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/tests/unit/index.html b/autoapi/demo/ocpapi/tests/unit/index.html deleted file mode 100644 index e5e4a8a06..000000000 --- a/autoapi/demo/ocpapi/tests/unit/index.html +++ /dev/null @@ -1,715 +0,0 @@ - - - - - - - - - - - demo.ocpapi.tests.unit — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

demo.ocpapi.tests.unit

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

demo.ocpapi.tests.unit#

-
-

Subpackages#

- -
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.html b/autoapi/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.html deleted file mode 100644 index 6c88bccc1..000000000 --- a/autoapi/demo/ocpapi/tests/unit/workflows/test_adsorbates/index.html +++ /dev/null @@ -1,888 +0,0 @@ - - - - - - - - - - - demo.ocpapi.tests.unit.workflows.test_adsorbates — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.tests.unit.workflows.test_adsorbates#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

MockGetRelaxationResults

Helper that can be used to mock calls to

TestMockGetRelaxationResults

A class whose instances are single test cases.

TestAdsorbates

A class whose instances are single test cases.

-
-
-exception demo.ocpapi.tests.unit.workflows.test_adsorbates.TestException#
-

Bases: Exception

-

Common base class for all non-exit exceptions.

-
-
-__test__ = False#
-
- -
- -
-
-class demo.ocpapi.tests.unit.workflows.test_adsorbates.MockGetRelaxationResults(num_configs: int, max_configs_to_return: int, status_to_return: Iterable[fairchem.demo.ocpapi.client.Status] | None = None, raise_on_first_call: Exception | None = None)#
-

Helper that can be used to mock calls to -Client.get_adsorbate_slab_relaxations_results(). This allows for -some configs to be returned with “success” status and others to be -omitted, similar to the behavior in the API.

-
-
-__call__(*args: Any, config_ids: List[int] | None = None, **kwargs: Any) fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationsResults#
-
- -
- -
-
-class demo.ocpapi.tests.unit.workflows.test_adsorbates.TestMockGetRelaxationResults(methodName='runTest')#
-

Bases: unittest.TestCase

-

A class whose instances are single test cases.

-

By default, the test code itself should be placed in a method named -‘runTest’.

-

If the fixture may be used for many test cases, create as -many test methods as are needed. When instantiating such a TestCase -subclass, specify in the constructor arguments the name of the test method -that the instance is to execute.

-

Test authors should subclass TestCase for their own tests. Construction -and deconstruction of the test’s environment (‘fixture’) can be -implemented by overriding the ‘setUp’ and ‘tearDown’ methods respectively.

-

If it is necessary to override the __init__ method, the base class -__init__ method must always be called. It is important that subclasses -should not change the signature of their __init__ method, since instances -of the classes are instantiated automatically by parts of the framework -in order to be run.

-

When subclassing TestCase, you can set these attributes: -* failureException: determines which exception will be raised when

-
-

the instance’s assertion methods fail; test methods raising this -exception will be deemed to have ‘failed’ rather than ‘errored’.

-
-
    -
  • -
    longMessage: determines whether long messages (including repr of

    objects used in assert methods) will be printed on failure in addition -to any explicit message passed.

    -
    -
    -
  • -
  • -
    maxDiff: sets the maximum length of a diff in failure messages

    by assert methods using difflib. It is looked up as an instance -attribute so can be configured by individual tests if required.

    -
    -
    -
  • -
-
-
-test___call__() None#
-
- -
- -
-
-class demo.ocpapi.tests.unit.workflows.test_adsorbates.TestAdsorbates(methodName='runTest')#
-

Bases: unittest.IsolatedAsyncioTestCase

-

A class whose instances are single test cases.

-

By default, the test code itself should be placed in a method named -‘runTest’.

-

If the fixture may be used for many test cases, create as -many test methods as are needed. When instantiating such a TestCase -subclass, specify in the constructor arguments the name of the test method -that the instance is to execute.

-

Test authors should subclass TestCase for their own tests. Construction -and deconstruction of the test’s environment (‘fixture’) can be -implemented by overriding the ‘setUp’ and ‘tearDown’ methods respectively.

-

If it is necessary to override the __init__ method, the base class -__init__ method must always be called. It is important that subclasses -should not change the signature of their __init__ method, since instances -of the classes are instantiated automatically by parts of the framework -in order to be run.

-

When subclassing TestCase, you can set these attributes: -* failureException: determines which exception will be raised when

-
-

the instance’s assertion methods fail; test methods raising this -exception will be deemed to have ‘failed’ rather than ‘errored’.

-
-
    -
  • -
    longMessage: determines whether long messages (including repr of

    objects used in assert methods) will be printed on failure in addition -to any explicit message passed.

    -
    -
    -
  • -
  • -
    maxDiff: sets the maximum length of a diff in failure messages

    by assert methods using difflib. It is looked up as an instance -attribute so can be configured by individual tests if required.

    -
    -
    -
  • -
-
-
-async test_get_adsorbate_slab_relaxation_results() None#
-
- -
-
-async test_wait_for_adsorbate_slab_relaxations() None#
-
- -
-
-async test_find_adsorbate_binding_sites() None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/tests/unit/workflows/test_filter/index.html b/autoapi/demo/ocpapi/tests/unit/workflows/test_filter/index.html deleted file mode 100644 index 091dfd118..000000000 --- a/autoapi/demo/ocpapi/tests/unit/workflows/test_filter/index.html +++ /dev/null @@ -1,805 +0,0 @@ - - - - - - - - - - - demo.ocpapi.tests.unit.workflows.test_filter — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.tests.unit.workflows.test_filter#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestFilter

A class whose instances are single test cases.

-
-
-

Functions#

- - - - - - -

_new_adslab(...)

-
-
-demo.ocpapi.tests.unit.workflows.test_filter._new_adslab(miller_indices: Tuple[int, int, int] | None = None) fairchem.demo.ocpapi.client.AdsorbateSlabConfigs#
-
- -
-
-class demo.ocpapi.tests.unit.workflows.test_filter.TestFilter(methodName='runTest')#
-

Bases: unittest.IsolatedAsyncioTestCase

-

A class whose instances are single test cases.

-

By default, the test code itself should be placed in a method named -‘runTest’.

-

If the fixture may be used for many test cases, create as -many test methods as are needed. When instantiating such a TestCase -subclass, specify in the constructor arguments the name of the test method -that the instance is to execute.

-

Test authors should subclass TestCase for their own tests. Construction -and deconstruction of the test’s environment (‘fixture’) can be -implemented by overriding the ‘setUp’ and ‘tearDown’ methods respectively.

-

If it is necessary to override the __init__ method, the base class -__init__ method must always be called. It is important that subclasses -should not change the signature of their __init__ method, since instances -of the classes are instantiated automatically by parts of the framework -in order to be run.

-

When subclassing TestCase, you can set these attributes: -* failureException: determines which exception will be raised when

-
-

the instance’s assertion methods fail; test methods raising this -exception will be deemed to have ‘failed’ rather than ‘errored’.

-
-
    -
  • -
    longMessage: determines whether long messages (including repr of

    objects used in assert methods) will be printed on failure in addition -to any explicit message passed.

    -
    -
    -
  • -
  • -
    maxDiff: sets the maximum length of a diff in failure messages

    by assert methods using difflib. It is looked up as an instance -attribute so can be configured by individual tests if required.

    -
    -
    -
  • -
-
-
-async test_keep_all_slabs() None#
-
- -
-
-async test_keep_slabs_with_miller_indices() None#
-
- -
-
-async test_prompt_for_slabs_to_keep() None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/tests/unit/workflows/test_retry/index.html b/autoapi/demo/ocpapi/tests/unit/workflows/test_retry/index.html deleted file mode 100644 index 75d5c99ea..000000000 --- a/autoapi/demo/ocpapi/tests/unit/workflows/test_retry/index.html +++ /dev/null @@ -1,834 +0,0 @@ - - - - - - - - - - - demo.ocpapi.tests.unit.workflows.test_retry — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.tests.unit.workflows.test_retry#

-
-

Module Contents#

-
-

Classes#

- - - - - - -

TestRetry

A class whose instances are single test cases.

-
-
-

Functions#

- - - - - - - - - -

returns(→ Callable[[], T])

raises(→ Callable[[], None])

-
-
-

Attributes#

- - - - - - -

T

-
-
-demo.ocpapi.tests.unit.workflows.test_retry.T#
-
- -
-
-demo.ocpapi.tests.unit.workflows.test_retry.returns(val: T) Callable[[], T]#
-
- -
-
-demo.ocpapi.tests.unit.workflows.test_retry.raises(ex: Exception) Callable[[], None]#
-
- -
-
-class demo.ocpapi.tests.unit.workflows.test_retry.TestRetry(methodName='runTest')#
-

Bases: unittest.TestCase

-

A class whose instances are single test cases.

-

By default, the test code itself should be placed in a method named -‘runTest’.

-

If the fixture may be used for many test cases, create as -many test methods as are needed. When instantiating such a TestCase -subclass, specify in the constructor arguments the name of the test method -that the instance is to execute.

-

Test authors should subclass TestCase for their own tests. Construction -and deconstruction of the test’s environment (‘fixture’) can be -implemented by overriding the ‘setUp’ and ‘tearDown’ methods respectively.

-

If it is necessary to override the __init__ method, the base class -__init__ method must always be called. It is important that subclasses -should not change the signature of their __init__ method, since instances -of the classes are instantiated automatically by parts of the framework -in order to be run.

-

When subclassing TestCase, you can set these attributes: -* failureException: determines which exception will be raised when

-
-

the instance’s assertion methods fail; test methods raising this -exception will be deemed to have ‘failed’ rather than ‘errored’.

-
-
    -
  • -
    longMessage: determines whether long messages (including repr of

    objects used in assert methods) will be printed on failure in addition -to any explicit message passed.

    -
    -
    -
  • -
  • -
    maxDiff: sets the maximum length of a diff in failure messages

    by assert methods using difflib. It is looked up as an instance -attribute so can be configured by individual tests if required.

    -
    -
    -
  • -
-
-
-test_retry_api_calls__results() None#
-
- -
-
-test_retry_api_calls__wait() None#
-
- -
-
-test_retry_api_calls__logging() None#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/workflows/adsorbates/index.html b/autoapi/demo/ocpapi/workflows/adsorbates/index.html deleted file mode 100644 index ff6d95716..000000000 --- a/autoapi/demo/ocpapi/workflows/adsorbates/index.html +++ /dev/null @@ -1,1407 +0,0 @@ - - - - - - - - - - - demo.ocpapi.workflows.adsorbates — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.workflows.adsorbates#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

Lifetime

Represents different lifetimes when running relaxations.

AdsorbateSlabRelaxations

Stores the relaxations of adsorbate placements on the surface of a slab.

AdsorbateBindingSites

Stores the inputs and results of a set of relaxations of adsorbate

-
-
-

Functions#

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

_setup_log_record_factory(→ None)

Adds a log record factory that stores information about the currently

_ensure_model_supported(→ None)

Checks that the input model is supported in the API.

_get_bulk_if_supported(→ fairchem.demo.ocpapi.client.Bulk)

Returns the object from the input bulk if it is supported in the API.

_ensure_adsorbate_supported(→ None)

Checks that the input adsorbate is supported in the API.

_get_slabs(→ List[fairchem.demo.ocpapi.client.Slab])

Enumerates surfaces for the input bulk material.

_get_absorbate_configs_on_slab(...)

Generate initial guesses at adsorbate binding sites on the input slab.

_get_absorbate_configs_on_slab_with_logging(...)

Wrapper around _get_absorbate_configs_on_slab that adds logging.

_get_adsorbate_configs_on_slabs(...)

Finds candidate adsorbate binding sites on each of the input slabs.

_submit_relaxations(→ str)

Start relaxations for each of the input adsorbate configurations on the

_submit_relaxations_with_progress_logging(→ str)

Wrapper around _submit_relaxations that adds periodic logging in case

get_adsorbate_slab_relaxation_results(...)

Wrapper around Client.get_adsorbate_slab_relaxations_results() that

wait_for_adsorbate_slab_relaxations(→ Dict[int, ...)

Blocks until all relaxations in the input system have finished, whether

_delete_system(→ None)

Deletes the input system, with retries on failed attempts.

_ensure_system_deleted(→ AsyncGenerator[None, None])

Immediately yields control to the caller. When control returns to this

_run_relaxations_on_slab(→ AdsorbateSlabRelaxations)

Start relaxations for each adsorbate configuration on the input slab

_refresh_pbar(→ None)

Helper function that refreshes the input progress bar on a regular

_relax_binding_sites_on_slabs(→ AdsorbateBindingSites)

Search for adsorbate binding sites on the input slab.

find_adsorbate_binding_sites(→ AdsorbateBindingSites)

Search for adsorbate binding sites on surfaces of a bulk material.

-
-
-

Attributes#

- - - - - - - - - - - - - - - -

_CTX_AD_BULK

_CTX_SLAB

DEFAULT_CLIENT

_DEFAULT_ADSLAB_FILTER

-
-
-demo.ocpapi.workflows.adsorbates._CTX_AD_BULK: contextvars.ContextVar[Tuple[str, str]]#
-
- -
-
-demo.ocpapi.workflows.adsorbates._CTX_SLAB: contextvars.ContextVar[fairchem.demo.ocpapi.client.Slab]#
-
- -
-
-demo.ocpapi.workflows.adsorbates._setup_log_record_factory() None#
-

Adds a log record factory that stores information about the currently -running job on a log message.

-
- -
-
-demo.ocpapi.workflows.adsorbates.DEFAULT_CLIENT: fairchem.demo.ocpapi.client.Client#
-
- -
-
-exception demo.ocpapi.workflows.adsorbates.AdsorbatesException#
-

Bases: Exception

-

Base exception for all others in this module.

-
- -
-
-exception demo.ocpapi.workflows.adsorbates.UnsupportedModelException(model: str, allowed_models: List[str])#
-

Bases: AdsorbatesException

-

Exception raised when a model is not supported in the API.

-
- -
-
-exception demo.ocpapi.workflows.adsorbates.UnsupportedBulkException(bulk: str)#
-

Bases: AdsorbatesException

-

Exception raised when a bulk material is not supported in the API.

-
- -
-
-exception demo.ocpapi.workflows.adsorbates.UnsupportedAdsorbateException(adsorbate: str)#
-

Bases: AdsorbatesException

-

Exception raised when an adsorbate is not supported in the API.

-
- -
-
-class demo.ocpapi.workflows.adsorbates.Lifetime(*args, **kwds)#
-

Bases: enum.Enum

-

Represents different lifetimes when running relaxations.

-
-
-SAVE#
-

The relaxation will be available on API servers indefinitely. It will not -be possible to delete the relaxation in the future.

-
- -
-
-MARK_EPHEMERAL#
-

The relaxation will be saved on API servers, but can be deleted at any time -in the future.

-
- -
-
-DELETE#
-

The relaxation will be deleted from API servers as soon as the results have -been fetched.

-
- -
- -
-
-class demo.ocpapi.workflows.adsorbates.AdsorbateSlabRelaxations#
-

Stores the relaxations of adsorbate placements on the surface of a slab.

-
-
-slab: fairchem.demo.ocpapi.client.Slab#
-

The slab on which the adsorbate was placed.

-
- -
-
-configs: List[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationResult]#
-

Details of the relaxation of each adsorbate placement, including the -final position.

-
- -
-
-system_id: str#
-

The ID of the system that stores all of the relaxations.

-
- -
-
-api_host: str#
-

The API host on which the relaxations were run.

-
- -
-
-ui_url: str | None#
-

The URL at which results can be visualized.

-
- -
- -
-
-class demo.ocpapi.workflows.adsorbates.AdsorbateBindingSites#
-

Stores the inputs and results of a set of relaxations of adsorbate -placements on the surface of a slab.

-
-
-adsorbate: str#
-

Description of the adsorbate.

-
- -
-
-bulk: fairchem.demo.ocpapi.client.Bulk#
-

The bulk material that was being modeled.

-
- -
-
-model: str#
-

The type of the model that was run.

-
- -
-
-slabs: List[AdsorbateSlabRelaxations]#
-

The list of slabs that were generated from the bulk structure. Each -contains its own list of adsorbate placements.

-
- -
- -
-
-async demo.ocpapi.workflows.adsorbates._ensure_model_supported(client: fairchem.demo.ocpapi.client.Client, model: str) None#
-

Checks that the input model is supported in the API.

-
-
Parameters:
-
    -
  • client – The client to use when making requests to the API.

  • -
  • model – The model to check.

  • -
-
-
Raises:
-

UnsupportedModelException – If the model is not supported.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._get_bulk_if_supported(client: fairchem.demo.ocpapi.client.Client, bulk: str) fairchem.demo.ocpapi.client.Bulk#
-

Returns the object from the input bulk if it is supported in the API.

-
-
Parameters:
-
    -
  • client – The client to use when making requests to the API.

  • -
  • bulk – The bulk to fetch.

  • -
-
-
Raises:
-

UnsupportedBulkException – If the requested bulk is not supported.

-
-
Returns:
-

Bulk instance for the input type.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._ensure_adsorbate_supported(client: fairchem.demo.ocpapi.client.Client, adsorbate: str) None#
-

Checks that the input adsorbate is supported in the API.

-
-
Parameters:
-
    -
  • client – The client to use when making requests to the API.

  • -
  • adsorbate – The adsorbate to check.

  • -
-
-
Raises:
-

UnsupportedAdsorbateException – If the adsorbate is not supported.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._get_slabs(client: fairchem.demo.ocpapi.client.Client, bulk: fairchem.demo.ocpapi.client.Bulk) List[fairchem.demo.ocpapi.client.Slab]#
-

Enumerates surfaces for the input bulk material.

-
-
Parameters:
-
    -
  • client – The client to use when making requests to the API.

  • -
  • bulk – The bulk material from which slabs will be generated.

  • -
-
-
Returns:
-

The list of slabs that were generated.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._get_absorbate_configs_on_slab(client: fairchem.demo.ocpapi.client.Client, adsorbate: str, slab: fairchem.demo.ocpapi.client.Slab) fairchem.demo.ocpapi.client.AdsorbateSlabConfigs#
-

Generate initial guesses at adsorbate binding sites on the input slab.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • adsorbate – Description of the adsorbate to place.

  • -
  • slab – The slab on which the adsorbate should be placed.

  • -
-
-
Returns:
-

An updated slab instance that has had tags applied to it and a list -of Atoms objects, each with the positions of the adsorbate atoms on -one of the candidate binding sites.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._get_absorbate_configs_on_slab_with_logging(client: fairchem.demo.ocpapi.client.Client, adsorbate: str, slab: fairchem.demo.ocpapi.client.Slab) fairchem.demo.ocpapi.client.AdsorbateSlabConfigs#
-

Wrapper around _get_absorbate_configs_on_slab that adds logging.

-
- -
-
-async demo.ocpapi.workflows.adsorbates._get_adsorbate_configs_on_slabs(client: fairchem.demo.ocpapi.client.Client, adsorbate: str, slabs: List[fairchem.demo.ocpapi.client.Slab]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-

Finds candidate adsorbate binding sites on each of the input slabs.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • adsorbate – Description of the adsorbate to place.

  • -
  • slabs – The slabs on which the adsorbate should be placed.

  • -
-
-
Returns:
-

List of slabs and, for each, the positions of the adsorbate -atoms in the potential binding site.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._submit_relaxations(client: fairchem.demo.ocpapi.client.Client, adsorbate: str, adsorbate_configs: List[fairchem.demo.ocpapi.client.Atoms], bulk: fairchem.demo.ocpapi.client.Bulk, slab: fairchem.demo.ocpapi.client.Slab, model: str, ephemeral: bool) str#
-

Start relaxations for each of the input adsorbate configurations on the -input slab.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • adsorbate – Description of the adsorbate to place.

  • -
  • adsorbate_configs – Positions of the adsorbate on the slab. Each -will be relaxed independently.

  • -
  • bulk – The bulk material from which the slab was generated.

  • -
  • slab – The slab that should be searched for adsorbate binding sites.

  • -
  • model – The model to use when evaluating forces and energies.

  • -
  • ephemeral – Whether the relaxations should be marked as ephemeral.

  • -
-
-
Returns:
-

The system ID of the relaxation run, which can be used to fetch results -as they become available.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._submit_relaxations_with_progress_logging(client: fairchem.demo.ocpapi.client.Client, adsorbate: str, adsorbate_configs: List[fairchem.demo.ocpapi.client.Atoms], bulk: fairchem.demo.ocpapi.client.Bulk, slab: fairchem.demo.ocpapi.client.Slab, model: str, ephemeral: bool) str#
-

Wrapper around _submit_relaxations that adds periodic logging in case -calls to submit relaxations are being rate limited.

-
- -
-
-async demo.ocpapi.workflows.adsorbates.get_adsorbate_slab_relaxation_results(system_id: str, config_ids: List[int] | None = None, fields: List[str] | None = None, client: fairchem.demo.ocpapi.client.Client = DEFAULT_CLIENT) List[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationResult]#
-

Wrapper around Client.get_adsorbate_slab_relaxations_results() that -handles retries, including re-fetching individual configurations that -are initially omitted.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • system_id – The system ID of the relaxations.

  • -
  • config_ids – If defined and not empty, a subset of configurations -to fetch. Otherwise all configurations are returned.

  • -
  • fields – If defined and not empty, a subset of fields in each -configuration to fetch. Otherwise all fields are returned.

  • -
-
-
Returns:
-

List of relaxation results, one for each adsorbate configuration in -the system.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates.wait_for_adsorbate_slab_relaxations(system_id: str, check_immediately: bool = False, slow_interval_sec: float = 30, fast_interval_sec: float = 10, pbar: tqdm.tqdm | None = None, client: fairchem.demo.ocpapi.client.Client = DEFAULT_CLIENT) Dict[int, fairchem.demo.ocpapi.client.Status]#
-

Blocks until all relaxations in the input system have finished, whether -successfully or not.

-

Relaxations are queued in the API, waiting until machines are ready to -run them. Once started, they can take 1-2 minutes to finish. This method -initially sleeps “slow_interval_sec” seconds between each check for any -relaxations having finished. Once at least one result is ready, subsequent -sleeps are for “fast_interval_sec” seconds.

-
-
Parameters:
-
    -
  • system_id – The ID of the system for which relaxations are running.

  • -
  • check_immediately – If False (default), sleep before the first check -for relaxations having finished. If True, check whether relaxations -have finished immediately on entering this function.

  • -
  • slow_interval_sec – The number of seconds to wait between each check -while all are still running.

  • -
  • fast_interval_sec – The number of seconds to wait between each check -when at least one relaxation has finished in the system.

  • -
  • pbar – A tqdm instance that tracks the number of configurations that -have finished. This will be updated with the number of individual -configurations whose relaxations have finished.

  • -
  • client – The client to use when making API calls.

  • -
-
-
Returns:
-

Map of config IDs in the system to their terminal status.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._delete_system(client: fairchem.demo.ocpapi.client.Client, system_id: str) None#
-

Deletes the input system, with retries on failed attempts.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • system_id – The ID of the system to delete.

  • -
-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._ensure_system_deleted(client: fairchem.demo.ocpapi.client.Client, system_id: str) AsyncGenerator[None, None]#
-

Immediately yields control to the caller. When control returns to this -function, try to delete the system with the input id.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • system_id – The ID of the system to delete.

  • -
-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._run_relaxations_on_slab(client: fairchem.demo.ocpapi.client.Client, adsorbate: str, adsorbate_configs: List[fairchem.demo.ocpapi.client.Atoms], bulk: fairchem.demo.ocpapi.client.Bulk, slab: fairchem.demo.ocpapi.client.Slab, model: str, lifetime: Lifetime, pbar: tqdm.tqdm) AdsorbateSlabRelaxations#
-

Start relaxations for each adsorbate configuration on the input slab -and wait for all to finish.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • adsorbate – Description of the adsorbate to place.

  • -
  • adsorbate_configs – The positions of atoms in each adsorbate placement -to be relaxed.

  • -
  • bulk – The bulk material from which the slab was generated.

  • -
  • slab – The slab that should be searched for adsorbate binding sites.

  • -
  • model – The model to use when evaluating forces and energies.

  • -
  • lifetime – Whether relaxations should be saved on the server, be marked -as ephemeral (allowing them to deleted in the future), or deleted -immediately.

  • -
  • pbar – A progress bar to update as relaxations finish.

  • -
-
-
Returns:
-

Details of each adsorbate placement, including its relaxed position.

-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._refresh_pbar(pbar: tqdm.tqdm, interval_sec: float) None#
-

Helper function that refreshes the input progress bar on a regular -schedule. This function never returns; it must be cancelled.

-
-
Parameters:
-
    -
  • pbar – The progress bar to refresh.

  • -
  • interval_sec – The number of seconds to wait between each refresh.

  • -
-
-
-
- -
-
-async demo.ocpapi.workflows.adsorbates._relax_binding_sites_on_slabs(client: fairchem.demo.ocpapi.client.Client, adsorbate: str, bulk: fairchem.demo.ocpapi.client.Bulk, adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs], model: str, lifetime: Lifetime) AdsorbateBindingSites#
-

Search for adsorbate binding sites on the input slab.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • adsorbate – Description of the adsorbate to place.

  • -
  • bulk – The bulk material from which the slab was generated.

  • -
  • adslabs – The slabs and, for each, the binding sites that should be -relaxed.

  • -
  • model – The model to use when evaluating forces and energies.

  • -
  • lifetime – Whether relaxations should be saved on the server, be marked -as ephemeral (allowing them to deleted in the future), or deleted -immediately.

  • -
-
-
Returns:
-

Details of each adsorbate placement, including its relaxed position.

-
-
-
- -
-
-demo.ocpapi.workflows.adsorbates._DEFAULT_ADSLAB_FILTER: Callable[[List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]], Awaitable[List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]]]#
-
- -
-
-async demo.ocpapi.workflows.adsorbates.find_adsorbate_binding_sites(adsorbate: str, bulk: str, model: str = 'equiformer_v2_31M_s2ef_all_md', adslab_filter: Callable[[List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]], Awaitable[List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]]] = _DEFAULT_ADSLAB_FILTER, client: fairchem.demo.ocpapi.client.Client = DEFAULT_CLIENT, lifetime: Lifetime = Lifetime.SAVE) AdsorbateBindingSites#
-

Search for adsorbate binding sites on surfaces of a bulk material. -This executes the following steps:

-
-
    -
  1. Ensure that both the adsorbate and bulk are supported in the -OCP API.

  2. -
  3. Enumerate unique surfaces from the bulk material.

  4. -
  5. Enumerate likely binding sites for the input adsorbate on each -of the generated surfaces.

  6. -
  7. -
    Filter the list of generated adsorbate/slab (adslab) configurations

    using the input adslab_filter.

    -
    -
    -
  8. -
  9. Relax each generated surface+adsorbate structure by refining -atomic positions to minimize forces generated by the input model.

  10. -
-
-
-
Parameters:
-
    -
  • adsorbate – Description of the adsorbate to place.

  • -
  • bulk – The ID (typically Materials Project MP ID) of the bulk material -on which the adsorbate will be placed.

  • -
  • model – The type of the model to use when calculating forces during -relaxations.

  • -
  • adslab_filter – A function that modifies the set of adsorbate/slab -configurations that will be relaxed. This can be used to subselect -slabs and/or adsorbate configurations.

  • -
  • client – The OCP API client to use.

  • -
  • lifetime – Whether relaxations should be saved on the server, be marked -as ephemeral (allowing them to deleted in the future), or deleted -immediately.

  • -
-
-
Returns:
-

Details of each adsorbate binding site, including results of relaxing -to locally-optimized positions using the input model.

-
-
Raises:
-
-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/workflows/context/index.html b/autoapi/demo/ocpapi/workflows/context/index.html deleted file mode 100644 index 2b53e90ca..000000000 --- a/autoapi/demo/ocpapi/workflows/context/index.html +++ /dev/null @@ -1,736 +0,0 @@ - - - - - - - - - - - demo.ocpapi.workflows.context — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - -
-

demo.ocpapi.workflows.context

- -
-
- -
-

Contents

-
- -
-
-
- - - - -
- -
-

demo.ocpapi.workflows.context#

-
-

Module Contents#

-
-

Functions#

- - - - - - -

set_context_var(→ Generator[None, None, None])

Sets the input convext variable to the input value and yields control

-
-
-demo.ocpapi.workflows.context.set_context_var(context_var: contextvars.ContextVar, value: Any) Generator[None, None, None]#
-

Sets the input convext variable to the input value and yields control -back to the caller. When control returns to this function, the context -variable is reset to its original value.

-
-
Parameters:
-
    -
  • context_var – The context variable to set.

  • -
  • value – The value to assign to the variable.

  • -
-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - -
- - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/workflows/filter/index.html b/autoapi/demo/ocpapi/workflows/filter/index.html deleted file mode 100644 index 04f5a9597..000000000 --- a/autoapi/demo/ocpapi/workflows/filter/index.html +++ /dev/null @@ -1,793 +0,0 @@ - - - - - - - - - - - demo.ocpapi.workflows.filter — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.workflows.filter#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - - - - -

keep_all_slabs

Adslab filter than returns all slabs.

keep_slabs_with_miller_indices

Adslab filter that keeps any slabs with the configured miller indices.

prompt_for_slabs_to_keep

Adslab filter than presents the user with an interactive prompt to choose

-
-
-class demo.ocpapi.workflows.filter.keep_all_slabs#
-

Adslab filter than returns all slabs.

-
-
-async __call__(adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-
- -
- -
-
-class demo.ocpapi.workflows.filter.keep_slabs_with_miller_indices(miller_indices: Iterable[Tuple[int, int, int]])#
-

Adslab filter that keeps any slabs with the configured miller indices. -Slabs with other miller indices will be ignored.

-
-
-async __call__(adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-
- -
- -
-
-class demo.ocpapi.workflows.filter.prompt_for_slabs_to_keep#
-

Adslab filter than presents the user with an interactive prompt to choose -which of the input slabs to keep.

-
-
-static _sort_key(adslab: fairchem.demo.ocpapi.client.AdsorbateSlabConfigs) Tuple[Tuple[int, int, int], float, str]#
-

Generates a sort key from the input adslab. Returns the miller indices, -shift, and top/bottom label so that they will be sorted by those values -in that order.

-
- -
-
-async __call__(adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-
- -
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/workflows/index.html b/autoapi/demo/ocpapi/workflows/index.html deleted file mode 100644 index 19b254936..000000000 --- a/autoapi/demo/ocpapi/workflows/index.html +++ /dev/null @@ -1,1203 +0,0 @@ - - - - - - - - - - - demo.ocpapi.workflows — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.workflows#

-
-

Submodules#

- -
-
-

Package Contents#

-
-

Classes#

- - - - - - - - - - - - - - - - - - - - - - - - -

AdsorbateBindingSites

Stores the inputs and results of a set of relaxations of adsorbate

AdsorbateSlabRelaxations

Stores the relaxations of adsorbate placements on the surface of a slab.

Lifetime

Represents different lifetimes when running relaxations.

keep_all_slabs

Adslab filter than returns all slabs.

keep_slabs_with_miller_indices

Adslab filter that keeps any slabs with the configured miller indices.

prompt_for_slabs_to_keep

Adslab filter than presents the user with an interactive prompt to choose

RateLimitLogging

Controls logging when rate limits are hit.

-
-
-

Functions#

- - - - - - - - - - - - - - - -

find_adsorbate_binding_sites(→ AdsorbateBindingSites)

Search for adsorbate binding sites on surfaces of a bulk material.

get_adsorbate_slab_relaxation_results(...)

Wrapper around Client.get_adsorbate_slab_relaxations_results() that

wait_for_adsorbate_slab_relaxations(→ Dict[int, ...)

Blocks until all relaxations in the input system have finished, whether

retry_api_calls(→ Any)

Decorator with sensible defaults for retrying calls to the OCP API.

-
-
-

Attributes#

- - - - - - - - - -

NO_LIMIT

NoLimitType

-
-
-class demo.ocpapi.workflows.AdsorbateBindingSites#
-

Stores the inputs and results of a set of relaxations of adsorbate -placements on the surface of a slab.

-
-
-adsorbate: str#
-

Description of the adsorbate.

-
- -
-
-bulk: fairchem.demo.ocpapi.client.Bulk#
-

The bulk material that was being modeled.

-
- -
-
-model: str#
-

The type of the model that was run.

-
- -
-
-slabs: List[AdsorbateSlabRelaxations]#
-

The list of slabs that were generated from the bulk structure. Each -contains its own list of adsorbate placements.

-
- -
- -
-
-class demo.ocpapi.workflows.AdsorbateSlabRelaxations#
-

Stores the relaxations of adsorbate placements on the surface of a slab.

-
-
-slab: fairchem.demo.ocpapi.client.Slab#
-

The slab on which the adsorbate was placed.

-
- -
-
-configs: List[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationResult]#
-

Details of the relaxation of each adsorbate placement, including the -final position.

-
- -
-
-system_id: str#
-

The ID of the system that stores all of the relaxations.

-
- -
-
-api_host: str#
-

The API host on which the relaxations were run.

-
- -
-
-ui_url: str | None#
-

The URL at which results can be visualized.

-
- -
- -
-
-class demo.ocpapi.workflows.Lifetime(*args, **kwds)#
-

Bases: enum.Enum

-

Represents different lifetimes when running relaxations.

-
-
-SAVE#
-

The relaxation will be available on API servers indefinitely. It will not -be possible to delete the relaxation in the future.

-
- -
-
-MARK_EPHEMERAL#
-

The relaxation will be saved on API servers, but can be deleted at any time -in the future.

-
- -
-
-DELETE#
-

The relaxation will be deleted from API servers as soon as the results have -been fetched.

-
- -
- -
-
-exception demo.ocpapi.workflows.UnsupportedAdsorbateException(adsorbate: str)#
-

Bases: AdsorbatesException

-

Exception raised when an adsorbate is not supported in the API.

-
- -
-
-exception demo.ocpapi.workflows.UnsupportedBulkException(bulk: str)#
-

Bases: AdsorbatesException

-

Exception raised when a bulk material is not supported in the API.

-
- -
-
-exception demo.ocpapi.workflows.UnsupportedModelException(model: str, allowed_models: List[str])#
-

Bases: AdsorbatesException

-

Exception raised when a model is not supported in the API.

-
- -
-
-async demo.ocpapi.workflows.find_adsorbate_binding_sites(adsorbate: str, bulk: str, model: str = 'equiformer_v2_31M_s2ef_all_md', adslab_filter: Callable[[List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]], Awaitable[List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]]] = _DEFAULT_ADSLAB_FILTER, client: fairchem.demo.ocpapi.client.Client = DEFAULT_CLIENT, lifetime: Lifetime = Lifetime.SAVE) AdsorbateBindingSites#
-

Search for adsorbate binding sites on surfaces of a bulk material. -This executes the following steps:

-
-
    -
  1. Ensure that both the adsorbate and bulk are supported in the -OCP API.

  2. -
  3. Enumerate unique surfaces from the bulk material.

  4. -
  5. Enumerate likely binding sites for the input adsorbate on each -of the generated surfaces.

  6. -
  7. -
    Filter the list of generated adsorbate/slab (adslab) configurations

    using the input adslab_filter.

    -
    -
    -
  8. -
  9. Relax each generated surface+adsorbate structure by refining -atomic positions to minimize forces generated by the input model.

  10. -
-
-
-
Parameters:
-
    -
  • adsorbate – Description of the adsorbate to place.

  • -
  • bulk – The ID (typically Materials Project MP ID) of the bulk material -on which the adsorbate will be placed.

  • -
  • model – The type of the model to use when calculating forces during -relaxations.

  • -
  • adslab_filter – A function that modifies the set of adsorbate/slab -configurations that will be relaxed. This can be used to subselect -slabs and/or adsorbate configurations.

  • -
  • client – The OCP API client to use.

  • -
  • lifetime – Whether relaxations should be saved on the server, be marked -as ephemeral (allowing them to deleted in the future), or deleted -immediately.

  • -
-
-
Returns:
-

Details of each adsorbate binding site, including results of relaxing -to locally-optimized positions using the input model.

-
-
Raises:
-
-
-
-
- -
-
-async demo.ocpapi.workflows.get_adsorbate_slab_relaxation_results(system_id: str, config_ids: List[int] | None = None, fields: List[str] | None = None, client: fairchem.demo.ocpapi.client.Client = DEFAULT_CLIENT) List[fairchem.demo.ocpapi.client.AdsorbateSlabRelaxationResult]#
-

Wrapper around Client.get_adsorbate_slab_relaxations_results() that -handles retries, including re-fetching individual configurations that -are initially omitted.

-
-
Parameters:
-
    -
  • client – The client to use when making API calls.

  • -
  • system_id – The system ID of the relaxations.

  • -
  • config_ids – If defined and not empty, a subset of configurations -to fetch. Otherwise all configurations are returned.

  • -
  • fields – If defined and not empty, a subset of fields in each -configuration to fetch. Otherwise all fields are returned.

  • -
-
-
Returns:
-

List of relaxation results, one for each adsorbate configuration in -the system.

-
-
-
- -
-
-async demo.ocpapi.workflows.wait_for_adsorbate_slab_relaxations(system_id: str, check_immediately: bool = False, slow_interval_sec: float = 30, fast_interval_sec: float = 10, pbar: tqdm.tqdm | None = None, client: fairchem.demo.ocpapi.client.Client = DEFAULT_CLIENT) Dict[int, fairchem.demo.ocpapi.client.Status]#
-

Blocks until all relaxations in the input system have finished, whether -successfully or not.

-

Relaxations are queued in the API, waiting until machines are ready to -run them. Once started, they can take 1-2 minutes to finish. This method -initially sleeps “slow_interval_sec” seconds between each check for any -relaxations having finished. Once at least one result is ready, subsequent -sleeps are for “fast_interval_sec” seconds.

-
-
Parameters:
-
    -
  • system_id – The ID of the system for which relaxations are running.

  • -
  • check_immediately – If False (default), sleep before the first check -for relaxations having finished. If True, check whether relaxations -have finished immediately on entering this function.

  • -
  • slow_interval_sec – The number of seconds to wait between each check -while all are still running.

  • -
  • fast_interval_sec – The number of seconds to wait between each check -when at least one relaxation has finished in the system.

  • -
  • pbar – A tqdm instance that tracks the number of configurations that -have finished. This will be updated with the number of individual -configurations whose relaxations have finished.

  • -
  • client – The client to use when making API calls.

  • -
-
-
Returns:
-

Map of config IDs in the system to their terminal status.

-
-
-
- -
-
-class demo.ocpapi.workflows.keep_all_slabs#
-

Adslab filter than returns all slabs.

-
-
-async __call__(adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-
- -
- -
-
-class demo.ocpapi.workflows.keep_slabs_with_miller_indices(miller_indices: Iterable[Tuple[int, int, int]])#
-

Adslab filter that keeps any slabs with the configured miller indices. -Slabs with other miller indices will be ignored.

-
-
-async __call__(adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-
- -
- -
-
-class demo.ocpapi.workflows.prompt_for_slabs_to_keep#
-

Adslab filter than presents the user with an interactive prompt to choose -which of the input slabs to keep.

-
-
-static _sort_key(adslab: fairchem.demo.ocpapi.client.AdsorbateSlabConfigs) Tuple[Tuple[int, int, int], float, str]#
-

Generates a sort key from the input adslab. Returns the miller indices, -shift, and top/bottom label so that they will be sorted by those values -in that order.

-
- -
-
-async __call__(adslabs: List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]) List[fairchem.demo.ocpapi.client.AdsorbateSlabConfigs]#
-
- -
- -
-
-demo.ocpapi.workflows.NO_LIMIT: NoLimitType = 0#
-
- -
-
-demo.ocpapi.workflows.NoLimitType#
-
- -
-
-class demo.ocpapi.workflows.RateLimitLogging#
-

Controls logging when rate limits are hit.

-
-
-logger: logging.Logger#
-

The logger to use.

-
- -
-
-action: str#
-

A short description of the action being attempted.

-
- -
- -
-
-demo.ocpapi.workflows.retry_api_calls(max_attempts: int | NoLimitType = 3, rate_limit_logging: RateLimitLogging | None = None, fixed_wait_sec: float = 2, max_jitter_sec: float = 1) Any#
-

Decorator with sensible defaults for retrying calls to the OCP API.

-
-
Parameters:
-
    -
  • max_attempts – The maximum number of calls to make. If NO_LIMIT, -retries will be made forever.

  • -
  • rate_limit_logging – If not None, log statements will be generated -using this configuration when a rate limit is hit.

  • -
  • fixed_wait_sec – The fixed number of seconds to wait when retrying an -exception that does not include a retry-after value. The default -value is sensible; this is exposed mostly for testing.

  • -
  • max_jitter_sec – The maximum number of seconds that will be randomly -added to wait times. The default value is sensible; this is exposed -mostly for testing.

  • -
-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/demo/ocpapi/workflows/retry/index.html b/autoapi/demo/ocpapi/workflows/retry/index.html deleted file mode 100644 index 2567394ee..000000000 --- a/autoapi/demo/ocpapi/workflows/retry/index.html +++ /dev/null @@ -1,838 +0,0 @@ - - - - - - - - - - - demo.ocpapi.workflows.retry — FAIR Chemistry Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
-
-
-
-
- - - - -
-
- - - -
- - - - - - - - - - - - - -
- -
- - - -
- -
-
- -
-
- -
- -
- -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- - - - - - - - -
- -
-

demo.ocpapi.workflows.retry#

-
-

Module Contents#

-
-

Classes#

- - - - - - - - - -

RateLimitLogging

Controls logging when rate limits are hit.

_wait_check_retry_after

Tenacity wait strategy that first checks whether RateLimitExceededException

-
-
-

Functions#

- - - - - - -

retry_api_calls(→ Any)

Decorator with sensible defaults for retrying calls to the OCP API.

-
-
-

Attributes#

- - - - - - - - - -

NoLimitType

NO_LIMIT

-
-
-class demo.ocpapi.workflows.retry.RateLimitLogging#
-

Controls logging when rate limits are hit.

-
-
-logger: logging.Logger#
-

The logger to use.

-
- -
-
-action: str#
-

A short description of the action being attempted.

-
- -
- -
-
-class demo.ocpapi.workflows.retry._wait_check_retry_after(default_wait: tenacity.wait.wait_base, rate_limit_logging: RateLimitLogging | None = None)#
-

Bases: tenacity.wait.wait_base

-

Tenacity wait strategy that first checks whether RateLimitExceededException -was raised and that it includes a retry-after value; if so wait, for that -amount of time. Otherwise, fall back to the provided default strategy.

-
-
-__call__(retry_state: tenacity.RetryCallState) float#
-

If a RateLimitExceededException was raised and has a retry_after value, -return it. Otherwise use the default waiter method.

-
- -
- -
-
-demo.ocpapi.workflows.retry.NoLimitType#
-
- -
-
-demo.ocpapi.workflows.retry.NO_LIMIT: NoLimitType = 0#
-
- -
-
-demo.ocpapi.workflows.retry.retry_api_calls(max_attempts: int | NoLimitType = 3, rate_limit_logging: RateLimitLogging | None = None, fixed_wait_sec: float = 2, max_jitter_sec: float = 1) Any#
-

Decorator with sensible defaults for retrying calls to the OCP API.

-
-
Parameters:
-
    -
  • max_attempts – The maximum number of calls to make. If NO_LIMIT, -retries will be made forever.

  • -
  • rate_limit_logging – If not None, log statements will be generated -using this configuration when a rate limit is hit.

  • -
  • fixed_wait_sec – The fixed number of seconds to wait when retrying an -exception that does not include a retry-after value. The default -value is sensible; this is exposed mostly for testing.

  • -
  • max_jitter_sec – The maximum number of seconds that will be randomly -added to wait times. The default value is sensible; this is exposed -mostly for testing.

  • -
-
-
-
- -
-
-
- - - - -
- - - - - - -
- -
-
-
- -
- - - - - - -
-
- - -
- - -
-
-
- - - - - -
-
- - \ No newline at end of file diff --git a/autoapi/fairchem/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.html b/autoapi/fairchem/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.html new file mode 100644 index 000000000..43fd87c4d --- /dev/null +++ b/autoapi/fairchem/applications/AdsorbML/adsorbml/2023_neurips_challenge/challenge_eval/index.html @@ -0,0 +1,732 @@ + + + + + + + + + + + fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval — FAIR Chemistry Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval

+ +
+ +
+
+ + + + +
+ +
+

fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval#

+
+

Module Contents#

+
+

Functions#

+ + + + + + + + + + + + + + + + + + + + + +

is_successful(best_pred_energy, best_dft_energy[, ...])

Computes the success rate given the best predicted energy

compute_valid_ml_success(ml_data, dft_data)

Computes validated ML success rates.

get_dft_data(targets)

Organizes the released target mapping for evaluation lookup.

process_ml_data(results_file, model, metadata, ...)

For ML systems in which no configurations made it through the physical

parse_args()

main()

This script takes in your prediction file (npz format)

+
+
+fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.is_successful(best_pred_energy, best_dft_energy, SUCCESS_THRESHOLD=0.1)#
+

Computes the success rate given the best predicted energy +and the best ground truth DFT energy.

+

success_parity: The standard definition for success, where ML needs to be +within the SUCCESS_THRESHOLD, or lower, of the DFT energy.

+

Returns: Bool

+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.compute_valid_ml_success(ml_data, dft_data)#
+

Computes validated ML success rates. +Here, results are generated only from ML. DFT single-points are used to +validate whether the ML energy is within 0.1eV of the DFT energy of the +predicted structure. If valid, the ML energy is compared to the ground +truth DFT energy, otherwise it is discarded.

+

Return validated ML success rates.

+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.get_dft_data(targets)#
+

Organizes the released target mapping for evaluation lookup.

+
+
Returns: Dict:
+
{

‘system_id 1’: {‘config_id 1’: dft_ads_energy, ‘config_id 2’: dft_ads_energy}, +‘system_id 2’: {‘config_id 1’: dft_ads_energy, ‘config_id 2’: dft_ads_energy}, +…

+
+
+

}

+
+
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.process_ml_data(results_file, model, metadata, ml_dft_targets, dft_data)#
+

For ML systems in which no configurations made it through the physical +constraint checks, set energies to an arbitrarily high value to ensure +a failure case in evaluation.

+
+
Returns: Dict:
+
{

‘system_id 1’: {‘config_id 1’: {‘ml_energy’: predicted energy, ‘ml+dft_energy’: dft energy of ML structure} …}, +‘system_id 2’: {‘config_id 1’: {‘ml_energy’: predicted energy, ‘ml+dft_energy’: dft energy of ML structure} …}, +…

+
+
+

}

+
+
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.parse_args()#
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.2023_neurips_challenge.challenge_eval.main()#
+

This script takes in your prediction file (npz format) +and the ML model name used for ML relaxations. +Then using a mapping file, dft ground truth energy, +and ML relaxed dft energy returns the success rate of your predictions.

+
+ +
+
+
+ + + + +
+ + + + + + +
+ +
+
+
+ +
+ + + + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/dense_eval/index.html b/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/dense_eval/index.html new file mode 100644 index 000000000..7e3f9d64e --- /dev/null +++ b/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/dense_eval/index.html @@ -0,0 +1,833 @@ + + + + + + + + + + + fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval — FAIR Chemistry Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval

+ +
+ +
+
+ + + + +
+ +
+

fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval#

+

AdsorbML evaluation script. This script expects the results-file to be +organized in a very specific structure in order to evaluate successfully.

+

Results are to be saved out in a dictionary pickle file, where keys are the +system_id and the values are energies and compute information for a +specified config_id. For each config_id that successfully passes the +physical constraints defined in the manuscript, the following information must +be provided:

+
+

ml_energy: The ML predicted adsorption energy on that particular config_id.

+

ml+dft_energy: The DFT adsorption energy (SP or RX) as evaluated on +the predicted ML config_id structure. Do note use raw DFT energies, +ensure these are referenced correctly. None if not available.

+

scf_steps: Total number of SCF steps involved in determining the DFT +adsorption energy on the predicted ML config_id. For relaxation +methods (ML+RX), sum all SCF steps across all frames. 0 if not +available.

+

ionic_steps: Total number of ionic steps in determining the DFT +adsorption energy on the predicted ML config_id. This will be 1 for +single-point methods (ML+SP). 0 if not available.

+
+

NOTE - It is possible that due to the required filtering of physical +constraints, no configurations are valid for a particular system_id. In +this case the system or config id can be excluded entirely from the +results file and will be treated as a failure point at evaluation time.

+
+
e.g.
+
{
+
“6_1134_23”:
+
{
+
“rand11”: {

“ml_energy”: -1.234, +“ml+dft_energy”: -1.456, +“scf_steps”: 33, +“ionic_steps”: 1,

+
+
+

}, +“rand5”: {

+
+

“ml_energy”: -2.489, +“ml+dft_energy”: -2.109, +“scf_steps”: 16, +“ionic_steps”: 1,

+
+

}, +. +. +.

+
+
+

},

+
+
“7_6566_62” :
+
{
+
“rand79”: {

“ml_energy”: -1.234, +“ml+dft_energy”: -1.456, +“scf_steps”: 33, +“ionic_steps”: 1,

+
+
+

}, +. +. +.

+
+
+

},

+
+
+

.

+
+
+

}

+
+
+
+

Module Contents#

+
+

Functions#

+ + + + + + + + + + + + + + + + + + + + + +

is_successful(best_ml_dft_energy, best_dft_energy)

Computes the success rate given the best ML+DFT energy and the best ground

compute_hybrid_success(ml_data, dft_data, k)

Computes AdsorbML success rates at varying top-k values.

compute_valid_ml_success(ml_data, dft_data)

Computes validated ML success rates.

get_dft_data(targets)

Organizes the released target mapping for evaluation lookup.

get_dft_compute(counts)

Calculates the total DFT compute associated with establishing a ground

filter_ml_data(ml_data, dft_data)

For ML systems in which no configurations made it through the physical

+
+
+

Attributes#

+ + + + + + + + + +

SUCCESS_THRESHOLD

parser

+
+
+fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.SUCCESS_THRESHOLD = 0.1#
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.is_successful(best_ml_dft_energy, best_dft_energy)#
+

Computes the success rate given the best ML+DFT energy and the best ground +truth DFT energy.

+

success_parity: The standard definition for success, where ML needs to be +within the SUCCESS_THRESHOLD, or lower, of the DFT energy.

+

success_much_better: A system in which the ML energy is predicted to be +much lower (less than the SUCCESS_THRESHOLD) of the DFT energy.

+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.compute_hybrid_success(ml_data, dft_data, k)#
+

Computes AdsorbML success rates at varying top-k values. +Here, results are generated for the hybrid method, where the top-k ML +energies are used to to run DFT on the corresponding ML structures. The +resulting energies are then compared to the ground truth DFT energies.

+

Return success rates and DFT compute usage at varying k.

+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.compute_valid_ml_success(ml_data, dft_data)#
+

Computes validated ML success rates. +Here, results are generated only from ML. DFT single-points are used to +validate whether the ML energy is within 0.1eV of the DFT energy of the +predicted structure. If valid, the ML energy is compared to the ground +truth DFT energy, otherwise it is discarded.

+

Return validated ML success rates.

+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.get_dft_data(targets)#
+

Organizes the released target mapping for evaluation lookup.

+
+
oc20dense_targets.pkl:

[‘system_id 1’: [(‘config_id 1’, dft_adsorption_energy), (‘config_id 2’, dft_adsorption_energy)], `system_id 2]

+
+
Returns: Dict:
+
{

‘system_id 1’: {‘config_id 1’: dft_ads_energy, ‘config_id 2’: dft_ads_energy}, +‘system_id 2’: {‘config_id 1’: dft_ads_energy, ‘config_id 2’: dft_ads_energy}, +…

+
+
+

}

+
+
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.get_dft_compute(counts)#
+

Calculates the total DFT compute associated with establishing a ground +truth using the released DFT timings: oc20dense_compute.pkl.

+

Compute is measured in the total number of self-consistent steps (SC). The +total number of ionic steps is also included for reference.

+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.filter_ml_data(ml_data, dft_data)#
+

For ML systems in which no configurations made it through the physical +constraint checks, set energies to an arbitrarily high value to ensure +a failure case in evaluation.

+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.dense_eval.parser#
+
+ +
+
+
+ + + + +
+ + + + + + +
+ +
+
+
+ +
+ + + + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.html b/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.html new file mode 100644 index 000000000..280f9b982 --- /dev/null +++ b/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/process_mlrs/index.html @@ -0,0 +1,722 @@ + + + + + + + + + + + fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs — FAIR Chemistry Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs

+ +
+ +
+
+ + + + +
+ +
+

fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs#

+

This script processes ML relaxations and sets it up for the next step. +- Reads final energy and structure for each relaxation +- Filters out anomalies +- Groups together all configurations for one adsorbate-surface system +- Sorts configs by lowest energy first

+

The following files are saved out: +- cache_sorted_byE.pkl: dict going from the system ID (bulk, surface, adsorbate)

+
+

to a list of configs and their relaxed structures, sorted by lowest energy first. +This is later used by write_top_k_vasp.py.

+
+
    +
  • +
    anomalies_by_sid.pkl: dict going from integer sid to boolean representing

    whether it was an anomaly. Anomalies are already excluded from cache_sorted_byE.pkl +and this file is only used for extra analyses.

    +
    +
    +
  • +
  • errors_by_sid.pkl: any errors that occurred

  • +
+
+

Module Contents#

+
+

Functions#

+ + + + + + + + + + + + +

parse_args()

min_diff(atoms_init, atoms_final)

process_mlrs(arg)

+
+
+

Attributes#

+ + + + + + + + + + + + +

SURFACE_CHANGE_CUTOFF_MULTIPLIER

DESORPTION_CUTOFF_MULTIPLIER

args

+
+
+fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.SURFACE_CHANGE_CUTOFF_MULTIPLIER = 1.5#
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.DESORPTION_CUTOFF_MULTIPLIER = 1.5#
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.parse_args()#
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.min_diff(atoms_init, atoms_final)#
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.process_mlrs(arg)#
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.process_mlrs.args#
+
+ +
+
+
+ + + + +
+ + + + + + +
+ +
+
+
+ +
+ + + + + + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/utils/index.html b/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/utils/index.html new file mode 100644 index 000000000..b59c895b6 --- /dev/null +++ b/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/utils/index.html @@ -0,0 +1,680 @@ + + + + + + + + + + + fairchem.applications.AdsorbML.adsorbml.scripts.utils — FAIR Chemistry Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

fairchem.applications.AdsorbML.adsorbml.scripts.utils

+ +
+
+ +
+

Contents

+
+ +
+
+
+ + + + +
+ +
+

fairchem.applications.AdsorbML.adsorbml.scripts.utils#

+
+

Module Contents#

+
+

Functions#

+ + + + + + + + + +

converged_oszicar(path[, nelm, ediff, idx])

--- FOR VASP USERS ---

count_scf(path)

--- FOR VASP USERS ---

+
+
+fairchem.applications.AdsorbML.adsorbml.scripts.utils.converged_oszicar(path, nelm=60, ediff=0.0001, idx=0)#
+

— FOR VASP USERS —

+

Given a folder containing DFT outputs, ensures the system has converged +electronically.

+
+
Parameters:
+
    +
  • path – Path to DFT outputs.

  • +
  • nelm – Maximum number of electronic steps used.

  • +
  • ediff – Energy difference condition for terminating the electronic loop.

  • +
  • idx – Frame to check for electronic convergence. 0 for SP, -1 for RX.

  • +
+
+
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.utils.count_scf(path)#
+

— FOR VASP USERS —

+

Given a folder containing DFT outputs, compute total ionic and SCF steps

+
+
Parameters:
+

path – Path to DFT outputs.

+
+
Returns:
+

Total number of electronic steps performed. +ionic_steps (int): Total number of ionic steps performed.

+
+
Return type:
+

scf_steps (int)

+
+
+
+ +
+
+
+ + + + +
+ + + + + + +
+ +
+
+
+ +
+ + + +
+ + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp/index.html b/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp/index.html new file mode 100644 index 000000000..29448eb4f --- /dev/null +++ b/autoapi/fairchem/applications/AdsorbML/adsorbml/scripts/write_top_k_vasp/index.html @@ -0,0 +1,634 @@ + + + + + + + + + + + fairchem.applications.AdsorbML.adsorbml.scripts.write_top_k_vasp — FAIR Chemistry Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + + + +
+
+ + + + + +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+

fairchem.applications.AdsorbML.adsorbml.scripts.write_top_k_vasp

+ +
+
+ +
+

Contents

+
+ +
+
+
+ + + + +
+ +
+

fairchem.applications.AdsorbML.adsorbml.scripts.write_top_k_vasp#

+
+

Module Contents#

+
+
+fairchem.applications.AdsorbML.adsorbml.scripts.write_top_k_vasp.VASP_FLAGS#
+
+ +
+
+fairchem.applications.AdsorbML.adsorbml.scripts.write_top_k_vasp.parser#
+
+ +
+
+ + + + +
+ + + + + + +
+ +
+
+
+ +
+ + + +
+ + +
+
+ + +
+ + +
+
+
+ + + + + +
+
+ + \ No newline at end of file diff --git a/autoapi/applications/CatTSunami/ocpneb/core/autoframe/index.html b/autoapi/fairchem/applications/CatTSunami/ocpneb/core/autoframe/index.html similarity index 50% rename from autoapi/applications/CatTSunami/ocpneb/core/autoframe/index.html rename to autoapi/fairchem/applications/CatTSunami/ocpneb/core/autoframe/index.html index 0f486f51f..3069e1e73 100644 --- a/autoapi/applications/CatTSunami/ocpneb/core/autoframe/index.html +++ b/autoapi/fairchem/applications/CatTSunami/ocpneb/core/autoframe/index.html @@ -2,13 +2,13 @@ - + - applications.CatTSunami.ocpneb.core.autoframe — FAIR Chemistry Documentation + fairchem.applications.CatTSunami.ocpneb.core.autoframe — FAIR Chemistry Documentation @@ -18,49 +18,49 @@ - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - + - + - + - - - + + + @@ -96,7 +96,7 @@
@@ -170,17 +170,16 @@

Quickstart & Installation

+

Learn More

+

OCP API & Demo

Released Datasets & Models

Making your own datasets

Model development, training, inference, finetuning

-

Videos and Talks

-

Catalysis Case Studies & Tutorials