atomworks 2.2.0__tar.gz → 3.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {atomworks-2.2.0 → atomworks-3.0.0}/.gitignore +5 -10
- {atomworks-2.2.0 → atomworks-3.0.0}/PKG-INFO +77 -46
- {atomworks-2.2.0 → atomworks-3.0.0}/README.md +24 -13
- {atomworks-2.2.0 → atomworks-3.0.0}/pyproject.toml +75 -36
- atomworks-3.0.0/src/atomworks/__init__.py +88 -0
- atomworks-3.0.0/src/atomworks/biotite_patch.py +427 -0
- atomworks-3.0.0/src/atomworks/common.py +426 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/constants.py +268 -26
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/enums.py +97 -22
- atomworks-3.0.0/src/atomworks/experimental/__init__.py +1 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/__init__.py +19 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/_assign.py +731 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/_placement.py +829 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/_titration.py +329 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/dimorphite.py +32 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/external/__init__.py +1 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/external/dimorphite_dl/LICENSE +202 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/external/dimorphite_dl/__init__.py +12 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/external/dimorphite_dl/dimorphite_dl.py +393 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/external/dimorphite_dl/site_substructures.smarts +125 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/geometry.py +105 -0
- atomworks-3.0.0/src/atomworks/experimental/protonation/hydrogen_icoors.json +329 -0
- atomworks-3.0.0/src/atomworks/external/xyz2mol_tm/LICENSE +21 -0
- atomworks-3.0.0/src/atomworks/external/xyz2mol_tm/__init__.py +9 -0
- atomworks-3.0.0/src/atomworks/external/xyz2mol_tm/xyz2mol_local.py +1108 -0
- atomworks-3.0.0/src/atomworks/external/xyz2mol_tm/xyz2mol_tmc.py +611 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/__init__.py +12 -2
- atomworks-3.0.0/src/atomworks/io/_loaders.py +183 -0
- atomworks-3.0.0/src/atomworks/io/_pipeline.py +489 -0
- atomworks-3.0.0/src/atomworks/io/config.py +257 -0
- atomworks-3.0.0/src/atomworks/io/parser.py +411 -0
- atomworks-3.0.0/src/atomworks/io/template.py +608 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/tools/fasta.py +79 -5
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/tools/inference.py +270 -176
- atomworks-3.0.0/src/atomworks/io/tools/posebusters.py +161 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/tools/rdkit.py +222 -50
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/transforms/atom_array.py +307 -294
- atomworks-3.0.0/src/atomworks/io/transforms/atomize.py +230 -0
- atomworks-3.0.0/src/atomworks/io/transforms/categories.py +275 -0
- atomworks-3.0.0/src/atomworks/io/utils/altloc.py +436 -0
- {atomworks-2.2.0/atomworks/ml/conditions → atomworks-3.0.0/src/atomworks/io/utils}/annotator.py +156 -68
- atomworks-3.0.0/src/atomworks/io/utils/ase_conversions.py +160 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/utils/assembly.py +47 -7
- atomworks-3.0.0/src/atomworks/io/utils/atom_array.py +242 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/utils/atom_array_plus.py +420 -83
- atomworks-3.0.0/src/atomworks/io/utils/bonds.py +813 -0
- atomworks-3.0.0/src/atomworks/io/utils/catcif.py +85 -0
- atomworks-3.0.0/src/atomworks/io/utils/ccd.py +1563 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/utils/chain.py +1 -1
- atomworks-3.0.0/src/atomworks/io/utils/chain_info.py +292 -0
- atomworks-3.0.0/src/atomworks/io/utils/compression.py +182 -0
- atomworks-3.0.0/src/atomworks/io/utils/extra_fields.py +303 -0
- atomworks-3.0.0/src/atomworks/io/utils/io_utils.py +1713 -0
- atomworks-3.0.0/src/atomworks/io/utils/link_chemistry.py +1239 -0
- atomworks-3.0.0/src/atomworks/io/utils/non_rcsb.py +152 -0
- atomworks-3.0.0/src/atomworks/io/utils/query.py +884 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/utils/scatter.py +70 -4
- atomworks-3.0.0/src/atomworks/io/utils/selection.py +229 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/utils/sequence.py +127 -0
- atomworks-3.0.0/src/atomworks/io/utils/standard_annotations/__init__.py +14 -0
- atomworks-3.0.0/src/atomworks/io/utils/standard_annotations/base.py +640 -0
- atomworks-3.0.0/src/atomworks/io/utils/standard_annotations/definitions.py +85 -0
- atomworks-3.0.0/src/atomworks/io/utils/standard_annotations/serialization.py +411 -0
- atomworks-3.0.0/src/atomworks/io/utils/standardize.py +185 -0
- atomworks-3.0.0/src/atomworks/io/utils/testing.py +624 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/utils/visualize.py +12 -10
- atomworks-3.0.0/src/atomworks/ml/conditions/__init__.py +31 -0
- atomworks-3.0.0/src/atomworks/ml/conditions/base.py +200 -0
- atomworks-3.0.0/src/atomworks/ml/conditions/definitions.py +156 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/README.md +44 -8
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/__init__.py +8 -4
- atomworks-3.0.0/src/atomworks/ml/datasets/ase_dataset.py +139 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/base.py +23 -41
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/concat_dataset.py +11 -12
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/file_dataset.py +2 -2
- atomworks-3.0.0/src/atomworks/ml/datasets/lmdb_dataset.py +151 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/loaders/__init__.py +8 -0
- atomworks-3.0.0/src/atomworks/ml/datasets/loaders/ase.py +171 -0
- atomworks-3.0.0/src/atomworks/ml/datasets/loaders/cif.py +404 -0
- atomworks-3.0.0/src/atomworks/ml/datasets/loaders/materials.py +110 -0
- atomworks-3.0.0/src/atomworks/ml/datasets/metadata.py +400 -0
- atomworks-3.0.0/src/atomworks/ml/datasets/pandas_dataset.py +146 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/parsers/base.py +8 -5
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/parsers/default_metadata_row_parsers.py +10 -4
- atomworks-3.0.0/src/atomworks/ml/datasets/sharded_dataset.py +241 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/encoding_definitions.py +76 -71
- atomworks-3.0.0/src/atomworks/ml/example_id.py +91 -0
- atomworks-3.0.0/src/atomworks/ml/executables/dssp.py +63 -0
- atomworks-3.0.0/src/atomworks/ml/executables/hhblits.py +84 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/executables/mmseqs2.py +9 -7
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/pipelines/af3.py +4 -2
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/pipelines/rf2aa.py +2 -2
- atomworks-3.0.0/src/atomworks/ml/preprocessing/clustering/cluster.py +98 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/clustering/config.py +37 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/clustering/mmseqs2.py +86 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/constants.py +132 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/msa/colabfold_server.py +607 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/msa/finding.py +528 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/preprocessing/msa/generating.py +505 -123
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/preprocessing/msa/organizing.py +124 -1
- atomworks-3.0.0/src/atomworks/ml/preprocessing/msa/template_structures.py +94 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/preprocess.py +712 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/records.py +259 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/preprocessing/utils/fasta.py +4 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/utils/large_assembly.py +138 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/utils/structure_utils.py +366 -0
- atomworks-3.0.0/src/atomworks/ml/preprocessing/utils/token.py +56 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/samplers.py +122 -58
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/_checks.py +0 -2
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/atom_array.py +76 -12
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/atomize.py +1 -74
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/bonds.py +19 -43
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/chirals.py +15 -4
- atomworks-3.0.0/src/atomworks/ml/transforms/covalent_modifications.py +66 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/crop.py +276 -66
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/design_task.py +1 -1
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/dna/pad_dna.py +18 -4
- atomworks-3.0.0/src/atomworks/ml/transforms/dssp.py +252 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/encoding.py +91 -36
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/featurize_unresolved_residues.py +3 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/filters.py +40 -10
- atomworks-3.0.0/src/atomworks/ml/transforms/interactions.py +1473 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/mask_generator.py +5 -5
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/mirror_transform.py +4 -2
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/msa/_msa_loading_utils.py +156 -116
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/msa/_msa_pairing_utils.py +0 -2
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/msa/msa.py +168 -102
- atomworks-3.0.0/src/atomworks/ml/transforms/msa/msa_store.py +61 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/openbabel_utils.py +32 -14
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/rdkit_utils.py +138 -103
- atomworks-3.0.0/src/atomworks/ml/transforms/realize_expandable_segments.py +60 -0
- atomworks-3.0.0/src/atomworks/ml/transforms/sasa.py +254 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/symmetry.py +245 -76
- atomworks-3.0.0/src/atomworks/ml/utils/__init__.py +10 -0
- atomworks-3.0.0/src/atomworks/ml/utils/annotator.py +168 -0
- atomworks-3.0.0/src/atomworks/ml/utils/antibody.py +243 -0
- atomworks-3.0.0/src/atomworks/ml/utils/blob_store.py +117 -0
- atomworks-3.0.0/src/atomworks/ml/utils/condition.py +68 -0
- atomworks-3.0.0/src/atomworks/ml/utils/expandable_segment.py +825 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/geometry.py +114 -24
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/io.py +150 -27
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/misc.py +19 -7
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/rng.py +4 -5
- atomworks-3.0.0/src/atomworks/ml/utils/testing.py +243 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/token.py +42 -22
- atomworks-3.0.0/src/atomworks/ml/utils/visualize.py +396 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks_cli/__main__.py +2 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks_cli/ccd.py +0 -2
- atomworks-3.0.0/src/atomworks_cli/cluster.py +76 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks_cli/filter.py +0 -2
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks_cli/find.py +3 -5
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks_cli/generate.py +46 -22
- atomworks-3.0.0/src/atomworks_cli/msa.py +27 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks_cli/organize.py +2 -4
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks_cli/pdb.py +0 -2
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks_cli/setup.py +2 -5
- atomworks-2.2.0/atomworks/__init__.py +0 -47
- atomworks-2.2.0/atomworks/biotite_patch.py +0 -471
- atomworks-2.2.0/atomworks/common.py +0 -199
- atomworks-2.2.0/atomworks/io/parser.py +0 -865
- atomworks-2.2.0/atomworks/io/template.py +0 -536
- atomworks-2.2.0/atomworks/io/transforms/categories.py +0 -424
- atomworks-2.2.0/atomworks/io/utils/atom_array.py +0 -57
- atomworks-2.2.0/atomworks/io/utils/bonds.py +0 -1013
- atomworks-2.2.0/atomworks/io/utils/ccd.py +0 -690
- atomworks-2.2.0/atomworks/io/utils/compression.py +0 -177
- atomworks-2.2.0/atomworks/io/utils/io_utils.py +0 -1090
- atomworks-2.2.0/atomworks/io/utils/non_rcsb.py +0 -225
- atomworks-2.2.0/atomworks/io/utils/query.py +0 -394
- atomworks-2.2.0/atomworks/io/utils/selection.py +0 -667
- atomworks-2.2.0/atomworks/io/utils/testing.py +0 -399
- atomworks-2.2.0/atomworks/ml/conditions/__init__.py +0 -15
- atomworks-2.2.0/atomworks/ml/conditions/base.py +0 -526
- atomworks-2.2.0/atomworks/ml/conditions/conditions.py +0 -182
- atomworks-2.2.0/atomworks/ml/datasets/loaders/cif.py +0 -241
- atomworks-2.2.0/atomworks/ml/datasets/pandas_dataset.py +0 -307
- atomworks-2.2.0/atomworks/ml/example_id.py +0 -52
- atomworks-2.2.0/atomworks/ml/preprocessing/__init__.py +0 -6
- atomworks-2.2.0/atomworks/ml/preprocessing/constants.py +0 -130
- atomworks-2.2.0/atomworks/ml/preprocessing/get_pn_unit_data_from_structure.py +0 -470
- atomworks-2.2.0/atomworks/ml/preprocessing/msa/finding.py +0 -260
- atomworks-2.2.0/atomworks/ml/preprocessing/utils/structure_utils.py +0 -522
- atomworks-2.2.0/atomworks/ml/transforms/covalent_modifications.py +0 -114
- atomworks-2.2.0/atomworks/ml/transforms/sasa.py +0 -166
- atomworks-2.2.0/atomworks/ml/utils/__init__.py +0 -0
- atomworks-2.2.0/atomworks/ml/utils/condition.py +0 -335
- atomworks-2.2.0/atomworks/ml/utils/testing.py +0 -46
- atomworks-2.2.0/atomworks_cli/msa.py +0 -18
- {atomworks-2.2.0 → atomworks-3.0.0}/LICENSE.md +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/tools/chembl_transformations.smirks +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/utils/__init__.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/io/utils/error.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/__init__.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/loaders/base.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/parsers/__init__.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/datasets/parsers/custom_metadata_row_parsers.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/executables/__init__.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/executables/hbplus.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/executables/hhfilter.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/executables/x3dna.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/pipelines/__init__.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/preprocessing/msa/filtering.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/af3_reference_molecule.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/atom_frames.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/atom_level_embeddings.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/base.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/bfactor_conditioned_transforms.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/cached_residue_data.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/center_random_augmentation.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/diffusion/batch_structures.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/diffusion/edm.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/feature_aggregation/af3.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/feature_aggregation/confidence.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/feature_aggregation/rf2aa.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/masks.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/msa/_msa_constants.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/msa/_msa_featurizing_utils.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/random_atomize_residues.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/rf2aa_assumptions.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/transforms/template.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/debug.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/error.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/nested_dict.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/numpy.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/ml/utils/timer.py +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks/py.typed +0 -0
- {atomworks-2.2.0 → atomworks-3.0.0/src}/atomworks_cli/common.py +0 -0
|
@@ -5,6 +5,7 @@ biotite
|
|
|
5
5
|
# github pages
|
|
6
6
|
docs/_build/*
|
|
7
7
|
docs/auto_examples/*
|
|
8
|
+
docs/sg_execution_times.rst
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
# Python files
|
|
@@ -109,15 +110,6 @@ celerybeat-schedule
|
|
|
109
110
|
# SageMath parsed files
|
|
110
111
|
*.sage.py
|
|
111
112
|
|
|
112
|
-
# Environments
|
|
113
|
-
.env
|
|
114
|
-
.venv
|
|
115
|
-
env/
|
|
116
|
-
venv/
|
|
117
|
-
ENV/
|
|
118
|
-
env.bak/
|
|
119
|
-
venv.bak/
|
|
120
|
-
|
|
121
113
|
# github pages
|
|
122
114
|
docs/_build/*
|
|
123
115
|
docs/auto_examples/*
|
|
@@ -155,6 +147,7 @@ cython_debug/
|
|
|
155
147
|
*.pkl
|
|
156
148
|
*.parquet
|
|
157
149
|
*.csv
|
|
150
|
+
*.ciflmdb-lock
|
|
158
151
|
|
|
159
152
|
# Temporary test files
|
|
160
153
|
tests/test_outputs
|
|
@@ -166,8 +159,10 @@ tinker/
|
|
|
166
159
|
|
|
167
160
|
# Local scripts
|
|
168
161
|
**/logs
|
|
162
|
+
.ipd/
|
|
169
163
|
|
|
170
164
|
# AI
|
|
171
165
|
**/.claude
|
|
172
|
-
CLAUDE.md
|
|
173
166
|
.github/workflows/claude*.yml
|
|
167
|
+
|
|
168
|
+
.devcontainer
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: atomworks
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.0
|
|
4
4
|
Summary: A research-oriented data toolkit for training biomolecular deep-learning foundation models
|
|
5
5
|
Project-URL: homepage, https://rosettacommons.github.io/atomworks/latest/index.html
|
|
6
6
|
Project-URL: repository, https://github.com/RosettaCommons/atomworks
|
|
@@ -46,64 +46,88 @@ Classifier: Programming Language :: Python :: 3
|
|
|
46
46
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
47
47
|
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
48
48
|
Requires-Python: >=3.11
|
|
49
|
-
Requires-Dist: biotite==1.
|
|
50
|
-
Requires-Dist: cython
|
|
51
|
-
Requires-Dist: cytoolz
|
|
52
|
-
Requires-Dist:
|
|
53
|
-
Requires-Dist:
|
|
54
|
-
Requires-Dist:
|
|
55
|
-
Requires-Dist:
|
|
56
|
-
Requires-Dist:
|
|
49
|
+
Requires-Dist: biotite==1.6.0
|
|
50
|
+
Requires-Dist: cython>=3.0.0
|
|
51
|
+
Requires-Dist: cytoolz>=0.12.3
|
|
52
|
+
Requires-Dist: idna>=3.15
|
|
53
|
+
Requires-Dist: jaxtyping>=0.2.17
|
|
54
|
+
Requires-Dist: numpy>=1.25.0
|
|
55
|
+
Requires-Dist: pandas>=2.2
|
|
56
|
+
Requires-Dist: pillow>=12.3.0
|
|
57
|
+
Requires-Dist: py3dmol>=2.2.1
|
|
58
|
+
Requires-Dist: pyarrow>=23.0.1
|
|
59
|
+
Requires-Dist: pygments>=2.20.0
|
|
57
60
|
Requires-Dist: pymol-remote>=0.0.5
|
|
58
|
-
Requires-Dist:
|
|
59
|
-
Requires-Dist:
|
|
60
|
-
Requires-Dist:
|
|
61
|
-
Requires-Dist:
|
|
62
|
-
Requires-Dist:
|
|
61
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
62
|
+
Requires-Dist: rdkit>=2024.3.5
|
|
63
|
+
Requires-Dist: requests>=2.33.0
|
|
64
|
+
Requires-Dist: scipy>=1.13.1
|
|
65
|
+
Requires-Dist: tqdm>=4.66.3
|
|
66
|
+
Requires-Dist: typer>=0.12.5
|
|
67
|
+
Requires-Dist: urllib3>=2.8.0
|
|
68
|
+
Requires-Dist: zstandard>=0.21.0
|
|
63
69
|
Provides-Extra: ase
|
|
64
|
-
Requires-Dist: ase-db-backends
|
|
65
|
-
Requires-Dist: ase
|
|
66
|
-
Requires-Dist:
|
|
70
|
+
Requires-Dist: ase-db-backends>=0.10.0; extra == 'ase'
|
|
71
|
+
Requires-Dist: ase>=3.22.0; extra == 'ase'
|
|
72
|
+
Requires-Dist: cryptography>=50.0.0; extra == 'ase'
|
|
73
|
+
Requires-Dist: lmdb>=1.5.0; extra == 'ase'
|
|
74
|
+
Provides-Extra: catcif
|
|
75
|
+
Requires-Dist: catcif-tools; extra == 'catcif'
|
|
67
76
|
Provides-Extra: dev
|
|
77
|
+
Requires-Dist: fire>=0.5.0; extra == 'dev'
|
|
68
78
|
Requires-Dist: ipykernel>=6.28.0; extra == 'dev'
|
|
69
|
-
Requires-Dist: pytest-benchmark
|
|
70
|
-
Requires-Dist: pytest-cov
|
|
71
|
-
Requires-Dist: pytest-dotenv
|
|
72
|
-
Requires-Dist: pytest-testmon
|
|
73
|
-
Requires-Dist: pytest-xdist
|
|
74
|
-
Requires-Dist: pytest
|
|
79
|
+
Requires-Dist: pytest-benchmark>=5.0.0; extra == 'dev'
|
|
80
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
|
|
81
|
+
Requires-Dist: pytest-dotenv>=0.5.2; extra == 'dev'
|
|
82
|
+
Requires-Dist: pytest-testmon>=2.1.1; extra == 'dev'
|
|
83
|
+
Requires-Dist: pytest-xdist>=3.6.1; extra == 'dev'
|
|
84
|
+
Requires-Dist: pytest>=9.0.3; extra == 'dev'
|
|
75
85
|
Requires-Dist: ruff==0.8.3; extra == 'dev'
|
|
86
|
+
Requires-Dist: tornado>=6.5.9; extra == 'dev'
|
|
76
87
|
Provides-Extra: docs
|
|
77
|
-
Requires-Dist: matplotlib
|
|
78
|
-
Requires-Dist:
|
|
79
|
-
Requires-Dist: sphinx-
|
|
80
|
-
Requires-Dist: sphinx
|
|
88
|
+
Requires-Dist: matplotlib>=3.10.0; extra == 'docs'
|
|
89
|
+
Requires-Dist: myst-parser>=4.0.0; extra == 'docs'
|
|
90
|
+
Requires-Dist: pydata-sphinx-theme>=0.16.1; extra == 'docs'
|
|
91
|
+
Requires-Dist: sphinx-design>=0.6.0; extra == 'docs'
|
|
92
|
+
Requires-Dist: sphinx-gallery>=0.19.0; extra == 'docs'
|
|
93
|
+
Requires-Dist: sphinx>=8.0.0; extra == 'docs'
|
|
94
|
+
Requires-Dist: sphinxcontrib-typer<1,>=0.7.2; extra == 'docs'
|
|
81
95
|
Provides-Extra: ml
|
|
82
|
-
Requires-Dist: beartype
|
|
83
|
-
Requires-Dist: einops
|
|
84
|
-
Requires-Dist:
|
|
85
|
-
Requires-Dist:
|
|
96
|
+
Requires-Dist: beartype>=0.18.0; extra == 'ml'
|
|
97
|
+
Requires-Dist: einops>=0.7.0; extra == 'ml'
|
|
98
|
+
Requires-Dist: filelock>=3.20.3; extra == 'ml'
|
|
99
|
+
Requires-Dist: numba>=0.60.0; extra == 'ml'
|
|
100
|
+
Requires-Dist: requests>=2.33.0; extra == 'ml'
|
|
101
|
+
Requires-Dist: torch>=2.2.0; extra == 'ml'
|
|
86
102
|
Provides-Extra: openbabel
|
|
87
|
-
Requires-Dist: openbabel-wheel
|
|
103
|
+
Requires-Dist: openbabel-wheel>=3.1.1.22; extra == 'openbabel'
|
|
104
|
+
Provides-Extra: posebusters
|
|
105
|
+
Requires-Dist: posebusters>=0.6.0; extra == 'posebusters'
|
|
106
|
+
Provides-Extra: s3
|
|
107
|
+
Requires-Dist: boto3; extra == 's3'
|
|
88
108
|
Description-Content-Type: text/markdown
|
|
89
109
|
|
|
90
110
|
[](https://github.com/astral-sh/ruff)
|
|
111
|
+
[](https://github.com/RosettaCommons/atomworks/actions/workflows/release_and_docs.yaml)
|
|
91
112
|
[](https://pypi.org/project/atomworks/)
|
|
92
113
|
[](https://pypi.org/project/atomworks/)
|
|
93
114
|
[](https://rosettacommons.github.io/atomworks/latest/)
|
|
94
115
|
[](https://opensource.org/licenses/BSD-3-Clause)
|
|
95
116
|
|
|
96
117
|
<div align="center">
|
|
97
|
-
<
|
|
118
|
+
<picture>
|
|
119
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/RosettaCommons/atomworks/release/atomworks-3-0/docs/_static/atomworks_logo_dark.svg">
|
|
120
|
+
<img src="https://raw.githubusercontent.com/RosettaCommons/atomworks/release/atomworks-3-0/docs/_static/atomworks_logo_color.svg" width="450" alt="AtomWorks logo">
|
|
121
|
+
</picture>
|
|
98
122
|
</div>
|
|
99
123
|
|
|
100
124
|
**atomworks** is an open-source platform that maximizes research velocity for biomolecular modeling tasks. Much like how [Torchvision](https://docs.pytorch.org/vision/stable/index.html) enables rapid prototyping within the vision domain, and [Torchaudio](https://docs.pytorch.org/audio/main/) within the audio domain, AtomWorks aims to accelerate development and experimentation within biomolecular modeling.
|
|
101
125
|
|
|
102
|
-
|
|
126
|
+
Upgrading to 3.0? See the [migration guide](https://github.com/RosettaCommons/atomworks/blob/release/atomworks-3-0/docs/migration/migration-short.md).
|
|
103
127
|
|
|
104
|
-
If you're looking for the models themselves (e.g., RF3, MPNN) that integrate with AtomWorks rather than the underlying framework, check out [
|
|
128
|
+
If you're looking for the models themselves (e.g., RF3, RFD3, MPNN) that integrate with AtomWorks rather than the underlying framework, check out [Foundry](https://github.com/RosettaCommons/foundry)
|
|
105
129
|
|
|
106
|
-
> **💡 Note:**
|
|
130
|
+
> **💡 Note:** Start with the [AtomWorks examples](https://rosettacommons.github.io/atomworks/latest/auto_examples/index.html) or the [model-building tutorial](https://github.com/RosettaCommons/atomworks/blob/release/atomworks-3-0/docs/how_to_build_a_model/index.rst).
|
|
107
131
|
|
|
108
132
|
AtomWorks is composed of two symbiotic libraries:
|
|
109
133
|
|
|
@@ -118,7 +142,7 @@ AtomWorks is built atop [biotite](https://www.biotite-python.org/): We are grate
|
|
|
118
142
|
|
|
119
143
|
## atomworks.io
|
|
120
144
|
|
|
121
|
-
> *A general-purpose Python toolkit for cleaning, standardizing, and manipulating
|
|
145
|
+
> *A general-purpose Python toolkit for cleaning, standardizing, and manipulating biomolecular structure files, built on [Biotite](https://www.biotite-python.org/).*
|
|
122
146
|
|
|
123
147
|
**atomworks.io** lets you:
|
|
124
148
|
|
|
@@ -140,7 +164,7 @@ We have found `atomworks.io` to be generally useful to a broad bioinformatics an
|
|
|
140
164
|
- An extensible framework, integrated with `atomworks.io`, to write `Transforms` for arbitrary use cases
|
|
141
165
|
- Pre-built datasets and samplers suitable for most model training scenarios
|
|
142
166
|
|
|
143
|
-
|
|
167
|
+
Transforms consume and return dictionaries containing structural data, annotations and features. Biotite's `AtomArray` provides their shared atom-level representation.
|
|
144
168
|
|
|
145
169
|
We have found that `atomworks.ml` **dramatically** reduces the overhead of starting, and completing, many ML projects; research topics that once took months now achieve signal within weeks if not days, accelerating the pace of innovation.
|
|
146
170
|
|
|
@@ -161,14 +185,14 @@ We have found that `atomworks.ml` **dramatically** reduces the overhead of start
|
|
|
161
185
|
---
|
|
162
186
|
|
|
163
187
|
## Installation
|
|
164
|
-
|
|
188
|
+
AtomWorks requires Python 3.11 or newer. Pip installs its dependencies automatically.
|
|
165
189
|
|
|
166
190
|
```shell
|
|
167
191
|
pip install atomworks # base installation version without torch (for only atomworks.io)
|
|
168
192
|
pip install "atomworks[ml]" # with torch and ML dependencies (for atomworks.io plus atomworks.ml)
|
|
169
193
|
pip install "atomworks[dev]" # with development dependencies
|
|
170
194
|
pip install "atomworks[openbabel]" # with [Open Babel](https://openbabel.org/) and its dependencies
|
|
171
|
-
pip install "atomworks[ml,openbabel,dev]" #
|
|
195
|
+
pip install "atomworks[ml,openbabel,dev]" # ML, Open Babel, and development tools
|
|
172
196
|
```
|
|
173
197
|
*Running multiple of these installations will just add to the installed dependencies and will not install multiple installations of atomworks.*
|
|
174
198
|
|
|
@@ -178,6 +202,12 @@ If you are using [uv](https://docs.astral.sh/uv/reference/policies/versioning/)
|
|
|
178
202
|
uv pip install "atomworks[ml,openbabel,dev]"
|
|
179
203
|
```
|
|
180
204
|
|
|
205
|
+
To install the AtomWorks 3.0 release branch before it is published on PyPI:
|
|
206
|
+
|
|
207
|
+
```shell
|
|
208
|
+
pip install "atomworks[ml] @ git+https://github.com/RosettaCommons/atomworks.git@release/atomworks-3-0"
|
|
209
|
+
```
|
|
210
|
+
|
|
181
211
|
For more advanced setup options (including how to run workflows via apptainers) see the [full documentation](https://rosettacommons.github.io/atomworks/latest/index.html).
|
|
182
212
|
|
|
183
213
|
---
|
|
@@ -192,10 +222,11 @@ To parse a pdb file (parse = load, clean, annotate relevant metadata such as ent
|
|
|
192
222
|
|
|
193
223
|
```python
|
|
194
224
|
|
|
195
|
-
from atomworks.io
|
|
225
|
+
from atomworks.io import parse
|
|
226
|
+
from atomworks.io.config import ParseConfig
|
|
196
227
|
from biotite.structure import AtomArrayStack
|
|
197
228
|
|
|
198
|
-
result = parse(
|
|
229
|
+
result = parse("3nez.cif.gz", config=ParseConfig.from_preset("rcsb"))
|
|
199
230
|
|
|
200
231
|
asym_unit: AtomArrayStack = result["asym_unit"]
|
|
201
232
|
assemblies: dict[str, AtomArrayStack] = result["assemblies"]
|
|
@@ -216,13 +247,13 @@ The output of `parse` includes:
|
|
|
216
247
|
See [usage examples](https://rosettacommons.github.io/atomworks/latest/auto_examples/index.html) for more examples of the use of `parse()`. All of the provided examples make use of this method.
|
|
217
248
|
See [API reference documentation](https://rosettacommons.github.io/atomworks/latest/io/parser.html) for more information on this method.
|
|
218
249
|
|
|
219
|
-
|
|
250
|
+
For minimal processing, use the same parser with the `minimal` preset:
|
|
220
251
|
|
|
221
252
|
```python
|
|
222
|
-
from atomworks.io
|
|
253
|
+
from atomworks.io import parse
|
|
223
254
|
from biotite.structure import AtomArray
|
|
224
255
|
|
|
225
|
-
atom_array: AtomArray =
|
|
256
|
+
atom_array: AtomArray = parse("3nez.cif.gz", config="minimal")["asym_unit"][0]
|
|
226
257
|
```
|
|
227
258
|
|
|
228
259
|
---
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
[](https://github.com/astral-sh/ruff)
|
|
2
|
+
[](https://github.com/RosettaCommons/atomworks/actions/workflows/release_and_docs.yaml)
|
|
2
3
|
[](https://pypi.org/project/atomworks/)
|
|
3
4
|
[](https://pypi.org/project/atomworks/)
|
|
4
5
|
[](https://rosettacommons.github.io/atomworks/latest/)
|
|
5
6
|
[](https://opensource.org/licenses/BSD-3-Clause)
|
|
6
7
|
|
|
7
8
|
<div align="center">
|
|
8
|
-
<
|
|
9
|
+
<picture>
|
|
10
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/RosettaCommons/atomworks/release/atomworks-3-0/docs/_static/atomworks_logo_dark.svg">
|
|
11
|
+
<img src="https://raw.githubusercontent.com/RosettaCommons/atomworks/release/atomworks-3-0/docs/_static/atomworks_logo_color.svg" width="450" alt="AtomWorks logo">
|
|
12
|
+
</picture>
|
|
9
13
|
</div>
|
|
10
14
|
|
|
11
15
|
**atomworks** is an open-source platform that maximizes research velocity for biomolecular modeling tasks. Much like how [Torchvision](https://docs.pytorch.org/vision/stable/index.html) enables rapid prototyping within the vision domain, and [Torchaudio](https://docs.pytorch.org/audio/main/) within the audio domain, AtomWorks aims to accelerate development and experimentation within biomolecular modeling.
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
Upgrading to 3.0? See the [migration guide](https://github.com/RosettaCommons/atomworks/blob/release/atomworks-3-0/docs/migration/migration-short.md).
|
|
14
18
|
|
|
15
|
-
If you're looking for the models themselves (e.g., RF3, MPNN) that integrate with AtomWorks rather than the underlying framework, check out [
|
|
19
|
+
If you're looking for the models themselves (e.g., RF3, RFD3, MPNN) that integrate with AtomWorks rather than the underlying framework, check out [Foundry](https://github.com/RosettaCommons/foundry)
|
|
16
20
|
|
|
17
|
-
> **💡 Note:**
|
|
21
|
+
> **💡 Note:** Start with the [AtomWorks examples](https://rosettacommons.github.io/atomworks/latest/auto_examples/index.html) or the [model-building tutorial](https://github.com/RosettaCommons/atomworks/blob/release/atomworks-3-0/docs/how_to_build_a_model/index.rst).
|
|
18
22
|
|
|
19
23
|
AtomWorks is composed of two symbiotic libraries:
|
|
20
24
|
|
|
@@ -29,7 +33,7 @@ AtomWorks is built atop [biotite](https://www.biotite-python.org/): We are grate
|
|
|
29
33
|
|
|
30
34
|
## atomworks.io
|
|
31
35
|
|
|
32
|
-
> *A general-purpose Python toolkit for cleaning, standardizing, and manipulating
|
|
36
|
+
> *A general-purpose Python toolkit for cleaning, standardizing, and manipulating biomolecular structure files, built on [Biotite](https://www.biotite-python.org/).*
|
|
33
37
|
|
|
34
38
|
**atomworks.io** lets you:
|
|
35
39
|
|
|
@@ -51,7 +55,7 @@ We have found `atomworks.io` to be generally useful to a broad bioinformatics an
|
|
|
51
55
|
- An extensible framework, integrated with `atomworks.io`, to write `Transforms` for arbitrary use cases
|
|
52
56
|
- Pre-built datasets and samplers suitable for most model training scenarios
|
|
53
57
|
|
|
54
|
-
|
|
58
|
+
Transforms consume and return dictionaries containing structural data, annotations and features. Biotite's `AtomArray` provides their shared atom-level representation.
|
|
55
59
|
|
|
56
60
|
We have found that `atomworks.ml` **dramatically** reduces the overhead of starting, and completing, many ML projects; research topics that once took months now achieve signal within weeks if not days, accelerating the pace of innovation.
|
|
57
61
|
|
|
@@ -72,14 +76,14 @@ We have found that `atomworks.ml` **dramatically** reduces the overhead of start
|
|
|
72
76
|
---
|
|
73
77
|
|
|
74
78
|
## Installation
|
|
75
|
-
|
|
79
|
+
AtomWorks requires Python 3.11 or newer. Pip installs its dependencies automatically.
|
|
76
80
|
|
|
77
81
|
```shell
|
|
78
82
|
pip install atomworks # base installation version without torch (for only atomworks.io)
|
|
79
83
|
pip install "atomworks[ml]" # with torch and ML dependencies (for atomworks.io plus atomworks.ml)
|
|
80
84
|
pip install "atomworks[dev]" # with development dependencies
|
|
81
85
|
pip install "atomworks[openbabel]" # with [Open Babel](https://openbabel.org/) and its dependencies
|
|
82
|
-
pip install "atomworks[ml,openbabel,dev]" #
|
|
86
|
+
pip install "atomworks[ml,openbabel,dev]" # ML, Open Babel, and development tools
|
|
83
87
|
```
|
|
84
88
|
*Running multiple of these installations will just add to the installed dependencies and will not install multiple installations of atomworks.*
|
|
85
89
|
|
|
@@ -89,6 +93,12 @@ If you are using [uv](https://docs.astral.sh/uv/reference/policies/versioning/)
|
|
|
89
93
|
uv pip install "atomworks[ml,openbabel,dev]"
|
|
90
94
|
```
|
|
91
95
|
|
|
96
|
+
To install the AtomWorks 3.0 release branch before it is published on PyPI:
|
|
97
|
+
|
|
98
|
+
```shell
|
|
99
|
+
pip install "atomworks[ml] @ git+https://github.com/RosettaCommons/atomworks.git@release/atomworks-3-0"
|
|
100
|
+
```
|
|
101
|
+
|
|
92
102
|
For more advanced setup options (including how to run workflows via apptainers) see the [full documentation](https://rosettacommons.github.io/atomworks/latest/index.html).
|
|
93
103
|
|
|
94
104
|
---
|
|
@@ -103,10 +113,11 @@ To parse a pdb file (parse = load, clean, annotate relevant metadata such as ent
|
|
|
103
113
|
|
|
104
114
|
```python
|
|
105
115
|
|
|
106
|
-
from atomworks.io
|
|
116
|
+
from atomworks.io import parse
|
|
117
|
+
from atomworks.io.config import ParseConfig
|
|
107
118
|
from biotite.structure import AtomArrayStack
|
|
108
119
|
|
|
109
|
-
result = parse(
|
|
120
|
+
result = parse("3nez.cif.gz", config=ParseConfig.from_preset("rcsb"))
|
|
110
121
|
|
|
111
122
|
asym_unit: AtomArrayStack = result["asym_unit"]
|
|
112
123
|
assemblies: dict[str, AtomArrayStack] = result["assemblies"]
|
|
@@ -127,13 +138,13 @@ The output of `parse` includes:
|
|
|
127
138
|
See [usage examples](https://rosettacommons.github.io/atomworks/latest/auto_examples/index.html) for more examples of the use of `parse()`. All of the provided examples make use of this method.
|
|
128
139
|
See [API reference documentation](https://rosettacommons.github.io/atomworks/latest/io/parser.html) for more information on this method.
|
|
129
140
|
|
|
130
|
-
|
|
141
|
+
For minimal processing, use the same parser with the `minimal` preset:
|
|
131
142
|
|
|
132
143
|
```python
|
|
133
|
-
from atomworks.io
|
|
144
|
+
from atomworks.io import parse
|
|
134
145
|
from biotite.structure import AtomArray
|
|
135
146
|
|
|
136
|
-
atom_array: AtomArray =
|
|
147
|
+
atom_array: AtomArray = parse("3nez.cif.gz", config="minimal")["asym_unit"][0]
|
|
137
148
|
```
|
|
138
149
|
|
|
139
150
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "atomworks"
|
|
3
|
-
version = "
|
|
3
|
+
version = "3.0.0"
|
|
4
4
|
description = "A research-oriented data toolkit for training biomolecular deep-learning foundation models"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -23,76 +23,111 @@ classifiers = [
|
|
|
23
23
|
|
|
24
24
|
dependencies = [
|
|
25
25
|
# ... generic tools
|
|
26
|
-
"cython>=3.0.0
|
|
27
|
-
"cytoolz>=0.12.3
|
|
28
|
-
"tqdm>=4.
|
|
26
|
+
"cython>=3.0.0", # Cython compiler for C extensions
|
|
27
|
+
"cytoolz>=0.12.3", # Cython-optimized tools for itertools and functional programming
|
|
28
|
+
"tqdm>=4.66.3", # Fast, extensible progress bar for loops and more
|
|
29
29
|
# ... CLI & config management
|
|
30
|
-
"typer>=0.12.5
|
|
30
|
+
"typer>=0.12.5", # Modern CLI framework
|
|
31
|
+
"python-dotenv>=1.2.2", # Environment loading for the CLI
|
|
32
|
+
"pygments>=2.20.0", # Traceback formatting in core IO
|
|
31
33
|
# ... linear algebra, maths & ml
|
|
32
|
-
"numpy>=1.25.0
|
|
33
|
-
"
|
|
34
|
+
"numpy>=1.25.0",
|
|
35
|
+
"jaxtyping>=0.2.17", # Array annotations used by core IO
|
|
36
|
+
"scipy>=1.13.1",
|
|
34
37
|
# ... data tools
|
|
35
|
-
"pandas>=2.2
|
|
36
|
-
"pyarrow
|
|
38
|
+
"pandas>=2.2", # Data manipulation and analysis
|
|
39
|
+
"pyarrow>=23.0.1", # Columnar data format for efficient data storage and processing
|
|
37
40
|
# ... compression
|
|
38
|
-
"zstandard>=0.21.0
|
|
41
|
+
"zstandard>=0.21.0", # Zstandard compression for MSA files and other data
|
|
39
42
|
# ... bioinformatics
|
|
40
|
-
"py3Dmol>=2.2.1
|
|
43
|
+
"py3Dmol>=2.2.1", # Python wrapper for 3Dmol.js
|
|
41
44
|
"pymol-remote>=0.0.5", # Remote access to PyMOL from Python (has no dependencies)
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
# Pinned exactly: atomworks monkey-patches biotite internals and ``atomworks/__init__.py``
|
|
46
|
+
# refuses to import against any other version. A ``>=`` floor here silently resolves to a
|
|
47
|
+
# newer biotite that then fails at import time.
|
|
48
|
+
"biotite==1.6.0", # Biotite is a Python library for bioinformatics
|
|
44
49
|
# ... small molecule libraries
|
|
45
|
-
"rdkit>=2024.3.5
|
|
50
|
+
"rdkit>=2024.3.5",
|
|
51
|
+
"urllib3>=2.8.0",
|
|
52
|
+
"pillow>=12.3.0",
|
|
53
|
+
"idna>=3.15",
|
|
54
|
+
"requests>=2.33.0",
|
|
46
55
|
]
|
|
47
56
|
|
|
48
57
|
[project.optional-dependencies]
|
|
49
58
|
ml = [
|
|
50
59
|
# atomworks-ml dependencies
|
|
51
|
-
"torch>=2.2.0
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"beartype>=0.18.0
|
|
60
|
+
"torch>=2.2.0",
|
|
61
|
+
"requests>=2.33.0", # Remote MMseqs2 server client
|
|
62
|
+
"einops>=0.7.0",
|
|
63
|
+
"beartype>=0.18.0",
|
|
64
|
+
"numba>=0.60.0",
|
|
65
|
+
"filelock>=3.20.3",
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
s3 = [
|
|
69
|
+
# Reading blob stores / parquet directly from ``s3://`` URLs
|
|
70
|
+
"boto3",
|
|
55
71
|
]
|
|
56
72
|
|
|
57
73
|
ase = [
|
|
58
74
|
# ASE (Atomic Simulation Environment) dataset support
|
|
59
|
-
"ase>=3.22.0
|
|
60
|
-
"ase-db-backends>=0.10.0
|
|
61
|
-
"lmdb>=1.5.0
|
|
75
|
+
"ase>=3.22.0", # Atomic Simulation Environment
|
|
76
|
+
"ase-db-backends>=0.10.0", # Database backends for ASE (PostgreSQL, MySQL, LMDB)
|
|
77
|
+
"lmdb>=1.5.0", # LMDB backend for ASE database support (required for .aselmdb files)
|
|
78
|
+
"cryptography>=50.0.0",
|
|
62
79
|
]
|
|
63
80
|
|
|
64
81
|
openbabel = [
|
|
65
82
|
# Optional openbabel dependency
|
|
66
|
-
"openbabel-wheel
|
|
83
|
+
"openbabel-wheel>=3.1.1.22",
|
|
84
|
+
]
|
|
85
|
+
|
|
86
|
+
posebusters = [
|
|
87
|
+
# PoseBusters: structural validity checks for docked/predicted poses
|
|
88
|
+
"posebusters>=0.6.0",
|
|
89
|
+
]
|
|
90
|
+
|
|
91
|
+
catcif = [
|
|
92
|
+
# catcif: concatenated CIF archive format support
|
|
93
|
+
"catcif-tools",
|
|
67
94
|
]
|
|
68
95
|
|
|
69
96
|
dev = [
|
|
70
97
|
# Linters & formatters
|
|
71
98
|
"ruff==0.8.3",
|
|
72
99
|
# Testing tools
|
|
73
|
-
"pytest>=
|
|
74
|
-
"pytest-testmon>=2.1.1
|
|
75
|
-
"pytest-xdist>=3.6.1
|
|
76
|
-
"pytest-dotenv>=0.5.2
|
|
77
|
-
"pytest-cov>=4.1.0
|
|
78
|
-
"pytest-benchmark>=5.0.0
|
|
100
|
+
"pytest>=9.0.3", # testing framework
|
|
101
|
+
"pytest-testmon>=2.1.1", # run only tests related to changed code
|
|
102
|
+
"pytest-xdist>=3.6.1", # run tests in parallel
|
|
103
|
+
"pytest-dotenv>=0.5.2", # load environment variables from .env file
|
|
104
|
+
"pytest-cov>=4.1.0", # generate coverage report
|
|
105
|
+
"pytest-benchmark>=5.0.0", # benchmark tests for speed
|
|
79
106
|
# Jupyter notebooks
|
|
80
107
|
"ipykernel>=6.28.0", # IPython kernel for Jupyter
|
|
108
|
+
"tornado>=6.5.9",
|
|
109
|
+
# CLI
|
|
110
|
+
"fire>=0.5.0", # CLI generation library
|
|
81
111
|
]
|
|
82
112
|
|
|
83
113
|
docs = [
|
|
84
|
-
"
|
|
85
|
-
"sphinx
|
|
86
|
-
"
|
|
87
|
-
"
|
|
114
|
+
"sphinxcontrib-typer>=0.7.2,<1",
|
|
115
|
+
"sphinx>=8.0.0",
|
|
116
|
+
"sphinx-gallery>=0.19.0",
|
|
117
|
+
"pydata-sphinx-theme>=0.16.1",
|
|
118
|
+
"matplotlib>=3.10.0",
|
|
119
|
+
"myst-parser>=4.0.0", # Support Markdown tutorial pages
|
|
120
|
+
"sphinx-design>=0.6.0", # Render collapsible tutorial code examples
|
|
88
121
|
]
|
|
89
122
|
|
|
90
123
|
[dependency-groups]
|
|
91
124
|
# Reference optional dependencies for native uv compatability (in addition to the pip compatability)
|
|
92
125
|
dev = ["atomworks[dev]"]
|
|
93
|
-
ml = ["atomworks[ml]"]
|
|
126
|
+
ml = ["atomworks[ml]"]
|
|
94
127
|
docs = ["atomworks[docs]"]
|
|
95
128
|
openbabel = ["atomworks[openbabel]"]
|
|
129
|
+
posebusters = ["atomworks[posebusters]"]
|
|
130
|
+
catcif = ["atomworks[catcif]"]
|
|
96
131
|
|
|
97
132
|
[project.urls]
|
|
98
133
|
homepage = "https://rosettacommons.github.io/atomworks/latest/index.html"
|
|
@@ -105,13 +140,15 @@ aw = "atomworks_cli.__main__:main"
|
|
|
105
140
|
|
|
106
141
|
# Build settings ----------------------------------------------------------------------
|
|
107
142
|
[build-system]
|
|
108
|
-
requires = ["hatchling"
|
|
143
|
+
requires = ["hatchling"]
|
|
109
144
|
build-backend = "hatchling.build"
|
|
110
145
|
|
|
111
|
-
[tool.hatch.build]
|
|
112
|
-
sources = ["src"]
|
|
146
|
+
[tool.hatch.build.targets.wheel]
|
|
113
147
|
packages = ["src/atomworks", "src/atomworks_cli"]
|
|
114
148
|
|
|
149
|
+
[tool.hatch.build.targets.sdist]
|
|
150
|
+
include = ["/src", "/README.md", "/LICENSE.md", "/pyproject.toml"]
|
|
151
|
+
|
|
115
152
|
[tool.hatch.metadata]
|
|
116
153
|
allow-direct-references = true
|
|
117
154
|
dynamic = false # optional – this disables dynamic metadata guessing
|
|
@@ -220,6 +257,7 @@ convention = "google"
|
|
|
220
257
|
"docs/**/*.py" = ["E402"] # Ignore forcing imports to be at the top of the file
|
|
221
258
|
"docs/**/*.ipynb" = ["E402"] # Ignore forcing imports to be at the top of the file
|
|
222
259
|
"src/atomworks_cli/*" = ["B008"] # Ignore function calls in argument defaults for Typer CLI
|
|
260
|
+
"src/atomworks/ml/preprocessing/msa/colabfold_server.py" = ["N803", "N806"] # Keep ColabFold's upstream variable names (ID, REDO, TIME, ...) for easy diffing
|
|
223
261
|
|
|
224
262
|
# Allow one-letter variable names commonly used in scientific code.
|
|
225
263
|
[tool.ruff.lint.pep8-naming]
|
|
@@ -238,6 +276,7 @@ testpaths = "tests" # Only run tests in the tests directory (speeds up collecti
|
|
|
238
276
|
norecursedirs = "docs *.egg-info .git .tox htmlcov"
|
|
239
277
|
addopts = "--import-mode=importlib"
|
|
240
278
|
pythonpath = ["src/atomworks", "tests"]
|
|
279
|
+
env_files = ".env" # Automatically load .env file before running tests (via pytest-dotenv)
|
|
241
280
|
markers = [
|
|
242
281
|
"requires_internet: marks tests that require an internet connection",
|
|
243
282
|
"requires_pymol_remote: marks tests that require a PyMOL remote connection to run",
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Unified package for biological data I/O and machine learning.
|
|
2
|
+
|
|
3
|
+
This package combines functionality from :mod:`atomworks.io` (I/O operations) and
|
|
4
|
+
:mod:`atomworks.ml` (ML utilities) into a unified interface for biological data
|
|
5
|
+
processing and machine learning.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import importlib
|
|
9
|
+
import importlib.metadata
|
|
10
|
+
import logging
|
|
11
|
+
import os
|
|
12
|
+
import warnings
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
__version__ = importlib.metadata.version("atomworks")
|
|
16
|
+
except ImportError:
|
|
17
|
+
__version__ = "unknown"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# Hard-enforce biotite version compatibility by importing biotite directly.
|
|
21
|
+
# Atomworks monkey-patches several private biotite internals that are sensitive to exact version alignment
|
|
22
|
+
_REQUIRED_BIOTITE_VERSION = "1.6.0"
|
|
23
|
+
try:
|
|
24
|
+
import biotite as _biotite_check
|
|
25
|
+
except ImportError:
|
|
26
|
+
raise ImportError(
|
|
27
|
+
f"atomworks requires biotite=={_REQUIRED_BIOTITE_VERSION}, but biotite is not installed.\n"
|
|
28
|
+
f" pip install 'biotite=={_REQUIRED_BIOTITE_VERSION}'"
|
|
29
|
+
) from None
|
|
30
|
+
if _biotite_check.__version__ != _REQUIRED_BIOTITE_VERSION:
|
|
31
|
+
raise ImportError(
|
|
32
|
+
f"atomworks requires biotite=={_REQUIRED_BIOTITE_VERSION}, "
|
|
33
|
+
f"but biotite {_biotite_check.__version__!r} is installed.\n"
|
|
34
|
+
f" pip install 'biotite=={_REQUIRED_BIOTITE_VERSION}'"
|
|
35
|
+
)
|
|
36
|
+
del _biotite_check
|
|
37
|
+
|
|
38
|
+
# Global logging configuration
|
|
39
|
+
logger = logging.getLogger("atomworks")
|
|
40
|
+
_log_level = os.environ.get("ATOMWORKS_LOG_LEVEL", "WARNING").upper()
|
|
41
|
+
logger.setLevel(_log_level)
|
|
42
|
+
|
|
43
|
+
# Ensure that deprecation warnings are not repeated
|
|
44
|
+
warnings.filterwarnings("once", category=DeprecationWarning)
|
|
45
|
+
|
|
46
|
+
# Enforce strict biotite version — atomworks patches biotite internals
|
|
47
|
+
import biotite # noqa: E402
|
|
48
|
+
|
|
49
|
+
_REQUIRED_BIOTITE_VERSION = "1.6.0"
|
|
50
|
+
if biotite.__version__ != _REQUIRED_BIOTITE_VERSION:
|
|
51
|
+
raise RuntimeError(
|
|
52
|
+
f"atomworks requires biotite=={_REQUIRED_BIOTITE_VERSION}, "
|
|
53
|
+
f"but found biotite=={biotite.__version__}. "
|
|
54
|
+
f"Install the correct version: pip install biotite=={_REQUIRED_BIOTITE_VERSION}"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Apply monkey patching to extend AtomArray functionality
|
|
58
|
+
from atomworks.biotite_patch import monkey_patch_biotite # noqa: E402
|
|
59
|
+
|
|
60
|
+
monkey_patch_biotite()
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# Import subpackages; also import annotators and Conditions to ensure they're registered
|
|
64
|
+
from atomworks.io.utils import annotator as _annotator_io # noqa: E402
|
|
65
|
+
from atomworks.io.utils.standard_annotations import definitions as _standard_annotation_definitions # noqa: E402
|
|
66
|
+
|
|
67
|
+
from . import io # noqa: E402
|
|
68
|
+
|
|
69
|
+
# Make atomworks.ml an optional import
|
|
70
|
+
try:
|
|
71
|
+
from atomworks.ml.conditions import definitions as _condition_definitions
|
|
72
|
+
from atomworks.ml.utils import annotator as _annotator_ml
|
|
73
|
+
|
|
74
|
+
from . import ml
|
|
75
|
+
except ImportError:
|
|
76
|
+
pass
|
|
77
|
+
|
|
78
|
+
# Re-export key functionality from subpackages for convenience
|
|
79
|
+
# This maintains backward compatibility and provides a clean top-level API
|
|
80
|
+
# Key I/O functionality
|
|
81
|
+
from .io.parser import parse # noqa: E402
|
|
82
|
+
|
|
83
|
+
__all__ = [
|
|
84
|
+
"__version__",
|
|
85
|
+
"io",
|
|
86
|
+
"ml",
|
|
87
|
+
"parse",
|
|
88
|
+
]
|