raven-toolbox 0.2.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.
- raven_toolbox-0.2.0/.github/workflows/ci.yml +83 -0
- raven_toolbox-0.2.0/.gitignore +33 -0
- raven_toolbox-0.2.0/.readthedocs.yaml +28 -0
- raven_toolbox-0.2.0/CHANGELOG.md +281 -0
- raven_toolbox-0.2.0/IMPROVEMENTS.md +339 -0
- raven_toolbox-0.2.0/LICENSE +21 -0
- raven_toolbox-0.2.0/PKG-INFO +135 -0
- raven_toolbox-0.2.0/README.md +97 -0
- raven_toolbox-0.2.0/data/manifest.example.json +31 -0
- raven_toolbox-0.2.0/data/manifest.json +35 -0
- raven_toolbox-0.2.0/data/manifest.schema.json +82 -0
- raven_toolbox-0.2.0/docs/README.md +28 -0
- raven_toolbox-0.2.0/docs/_static/.gitkeep +0 -0
- raven_toolbox-0.2.0/docs/archive/ftinit_review_and_plan.md +184 -0
- raven_toolbox-0.2.0/docs/archive/localization_design.md +251 -0
- raven_toolbox-0.2.0/docs/archive/plan_get_model_from_homology.md +120 -0
- raven_toolbox-0.2.0/docs/conf.py +118 -0
- raven_toolbox-0.2.0/docs/guide/analysis_and_comparison.md +22 -0
- raven_toolbox-0.2.0/docs/guide/context_specific.md +41 -0
- raven_toolbox-0.2.0/docs/guide/index.md +21 -0
- raven_toolbox-0.2.0/docs/guide/io_and_manipulation.md +41 -0
- raven_toolbox-0.2.0/docs/guide/localization.md +20 -0
- raven_toolbox-0.2.0/docs/guide/omics.md +18 -0
- raven_toolbox-0.2.0/docs/guide/quickstart.md +67 -0
- raven_toolbox-0.2.0/docs/guide/reconstruction.md +41 -0
- raven_toolbox-0.2.0/docs/guide/tasks_and_gapfilling.md +26 -0
- raven_toolbox-0.2.0/docs/index.md +127 -0
- raven_toolbox-0.2.0/docs/installation.md +40 -0
- raven_toolbox-0.2.0/docs/maintenance/data_manifest.md +155 -0
- raven_toolbox-0.2.0/docs/maintenance/index.md +22 -0
- raven_toolbox-0.2.0/docs/maintenance/kegg_data_format.md +74 -0
- raven_toolbox-0.2.0/docs/maintenance/maintaining_binaries.md +236 -0
- raven_toolbox-0.2.0/docs/maintenance/maintaining_kegg_data.md +175 -0
- raven_toolbox-0.2.0/docs/reference/api/analysis.md +10 -0
- raven_toolbox-0.2.0/docs/reference/api/comparison.md +11 -0
- raven_toolbox-0.2.0/docs/reference/api/gapfilling.md +11 -0
- raven_toolbox-0.2.0/docs/reference/api/index.md +25 -0
- raven_toolbox-0.2.0/docs/reference/api/init.md +10 -0
- raven_toolbox-0.2.0/docs/reference/api/io.md +10 -0
- raven_toolbox-0.2.0/docs/reference/api/localization.md +12 -0
- raven_toolbox-0.2.0/docs/reference/api/manipulation.md +18 -0
- raven_toolbox-0.2.0/docs/reference/api/omics.md +10 -0
- raven_toolbox-0.2.0/docs/reference/api/reconstruction.md +24 -0
- raven_toolbox-0.2.0/docs/reference/api/resolvers.md +32 -0
- raven_toolbox-0.2.0/docs/reference/api/tasks.md +11 -0
- raven_toolbox-0.2.0/docs/reference/api/utils.md +16 -0
- raven_toolbox-0.2.0/docs/reference/changelog.md +2 -0
- raven_toolbox-0.2.0/docs/reference/improvements.md +2 -0
- raven_toolbox-0.2.0/docs/reference/index.md +26 -0
- raven_toolbox-0.2.0/docs/reference/known_issues.md +139 -0
- raven_toolbox-0.2.0/docs/reference/matlab_raven_backports.md +255 -0
- raven_toolbox-0.2.0/docs/reference/migration.md +120 -0
- raven_toolbox-0.2.0/docs/reference/todo.md +37 -0
- raven_toolbox-0.2.0/docs/reference/yaml_format.md +332 -0
- raven_toolbox-0.2.0/docs/requirements.txt +7 -0
- raven_toolbox-0.2.0/docs/studies/humangem_validation.md +117 -0
- raven_toolbox-0.2.0/docs/studies/index.md +26 -0
- raven_toolbox-0.2.0/docs/studies/init_param_calibration.md +342 -0
- raven_toolbox-0.2.0/docs/studies/init_solver_benchmark.md +67 -0
- raven_toolbox-0.2.0/docs/studies/kegg_hmm_cutoff_calibration.md +203 -0
- raven_toolbox-0.2.0/docs/studies/yeast_localization_benchmark.md +148 -0
- raven_toolbox-0.2.0/pyproject.toml +88 -0
- raven_toolbox-0.2.0/scripts/README.md +35 -0
- raven_toolbox-0.2.0/scripts/analyze_hmm_cutoffs.py +143 -0
- raven_toolbox-0.2.0/scripts/analyze_init_params.py +367 -0
- raven_toolbox-0.2.0/scripts/analyze_init_robustness.py +268 -0
- raven_toolbox-0.2.0/scripts/analyze_init_solvers.py +150 -0
- raven_toolbox-0.2.0/scripts/benchmark_localization_yeast.py +297 -0
- raven_toolbox-0.2.0/scripts/build_kegg_artefacts.py +130 -0
- raven_toolbox-0.2.0/scripts/make_registry_snippet.py +198 -0
- raven_toolbox-0.2.0/src/raven_toolbox/__init__.py +15 -0
- raven_toolbox-0.2.0/src/raven_toolbox/analysis/__init__.py +23 -0
- raven_toolbox-0.2.0/src/raven_toolbox/analysis/fseof.py +161 -0
- raven_toolbox-0.2.0/src/raven_toolbox/analysis/reporter.py +119 -0
- raven_toolbox-0.2.0/src/raven_toolbox/analysis/sampling.py +218 -0
- raven_toolbox-0.2.0/src/raven_toolbox/annotation/__init__.py +24 -0
- raven_toolbox-0.2.0/src/raven_toolbox/annotation/delta_g.py +115 -0
- raven_toolbox-0.2.0/src/raven_toolbox/annotation/sbo.py +180 -0
- raven_toolbox-0.2.0/src/raven_toolbox/binaries.py +185 -0
- raven_toolbox-0.2.0/src/raven_toolbox/biomass/__init__.py +50 -0
- raven_toolbox-0.2.0/src/raven_toolbox/biomass/config.py +95 -0
- raven_toolbox-0.2.0/src/raven_toolbox/biomass/gam.py +67 -0
- raven_toolbox-0.2.0/src/raven_toolbox/biomass/scale.py +207 -0
- raven_toolbox-0.2.0/src/raven_toolbox/comparison/__init__.py +23 -0
- raven_toolbox-0.2.0/src/raven_toolbox/comparison/compare.py +150 -0
- raven_toolbox-0.2.0/src/raven_toolbox/comparison/diff.py +285 -0
- raven_toolbox-0.2.0/src/raven_toolbox/conditions/__init__.py +25 -0
- raven_toolbox-0.2.0/src/raven_toolbox/conditions/apply.py +192 -0
- raven_toolbox-0.2.0/src/raven_toolbox/curation/__init__.py +54 -0
- raven_toolbox-0.2.0/src/raven_toolbox/curation/batch.py +460 -0
- raven_toolbox-0.2.0/src/raven_toolbox/data.py +215 -0
- raven_toolbox-0.2.0/src/raven_toolbox/gapfilling/__init__.py +9 -0
- raven_toolbox-0.2.0/src/raven_toolbox/gapfilling/fill.py +188 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/__init__.py +48 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/build.py +113 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/ftinit.py +330 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/genes.py +81 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/init.py +256 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/merge.py +226 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/prep.py +241 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/score.py +81 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/steps.py +62 -0
- raven_toolbox-0.2.0/src/raven_toolbox/init/taskfill.py +186 -0
- raven_toolbox-0.2.0/src/raven_toolbox/io/__init__.py +18 -0
- raven_toolbox-0.2.0/src/raven_toolbox/io/ec_data.py +392 -0
- raven_toolbox-0.2.0/src/raven_toolbox/io/excel.py +136 -0
- raven_toolbox-0.2.0/src/raven_toolbox/io/git.py +106 -0
- raven_toolbox-0.2.0/src/raven_toolbox/io/sif.py +96 -0
- raven_toolbox-0.2.0/src/raven_toolbox/io/yaml.py +494 -0
- raven_toolbox-0.2.0/src/raven_toolbox/localization/__init__.py +27 -0
- raven_toolbox-0.2.0/src/raven_toolbox/localization/predict.py +382 -0
- raven_toolbox-0.2.0/src/raven_toolbox/localization/scores.py +117 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manifest.py +123 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/__init__.py +39 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/add.py +365 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/change.py +128 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/compartments.py +196 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/expand.py +126 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/irreversible.py +72 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/merge.py +147 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/parameters.py +78 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/remove.py +120 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/simplify.py +277 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/transfer.py +145 -0
- raven_toolbox-0.2.0/src/raven_toolbox/manipulation/transport.py +162 -0
- raven_toolbox-0.2.0/src/raven_toolbox/omics/__init__.py +23 -0
- raven_toolbox-0.2.0/src/raven_toolbox/omics/hpa.py +190 -0
- raven_toolbox-0.2.0/src/raven_toolbox/py.typed +0 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/__init__.py +1 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/homology/__init__.py +23 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/homology/blast.py +146 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/homology/hits.py +64 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/homology/homology.py +287 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/kegg/__init__.py +83 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/kegg/assemble.py +82 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/kegg/download.py +269 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/kegg/hmm.py +451 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/kegg/organism.py +168 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/kegg/parse.py +618 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/kegg/query.py +250 -0
- raven_toolbox-0.2.0/src/raven_toolbox/reconstruction/kegg/taxonomy.py +176 -0
- raven_toolbox-0.2.0/src/raven_toolbox/tasks/__init__.py +23 -0
- raven_toolbox-0.2.0/src/raven_toolbox/tasks/check.py +336 -0
- raven_toolbox-0.2.0/src/raven_toolbox/tasks/tasklist.py +141 -0
- raven_toolbox-0.2.0/src/raven_toolbox/utils/__init__.py +16 -0
- raven_toolbox-0.2.0/src/raven_toolbox/utils/balance.py +90 -0
- raven_toolbox-0.2.0/src/raven_toolbox/utils/gpr.py +148 -0
- raven_toolbox-0.2.0/src/raven_toolbox/utils/parse.py +59 -0
- raven_toolbox-0.2.0/src/raven_toolbox/utils/sort.py +21 -0
- raven_toolbox-0.2.0/src/raven_toolbox/utils/validate.py +86 -0
- raven_toolbox-0.2.0/tests/conftest.py +210 -0
- raven_toolbox-0.2.0/tests/test_analysis_fseof.py +112 -0
- raven_toolbox-0.2.0/tests/test_analysis_reporter.py +89 -0
- raven_toolbox-0.2.0/tests/test_analysis_sampling.py +133 -0
- raven_toolbox-0.2.0/tests/test_annotation.py +204 -0
- raven_toolbox-0.2.0/tests/test_binaries.py +155 -0
- raven_toolbox-0.2.0/tests/test_biomass.py +246 -0
- raven_toolbox-0.2.0/tests/test_change_grrules.py +49 -0
- raven_toolbox-0.2.0/tests/test_comparison.py +123 -0
- raven_toolbox-0.2.0/tests/test_comparison_diff.py +146 -0
- raven_toolbox-0.2.0/tests/test_conditions.py +211 -0
- raven_toolbox-0.2.0/tests/test_curation.py +270 -0
- raven_toolbox-0.2.0/tests/test_data.py +145 -0
- raven_toolbox-0.2.0/tests/test_gapfilling.py +125 -0
- raven_toolbox-0.2.0/tests/test_init.py +112 -0
- raven_toolbox-0.2.0/tests/test_init_build.py +119 -0
- raven_toolbox-0.2.0/tests/test_init_ftinit.py +139 -0
- raven_toolbox-0.2.0/tests/test_init_genes.py +71 -0
- raven_toolbox-0.2.0/tests/test_init_merge.py +109 -0
- raven_toolbox-0.2.0/tests/test_init_oracles.py +64 -0
- raven_toolbox-0.2.0/tests/test_init_pipeline.py +161 -0
- raven_toolbox-0.2.0/tests/test_init_solvers.py +133 -0
- raven_toolbox-0.2.0/tests/test_init_taskfill.py +83 -0
- raven_toolbox-0.2.0/tests/test_io_excel.py +111 -0
- raven_toolbox-0.2.0/tests/test_io_git.py +69 -0
- raven_toolbox-0.2.0/tests/test_io_sif.py +82 -0
- raven_toolbox-0.2.0/tests/test_io_yaml.py +260 -0
- raven_toolbox-0.2.0/tests/test_io_yaml_ec_data.py +434 -0
- raven_toolbox-0.2.0/tests/test_io_yaml_parity.py +364 -0
- raven_toolbox-0.2.0/tests/test_localization.py +227 -0
- raven_toolbox-0.2.0/tests/test_manifest.py +125 -0
- raven_toolbox-0.2.0/tests/test_manipulation_add.py +297 -0
- raven_toolbox-0.2.0/tests/test_manipulation_change.py +93 -0
- raven_toolbox-0.2.0/tests/test_manipulation_compartments.py +139 -0
- raven_toolbox-0.2.0/tests/test_manipulation_expand.py +288 -0
- raven_toolbox-0.2.0/tests/test_manipulation_find_duplicate.py +85 -0
- raven_toolbox-0.2.0/tests/test_manipulation_irreversible.py +144 -0
- raven_toolbox-0.2.0/tests/test_manipulation_merge.py +136 -0
- raven_toolbox-0.2.0/tests/test_manipulation_remove.py +97 -0
- raven_toolbox-0.2.0/tests/test_manipulation_simplify.py +184 -0
- raven_toolbox-0.2.0/tests/test_manipulation_transfer.py +137 -0
- raven_toolbox-0.2.0/tests/test_manipulation_transport.py +98 -0
- raven_toolbox-0.2.0/tests/test_omics_hpa.py +154 -0
- raven_toolbox-0.2.0/tests/test_parameters.py +60 -0
- raven_toolbox-0.2.0/tests/test_reconstruction_blast.py +78 -0
- raven_toolbox-0.2.0/tests/test_reconstruction_homology.py +138 -0
- raven_toolbox-0.2.0/tests/test_reconstruction_kegg_download.py +133 -0
- raven_toolbox-0.2.0/tests/test_reconstruction_kegg_hmm.py +328 -0
- raven_toolbox-0.2.0/tests/test_reconstruction_kegg_organism.py +197 -0
- raven_toolbox-0.2.0/tests/test_reconstruction_kegg_parse.py +230 -0
- raven_toolbox-0.2.0/tests/test_reconstruction_kegg_phyl_dist.py +70 -0
- raven_toolbox-0.2.0/tests/test_reconstruction_kegg_query.py +132 -0
- raven_toolbox-0.2.0/tests/test_scripts_registry.py +58 -0
- raven_toolbox-0.2.0/tests/test_tasks.py +189 -0
- raven_toolbox-0.2.0/tests/test_tasks_essential.py +114 -0
- raven_toolbox-0.2.0/tests/test_utils_balance.py +76 -0
- raven_toolbox-0.2.0/tests/test_utils_gpr.py +84 -0
- raven_toolbox-0.2.0/tests/test_utils_parse.py +57 -0
- raven_toolbox-0.2.0/tests/test_utils_sort.py +42 -0
- raven_toolbox-0.2.0/tests/test_utils_validate.py +80 -0
- raven_toolbox-0.2.0/tests/tinit_oracles.py +161 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
# A push that obsoletes a previous run cancels it.
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ci-${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
lint:
|
|
16
|
+
name: ruff
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v5
|
|
20
|
+
- uses: actions/setup-python@v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
cache: pip
|
|
24
|
+
cache-dependency-path: pyproject.toml
|
|
25
|
+
- run: pip install --upgrade pip
|
|
26
|
+
# Pinned so the lint result is reproducible (unpinned ruff silently
|
|
27
|
+
# adds rules over time). Keep in sync with the ``dev`` extra in pyproject.
|
|
28
|
+
- run: pip install ruff==0.15.15
|
|
29
|
+
- run: ruff check .
|
|
30
|
+
|
|
31
|
+
typecheck:
|
|
32
|
+
name: mypy
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v5
|
|
36
|
+
- uses: actions/setup-python@v6
|
|
37
|
+
with:
|
|
38
|
+
python-version: "3.12"
|
|
39
|
+
cache: pip
|
|
40
|
+
cache-dependency-path: pyproject.toml
|
|
41
|
+
- run: pip install --upgrade pip
|
|
42
|
+
# Installs runtime deps + the dev extra (mypy). Third-party stubs are
|
|
43
|
+
# absent for cobra/optlang/scipy; ignore_missing_imports handles that.
|
|
44
|
+
- run: pip install -e ".[dev]"
|
|
45
|
+
- run: mypy
|
|
46
|
+
|
|
47
|
+
test:
|
|
48
|
+
name: pytest (py${{ matrix.python }})
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
strategy:
|
|
51
|
+
fail-fast: false
|
|
52
|
+
matrix:
|
|
53
|
+
python: ["3.11", "3.12", "3.13"]
|
|
54
|
+
steps:
|
|
55
|
+
- uses: actions/checkout@v5
|
|
56
|
+
- uses: actions/setup-python@v6
|
|
57
|
+
with:
|
|
58
|
+
python-version: ${{ matrix.python }}
|
|
59
|
+
cache: pip
|
|
60
|
+
cache-dependency-path: pyproject.toml
|
|
61
|
+
- run: pip install --upgrade pip
|
|
62
|
+
# ``-e .[dev,excel]`` so every optional extra is exercised.
|
|
63
|
+
# Gurobi is not installable on free runners; the relevant tests
|
|
64
|
+
# skip themselves when ``optlang.gurobi_interface`` cannot import.
|
|
65
|
+
- run: pip install -e ".[dev,excel]"
|
|
66
|
+
- run: pytest -q --maxfail=5 --durations=20
|
|
67
|
+
|
|
68
|
+
docs:
|
|
69
|
+
name: docs
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
steps:
|
|
72
|
+
- uses: actions/checkout@v5
|
|
73
|
+
- uses: actions/setup-python@v6
|
|
74
|
+
with:
|
|
75
|
+
python-version: "3.12"
|
|
76
|
+
cache: pip
|
|
77
|
+
cache-dependency-path: pyproject.toml
|
|
78
|
+
- run: pip install --upgrade pip
|
|
79
|
+
# The package (with autodoc's import-time extras) plus the docs toolchain.
|
|
80
|
+
- run: pip install -e ".[excel]" -r docs/requirements.txt
|
|
81
|
+
# ``-W --keep-going`` keeps the docs build warning-clean; mirrors the
|
|
82
|
+
# ReadTheDocs build (docs/conf.py + .readthedocs.yaml).
|
|
83
|
+
- run: sphinx-build -b html -W --keep-going docs docs/_build/html
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
*.egg
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
.pytest_cache/
|
|
10
|
+
.ruff_cache/
|
|
11
|
+
.coverage
|
|
12
|
+
htmlcov/
|
|
13
|
+
|
|
14
|
+
# Virtual envs
|
|
15
|
+
.venv/
|
|
16
|
+
venv/
|
|
17
|
+
env/
|
|
18
|
+
|
|
19
|
+
# Editor / OS
|
|
20
|
+
.vscode/
|
|
21
|
+
.idea/
|
|
22
|
+
.DS_Store
|
|
23
|
+
Thumbs.db
|
|
24
|
+
|
|
25
|
+
# Docs build output
|
|
26
|
+
docs/_build/
|
|
27
|
+
|
|
28
|
+
# Tooling caches
|
|
29
|
+
.claude/
|
|
30
|
+
|
|
31
|
+
# Local data
|
|
32
|
+
*.pkl
|
|
33
|
+
*.cache
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# ReadTheDocs build configuration
|
|
2
|
+
# https://docs.readthedocs.io/en/stable/config-file/v2.html
|
|
3
|
+
version: 2
|
|
4
|
+
|
|
5
|
+
build:
|
|
6
|
+
os: ubuntu-24.04
|
|
7
|
+
tools:
|
|
8
|
+
python: "3.12"
|
|
9
|
+
|
|
10
|
+
sphinx:
|
|
11
|
+
configuration: docs/conf.py
|
|
12
|
+
# Build fails on warnings would be too strict while the API docstrings are
|
|
13
|
+
# still being filled in; keep warnings visible but non-fatal.
|
|
14
|
+
fail_on_warning: false
|
|
15
|
+
|
|
16
|
+
python:
|
|
17
|
+
install:
|
|
18
|
+
# Install the package itself (with the optional extras autodoc needs to
|
|
19
|
+
# import every module) plus the docs-only toolchain.
|
|
20
|
+
- method: pip
|
|
21
|
+
path: .
|
|
22
|
+
extra_requirements:
|
|
23
|
+
- excel
|
|
24
|
+
- requirements: docs/requirements.txt
|
|
25
|
+
|
|
26
|
+
formats:
|
|
27
|
+
- pdf
|
|
28
|
+
- htmlzip
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Milestones in the raven-toolbox port. For function-level status see
|
|
4
|
+
[docs/raven_migration.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/reference/migration.md); for open work see
|
|
5
|
+
[docs/todo.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/reference/todo.md).
|
|
6
|
+
|
|
7
|
+
## 0.2.0 — 2026-06-14
|
|
8
|
+
|
|
9
|
+
Project rename plus KEGG-reconstruction and CI improvements.
|
|
10
|
+
|
|
11
|
+
* **Project renamed `raven-python` → `raven-toolbox`.** The import package is now
|
|
12
|
+
`raven_toolbox` (was `raven_python`) and the repository moved to
|
|
13
|
+
`SysBioChalmers/raven-toolbox`. Update imports and any `raven-python` git/URL
|
|
14
|
+
references accordingly. (#34)
|
|
15
|
+
* **De-novo KEGG query uses `hmmsearch` instead of `hmmscan`.**
|
|
16
|
+
`get_kegg_model_from_sequences` now runs one `hmmsearch` over the concatenated KO
|
|
17
|
+
library (`-Z` set to the profile count, so E-values and KO assignments are identical
|
|
18
|
+
to the previous `hmmscan` path) — the faster, more parallel search direction.
|
|
19
|
+
`ensure_kegg_hmm_library` no longer runs `hmmpress` (just gunzips); the published
|
|
20
|
+
`.hmm.gz` artefact is unchanged. (#32)
|
|
21
|
+
* **Domain-mode `get_kegg_model_for_organism_from_artefacts` auto-resolves the
|
|
22
|
+
taxonomy artefact** from the artefact directory, so `"prokaryotes"` /
|
|
23
|
+
`"eukaryotes"` no longer require an explicit `taxonomy=` path. (#31)
|
|
24
|
+
* **Test data no longer ships real KEGG records.** The on-disk
|
|
25
|
+
`tests/data/kegg_dump` is replaced by a session fixture that generates a fully
|
|
26
|
+
fictional KEGG-format dump at runtime, so no KEGG-derived data is redistributed. (#33)
|
|
27
|
+
* **Removed the visualization stub and the `[visualization]` extra** — an
|
|
28
|
+
unimplemented placeholder. (#30)
|
|
29
|
+
* **CI on Node 24** — `actions/checkout@v5`, `actions/setup-python@v6`. (#35)
|
|
30
|
+
|
|
31
|
+
## 0.1.0 — 2026-06-10
|
|
32
|
+
|
|
33
|
+
First release with **published, downloadable KEGG artefacts**, plus a cobra-aligned
|
|
34
|
+
hardening pass (no behaviour change on well-formed inputs). Highlights:
|
|
35
|
+
|
|
36
|
+
* **KEGG artefacts published (`kegg116`):** `ensure_kegg_data` /
|
|
37
|
+
`ensure_kegg_hmm_library` fetch version-pinned, SHA256-verified files from the
|
|
38
|
+
GitHub release. Every artefact is **gzip + version-prefixed**
|
|
39
|
+
(`kegg116_<name>.gz`) so MATLAB and Windows read them with the built-in `gunzip`
|
|
40
|
+
(no external tool) — `organism_gene_ko` moved from xz to gzip for this. The core
|
|
41
|
+
model files (reference model + KO/reaction tables) ship as a single
|
|
42
|
+
`kegg116_core.tar.gz` that `ensure_kegg_data` extracts on first use; the HMM
|
|
43
|
+
libraries and `taxonomy` are separate assets. The **HMM
|
|
44
|
+
libraries ship as one gzip concatenated flatfile per domain**
|
|
45
|
+
(`kegg116_<domain>.hmm.gz`); the client decompresses and `hmmpress`-es once on
|
|
46
|
+
first use, cutting the download ~10× versus the pressed index and letting the
|
|
47
|
+
same artefact serve MATLAB RAVEN.
|
|
48
|
+
* **Taxonomy + phylogenetic distance:** publish `kegg116_taxonomy.gz` and add
|
|
49
|
+
`reconstruction.kegg.phyl_dist` (with `PhylDist`), a faithful port of RAVEN's
|
|
50
|
+
`getPhylDist` that regenerates the `keggPhylDist` distance matrix from the
|
|
51
|
+
taxonomy file — so GECKO's organism-distance kcat selection needs no MATLAB
|
|
52
|
+
`.mat`. `ensure_kegg_taxonomy` fetches the artefact.
|
|
53
|
+
* **Packaging:** `raven_toolbox.__version__` now derives from the installed package
|
|
54
|
+
metadata (`importlib.metadata`) instead of a hard-coded literal that had drifted
|
|
55
|
+
to `0.0.1`; the docs site reported the wrong version. Pinned `ruff==0.15.15` in
|
|
56
|
+
both the `dev` extra and CI so the lint result is reproducible, and fixed two
|
|
57
|
+
lint errors the unpinned ruff had started flagging.
|
|
58
|
+
* **Errors aligned to cobra:** solver/feasibility failures in `run_init`,
|
|
59
|
+
`run_ftinit`, `fill_tasks` and `random_sampling` now raise
|
|
60
|
+
`cobra.exceptions.OptimizationError` (already used elsewhere in the package)
|
|
61
|
+
instead of a bare `RuntimeError`.
|
|
62
|
+
* **Consistency:** a single `utils.parse.subsystem_to_str` coerces a reaction
|
|
63
|
+
`subsystem` to cobra's canonical `str` everywhere it is rendered/compared
|
|
64
|
+
(`io.excel`, `comparison.compare`, `curation.batch`, `manipulation.add`) — fixes
|
|
65
|
+
a crash on non-string subsystem items and the silent drop of multi-subsystem
|
|
66
|
+
reactions. GPR score-aggregation (`AGGREGATORS` / `resolve_aggregators`) is now
|
|
67
|
+
shared by `init.score` and `init.genes`. Maintainer-side KEGG-download progress
|
|
68
|
+
uses a module logger instead of `print`.
|
|
69
|
+
* **Robustness:** path-traversal guard on bundled-ZIP extraction (`binaries.py`,
|
|
70
|
+
matching the tarfile `filter="data"` precedent); `connect_blocked_reactions`
|
|
71
|
+
rejects a non-positive `penalty`; `random_sampling` refuses a NaN-contaminated
|
|
72
|
+
sample matrix; `ec_data` warns on an all-zero reaction↔enzyme coupling; optional
|
|
73
|
+
`verify=` SHA256 re-check on `ensure_data_file` cache hits; reporter p-value
|
|
74
|
+
guarded against non-finite z-scores. Regression tests added for each.
|
|
75
|
+
|
|
76
|
+
## 0.1.0a1 — 2026-05-30
|
|
77
|
+
|
|
78
|
+
First alpha release. Covers the functional scope of RAVEN built on cobrapy:
|
|
79
|
+
de-novo reconstruction (KEGG / homology), context-specific modeling (tINIT / ftINIT),
|
|
80
|
+
metabolic-task validation, connectivity gap-filling, HPA omics ingestion, sub-cellular
|
|
81
|
+
localisation, N-model comparison, reporter metabolites, FSEOF, flux sampling, and the
|
|
82
|
+
RAVEN-style I/O formats (YAML / SIF / Excel). Validated against MATLAB RAVEN on Human-GEM
|
|
83
|
+
(Jaccard 0.975–0.980).
|
|
84
|
+
|
|
85
|
+
* **Licensing:** released under the **MIT** license (previously GPL-3.0-or-later).
|
|
86
|
+
* **Docs:** Sphinx + MyST documentation site (sources under `docs/`).
|
|
87
|
+
* Not yet implemented: visualization (`visualization/`), metabolomics-based (f)tINIT scoring,
|
|
88
|
+
and published binary / KEGG-artefact release bundles. See the README and
|
|
89
|
+
[docs/todo.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/reference/todo.md).
|
|
90
|
+
|
|
91
|
+
The milestone sections below record the incremental development history leading to this release.
|
|
92
|
+
|
|
93
|
+
## Infrastructure
|
|
94
|
+
|
|
95
|
+
* **GitHub Actions CI** ([.github/workflows/ci.yml](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/.github/workflows/ci.yml)) —
|
|
96
|
+
ruff + pytest matrix over Python 3.11/3.12/3.13. Tests that require Gurobi
|
|
97
|
+
auto-skip (no Gurobi on free runners); the known HiGHS upstream blocker
|
|
98
|
+
(`hybrid_interface.Configuration` rejects `lp_method='primal'`) is marked
|
|
99
|
+
`xfail(strict=True)` so CI flips red when optlang fixes it.
|
|
100
|
+
|
|
101
|
+
## Quality sweep — known-issues section F (design-choice divergences)
|
|
102
|
+
|
|
103
|
+
Closed the five items in section F (the "design choices that differ from RAVEN"
|
|
104
|
+
backlog from the original review). Three docstring/comment fixes; two code
|
|
105
|
+
fixes with matching MATLAB back-port proposals in IMPROVEMENTS.md (FS4, B2).
|
|
106
|
+
|
|
107
|
+
* `run_init` docstring spells out the score-0 semantics divergence between
|
|
108
|
+
classic INIT and ftINIT.
|
|
109
|
+
* `get_init_model` inaccurate "same regime" comment replaced with an accurate
|
|
110
|
+
description of the conservative pre-filter.
|
|
111
|
+
* `fseof` classifier now uses the slope of `|flux|` (`linregress(enforced, |flux|)`)
|
|
112
|
+
instead of first-vs-last endpoints. A track whose endpoints straddle a
|
|
113
|
+
peak/trough no longer ends up mislabelled.
|
|
114
|
+
* `reporter_metabolites` docstring documents the one-sided p-value + z-score
|
|
115
|
+
ordering vs RAVEN's two-tailed sort, and points at the up/down split via
|
|
116
|
+
`gene_fold_changes`.
|
|
117
|
+
* `get_elemental_balance` now reports `unknown` for empty-stoichiometry
|
|
118
|
+
reactions (previously vacuously `balanced`). Original review attributed the
|
|
119
|
+
bug to `check_model`; the actual code is in `balance.py`.
|
|
120
|
+
|
|
121
|
+
Two new regression tests (F3 in `test_analysis_fseof.py`, F5 in
|
|
122
|
+
`test_utils_balance.py`). [docs/known_issues.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/reference/known_issues.md) now
|
|
123
|
+
fully closed (all sections A–F).
|
|
124
|
+
|
|
125
|
+
## Quality sweep — known-issues sections C / D / E
|
|
126
|
+
|
|
127
|
+
Closed all the robustness, efficiency, and dead-code items in one pass.
|
|
128
|
+
|
|
129
|
+
**Robustness (C):**
|
|
130
|
+
* `constrain_reversible_reactions` wraps FVA in try/except + NaN check; both
|
|
131
|
+
backend-raised `OptimizationError` and silent-NaN returns now surface as one
|
|
132
|
+
clear `RuntimeError` (the original `abs(NaN) < eps` silently no-op'd).
|
|
133
|
+
* `ensure_binary` downloads through `.part` + `os.replace`, matching `data.py` —
|
|
134
|
+
an interrupted download leaves a `.part`, never a half-complete `.zip`.
|
|
135
|
+
* `parse_task_list` (.xlsx) checks `wb.sheetnames` before lookup; missing
|
|
136
|
+
`TASKS` sheet now raises a clear `ValueError` instead of a bare `KeyError`.
|
|
137
|
+
* `parse_taxonomy` pads with explicit `""` when a depth level is skipped and
|
|
138
|
+
warns once.
|
|
139
|
+
|
|
140
|
+
**Efficiency (D):**
|
|
141
|
+
* `group_linear_reactions` rewritten with a metabolite worklist (re-enqueue
|
|
142
|
+
the mets touched by each merge); same observable result, O(n+m) work per
|
|
143
|
+
pass instead of restarting the full scan after every merge.
|
|
144
|
+
* `parse_kegg_reactions` now caches the parsed stoichiometry on each
|
|
145
|
+
`KeggReaction.stoichiometry`; `build_reference_model` reuses it instead of
|
|
146
|
+
re-parsing.
|
|
147
|
+
|
|
148
|
+
**Dead code (E):**
|
|
149
|
+
* Dropped `KeggReaction.modules` and `.rhea` (parsed but never consumed).
|
|
150
|
+
* Dropped the vestigial `only_genes_in_models` parameter from `_ortholog_map`.
|
|
151
|
+
|
|
152
|
+
Six new regression tests; the only one without a test is the `.part` atomic
|
|
153
|
+
download (defensive, needs urlopen mocking).
|
|
154
|
+
|
|
155
|
+
## Quality sweep — known-issues section B
|
|
156
|
+
|
|
157
|
+
Closed all four "silent misbehaviour" items from [docs/known_issues.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/reference/known_issues.md):
|
|
158
|
+
* `merge_models` warns on `formula` / `charge` conflicts when two source models
|
|
159
|
+
share a name[comp] but disagree (used to silently keep the first-seen).
|
|
160
|
+
* `add_reactions_from_equations` warns when creating a metabolite in an
|
|
161
|
+
unregistered compartment — both the `mets_by="id"` and `mets_by="name"` paths
|
|
162
|
+
(id-mode used to skip the check entirely, an asymmetry).
|
|
163
|
+
* `parse_task_list` warns when continuation data appears before any task ID
|
|
164
|
+
has been seen (used to silently drop the orphan row).
|
|
165
|
+
* `export_model_to_sif` warns up front when a custom label map sends two
|
|
166
|
+
distinct ids to the same label (used to silently collapse nodes).
|
|
167
|
+
Four new regression tests cover them.
|
|
168
|
+
|
|
169
|
+
## Quality sweep — known-issues section A
|
|
170
|
+
|
|
171
|
+
Closed all six "latent edge-case bug" items from [docs/known_issues.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/reference/known_issues.md):
|
|
172
|
+
* `add_reactions_from_equations` no longer misparses `"2 oxoglutarate"` (or any
|
|
173
|
+
leading-number metabolite name) — the resolver tries the full token before
|
|
174
|
+
splitting off a coefficient.
|
|
175
|
+
* `add_reactions_from_equations` warns when an equation's terms cancel to a
|
|
176
|
+
zero-metabolite reaction.
|
|
177
|
+
* `add_reactions_from_model` tracks ids minted within the batch so two source
|
|
178
|
+
metabolites whose ids both collide with the draft don't collapse onto the
|
|
179
|
+
same generated id.
|
|
180
|
+
* `add_transport_reactions` warns on duplicate metabolite names in the source
|
|
181
|
+
or target compartment instead of silently dropping all but one.
|
|
182
|
+
* `connect_blocked_reactions` membership-guards the FVA result before
|
|
183
|
+
`.at[]` lookup.
|
|
184
|
+
* `assign_kos` rejects `cutoff >= 1` up front — would have crashed inside the
|
|
185
|
+
ratio filter at `log(best_evalue) == 0`.
|
|
186
|
+
Six new regression tests cover the user-reachable cases.
|
|
187
|
+
|
|
188
|
+
## Phase 7 — Localization
|
|
189
|
+
|
|
190
|
+
* **Sub-cellular localisation by MILP.** [`localization.predict_localization`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/localization/predict.py)
|
|
191
|
+
+ [`apply_localization`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/localization/predict.py). Deterministic (not simulated
|
|
192
|
+
annealing); caller-passed `reactions_to_relocate` set with everything else pinned;
|
|
193
|
+
incomplete-model tolerant (no silent reaction removal); `apply=False` returns a diff
|
|
194
|
+
preview; multi-compartment by default with primary-free, extras-penalised scoring.
|
|
195
|
+
* **Predictor loaders.** [`load_wolfpsort`, `load_deeploc`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/localization/scores.py),
|
|
196
|
+
with the `gene × compartment` DataFrame contract open for any predictor.
|
|
197
|
+
* **Compartment helpers** ([`manipulation/compartments.py`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/manipulation/compartments.py)):
|
|
198
|
+
`merge_compartments`, `copy_to_compartment` — useful standalone for model curation.
|
|
199
|
+
* **Real-data validation on yeast-GEM** ([docs/yeast_localization_benchmark.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/studies/yeast_localization_benchmark.md))
|
|
200
|
+
— accuracy 0.72 → 0.39 on 298 GPR'd reactions as confident predictor mis-scoring rises
|
|
201
|
+
from 0 % to 50 %; perfect on compartments with disjoint gene sets (c/g/lp/p/v/vm), and
|
|
202
|
+
surfaces a `transport_cost` calibration insight for soft-probability score tables.
|
|
203
|
+
|
|
204
|
+
## Phase 5 — Data integration & analysis
|
|
205
|
+
|
|
206
|
+
* **Reporter metabolites, FSEOF, random sampling** ([`analysis/`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/analysis/)).
|
|
207
|
+
* **HPA omics ingestion** ([`omics.parse_hpa`, `parse_hpa_rna`, `hpa_gene_scores`, `rna_gene_scores`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/omics/hpa.py))
|
|
208
|
+
— pandas-tidy DataFrames replace RAVEN's sparse-matrix layout; scoring adapters reuse the
|
|
209
|
+
existing GPR walk.
|
|
210
|
+
* **N-model comparison** ([`comparison.compare_models`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/comparison/compare.py)).
|
|
211
|
+
* **Dynamic FBA** is **not ported** — established Python packages cover it (`dfba`,
|
|
212
|
+
`reframed`, `mewpy`).
|
|
213
|
+
|
|
214
|
+
## Phase 4d — ftINIT
|
|
215
|
+
|
|
216
|
+
* **ftINIT pipeline** ([`init.ftinit`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/init/ftinit.py)) — staged MILP, linear merge,
|
|
217
|
+
task-aware gap-filling, gene pruning.
|
|
218
|
+
* **Validated against MATLAB RAVEN on Human-GEM.** 5 Hart2015 cell-line models;
|
|
219
|
+
Jaccard 0.973–0.977 (no-task) and 0.978–0.980 (task-constrained). See
|
|
220
|
+
[docs/humangem_validation.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/studies/humangem_validation.md).
|
|
221
|
+
* **Parameter calibration & input-robustness study** ([docs/init_param_calibration.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/studies/init_param_calibration.md))
|
|
222
|
+
— `mip_gap=0.01` is the genome-scale full-pipeline sweet spot (~37% faster than 0.001 at
|
|
223
|
+
Jaccard 0.995); pipeline is robust to expression noise (Jaccard 0.92–0.95) but sensitive
|
|
224
|
+
to sparsity (50–70% dropout → Jaccard 0.59–0.71); the task + gap-fill layer keeps the
|
|
225
|
+
essential-task pass-rate at 67–69/69 across the gradient, whereas tINIT-without-it passes
|
|
226
|
+
only 35/69 even on clean data.
|
|
227
|
+
* **Cross-solver portability** ([docs/init_solver_benchmark.md](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/docs/studies/init_solver_benchmark.md))
|
|
228
|
+
+ [`tests/test_init_solvers.py`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/tests/test_init_solvers.py): Gurobi and GLPK pass at toy
|
|
229
|
+
scale; only Gurobi is viable at genome scale today (HiGHS hits an upstream optlang
|
|
230
|
+
`clone()` bug; GLPK ignores `configuration.timeout` on MIP).
|
|
231
|
+
* **Engineering wins surfaced by the genome-scale work:** `check_tasks` and
|
|
232
|
+
`fill_tasks._feasible` rewritten in-place (~12× each); `optlang.symbolics.add` builds
|
|
233
|
+
in the MILP construction (the O(n²) sympy `sum()` blow-up was the original genome-scale
|
|
234
|
+
blocker); bounded gap-fill MILP; `rescaleModelForINIT` ported.
|
|
235
|
+
|
|
236
|
+
## Phase 4c — tINIT
|
|
237
|
+
|
|
238
|
+
* **INIT MILP and the tINIT pipeline** ([`init.run_init`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/init/init.py),
|
|
239
|
+
[`init.get_init_model`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/init/build.py)). Clean optlang reformulation;
|
|
240
|
+
RNA-seq scoring via `5·ln(level/ref)`-clamped.
|
|
241
|
+
|
|
242
|
+
## Phase 4b — Gap-filling
|
|
243
|
+
|
|
244
|
+
* **Connectivity gap-filling** ([`gapfilling.connect_blocked_reactions`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/gapfilling/fill.py))
|
|
245
|
+
— MILP. Targeted (toward objective) mode delegates to `cobra.gapfill`.
|
|
246
|
+
|
|
247
|
+
## Phase 4a — Metabolic tasks
|
|
248
|
+
|
|
249
|
+
* **Task list parsing + `check_tasks`** ([`tasks/`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/tasks/)).
|
|
250
|
+
|
|
251
|
+
## Phase 3 — Reconstruction
|
|
252
|
+
|
|
253
|
+
* **Homology-based draft** from a template GEM + BLAST/DIAMOND wrappers
|
|
254
|
+
([`reconstruction/homology/`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/reconstruction/homology/)) — with structured
|
|
255
|
+
improvements over RAVEN's `getModelFromHomology` (see IMPROVEMENTS H1–H6).
|
|
256
|
+
* **KEGG five-step pipeline** ([`reconstruction/kegg/`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/reconstruction/kegg/)):
|
|
257
|
+
dump → parser → HMM library builder → species model → HMM-query draft.
|
|
258
|
+
* **MetaCyc reconstruction** **not ported** (and flagged for removal from MATLAB RAVEN —
|
|
259
|
+
see IMPROVEMENTS R-MetaCyc).
|
|
260
|
+
|
|
261
|
+
## Phase 2 — I/O
|
|
262
|
+
|
|
263
|
+
* **YAML** aligned to cobra's `!!omap` writer + RAVEN-only fields preserved into `.notes`,
|
|
264
|
+
plus geckopy `ec-*` for enzyme-constrained models
|
|
265
|
+
([`io/yaml.py`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/io/yaml.py)).
|
|
266
|
+
* **SIF**, **Excel export**, and **Standard-GEM `model/<fmt>/…` git layout**
|
|
267
|
+
([`io/`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/io/)). Excel import intentionally excluded.
|
|
268
|
+
|
|
269
|
+
## Phase 1 — Foundation
|
|
270
|
+
|
|
271
|
+
* **GPR / balance / validation / parsing helpers** ([`utils/`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/utils/)) —
|
|
272
|
+
cobra-absent bits only; the rest are cheatsheeted.
|
|
273
|
+
* **Manipulation ergonomic layer** ([`manipulation/`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/manipulation/)) —
|
|
274
|
+
add/change/remove/transport/transfer/merge/simplify/variance + adopted transforms.
|
|
275
|
+
* **External-binary resolver** ([`binaries.py`](https://github.com/SysBioChalmers/raven-toolbox/blob/develop/src/raven_toolbox/binaries.py)) — version-pinned
|
|
276
|
+
release-ZIP registry, SHA256-verified cache.
|
|
277
|
+
|
|
278
|
+
## Phase 0 — Scaffold
|
|
279
|
+
|
|
280
|
+
* Project structure, packaging, pytest skeleton, license alignment with MATLAB RAVEN
|
|
281
|
+
(GPL-3.0-or-later).
|