domains / science / metabolic-modeling / cobrapy
The K-Dense-AI copy is a highly specific, version-pinned (cobra 0.32.1) procedural guide with critical warnings about deprecated arguments (e.g., `loopless=True`), solver selection, and reproducibility. The FreedomIntelligence copy provides a broader API reference including features omitted by K-Dense (production envelopes, gapfilling, model construction) but uses deprecated syntax (`loopless=True`) and lacks version pinning. The aipoch copy is a generic wrapper with no unique technical value. Because K-Dense is the most 'authentic' procedure but lacks the full feature set of FreedomIntelligence, and FreedomIntelligence contains outdated/incorrect syntax for the current version, combining them is necessary to provide a complete and correct skill.
| Repository | Path |
|---|---|
| K-Dense-AI/scientific-agent-skills | skills/cobrapy/SKILL.md |
| aipoch/medical-research-skills | scientific-skills/Data Analysis/cobrapy/SKILL.md |
| FreedomIntelligence/OpenClaw-Medical-Skills | skills/cobrapy/SKILL.md |
| Role | Repository | Path |
|---|---|---|
| peer | K-Dense-AI/scientific-agent-skills | skills/cobrapy/SKILL.md |
| peer | aipoch/medical-research-skills | scientific-skills/Data Analysis/cobrapy/SKILL.md |
| peer | FreedomIntelligence/OpenClaw-Medical-Skills | skills/cobrapy/SKILL.md |
---
name: cobrapy
description: Performs constraint-based metabolic modeling with COBRApy, including FBA, pFBA, FVA, gene knockouts, flux sampling, growth media, production envelopes, gap filling, and SBML model validation.
license: GPL-2.0
allowed-tools: Read Write Edit Bash
compatibility: Requires Python 3.9+ and cobra 0.32.1. GLPK installs via swiglpk.
metadata:
version: "1.5"
skill-author: K-Dense Inc. / FreedomIntelligence
---
# COBRApy - Constraint-Based Reconstruction and Analysis
## When to use
Use for loading/building metabolic networks, optimizing steady-state fluxes, knockout screens, medium design, feasible-space sampling, and gap-filling. FBA is a constraint-based prediction; it does not infer kinetic rates.
## Setup and reproducibility
Targets **cobra 0.32.1**.
```bash
uv pip install "cobra==0.32.1"
```
Record model source/version/checksum, cobra and solver versions, objective, medium, bounds, tolerances, and random seeds. Start with `processes=1` for multiprocessing safety.
## Workflow
### 1. Load, inspect, and validate a model
```python
from cobra.io import load_model, read_sbml_model, write_sbml_model
# Bundled models: textbook, iJO1366, salmonella
model = load_model("textbook")
model.solver = "glpk"
# File I/O
# model = read_sbml_model("path/to/model.xml")
# write_sbml_model(model, "output.xml")
solution = model.optimize(raise_error=True)
assert solution.status == "optimal"
```
Note: `e_coli_core` is a remote BiGG identifier, not a bundled alias for `textbook`. Check chemical formulas/charges separately from solver feasibility.
### 2. Compare FBA, pFBA, and FVA
```python
from cobra.flux_analysis import pfba, geometric_fba, flux_variability_analysis
biomass_id = "Biomass_Ecoli_core"
parsimonious = pfba(model)
centered = geometric_fba(model, processes=1)
# Use string methods for loopless, not boolean (deprecated)
fva = flux_variability_analysis(
model, reaction_list=["PFK", "FBA", "PGI"],
fraction_of_optimum=0.9, processes=1,
)
loopless_fva = flux_variability_analysis(
model, reaction_list=["PFK", "FBA", "PGI"],
fraction_of_optimum=0.9, loopless="fastSNP", processes=1,
)
```
### 3. Knockouts and media
```python
from cobra.flux_analysis import single_gene_deletion, double_gene_deletion
from cobra.medium import minimal_medium
results = single_gene_deletion(model, processes=1)
# Double deletions (uses multiprocessing)
# double_results = double_gene_deletion(model, processes=4)
with model:
medium = model.medium
medium["EX_o2_e"] = 0.0
model.medium = medium # Must reassign dict
anaerobic = model.optimize()
min_medium = minimal_medium(model, 0.5 * baseline, minimize_components=True)
```
### 4. Flux Sampling
```python
from cobra.sampling import sample
# In 0.32.1, method="auto" defaults to CHRR if hopsy is installed, else OptGP.
# Choose explicitly to avoid environment-dependent changes.
samples = sample(model, n=1000, method="optgp", processes=1)
```
### 5. Production Envelopes and Gapfilling
```python
from cobra.flux_analysis import production_envelope, gapfill
envelope = production_envelope(
model,
reactions=["EX_glc__D_e", "EX_o2_e"],
objective="EX_ac_e"
)
# Gapfilling requires a universal model/database
# gapfill_result = gapfill(model, universal_model, objective="Biomass_Ecoli_core")
```