News and release notes for MICOM

This includes a list of major changes for each minor version starting from 0.19.0.

For information on how to use micom please refer to the documentation.


Fix a bug where minimal_medium(manifest, ..., summarize=False) would crash.


plot_fit got renamed to plot_association and will not use LASSO coefficients anymore as a proxy for univariate associations. Instead univariate non-parametric tests are run for each metabolite. This should be more stable and avoid issues with low reproducibility of coefficients. LASSO model performance is still reported as a global measure of association. In case you need access to the previous plot_fit function you can simply install a prior version of micom in a python or conda environment.

Visualizations are updates requiring less dependencies now and using a current version of vega-lite.

The transition to the hybrid solver is now completed and the installation does not require manual steps anymore.

Lowered the iteration limit for the OSQP step in the hybrid solver as more iterations did usually not lead to an improvement or convergence.

Convert some warnings to debug messages.

Switch the the start method for multiprocessing to “spawn” which should improve stability for workflows.


Fix a typo in the hybrid settings.


Better default settings for the hybrid solver.

Fixes an issue with taxonomy tables with species rank and without if column.


Fixes yet another annotation bug with AGORA2 due to duplicated exchanges.


Fixes the rank prefix trimming when setting it to False in Qiime2 imports.


Replaces the default OSQP solver with a new hybrid solver using OSQP for QPs and HIGHS for everything else which improves the accuracy by several orders of magnitude. Note the new installation instructions for solvers.

The presence or absence of rank prefixes such as s__ or g__ for genus and species names, respectively, can now be detected and resolved automatically by MICOM. This improves compatibility with Qiime2 and GTDB.

New solver is now tested automatically on all platforms.

Small bugfixes and updates.


Backports the visualizers to be compatible with scikit-learn 0.24.1 to avoid some issues with Qiime2.

Re-enables the Qiime model loading test in the CI.


Fixes a bug where model annotation tables could not be generated if there were multiple exchange reactions for a single metabolite. This made MICOM not work with AGORA2 in some instances.

Now checks for demand reactions and in database construction as well.


Bump the required cobra version to avoid numpy version errors.

0.32.1 - 0.32.2

Adjustments to solver settings and lost of improvements to Gurobi that make it much faster.


Helper functions to save results were added.


Fixed a bug where minimal_medium would maximize with OSQP instead of minimize.


More adjustments to OSQP.


Fix a bug in the stabilization term used for OSQP. Try to avoid fragmentation warning.


Fix regression in T-SNE.

0.31.2 - 0.31.3

Some more fixes to the media completion.


Show added flux as fraction of total in complete_db_medium.


The medium completion functions now have a flag that allows adding additional flux to components already in the candidate medium. The default is now changed to that new non-strict mode which makes it much easier and more efficient to complete media. In that case the max_added_import amount now specifies the maximum flux added on top the limit specified in the candidate medium.


Fixed a bug where T-SNE would complain in low sample numbers.

0.30.3 - 0.30.4

Those were fixes to deployment and dependencies only.


Avoids a bug in COBRAPY that can yield to huge serialized versions of the models.


Fix compatibility with Python 3.7.


build will now detect existing models in the output folder and skip them. This now allows to resume interrupted builds. Explicit rebuild requires you to delete the folder now.


Fixes a bug where using more than 1 thread for workflows would not return results in some cases.


Fixed some dependency errors on older Python versions.


Port tests to cobrapy 0.25 and above. Fix an import error in workflows.core.


Suppresses some warning in annotations from cobrapy.


Fixes some CI and build issues.


Renames the n_jobs arguments to threads across the code base for consistency and updates the arguments for workflow.

workflow now does not spawn a process for single-threaded runs, reducing overhead.

Fixes an issue where workflow would deadlock with pytest-cov.


Fixes an issue where an accumulation in warnings in spawned processes trips up jupyter.


Fixes a deployment issue with the previous build.


Annotations now include the molecular weight, number of carbon atoms, and the number of nitrogen atoms for each compound.


Now adjusts active demands to be optional. This was an issue with some models in AGORA that had forced biotin demands. This effectively prohibits zero growth rates and is problematic for MICOM.

Fix the logger for multiprocessing.


Handle CARVEME models better in workflows.complete_medium.

Workflows now have a deterministic return error (same order as inputs).


build_database now allows to set the compression algorithm and level.


Fixed settings to get better convergence behavior with OSQP.


MICOM now works with OSQP and works out of the box without a commercial QP solver. See the installation docs for more information.


The sample heatmap in plot_exchanges_per_sample is now automatically rotated when there are mores samples than reactions.

media workflows will use presolving by default since those are often numerically problematic.


Fix the signature and add deprecation warnings for optimize_* methods.

plot_exchanges_per_taxon will now use normalized fluxes (per 1 gDW for each taxon) which allows better comparability. The old behavior can be enabled with use_total_flux=True.

Avoid negative growth rate constraints in _apply_min_growth.

Can now enable presolving/scaling in grow and tradeoff.


Fix some warnings from pandas.

Avoid a crash in reularize_l2_norm when all reactions for a taxon have been fixed to zero.

Raise a better error if the minimal medium optimization fails in grow.

Use the right tolerance when setting atol and rtol automatically.


Fixed an error in if build was run without a model database but with a file column in the taxonomy.


Fixed missing data files.


Improves version compatibility with cobrapy and QIIME 2.


Fixed a bug where incorrectly labeled biomass demand reactions were treated like an exchange.


Lowered the required version for pandas to re-enable compatibility with Python 3.6.

Docs are now built on all pushes.


atol and rtol are now consistently exposed.

Remove six dependency.


Got a bit smarter in cleaning up compartment suffixes. This fixes the odd “_e_m” suffix in CARVEME-derived models. This will change the names of exchange reactions compared to version 0.21.x.


Stabilize minimal_medium a bit more.

The strategy to calculate fluxes in the grow workflow can now be set with the strategy argument. For instance, you can now get fluxes via parsimonious FBA instead of assuming minimal imports.

Fixed a bug where minimal media classification with weights="mass" would fail due to invalid elements in the formula (for instance “X”).


This version brings new functionality to design growth media from a skeleton medium. This also allows for a quicker verification of media against the model databases.

Added workflows:

  • check_db_media check if models in a model database can grow on a given medium

  • complete_db_mediacompletes a growth medium so all models in the db can grow on it

Together with this we now provide several new revised growth media for the gut on In particular, we finally provide the often requested growth medium for the carveME database.


minimal_medium now accepts weighting the fluxes bei molecular weight or any elemental content. For instance, you can now calculate a minimal medium that minimizes carbon import for instance. The used weigths argument propagates to any workflow using this function including complete_medium, fix_medium and grow.

0.1.0 - 0.18.0

minimal_medium now has an option to return all fluxes along with the import and export fluxes. Useful if you want to check what every individual taxa consumes.

Addition of Community.cooperative_tradeoff which brings a fast method to get nearly unique growth rates for a particular growth tradeoff (for instance 50% maximal growth rate).

Addition of elasticity coefficients which allows you to study which import and export reactions are sensitive to changes in diet or taxa abundances.

Several changes to make micom capable of handling numerical instable models. This includes a crossover strategy to obtain an optimal or near-optimal from an incomplete interior point optimization.