biocomposer 0.1.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.
Files changed (92) hide show
  1. biocomposer-0.1.0/.DS_Store +0 -0
  2. biocomposer-0.1.0/.env.example +12 -0
  3. biocomposer-0.1.0/.github/workflows/docs.yml +51 -0
  4. biocomposer-0.1.0/.github/workflows/publish.yml +92 -0
  5. biocomposer-0.1.0/.gitignore +34 -0
  6. biocomposer-0.1.0/.readthedocs.yaml +15 -0
  7. biocomposer-0.1.0/PKG-INFO +16 -0
  8. biocomposer-0.1.0/README.md +59 -0
  9. biocomposer-0.1.0/ViennaRNA/2.7.2.toml +103 -0
  10. biocomposer-0.1.0/biocomposer/__init__.py +56 -0
  11. biocomposer-0.1.0/biocomposer/_version.py +24 -0
  12. biocomposer-0.1.0/biocomposer/cli.py +391 -0
  13. biocomposer-0.1.0/biocomposer/graph.py +330 -0
  14. biocomposer-0.1.0/biocomposer/helpers/__init__.py +0 -0
  15. biocomposer-0.1.0/biocomposer/helpers/bv.py +964 -0
  16. biocomposer-0.1.0/biocomposer/helpers/condition.py +22 -0
  17. biocomposer-0.1.0/biocomposer/helpers/connector_helper.py +472 -0
  18. biocomposer-0.1.0/biocomposer/helpers/file_handler.py +50 -0
  19. biocomposer-0.1.0/biocomposer/helpers/llm_wrapper.py +71 -0
  20. biocomposer-0.1.0/biocomposer/helpers/paths.py +30 -0
  21. biocomposer-0.1.0/biocomposer/helpers/runtime_context.py +51 -0
  22. biocomposer-0.1.0/biocomposer/node.py +280 -0
  23. biocomposer-0.1.0/biocomposer.egg-info/PKG-INFO +16 -0
  24. biocomposer-0.1.0/biocomposer.egg-info/SOURCES.txt +90 -0
  25. biocomposer-0.1.0/biocomposer.egg-info/dependency_links.txt +1 -0
  26. biocomposer-0.1.0/biocomposer.egg-info/entry_points.txt +2 -0
  27. biocomposer-0.1.0/biocomposer.egg-info/requires.txt +14 -0
  28. biocomposer-0.1.0/biocomposer.egg-info/top_level.txt +1 -0
  29. biocomposer-0.1.0/docs/Makefile +17 -0
  30. biocomposer-0.1.0/docs/_static/.nojekyll +0 -0
  31. biocomposer-0.1.0/docs/_static/architecture.png +0 -0
  32. biocomposer-0.1.0/docs/_static/architecture2.png +0 -0
  33. biocomposer-0.1.0/docs/_static/custom.css +87 -0
  34. biocomposer-0.1.0/docs/api.rst +33 -0
  35. biocomposer-0.1.0/docs/cli.rst +48 -0
  36. biocomposer-0.1.0/docs/conf.py +80 -0
  37. biocomposer-0.1.0/docs/connectors.rst +49 -0
  38. biocomposer-0.1.0/docs/contributing_tools.rst +92 -0
  39. biocomposer-0.1.0/docs/examples.rst +308 -0
  40. biocomposer-0.1.0/docs/execute.rst +63 -0
  41. biocomposer-0.1.0/docs/graph.rst +60 -0
  42. biocomposer-0.1.0/docs/how_it_works.rst +193 -0
  43. biocomposer-0.1.0/docs/index.rst +135 -0
  44. biocomposer-0.1.0/docs/installation.rst +31 -0
  45. biocomposer-0.1.0/docs/nodes/decision.rst +155 -0
  46. biocomposer-0.1.0/docs/nodes/gather.rst +103 -0
  47. biocomposer-0.1.0/docs/nodes/index.rst +44 -0
  48. biocomposer-0.1.0/docs/nodes/input.rst +72 -0
  49. biocomposer-0.1.0/docs/nodes/output.rst +29 -0
  50. biocomposer-0.1.0/docs/nodes/subgraph.rst +65 -0
  51. biocomposer-0.1.0/docs/nodes/tool.rst +82 -0
  52. biocomposer-0.1.0/docs/requirements.txt +4 -0
  53. biocomposer-0.1.0/docs/running.rst +165 -0
  54. biocomposer-0.1.0/docs/tools.rst +154 -0
  55. biocomposer-0.1.0/fpocket/4.2.3.toml +43 -0
  56. biocomposer-0.1.0/inputs/1l9h.pdb +6812 -0
  57. biocomposer-0.1.0/inputs/2i35.pdb +3370 -0
  58. biocomposer-0.1.0/inputs/apap_seq.fasta +0 -0
  59. biocomposer-0.1.0/inputs/db.fasta +10 -0
  60. biocomposer-0.1.0/inputs/ligand.pdbqt +7 -0
  61. biocomposer-0.1.0/inputs/ligand.sdf +11 -0
  62. biocomposer-0.1.0/inputs/mini_genome.fasta +45 -0
  63. biocomposer-0.1.0/inputs/minimal.mdp +14 -0
  64. biocomposer-0.1.0/inputs/papa_seq.fasta +2 -0
  65. biocomposer-0.1.0/inputs/query.hmm +422 -0
  66. biocomposer-0.1.0/inputs/rcsb_pdb_1L9H.fasta +2 -0
  67. biocomposer-0.1.0/inputs/receptor.pdb +6812 -0
  68. biocomposer-0.1.0/inputs/receptor.pdbqt +11 -0
  69. biocomposer-0.1.0/inputs/rna_family.fasta +10 -0
  70. biocomposer-0.1.0/pipeline_agent.py +247 -0
  71. biocomposer-0.1.0/pyproject.toml +40 -0
  72. biocomposer-0.1.0/run/diagnose_modal.py +83 -0
  73. biocomposer-0.1.0/run/run_acpype.py +27 -0
  74. biocomposer-0.1.0/run/run_babel.py +23 -0
  75. biocomposer-0.1.0/run/run_complex_md.py +66 -0
  76. biocomposer-0.1.0/run/run_decision_pipeline.py +35 -0
  77. biocomposer-0.1.0/run/run_decision_pipeline2.py +87 -0
  78. biocomposer-0.1.0/run/run_fpocket.py +18 -0
  79. biocomposer-0.1.0/run/run_gathernode_examples.py +125 -0
  80. biocomposer-0.1.0/run/run_gathernode_test.py +53 -0
  81. biocomposer-0.1.0/run/run_pipeline.py +110 -0
  82. biocomposer-0.1.0/run/run_pocket_dock_md.py +134 -0
  83. biocomposer-0.1.0/run/run_query.py +72 -0
  84. biocomposer-0.1.0/run/run_query_jupyter_notebook_pipeline_testing.ipynb +663 -0
  85. biocomposer-0.1.0/run/run_rf_to_colabfold.py +32 -0
  86. biocomposer-0.1.0/run/run_rf_to_mpnn.py +24 -0
  87. biocomposer-0.1.0/run/run_rna_pipeline.py +28 -0
  88. biocomposer-0.1.0/run/run_scrmsd_pipeline.py +113 -0
  89. biocomposer-0.1.0/run/run_tests.py +77 -0
  90. biocomposer-0.1.0/run/run_vina.py +29 -0
  91. biocomposer-0.1.0/run/testing_if_new_tools_work.py +38 -0
  92. biocomposer-0.1.0/setup.cfg +4 -0
