atomworks-studio 0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- atomworks_studio-0.0.1/.gitignore +25 -0
- atomworks_studio-0.0.1/LICENSE.md +31 -0
- atomworks_studio-0.0.1/PKG-INFO +117 -0
- atomworks_studio-0.0.1/README.md +91 -0
- atomworks_studio-0.0.1/examples/README.md +15 -0
- atomworks_studio-0.0.1/examples/space/README.md +33 -0
- atomworks_studio-0.0.1/hatch_build.py +45 -0
- atomworks_studio-0.0.1/packages/api/README.md +13 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/__init__.py +30 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/cli.py +31 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/contracts.py +48 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/core.py +10 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/README.md +21 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/antibody_design.cif +9646 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/enzyme_design.cif +207 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/examples.json +56 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/inverse_folding.cif +726 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/motif_scaffolding.cif +270 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/nanobody.cif +5777 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/protein_binder.cif +2858 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/small_molecule_binder.cif +251 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/examples/unconditional.cif +78 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/gradio.py +259 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/ACCEPTANCE.html +181 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/ARCHITECTURE.html +158 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/DEVELOPMENT.html +238 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/INPUTS.html +117 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/INSTALLATION.html +223 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/INTEGRATIONS.html +292 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/PROVENANCE.html +205 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/PYMOL.html +240 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/RELEASE.html +190 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/SELECTIONS.html +270 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/TUTORIAL.html +187 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/VSCODE.html +166 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/WEB.html +332 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_images/web-annotations.png +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_images/web-embedded.png +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_images/web-molstar-editor.png +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/ACCEPTANCE.md.txt +91 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/ARCHITECTURE.md.txt +43 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/DEVELOPMENT.md.txt +158 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/INPUTS.md.txt +16 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/INSTALLATION.md.txt +121 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/INTEGRATIONS.md.txt +191 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/PROVENANCE.md.txt +110 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/PYMOL.md.txt +130 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/RELEASE.md.txt +94 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/SELECTIONS.md.txt +144 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/TUTORIAL.md.txt +88 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/VSCODE.md.txt +65 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/WEB.md.txt +249 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_sources/index.md.txt +48 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/alabaster.css +663 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/base-stemmer.js +476 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/basic.css +906 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/custom.css +1 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/doctools.js +150 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/documentation_options.js +13 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/english-stemmer.js +1066 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/file.png +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/github-banner.svg +5 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/language_data.js +13 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/minus.png +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/plus.png +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/pygments.css +84 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/searchtools.js +693 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/sphinx_highlight.js +159 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/studio.css +50 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/_static/studio.js +41 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/genindex.html +105 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/index.html +158 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/objects.inv +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/search.html +122 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/guide/searchindex.js +1 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/identity.py +19 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/main.py +1032 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/version.py +12 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/annotation-studio.svg +17 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/annotation_studio_core_bg-0zBgLIOf.wasm +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/cells-D9Q81GMa.jpg +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/index-ChG0NGAU.js +21 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/index-DCmII2EW.css +1 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/molstar-BK3R50bs.css +2 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/molstar-DEH5SZOb.js +8279 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/nebula_back6-DGSZ_tzT.jpg +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/nebula_bottom4-DgUpJxjp.jpg +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/nebula_front5-CWqbzonZ.jpg +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/nebula_left2-Da3VdN9a.jpg +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/nebula_right1-BWVtsnot.jpg +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/nebula_top3-CfldhfdM.jpg +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/patinae-B89qSVJA.js +97 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/patinae_web-BJnzZAZI-BErUWgRs.js +2 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/assets/patinae_web_bg.wasm +0 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/atomworks_logo_dark.svg +1 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/index.html +385 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/manifest.webmanifest +18 -0
- atomworks_studio-0.0.1/packages/api/annotation_studio/web/sw.js +32 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/__init__.py +1 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/annotation_palette.json +30 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/annotations.py +68 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/conditions.py +47 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/contracts.py +127 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/document.py +1511 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/layout.py +7 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/loading.py +200 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/mutations.py +111 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/providers.py +37 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/query.py +45 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/structure_mutations.py +144 -0
- atomworks_studio-0.0.1/packages/editing/atomworks_studio_editing/validation.py +70 -0
- atomworks_studio-0.0.1/packages/patinae-plugin/README.md +52 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/README.md +11 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/__init__.py +127 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/__main__.py +6 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/bond_wizard.py +427 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/bridge.py +426 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/chain_wizard.py +179 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/charge_wizard.py +216 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/commands.py +148 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/display.py +336 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/editors/__init__.py +105 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/editors/custom.py +36 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/editors/widgets.py +707 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/extensions.py +121 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/installation.py +76 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/panel.py +1349 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/pymol_env.yaml +12 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/state.py +220 -0
- atomworks_studio-0.0.1/packages/pymol-plugin/atomworks_studio_pymol/views.py +196 -0
- atomworks_studio-0.0.1/providers/rfd4/UPSTREAM.toml +10 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/__init__.py +95 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/_upstream/LICENSE +28 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/_upstream/data/cath_label_mapping.pkl +0 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/_upstream/src/rfproteina/conditions.py +521 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/_upstream/src/rfproteina/utils/parse_presets.py +90 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/_upstream/src/rfproteina/utils/standard_annotations.py +142 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/condition_contract.py +241 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/generation.py +76 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/interactive_validation.py +22 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/internal_coordinate.py +113 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/model.py +58 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/__init__.py +1 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/cath_editor.py +50 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/chain_centroid_editor.py +257 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/condition_registry.py +132 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/coordinate_edit.py +25 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/document_editors.py +96 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/editors.py +45 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/group_editor.py +213 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/internal_coord_editor.py +95 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/visualize.py +123 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/pymol/widgets.py +106 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/reporting.py +200 -0
- atomworks_studio-0.0.1/providers/rfd4/atomworks_studio_rfd4/sequence_probability.py +235 -0
- atomworks_studio-0.0.1/pyproject.toml +97 -0
- atomworks_studio-0.0.1/src/atomworks_studio/__init__.py +1 -0
- atomworks_studio-0.0.1/src/atomworks_studio/__main__.py +6 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
**/__pycache__/
|
|
2
|
+
**/.pytest_cache/
|
|
3
|
+
**/.ruff_cache/
|
|
4
|
+
**/target/
|
|
5
|
+
**/node_modules
|
|
6
|
+
**/dist/
|
|
7
|
+
**/build/
|
|
8
|
+
**/*.egg-info/
|
|
9
|
+
*.vsix
|
|
10
|
+
*.whl
|
|
11
|
+
*.tgz
|
|
12
|
+
!packages/web/vendor/patinae-viewer-0.5.1-studio.1.tgz
|
|
13
|
+
artifacts/
|
|
14
|
+
.cache/
|
|
15
|
+
.coverage
|
|
16
|
+
.env
|
|
17
|
+
packages/web/src/wasm/
|
|
18
|
+
!packages/web/public/annotation-studio.svg
|
|
19
|
+
|
|
20
|
+
.venv/
|
|
21
|
+
|
|
22
|
+
docs/_build/
|
|
23
|
+
|
|
24
|
+
external/
|
|
25
|
+
examples/space/wheels/
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, Institute for Protein Design, University of Washington
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
contributors may be used to endorse or promote products derived from
|
|
17
|
+
this software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
+
|
|
30
|
+
Third-party dependencies and the Patinae patch series retain their respective
|
|
31
|
+
licenses. See `docs/PROVENANCE.md` and `vendor/patinae/UPSTREAM.toml`.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: atomworks-studio
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Inspect and edit annotated molecular structures
|
|
5
|
+
Project-URL: Documentation, https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/index.md
|
|
6
|
+
Project-URL: Source, https://github.com/RosettaCommons/atomworks-studio
|
|
7
|
+
License-Expression: BSD-3-Clause
|
|
8
|
+
License-File: LICENSE.md
|
|
9
|
+
Requires-Python: <3.13,>=3.12
|
|
10
|
+
Requires-Dist: atomworks[ml]==3.0.1
|
|
11
|
+
Requires-Dist: fastapi<2,>=0.115
|
|
12
|
+
Requires-Dist: numpy<3,>=1.26
|
|
13
|
+
Requires-Dist: pydantic<3,>=2.10
|
|
14
|
+
Requires-Dist: python-multipart<1,>=0.0.20
|
|
15
|
+
Requires-Dist: uvicorn<1,>=0.34
|
|
16
|
+
Provides-Extra: gradio
|
|
17
|
+
Requires-Dist: gradio<7,>=6.29; extra == 'gradio'
|
|
18
|
+
Requires-Dist: httpx<1,>=0.28; extra == 'gradio'
|
|
19
|
+
Provides-Extra: pymol-pip
|
|
20
|
+
Requires-Dist: pymol-open-source>=3.2.0a0; extra == 'pymol-pip'
|
|
21
|
+
Requires-Dist: pyqt5>=5.15.11; extra == 'pymol-pip'
|
|
22
|
+
Provides-Extra: test
|
|
23
|
+
Requires-Dist: httpx2<3,>=2.8; extra == 'test'
|
|
24
|
+
Requires-Dist: pytest<10,>=8.2; extra == 'test'
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
<h1 align="center">AtomWorks Studio</h1>
|
|
28
|
+
|
|
29
|
+
<p align="center"><b>Inspect, annotate and edit molecular structures in a browser, VS Code or PyMOL.</b></p>
|
|
30
|
+
|
|
31
|
+
<p align="center">
|
|
32
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/actions/workflows/ci.yaml"><img src="https://github.com/RosettaCommons/atomworks-studio/actions/workflows/ci.yaml/badge.svg" alt="CI"></a>
|
|
33
|
+
<a href="https://pypi.org/project/atomworks-studio/"><img src="https://img.shields.io/pypi/v/atomworks-studio.svg" alt="PyPI"></a>
|
|
34
|
+
<a href="https://pypi.org/project/atomworks-studio/"><img src="https://img.shields.io/pypi/pyversions/atomworks-studio.svg" alt="Python"></a>
|
|
35
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/blob/main/LICENSE.md"><img src="https://img.shields.io/badge/license-BSD--3--Clause-blue.svg" alt="License: BSD-3-Clause"></a>
|
|
36
|
+
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff"></a>
|
|
37
|
+
</p>
|
|
38
|
+
|
|
39
|
+
<p align="center">
|
|
40
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/index.md">Documentation</a> ·
|
|
41
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/INSTALLATION.md">Installation</a> ·
|
|
42
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/TUTORIAL.md">Tutorial</a>
|
|
43
|
+
</p>
|
|
44
|
+
|
|
45
|
+
<p align="center"><img src="https://raw.githubusercontent.com/RosettaCommons/atomworks-studio/main/docs/images/web-molstar-editor.png" alt="AtomWorks Studio in the browser: sequence view, Mol* viewer and annotation panel" width="860"></p>
|
|
46
|
+
|
|
47
|
+
Studio is a structure and annotation editor for [AtomWorks](https://github.com/RosettaCommons/atomworks)
|
|
48
|
+
annotated CIF files. Select atoms, attach conditioning annotations (sequence, coordinates, hotspots,
|
|
49
|
+
index groups and more), fix bonds and charges, protonate, edit chains and expandable segments, and save a
|
|
50
|
+
CIF that any Studio interface reopens. It is built for preparing inputs to structure-design models such as
|
|
51
|
+
[RFD4-Proteina](https://github.com/RosettaCommons/RFD4-Proteina). No model runtime or weights are needed.
|
|
52
|
+
|
|
53
|
+
## Features
|
|
54
|
+
|
|
55
|
+
- **One editor, three interfaces.** The browser, VS Code and native PyMOL share annotation definitions,
|
|
56
|
+
editing operations, CIF storage and Undo.
|
|
57
|
+
- **Annotations you can see.** Pick a condition, apply it to a selection, and color or inspect the stored values.
|
|
58
|
+
- **Selections with AtomWorks queries.** Expressions such as `chain_id == 'A' & res_id > 50` work everywhere.
|
|
59
|
+
- **Structure edits with Undo.** Bonds, charges, pH-based protonation, chains, segments and validation.
|
|
60
|
+
- **Two renderers in the browser.** Mol* (WebGL) by default and Patinae (WebGPU), both bundled.
|
|
61
|
+
- **Design-ready examples.** Protein and small-molecule binders, antibody and nanobody CDRs, enzyme motifs,
|
|
62
|
+
motif scaffolding, inverse folding and partial diffusion.
|
|
63
|
+
- **Optional Gradio host.** Adds generation controls around the same editor for hosted demos and Spaces.
|
|
64
|
+
|
|
65
|
+
## Install
|
|
66
|
+
|
|
67
|
+
Studio needs Python 3.12.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
python -m pip install atomworks-studio
|
|
71
|
+
atomworks-studio
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Open <http://127.0.0.1:8000/>. The guide is at <http://127.0.0.1:8000/guide/>. Mol* and Patinae are
|
|
75
|
+
included in the package; Node and Rust are only needed to build from source.
|
|
76
|
+
|
|
77
|
+
<table>
|
|
78
|
+
<tr>
|
|
79
|
+
<td width="50%"><b>Browser and VS Code</b><br>Run <code>atomworks-studio</code>, or install the VSIX from the
|
|
80
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/releases">releases</a> and run
|
|
81
|
+
<b>AtomWorks: Open Studio</b>. The extension starts its Python backend for you.</td>
|
|
82
|
+
<td width="50%"><b>PyMOL</b><br>Install the package in PyMOL's Python environment, run
|
|
83
|
+
<code>atomworks-studio-pymol install</code>, then open <b>Plugin → AtomWorks Studio</b>.
|
|
84
|
+
PyMOL and Qt come from your PyMOL installation.</td>
|
|
85
|
+
</tr>
|
|
86
|
+
</table>
|
|
87
|
+
|
|
88
|
+
## Use
|
|
89
|
+
|
|
90
|
+
Open a CIF, select atoms, and choose an annotation in **Edit → Annotations**. Inspect the stored values,
|
|
91
|
+
change bonds or charges, protonate, or edit chains and segments. **Save CIF** writes a file that opens in any
|
|
92
|
+
interface.
|
|
93
|
+
|
|
94
|
+
<p align="center"><img src="https://raw.githubusercontent.com/RosettaCommons/atomworks-studio/main/docs/images/web-annotations.png" alt="Annotations tab showing sequence, coordinate and hotspot conditioning counts" width="860"></p>
|
|
95
|
+
|
|
96
|
+
The PyMOL plugin offers the same controls natively, here on a nanobody design with a hotspot on the target:
|
|
97
|
+
|
|
98
|
+
<p align="center"><img src="https://raw.githubusercontent.com/RosettaCommons/atomworks-studio/main/packages/pymol-plugin/assets/antibody_design.png" alt="AtomWorks Studio panel inside PyMOL on a nanobody design" width="860"></p>
|
|
99
|
+
|
|
100
|
+
See the [documentation](https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/index.md) for selection syntax, interface guides, Python and HTTP
|
|
101
|
+
integration, and development notes.
|
|
102
|
+
|
|
103
|
+
## Build from source
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
make bootstrap
|
|
107
|
+
make test
|
|
108
|
+
make build
|
|
109
|
+
make run
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The RFD4 annotation definitions and license are bundled in source and release builds and verified against the
|
|
113
|
+
SHA-256 hashes in `providers/rfd4/UPSTREAM.toml`. See [provenance](https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/PROVENANCE.md).
|
|
114
|
+
|
|
115
|
+
## License
|
|
116
|
+
|
|
117
|
+
BSD-3-Clause. See [LICENSE.md](https://github.com/RosettaCommons/atomworks-studio/blob/main/LICENSE.md).
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<h1 align="center">AtomWorks Studio</h1>
|
|
2
|
+
|
|
3
|
+
<p align="center"><b>Inspect, annotate and edit molecular structures in a browser, VS Code or PyMOL.</b></p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/actions/workflows/ci.yaml"><img src="https://github.com/RosettaCommons/atomworks-studio/actions/workflows/ci.yaml/badge.svg" alt="CI"></a>
|
|
7
|
+
<a href="https://pypi.org/project/atomworks-studio/"><img src="https://img.shields.io/pypi/v/atomworks-studio.svg" alt="PyPI"></a>
|
|
8
|
+
<a href="https://pypi.org/project/atomworks-studio/"><img src="https://img.shields.io/pypi/pyversions/atomworks-studio.svg" alt="Python"></a>
|
|
9
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/blob/main/LICENSE.md"><img src="https://img.shields.io/badge/license-BSD--3--Clause-blue.svg" alt="License: BSD-3-Clause"></a>
|
|
10
|
+
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff"></a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/index.md">Documentation</a> ·
|
|
15
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/INSTALLATION.md">Installation</a> ·
|
|
16
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/TUTORIAL.md">Tutorial</a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center"><img src="https://raw.githubusercontent.com/RosettaCommons/atomworks-studio/main/docs/images/web-molstar-editor.png" alt="AtomWorks Studio in the browser: sequence view, Mol* viewer and annotation panel" width="860"></p>
|
|
20
|
+
|
|
21
|
+
Studio is a structure and annotation editor for [AtomWorks](https://github.com/RosettaCommons/atomworks)
|
|
22
|
+
annotated CIF files. Select atoms, attach conditioning annotations (sequence, coordinates, hotspots,
|
|
23
|
+
index groups and more), fix bonds and charges, protonate, edit chains and expandable segments, and save a
|
|
24
|
+
CIF that any Studio interface reopens. It is built for preparing inputs to structure-design models such as
|
|
25
|
+
[RFD4-Proteina](https://github.com/RosettaCommons/RFD4-Proteina). No model runtime or weights are needed.
|
|
26
|
+
|
|
27
|
+
## Features
|
|
28
|
+
|
|
29
|
+
- **One editor, three interfaces.** The browser, VS Code and native PyMOL share annotation definitions,
|
|
30
|
+
editing operations, CIF storage and Undo.
|
|
31
|
+
- **Annotations you can see.** Pick a condition, apply it to a selection, and color or inspect the stored values.
|
|
32
|
+
- **Selections with AtomWorks queries.** Expressions such as `chain_id == 'A' & res_id > 50` work everywhere.
|
|
33
|
+
- **Structure edits with Undo.** Bonds, charges, pH-based protonation, chains, segments and validation.
|
|
34
|
+
- **Two renderers in the browser.** Mol* (WebGL) by default and Patinae (WebGPU), both bundled.
|
|
35
|
+
- **Design-ready examples.** Protein and small-molecule binders, antibody and nanobody CDRs, enzyme motifs,
|
|
36
|
+
motif scaffolding, inverse folding and partial diffusion.
|
|
37
|
+
- **Optional Gradio host.** Adds generation controls around the same editor for hosted demos and Spaces.
|
|
38
|
+
|
|
39
|
+
## Install
|
|
40
|
+
|
|
41
|
+
Studio needs Python 3.12.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
python -m pip install atomworks-studio
|
|
45
|
+
atomworks-studio
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Open <http://127.0.0.1:8000/>. The guide is at <http://127.0.0.1:8000/guide/>. Mol* and Patinae are
|
|
49
|
+
included in the package; Node and Rust are only needed to build from source.
|
|
50
|
+
|
|
51
|
+
<table>
|
|
52
|
+
<tr>
|
|
53
|
+
<td width="50%"><b>Browser and VS Code</b><br>Run <code>atomworks-studio</code>, or install the VSIX from the
|
|
54
|
+
<a href="https://github.com/RosettaCommons/atomworks-studio/releases">releases</a> and run
|
|
55
|
+
<b>AtomWorks: Open Studio</b>. The extension starts its Python backend for you.</td>
|
|
56
|
+
<td width="50%"><b>PyMOL</b><br>Install the package in PyMOL's Python environment, run
|
|
57
|
+
<code>atomworks-studio-pymol install</code>, then open <b>Plugin → AtomWorks Studio</b>.
|
|
58
|
+
PyMOL and Qt come from your PyMOL installation.</td>
|
|
59
|
+
</tr>
|
|
60
|
+
</table>
|
|
61
|
+
|
|
62
|
+
## Use
|
|
63
|
+
|
|
64
|
+
Open a CIF, select atoms, and choose an annotation in **Edit → Annotations**. Inspect the stored values,
|
|
65
|
+
change bonds or charges, protonate, or edit chains and segments. **Save CIF** writes a file that opens in any
|
|
66
|
+
interface.
|
|
67
|
+
|
|
68
|
+
<p align="center"><img src="https://raw.githubusercontent.com/RosettaCommons/atomworks-studio/main/docs/images/web-annotations.png" alt="Annotations tab showing sequence, coordinate and hotspot conditioning counts" width="860"></p>
|
|
69
|
+
|
|
70
|
+
The PyMOL plugin offers the same controls natively, here on a nanobody design with a hotspot on the target:
|
|
71
|
+
|
|
72
|
+
<p align="center"><img src="https://raw.githubusercontent.com/RosettaCommons/atomworks-studio/main/packages/pymol-plugin/assets/antibody_design.png" alt="AtomWorks Studio panel inside PyMOL on a nanobody design" width="860"></p>
|
|
73
|
+
|
|
74
|
+
See the [documentation](https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/index.md) for selection syntax, interface guides, Python and HTTP
|
|
75
|
+
integration, and development notes.
|
|
76
|
+
|
|
77
|
+
## Build from source
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
make bootstrap
|
|
81
|
+
make test
|
|
82
|
+
make build
|
|
83
|
+
make run
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
The RFD4 annotation definitions and license are bundled in source and release builds and verified against the
|
|
87
|
+
SHA-256 hashes in `providers/rfd4/UPSTREAM.toml`. See [provenance](https://github.com/RosettaCommons/atomworks-studio/blob/main/docs/PROVENANCE.md).
|
|
88
|
+
|
|
89
|
+
## License
|
|
90
|
+
|
|
91
|
+
BSD-3-Clause. See [LICENSE.md](https://github.com/RosettaCommons/atomworks-studio/blob/main/LICENSE.md).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Example structures
|
|
2
|
+
|
|
3
|
+
The **Edit → Examples** menu uses the packaged catalog in
|
|
4
|
+
`packages/api/annotation_studio/examples/`. The PD-L1 protein binder and eight
|
|
5
|
+
NIM inputs also power the Gradio demo; model execution is optional.
|
|
6
|
+
|
|
7
|
+
The files below remain regression fixtures and can be opened with **Open CIF**:
|
|
8
|
+
|
|
9
|
+
- `mcsa_ph2.cif`: catalytic residues and PH2 ligand with a 180 residue expandable
|
|
10
|
+
segment. Source: RFD4 `mcsa_40_fixed_ligand.json:M0664_2dhn`.
|
|
11
|
+
- `disco_iai.cif`: IAI ligand with a 150 residue expandable segment.
|
|
12
|
+
Source: RFD4 `sm_binder.json:IAI`.
|
|
13
|
+
|
|
14
|
+
The files illustrate stored annotations, ligand editing, and expandable segments.
|
|
15
|
+
They open in browser, VS Code, and PyMOL without a model runtime.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: AtomWorks Studio
|
|
3
|
+
sdk: docker
|
|
4
|
+
app_port: 7860
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# AtomWorks Studio
|
|
8
|
+
|
|
9
|
+
This Docker Space runs the same editor and guide as the installed application.
|
|
10
|
+
It edits structures; it does not run a model.
|
|
11
|
+
|
|
12
|
+
Copy this directory to a Docker Space. Put the `atomworks_studio` wheel from a verified Studio build (or the
|
|
13
|
+
matching release download) in `wheels/`.
|
|
14
|
+
Once the version you deploy is on PyPI, you can instead replace the `COPY` and
|
|
15
|
+
wheel `pip install` lines in the Dockerfile with `pip install atomworks-studio==<version>`.
|
|
16
|
+
The Docker build installs public dependencies and runs as UID 1000 on port 7860.
|
|
17
|
+
|
|
18
|
+
To test locally from this directory:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
docker build -t atomworks-studio-space .
|
|
22
|
+
docker run --rm -p 7860:7860 atomworks-studio-space
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Open http://localhost:7860/ or http://localhost:7860/guide/.
|
|
26
|
+
Download CIFs you want to retain: the Space filesystem is ephemeral and sessions
|
|
27
|
+
expire. Space access controls protect the whole application; Studio does not
|
|
28
|
+
turn Hugging Face visitor identities into per-user session authorization.
|
|
29
|
+
|
|
30
|
+
For model inference, use the integration guide in Studio at `/guide/INTEGRATIONS.html`.
|
|
31
|
+
This image installs CPU Torch. A GPU model deployment must supply its own tested
|
|
32
|
+
CUDA environment, weights, and runner; selecting GPU hardware alone does not
|
|
33
|
+
turn this editor-only image into an inference server.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Bundle the already-built browser application into Python distributions."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import hashlib
|
|
6
|
+
import shutil
|
|
7
|
+
import tomllib
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
from hatchling.builders.hooks.plugin.interface import BuildHookInterface
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CustomBuildHook(BuildHookInterface):
|
|
14
|
+
"""Stage Vite output and verify the pinned RFD4 definitions before each build."""
|
|
15
|
+
|
|
16
|
+
PLUGIN_NAME = "custom"
|
|
17
|
+
|
|
18
|
+
def initialize(self, version: str, build_data: dict) -> None:
|
|
19
|
+
self._bundle_rfd4_definitions(build_data)
|
|
20
|
+
if version == "editable":
|
|
21
|
+
return
|
|
22
|
+
for source_dir, name in (("packages/web/dist", "web"), ("docs/_build/html", "guide")):
|
|
23
|
+
source = Path(self.root) / source_dir
|
|
24
|
+
destination = Path(self.root) / "packages/api/annotation_studio" / name
|
|
25
|
+
if (source / "index.html").is_file():
|
|
26
|
+
shutil.rmtree(destination, ignore_errors=True)
|
|
27
|
+
shutil.copytree(source, destination, ignore=shutil.ignore_patterns(".doctrees", "__pycache__", "*.bak"))
|
|
28
|
+
elif not (destination / "index.html").is_file():
|
|
29
|
+
raise RuntimeError(f"build {source_dir} before building Studio (make build)")
|
|
30
|
+
# Also include generated assets when rebuilding a wheel from its sdist.
|
|
31
|
+
prefix = "packages/api/" if self.target_name == "sdist" else ""
|
|
32
|
+
build_data.setdefault("force_include", {})[str(destination)] = f"{prefix}annotation_studio/{name}"
|
|
33
|
+
|
|
34
|
+
def _bundle_rfd4_definitions(self, build_data: dict) -> None:
|
|
35
|
+
"""Verify every pinned definition file and ship its manifest beside them."""
|
|
36
|
+
provider = Path(self.root) / "providers/rfd4"
|
|
37
|
+
source = provider / "atomworks_studio_rfd4/_upstream"
|
|
38
|
+
manifest = provider / "UPSTREAM.toml"
|
|
39
|
+
metadata = tomllib.loads(manifest.read_text())
|
|
40
|
+
for name, expected in metadata["files"].items():
|
|
41
|
+
path = source / name
|
|
42
|
+
if not path.is_file() or hashlib.sha256(path.read_bytes()).hexdigest() != expected:
|
|
43
|
+
raise RuntimeError(f"RFD4 {name} does not match pinned RosettaCommons revision {metadata['revision']}")
|
|
44
|
+
if self.target_name == "wheel":
|
|
45
|
+
build_data.setdefault("force_include", {})[str(manifest)] = "atomworks_studio_rfd4/_upstream/UPSTREAM.toml"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Studio API
|
|
2
|
+
|
|
3
|
+
The API is included in `atomworks-studio`. Start it with `atomworks-studio`;
|
|
4
|
+
use `--vscode` to allow the VS Code webview to embed it. The default address is
|
|
5
|
+
`http://127.0.0.1:8000`. Interactive API documentation is at `/docs`.
|
|
6
|
+
|
|
7
|
+
The API owns bounded editor sessions and delegates every mutation to
|
|
8
|
+
`atomworks_studio_editing`. It loads the same annotation adapter as PyMOL.
|
|
9
|
+
Routes cover CIF loading and export, selections, annotations, groups, restraints,
|
|
10
|
+
protonation, bonds, chains, segments, validation, and Undo. There are no design
|
|
11
|
+
or job routes.
|
|
12
|
+
|
|
13
|
+
See [architecture](../../docs/ARCHITECTURE.md) and [installation](../../docs/INSTALLATION.md).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""AtomWorks Studio service and provider contracts.
|
|
2
|
+
|
|
3
|
+
Keep package imports lightweight so the launch command can show help/version
|
|
4
|
+
without initializing AtomWorks, model providers, or a GPU runtime.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from importlib import import_module
|
|
8
|
+
from typing import TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
from .version import __version__
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from .contracts import ConditionProvider, ValidationProvider
|
|
14
|
+
from .core import StudioDocument
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"ConditionProvider",
|
|
18
|
+
"StudioDocument",
|
|
19
|
+
"ValidationProvider",
|
|
20
|
+
"__version__",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def __getattr__(name: str):
|
|
25
|
+
if name not in __all__:
|
|
26
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
27
|
+
module = ".core" if name == "StudioDocument" else ".contracts"
|
|
28
|
+
value = getattr(import_module(module, __name__), name)
|
|
29
|
+
globals()[name] = value
|
|
30
|
+
return value
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Launch the packaged Studio web application."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import os
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
from annotation_studio.version import __version__
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def main(argv: list[str] | None = None) -> None:
|
|
13
|
+
parser = argparse.ArgumentParser(description="Open AtomWorks Studio in a browser.")
|
|
14
|
+
parser.add_argument("--version", action="version", version=f"AtomWorks Studio {__version__}")
|
|
15
|
+
parser.add_argument("--host", default="127.0.0.1", help="Listen address (default: 127.0.0.1)")
|
|
16
|
+
parser.add_argument("--port", type=int, default=8000, help="Listen port (default: 8000)")
|
|
17
|
+
parser.add_argument("--vscode", action="store_true", help="Allow embedding in VS Code and Cursor")
|
|
18
|
+
args = parser.parse_args(argv)
|
|
19
|
+
if not 1 <= args.port <= 65535:
|
|
20
|
+
parser.error("--port must be between 1 and 65535")
|
|
21
|
+
package = Path(__file__).resolve().parent
|
|
22
|
+
if not any((path / "index.html").is_file() for path in (package / "web", package.parents[1] / "web" / "dist")):
|
|
23
|
+
parser.error("Browser assets are missing. Install a built wheel, or run `pnpm --dir packages/web build` first.")
|
|
24
|
+
import uvicorn
|
|
25
|
+
|
|
26
|
+
if args.vscode:
|
|
27
|
+
os.environ["ANNOTATION_STUDIO_FRAME_ANCESTORS"] = (
|
|
28
|
+
"'self' vscode-webview: vscode-file://vscode-app https://*.vscode-cdn.net"
|
|
29
|
+
)
|
|
30
|
+
print(f"AtomWorks Studio: http://{args.host}:{args.port}/", flush=True)
|
|
31
|
+
uvicorn.run("annotation_studio.main:app", host=args.host, port=args.port)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""Session errors and shared document contracts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from atomworks_studio_editing.contracts import (
|
|
6
|
+
NEUTRAL_CONDITION_PROVIDER as NEUTRAL_CONDITION_PROVIDER,
|
|
7
|
+
)
|
|
8
|
+
from atomworks_studio_editing.contracts import (
|
|
9
|
+
NEUTRAL_VALIDATION_PROVIDER as NEUTRAL_VALIDATION_PROVIDER,
|
|
10
|
+
)
|
|
11
|
+
from atomworks_studio_editing.contracts import (
|
|
12
|
+
ConditionDefault as ConditionDefault,
|
|
13
|
+
)
|
|
14
|
+
from atomworks_studio_editing.contracts import (
|
|
15
|
+
ConditionDefinition as ConditionDefinition,
|
|
16
|
+
)
|
|
17
|
+
from atomworks_studio_editing.contracts import (
|
|
18
|
+
ConditionKind as ConditionKind,
|
|
19
|
+
)
|
|
20
|
+
from atomworks_studio_editing.contracts import (
|
|
21
|
+
ConditionOperation as ConditionOperation,
|
|
22
|
+
)
|
|
23
|
+
from atomworks_studio_editing.contracts import (
|
|
24
|
+
ConditionProvider as ConditionProvider,
|
|
25
|
+
)
|
|
26
|
+
from atomworks_studio_editing.contracts import (
|
|
27
|
+
ConditionValue as ConditionValue,
|
|
28
|
+
)
|
|
29
|
+
from atomworks_studio_editing.contracts import (
|
|
30
|
+
CountUnit as CountUnit,
|
|
31
|
+
)
|
|
32
|
+
from atomworks_studio_editing.contracts import (
|
|
33
|
+
NeutralConditionProvider as NeutralConditionProvider,
|
|
34
|
+
)
|
|
35
|
+
from atomworks_studio_editing.contracts import (
|
|
36
|
+
NeutralValidationProvider as NeutralValidationProvider,
|
|
37
|
+
)
|
|
38
|
+
from atomworks_studio_editing.contracts import (
|
|
39
|
+
ValidationProvider as ValidationProvider,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class SessionNotFoundError(KeyError):
|
|
44
|
+
"""A session store could not resolve a session for the current owner."""
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class CapacityExceededError(RuntimeError):
|
|
48
|
+
"""A bounded local or shared resource has reached its configured limit."""
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""Compatibility exports for the shared Studio editing package."""
|
|
2
|
+
|
|
3
|
+
from atomworks_studio_editing.document import (
|
|
4
|
+
BOND_TYPES,
|
|
5
|
+
INTERACTION_TYPES,
|
|
6
|
+
StudioDocument,
|
|
7
|
+
parse_annotated_cif,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
__all__ = ["BOND_TYPES", "INTERACTION_TYPES", "StudioDocument", "parse_annotated_cif"]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Design examples
|
|
2
|
+
|
|
3
|
+
Eight inputs from the private RFD4 NIM, revision
|
|
4
|
+
`3a8a1f6f2ed6bab37757d2471b5007971175225d`, under `nim/examples/*/request.json`.
|
|
5
|
+
Motif, partial-diffusion and inverse-folding CIF contents are unchanged.
|
|
6
|
+
Enzyme and VHH inputs include missing heavy atoms with free coordinates.
|
|
7
|
+
Antibody and unconditional condition specs use the standard-annotation serializer;
|
|
8
|
+
the antibody uses separate internal heavy/light framework groups and a fixed target.
|
|
9
|
+
SAM uses the positioned conformer from RFD4’s interaction examples while leaving
|
|
10
|
+
coordinate conditioning off. See `docs/PROVENANCE.md` for sources and preparation.
|
|
11
|
+
|
|
12
|
+
`examples.json` pairs each CIF with its sampling task. Partial diffusion uses
|
|
13
|
+
40% of the trajectory; inverse folding uses the native inverse-folding sampler.
|
|
14
|
+
The model deployment chooses the native recycling preset and design count.
|
|
15
|
+
Example selection does not enable refolding or establish biological design quality.
|
|
16
|
+
|
|
17
|
+
`protein_binder.cif` comes from RFD4 `all_ppi.yaml:rfd3_pdl1`: a fixed PD-L1
|
|
18
|
+
target, six hotspot atoms on residues 56, 115 and 123, and a separate 50–120
|
|
19
|
+
residue binder segment. It uses the standard protein sampler with these conditions.
|
|
20
|
+
|
|
21
|
+
Keep this directory nonpublic until release review.
|