Binary file
@@ -0,0 +1,12 @@
1
+ GEMINI_API_KEY=
2
+ GOOGLE_API_KEY=
3
+ ANTHROPIC_API_KEY=
4
+ OPENAI_API_KEY=
5
+
6
+
7
+ PIPELINE_TEMP_DIR=.pipeline_temp # scratch dir: downloads, connectors file
8
+ PIPELINE_STATE_PATH=.pipeline_temp/pipeline_state.json # persisted node I/O state
9
+ PIPELINE_CONNECTORS=.pipeline_temp/connectors.py # auto-generated connector functions
10
+ PIPELINE_RESULTS_BASE=.pipeline_temp # root dir for tool output subdirs
11
+
12
+ BIOCOMPOSER_LOG_LEVEL=DEBUG
@@ -0,0 +1,51 @@
1
+ name: Docs
2
+
3
+ # Build the Sphinx docs and publish them to GitHub Pages.
4
+ on:
5
+ push:
6
+ branches: [main, modal_bv_integration] # build on pushes to these branches
7
+ paths: ["docs/**", "biocomposer/**", ".github/workflows/docs.yml"]
8
+ workflow_dispatch: # allow manual runs from the Actions tab
9
+
10
+ # Permissions the Pages deploy needs.
11
+ permissions:
12
+ contents: read
13
+ pages: write
14
+ id-token: write
15
+
16
+ # Only one Pages deploy at a time.
17
+ concurrency:
18
+ group: pages
19
+ cancel-in-progress: false
20
+
21
+ jobs:
22
+ build:
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+
27
+ - uses: actions/setup-python@v5
28
+ with:
29
+ python-version: "3.11"
30
+
31
+ - name: Install dependencies
32
+ run: |
33
+ pip install -r docs/requirements.txt
34
+ pip install -e . # autodoc imports biocomposer at build time
35
+
36
+ - name: Build HTML
37
+ run: sphinx-build -b html docs docs/_build/html
38
+
39
+ - uses: actions/upload-pages-artifact@v3
40
+ with:
41
+ path: docs/_build/html
42
+
43
+ deploy:
44
+ needs: build
45
+ runs-on: ubuntu-latest
46
+ environment:
47
+ name: github-pages
48
+ url: ${{ steps.deployment.outputs.page_url }}
49
+ steps:
50
+ - id: deployment
51
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,92 @@
1
+ name: Publish to PyPI
2
+
3
+ # Publishes the biocomposer package to PyPI when a GitHub Release is published.
4
+ # Auth uses PyPI Trusted Publishing (OIDC) — no API token stored. You must
5
+ # register this repo as a trusted publisher once at:
6
+ # https://pypi.org/manage/project/biocomposer/settings/publishing/
7
+ # (or the "pending publisher" form if the project doesn't exist on PyPI yet)
8
+ # with workflow filename "publish.yml" and environment "pypi".
9
+
10
+ on:
11
+ release:
12
+ types: [published]
13
+ # Manual dry-run: Actions tab -> "Publish to PyPI" -> Run workflow.
14
+ # This builds and uploads to TestPyPI only (never real PyPI).
15
+ workflow_dispatch:
16
+
17
+ jobs:
18
+ build:
19
+ name: Build distribution
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0 # setuptools-scm needs full history + tags to derive the version
25
+
26
+ - name: Set up Python
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: "3.11"
30
+
31
+ - name: Build sdist and wheel
32
+ run: |
33
+ python -m pip install --upgrade build
34
+ python -m build
35
+
36
+ - name: Check distribution metadata
37
+ run: |
38
+ python -m pip install --upgrade twine
39
+ python -m twine check dist/*
40
+
41
+ - name: Upload build artifacts
42
+ uses: actions/upload-artifact@v4
43
+ with:
44
+ name: dist
45
+ path: dist/
46
+
47
+ publish:
48
+ name: Publish to PyPI
49
+ needs: build
50
+ runs-on: ubuntu-latest
51
+ # Real PyPI only on a published GitHub Release — never on the manual dry-run.
52
+ if: github.event_name == 'release'
53
+ # The environment name must match the one configured on PyPI's trusted publisher.
54
+ environment:
55
+ name: pypi
56
+ url: https://pypi.org/project/biocomposer/
57
+ permissions:
58
+ id-token: write # required for OIDC trusted publishing
59
+ steps:
60
+ - name: Download build artifacts
61
+ uses: actions/download-artifact@v4
62
+ with:
63
+ name: dist
64
+ path: dist/
65
+
66
+ - name: Publish to PyPI
67
+ uses: pypa/gh-action-pypi-publish@release/v1
68
+
69
+ testpypi:
70
+ name: Publish to TestPyPI (dry-run)
71
+ needs: build
72
+ runs-on: ubuntu-latest
73
+ # Dry-run target — only the manual "Run workflow" dispatch hits TestPyPI.
74
+ if: github.event_name == 'workflow_dispatch'
75
+ # Needs its own trusted-publisher registration on test.pypi.org and a
76
+ # matching "testpypi" GitHub environment.
77
+ environment:
78
+ name: testpypi
79
+ url: https://test.pypi.org/project/biocomposer/
80
+ permissions:
81
+ id-token: write # required for OIDC trusted publishing
82
+ steps:
83
+ - name: Download build artifacts
84
+ uses: actions/download-artifact@v4
85
+ with:
86
+ name: dist
87
+ path: dist/
88
+
89
+ - name: Publish to TestPyPI
90
+ uses: pypa/gh-action-pypi-publish@release/v1
91
+ with:
92
+ repository-url: https://test.pypi.org/legacy/
@@ -0,0 +1,34 @@
1
+ .env
2
+ .env.local
3
+ .pipeline_temp/
4
+ __pycache__/
5
+ *.pyc
6
+ /project-context/
7
+ candidate-model-library/colabfold_out/
8
+ .venv/
9
+ tools/__pycache__/
10
+ .bv/
11
+ .claude/
12
+ bv_test.py
13
+ bv.lock
14
+ bv.toml
15
+ fasttree_stdout.txt
16
+ helpers/__pycache__/
17
+ bvx-proto/bvx/__pycache__
18
+ model_glue.egg-info/
19
+ results/
20
+ proteinmpnn_1.0.1.toml
21
+ rfdiffusion_1.1.0.toml
22
+ run/testing_if_new_tools_work.py
23
+ # Sphinx build output
24
+ docs/_build/
25
+ ViennaRNA/
26
+ fpocket/
27
+ biocomposer.egg-info/
28
+ biocomposer/_version.py
29
+ autodockvina/
30
+ acpype/
31
+ pipeline_agent.py
32
+ openbabel/
33
+ gromacs/
34
+ fpocket/
@@ -0,0 +1,15 @@
1
+ version: 2
2
+
3
+ build:
4
+ os: ubuntu-22.04
5
+ tools:
6
+ python: "3.11"
7
+
8
+ sphinx:
9
+ configuration: docs/conf.py
10
+
11
+ python:
12
+ install:
13
+ - requirements: docs/requirements.txt
14
+ - method: pip
15
+ path: .
@@ -0,0 +1,16 @@
1
+ Metadata-Version: 2.4
2
+ Name: biocomposer
3
+ Version: 0.1.0
4
+ Summary: LLM-wired bioinformatics pipeline orchestration over containerised tools
5
+ Requires-Python: >=3.10
6
+ Requires-Dist: python-dotenv
7
+ Requires-Dist: google-genai
8
+ Requires-Dist: google-generativeai
9
+ Requires-Dist: anthropic
10
+ Requires-Dist: openai
11
+ Requires-Dist: numpy
12
+ Requires-Dist: pandas
13
+ Requires-Dist: tomli; python_version < "3.11"
14
+ Requires-Dist: modal
15
+ Provides-Extra: dev
16
+ Requires-Dist: pytest; extra == "dev"
@@ -0,0 +1,59 @@
1
+ # Setup (both local and Modal)
2
+
3
+ ```
4
+ pip install -e .
5
+ mkdir inputs # put your FASTA/PDB/etc. files here
6
+ mkdir run # holds your pipeline script
7
+ ```
8
+
9
+ Create a `.env` file in your working directory with the API key(s) you use
10
+ (`GEMINI_API_KEY`, `GOOGLE_API_KEY`, `ANTHROPIC_API_KEY`, or `OPENAI_API_KEY`).
11
+
12
+ Create `run/run_pipeline.py` to define your pipeline.
13
+
14
+ # Running locally
15
+
16
+ Prerequisites: Docker installed and running, `bv` installed (`cargo install biov`).
17
+
18
+ ```
19
+ biocomp run run/run_pipeline.py --env .env
20
+ ```
21
+
22
+ Outputs go to `./results/`.
23
+
24
+ # Running on Modal
25
+
26
+ ```
27
+ pip install modal
28
+ modal setup
29
+ biocomp run --modal run/run_pipeline.py --env .env
30
+ modal volume get biocomp results/fasttree_output_1/stdout/fasttree_stdout.txt ./fasttree_stdout.txt
31
+ ```
32
+
33
+ # Flags
34
+
35
+ ```
36
+ --env <path> [both] env file with API keys (default .env)
37
+ --clean [both] clear previous outputs first
38
+ --modal [both] run on Modal instead of locally
39
+ --gpu T4 [modal] GPU type (default A10G)
40
+ --memory 32768 [modal] sandbox memory in MB (default 8192)
41
+ --shell [modal] drop into an interactive sandbox shell
42
+ ```
43
+
44
+ # Overriding a tool's command
45
+
46
+ By default a node runs the tool's entrypoint binary with its registry args.
47
+ Override either when needed (slots like `{input}`/`{output}` map to the node's I/O):
48
+
49
+ ```python
50
+ # run a different exposed binary instead of the entrypoint
51
+ g.add_node("trimal", entrypoint_override="readal")
52
+
53
+ # replace the argument template
54
+ g.add_node("colabfold", args_override="--num-recycle 0 {fasta} {output_dir}")
55
+
56
+ # both together (common for non-entrypoint binaries)
57
+ g.add_node("trimal", entrypoint_override="readal",
58
+ args_override="-in {alignment} -out {trimmed} -fasta")
59
+ ```
@@ -0,0 +1,103 @@
1
+ [tool]
2
+ id = "viennarna"
3
+ version = "2.7.2"
4
+ description = "RNA secondary structure prediction and comparison: minimum free energy structures, partition function, base-pair probabilities, centroid/MEA structures, suboptimal and consensus structures (ViennaRNA Package)"
5
+ homepage = "https://www.tbi.univie.ac.at/RNA/"
6
+ # https://github.com/ViennaRNA/ViennaRNA/blob/master/license.txt
7
+ license = "custom"
8
+ tier = "community"
9
+ maintainers = [ "github:ViennaRNA",]
10
+
11
+ [[tool.inputs]]
12
+ name = "sequences"
13
+ type = "fasta"
14
+ cardinality = "one"
15
+ description = "RNA sequence(s) to fold. Plain (one sequence per line) or FASTA; the first word of each FASTA header is used as the output-file prefix. T is auto-converted to U unless --noconv is set. Sequences up to ~32,700 nt are supported."
16
+
17
+ [[tool.inputs]]
18
+ name = "constraints"
19
+ type = "file"
20
+ cardinality = "one"
21
+ description = "Optional — structure-constraint command file (passed via --commands, or a pseudo-dot-bracket constraint string via -C/--constraint). Encodes hard/soft constraints, forced/prohibited pairs, ligand motifs, and unstructured-domain commands."
22
+
23
+ [[tool.inputs]]
24
+ name = "shape_data"
25
+ type = "file"
26
+ cardinality = "one"
27
+ description = "Optional — experimental structure-probing reactivities (SHAPE/DMS), two-column text (1-based position, normalized reactivity). Consumed via --shape or --sp-data and converted to pseudo-energies by the chosen probing strategy."
28
+
29
+ [[tool.inputs]]
30
+ name = "param_file"
31
+ type = "file"
32
+ cardinality = "one"
33
+ description = "Optional — energy-parameter set read via -P/--paramFile (e.g. rna_turner2004.par, rna_turner1999.par, rna_andronescou2007.par, dna_mathews2004.par). The literal placeholder 'DNA' loads built-in DNA parameters."
34
+
35
+ [[tool.inputs]]
36
+ name = "mod_file"
37
+ type = "file"
38
+ cardinality = "one"
39
+ description = "Optional — JSON of modified-base energy corrections read via --mod-file (complements the built-in inosine, pseudouridine, m1Psi, m5C, m6A, 7DA, purine, dihydrouridine parameter sets)."
40
+
41
+ [[tool.outputs]]
42
+ name = "structures"
43
+ type = "file"
44
+ cardinality = "one"
45
+ description = "Per-sequence results (stdout, redirected by the args_template): the MFE structure in dot-bracket notation with free energy, and — when partition-function mode is on — the pair-probability pseudo-bracket line with ensemble free energy, the centroid structure, the MEA structure, MFE frequency, and ensemble diversity."
46
+
47
+ [[tool.outputs]]
48
+ name = "structure_plot"
49
+ type = "file"
50
+ cardinality = "one"
51
+ description = "PostScript drawing of the MFE secondary structure, written to the working directory as <prefix>_ss.ps. Suppress with --noPS."
52
+
53
+ [[tool.outputs]]
54
+ name = "dot_plot"
55
+ type = "file"
56
+ cardinality = "one"
57
+ description = "PostScript base-pair probability 'dot plot' (<prefix>_dp.ps), produced in partition-function mode (-p). Upper-right triangle = pair probabilities, lower-left = MFE pairs. Suppress with --noDP; stack-probability plot (<prefix>_dp2.ps) is added with -p2."
58
+
59
+ [tool.image]
60
+ backend = "docker"
61
+ reference = "quay.io/biocontainers/viennarna:2.7.2--py311pl5321hb7402bf_1"
62
+
63
+ [tool.hardware]
64
+ cpu_cores = 4
65
+ ram_gb = 8.0
66
+ disk_gb = 2.0
67
+
68
+ [tool.entrypoint]
69
+ command = "RNAfold"
70
+ args_template = "--partfunc --MEA --temp=37 --dangles=2 {sequences} > {structures}"
71
+
72
+
73
+ [tool.binaries]
74
+ exposed = [
75
+ "RNAfold",
76
+ "RNAcofold",
77
+ "RNAsubopt",
78
+ "RNAalifold",
79
+
80
+ "RNALalifold",
81
+ "RNALfold",
82
+ "RNAplfold",
83
+ "RNAeval",
84
+ "RNAinverse",
85
+ "RNAduplex",
86
+ "RNAaliduplex",
87
+ "RNAplex",
88
+ "RNAsnoop",
89
+ "RNAup",
90
+ "RNAmultifold",
91
+ "RNAheat",
92
+ "RNAdos",
93
+ "RNA2Dfold",
94
+ "RNAdistance",
95
+ "RNApdist",
96
+ "RNApaln",
97
+ "RNAplot",
98
+ "RNApvmin",
99
+ "RNAPKplex",
100
+ "RNAparconv",
101
+ "AnalyseSeqs",
102
+ "AnalyseDists",
103
+ ]
@@ -0,0 +1,56 @@
1
+ from __future__ import annotations
2
+ import logging
3
+ import os
4
+
5
+ # Version is written by setuptools-scm at build time to _version.py (gitignored).
6
+ # In a plain source checkout that file won't exist yet — fall back gracefully.
7
+ try:
8
+ from biocomposer._version import version as __version__
9
+ except ImportError: # pragma: no cover - source checkout without a build
10
+ __version__ = "0.0.0+unknown"
11
+
12
+ # Library-level logger. Attaches a NullHandler by default so logs are silent
13
+ # unless the caller configures logging. Set BIOCOMPOSER_LOG_LEVEL=DEBUG/INFO/WARNING
14
+ # to emit logs to stderr without any extra setup.
15
+ _log = logging.getLogger("biocomposer")
16
+ _log.addHandler(logging.NullHandler())
17
+
18
+ _level_name = os.environ.get("BIOCOMPOSER_LOG_LEVEL", "").upper()
19
+ if _level_name:
20
+ _level = getattr(logging, _level_name, logging.DEBUG)
21
+ _handler = logging.StreamHandler()
22
+ _handler.setLevel(_level)
23
+ _handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)-8s %(name)s %(message)s"))
24
+ _log.addHandler(_handler)
25
+ _log.setLevel(_level)
26
+
27
+
28
+ def __getattr__(name: str):
29
+ if name in ("Graph", "SubGraph"):
30
+ from biocomposer.graph import Graph, SubGraph
31
+ globals()["Graph"] = Graph
32
+ globals()["SubGraph"] = SubGraph
33
+ return globals()[name]
34
+ if name in ("Node", "InputNode", "OutputNode", "DecisionNode", "GatherNode"):
35
+ from biocomposer.node import Node, InputNode, OutputNode, DecisionNode, GatherNode
36
+ globals().update({"Node": Node, "InputNode": InputNode,
37
+ "OutputNode": OutputNode, "DecisionNode": DecisionNode,
38
+ "GatherNode": GatherNode})
39
+ return globals()[name]
40
+ if name == "Condition":
41
+ from biocomposer.helpers.condition import Condition
42
+ globals()["Condition"] = Condition
43
+ return Condition
44
+ raise AttributeError(f"module 'biocomposer' has no attribute {name!r}")
45
+
46
+
47
+ __all__ = [
48
+ "Graph",
49
+ "SubGraph",
50
+ "Node",
51
+ "InputNode",
52
+ "OutputNode",
53
+ "DecisionNode",
54
+ "GatherNode",
55
+ "Condition",
56
+ ]
@@ -0,0 +1,24 @@
1
+ # file generated by vcs-versioning
2
+ # don't change, don't track in version control
3
+ from __future__ import annotations
4
+
5
+ __all__ = [
6
+ "__version__",
7
+ "__version_tuple__",
8
+ "version",
9
+ "version_tuple",
10
+ "__commit_id__",
11
+ "commit_id",
12
+ ]
13
+
14
+ version: str
15
+ __version__: str
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
20
+
21
+ __version__ = version = '0.1.0'
22
+ __version_tuple__ = version_tuple = (0, 1, 0)
23
+
24
+ __commit_id__ = commit_id = 'g71d32aaaf'