diff --git a/docs/benchmark_iter_gapfill.svg b/docs/benchmark_iter_gapfill.svg new file mode 100644 index 0000000..1c0540a --- /dev/null +++ b/docs/benchmark_iter_gapfill.svg @@ -0,0 +1,760 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/benchmark_iterative_gapfill.ipynb b/docs/benchmark_iterative_gapfill.ipynb new file mode 100644 index 0000000..b706a07 --- /dev/null +++ b/docs/benchmark_iterative_gapfill.ipynb @@ -0,0 +1,1709 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Benchmarking ensemble generation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook does some simple benchmarking of ensemble generation in Medusa through iterative gapfilling. You can see the full narrative version of the process being benchmarked in the [**Creating an ensemble**](https://medusa.readthedocs.io/en/latest/creating_ensemble.html) section of the User Guide." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "no cpd00013_e\n", + "cpd11594_e was not in model, adding met and exchange reaction\n", + "cpd05158_e was not in model, adding met and exchange reaction\n", + "cpd15584_e was not in model, adding met and exchange reaction\n", + "cpd00492_e was not in model, adding met and exchange reaction\n", + "cpd00232_e was not in model, adding met and exchange reaction\n", + "cpd19001_e was not in model, adding met and exchange reaction\n", + "cpd00709_e was not in model, adding met and exchange reaction\n", + "cpd00396_e was not in model, adding met and exchange reaction\n", + "cpd01307_e was not in model, adding met and exchange reaction\n", + "cpd00079_e was not in model, adding met and exchange reaction\n", + "cpd00072_e was not in model, adding met and exchange reaction\n", + "cpd00320_e was not in model, adding met and exchange reaction\n", + "cpd01293_e was not in model, adding met and exchange reaction\n", + "cpd05264_e was not in model, adding met and exchange reaction\n", + "cpd03561_e was not in model, adding met and exchange reaction\n", + "cpd00094_e was not in model, adding met and exchange reaction\n", + "cpd00142_e was not in model, adding met and exchange reaction\n", + "cpd00141_e was not in model, adding met and exchange reaction\n", + "cpd00029_e was not in model, adding met and exchange reaction\n" + ] + } + ], + "source": [ + "# Load the test model for Staphylococcus aureus, originally generated with ModelSEED\n", + "import medusa\n", + "from medusa.test import create_test_model\n", + "model = create_test_model('Saureus_seed')\n", + "\n", + "# Load the biolog data from Plata et al., Nature 2014\n", + "from medusa.test import load_biolog_plata\n", + "biolog_base_composition, biolog_base_dict, biolog_thresholded = load_biolog_plata()\n", + "\n", + "# Extract growth/no growth calls for staph aureus\n", + "test_mod_pheno = biolog_thresholded.loc['Staphylococcus aureus']\n", + "test_mod_pheno = list(test_mod_pheno[test_mod_pheno == True].index)\n", + "\n", + "# load the universal reaction database\n", + "from medusa.test import load_universal_modelseed\n", + "from cobra.core import Reaction\n", + "universal = load_universal_modelseed()\n", + "\n", + "# check for biolog base components in the model and record\n", + "# the metabolites/exchanges that need to be added\n", + "add_mets = []\n", + "add_exchanges = []\n", + "for met in list(biolog_base_dict.keys()):\n", + " try:\n", + " model.metabolites.get_by_id(met)\n", + " except:\n", + " print('no '+met)\n", + " add_met = universal.metabolites.get_by_id(met).copy()\n", + " add_mets.append(add_met)\n", + "\n", + "model.add_metabolites(add_mets)\n", + "\n", + "for met in list(biolog_base_dict.keys()):\n", + " # Search for exchange reactions\n", + " try:\n", + " model.reactions.get_by_id('EX_'+met)\n", + " except:\n", + " add_met = universal.metabolites.get_by_id(met)\n", + " ex_rxn = Reaction('EX_' + met)\n", + " ex_rxn.name = \"Exchange reaction for \" + met\n", + " ex_rxn.lower_bound = -1000\n", + " ex_rxn.upper_bound = 1000\n", + " ex_rxn.add_metabolites({add_met:-1})\n", + " add_exchanges.append(ex_rxn)\n", + "\n", + "model.add_reactions(add_exchanges)\n", + "\n", + "# Find metabolites from the biolog data that are missing in the test model\n", + "# and add them from the universal\n", + "missing_mets = []\n", + "missing_exchanges = []\n", + "media_dicts = {}\n", + "for met_id in test_mod_pheno:\n", + " try:\n", + " model.metabolites.get_by_id(met_id)\n", + " except:\n", + " print(met_id + \" was not in model, adding met and exchange reaction\")\n", + " met = universal.metabolites.get_by_id(met_id).copy()\n", + " missing_mets.append(met)\n", + " ex_rxn = Reaction('EX_' + met_id)\n", + " ex_rxn.name = \"Exchange reaction for \" + met_id\n", + " ex_rxn.lower_bound = -1000\n", + " ex_rxn.upper_bound = 1000\n", + " ex_rxn.add_metabolites({met:-1})\n", + " missing_exchanges.append(ex_rxn)\n", + " media_dicts[met_id] = biolog_base_dict.copy()\n", + " media_dicts[met_id] = {'EX_'+k:v for k,v in media_dicts[met_id].items()}\n", + " media_dicts[met_id]['EX_'+met_id] = 1000\n", + "model.add_metabolites(missing_mets)\n", + "model.add_reactions(missing_exchanges)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the input prepared, let's fill some gaps using the `iterative_gapfill_from_binary_phenotypes` function. We will gapfill each ensemble using 10 media conditions and perform the process three times for target ensemble sizes of 5 members, 25 members, and 100 members. Each ensemble generation step will be repeated 10 times with a different random sampling of 10 media conditions (e.g., 10 ensembles of 5 members, 25 members and 100 members will be generated and the mean/standard deviation of construction time will be reported)." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 97.85026526451111\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 106.4863657951355\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 119.81539511680603\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 97.87515687942505\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 107.44688296318054\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 97.99315094947815\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 110.61738395690918\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 111.50042414665222\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 128.1014850139618\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "building features...\n", + "updating members...\n", + "Clock time: 95.986576795578\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 267.31880497932434\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 381.626629114151\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 279.64290976524353\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 266.1675601005554\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 270.17031383514404\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 253.3940167427063\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 389.7195827960968\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 380.86448097229004\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 271.53583908081055\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "building features...\n", + "updating members...\n", + "Clock time: 435.9781460762024\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 998.9393928050995\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 1333.905808210373\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 1008.801106929779\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 938.9039621353149\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 1012.624204158783\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 957.0066258907318\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 1158.7237539291382\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 1412.2274470329285\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 1309.229562997818\n", + "Constraining lower bound for bio1\n", + "starting cycle number 0\n", + "starting cycle number 1\n", + "starting cycle number 2\n", + "starting cycle number 3\n", + "starting cycle number 4\n", + "starting cycle number 5\n", + "starting cycle number 6\n", + "starting cycle number 7\n", + "starting cycle number 8\n", + "starting cycle number 9\n", + "starting cycle number 10\n", + "starting cycle number 11\n", + "starting cycle number 12\n", + "starting cycle number 13\n", + "starting cycle number 14\n", + "starting cycle number 15\n", + "starting cycle number 16\n", + "starting cycle number 17\n", + "starting cycle number 18\n", + "starting cycle number 19\n", + "starting cycle number 20\n", + "starting cycle number 21\n", + "starting cycle number 22\n", + "starting cycle number 23\n", + "starting cycle number 24\n", + "starting cycle number 25\n", + "starting cycle number 26\n", + "starting cycle number 27\n", + "starting cycle number 28\n", + "starting cycle number 29\n", + "starting cycle number 30\n", + "starting cycle number 31\n", + "starting cycle number 32\n", + "starting cycle number 33\n", + "starting cycle number 34\n", + "starting cycle number 35\n", + "starting cycle number 36\n", + "starting cycle number 37\n", + "starting cycle number 38\n", + "starting cycle number 39\n", + "starting cycle number 40\n", + "starting cycle number 41\n", + "starting cycle number 42\n", + "starting cycle number 43\n", + "starting cycle number 44\n", + "starting cycle number 45\n", + "starting cycle number 46\n", + "starting cycle number 47\n", + "starting cycle number 48\n", + "starting cycle number 49\n", + "starting cycle number 50\n", + "starting cycle number 51\n", + "starting cycle number 52\n", + "starting cycle number 53\n", + "starting cycle number 54\n", + "starting cycle number 55\n", + "starting cycle number 56\n", + "starting cycle number 57\n", + "starting cycle number 58\n", + "starting cycle number 59\n", + "starting cycle number 60\n", + "starting cycle number 61\n", + "starting cycle number 62\n", + "starting cycle number 63\n", + "starting cycle number 64\n", + "starting cycle number 65\n", + "starting cycle number 66\n", + "starting cycle number 67\n", + "starting cycle number 68\n", + "starting cycle number 69\n", + "starting cycle number 70\n", + "starting cycle number 71\n", + "starting cycle number 72\n", + "starting cycle number 73\n", + "starting cycle number 74\n", + "starting cycle number 75\n", + "starting cycle number 76\n", + "starting cycle number 77\n", + "starting cycle number 78\n", + "starting cycle number 79\n", + "starting cycle number 80\n", + "starting cycle number 81\n", + "starting cycle number 82\n", + "starting cycle number 83\n", + "starting cycle number 84\n", + "starting cycle number 85\n", + "starting cycle number 86\n", + "starting cycle number 87\n", + "starting cycle number 88\n", + "starting cycle number 89\n", + "starting cycle number 90\n", + "starting cycle number 91\n", + "starting cycle number 92\n", + "starting cycle number 93\n", + "starting cycle number 94\n", + "starting cycle number 95\n", + "starting cycle number 96\n", + "starting cycle number 97\n", + "starting cycle number 98\n", + "starting cycle number 99\n", + "building features...\n", + "updating members...\n", + "Clock time: 1040.6910407543182\n" + ] + } + ], + "source": [ + "from medusa.reconstruct.expand import iterative_gapfill_from_binary_phenotypes\n", + "import time\n", + "import random\n", + "\n", + "num_cycles = 5\n", + "lower_bound = 0.05\n", + "flux_cutoff = 1E-10\n", + "\n", + "clock_time = {}\n", + "clock_time[5] = []\n", + "for i in range(0,10):\n", + " # sample without replacement\n", + " media_selection = random.sample(list(media_dicts.keys()),10)\n", + " sub_dict = {condition:media_dicts[condition] for condition in media_selection}\n", + " time1 = time.time()\n", + " ensemble = iterative_gapfill_from_binary_phenotypes(model,universal,sub_dict,num_cycles,\\\n", + " lower_bound=lower_bound,\\\n", + " inclusion_threshold=1E-10,\\\n", + " exchange_reactions=False,\\\n", + " demand_reactions=False,\\\n", + " exchange_prefix='EX');\n", + " time2 = time.time()\n", + " clock_time[5].append(time2-time1)\n", + " print(\"Clock time: \" + str(time2-time1))\n", + "\n", + "num_cycles = 25\n", + "clock_time[25] = []\n", + "for i in range(0,10):\n", + " # sample without replacement\n", + " media_selection = random.sample(list(media_dicts.keys()),10)\n", + " sub_dict = {condition:media_dicts[condition] for condition in media_selection}\n", + " time1 = time.time()\n", + " ensemble = iterative_gapfill_from_binary_phenotypes(model,universal,sub_dict,num_cycles,\\\n", + " lower_bound=lower_bound,\\\n", + " inclusion_threshold=1E-10,\\\n", + " exchange_reactions=False,\\\n", + " demand_reactions=False,\\\n", + " exchange_prefix='EX');\n", + " time2 = time.time()\n", + " clock_time[25].append(time2-time1)\n", + " print(\"Clock time: \" + str(time2-time1))\n", + " \n", + "num_cycles = 100\n", + "clock_time[100] = []\n", + "for i in range(0,10):\n", + " # sample without replacement\n", + " media_selection = random.sample(list(media_dicts.keys()),10)\n", + " sub_dict = {condition:media_dicts[condition] for condition in media_selection}\n", + " time1 = time.time()\n", + " ensemble = iterative_gapfill_from_binary_phenotypes(model,universal,sub_dict,num_cycles,\\\n", + " lower_bound=lower_bound,\\\n", + " inclusion_threshold=1E-10,\\\n", + " exchange_reactions=False,\\\n", + " demand_reactions=False,\\\n", + " exchange_prefix='EX');\n", + " time2 = time.time()\n", + " clock_time[100].append(time2-time1)\n", + " print(\"Clock time: \" + str(time2-time1))" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pylab as plt\n", + "import numpy as np\n", + "fig,ax = plt.subplots()\n", + "clock_time_as_min = {t:[ti/60.0 for ti in clock_time[t]] for t in clock_time.keys()}\n", + "x = list(clock_time_as_min.keys())\n", + "x.sort()\n", + "ax.bar(x=[1,2,3],height=[np.mean(clock_time_as_min[time]) for time in x],\n", + " yerr=[np.std(clock_time_as_min[time]) for time in x],\n", + " capsize=10,alpha=0.6)\n", + "ax.set_xlabel('Ensemble members',size=16)\n", + "ax.set_ylabel('Ensemble construction time (min)',size=16)\n", + "ax.tick_params(axis='both', which='major', labelsize=12)\n", + "ax.tick_params(axis='both', which='minor', labelsize=12)\n", + "ax.set(xticks=[1,2,3])\n", + "ax.set_xticklabels(labels=x)\n", + "plt.savefig('benchmark_iter_gapfill.svg')" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1.789455144802729, 5.327363805770874, 18.61842150807381]" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# what are the mean values?\n", + "[np.mean(clock_time_as_min[time]) for time in x]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see, ensemble size and construction time are fairly proportional. There is a large amount of time spent copying the universal model, so contructing the small 5-member ensemble takes longer than one might expect. A larger universal model will take longer to copy, and each gapfilling step will take longer if more media conditions are included." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "medusa_devel", + "language": "python", + "name": "medusa_devel" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/benchmarking.ipynb b/docs/benchmark_mem_cpu.ipynb similarity index 62% rename from docs/benchmarking.ipynb rename to docs/benchmark_mem_cpu.ipynb index 0553b50..8ba3871 100644 --- a/docs/benchmarking.ipynb +++ b/docs/benchmark_mem_cpu.ipynb @@ -7,13 +7,13 @@ "# Ensemble Size and Speed Benchmarking\n", "\n", "`Ensembles` are specifically designed for optimal usability, memory usage, and computational speed. In this tutorial we explore the size and speed related characteristics of `Ensembles` compared to using the equivalent individual models. We aim to begin to answer the following questions: \n", - "- How much RAM does an ensemble use when working with it compared to working with the equivalent individual models?\n", - "- How much memory is used to store ensembles compared to the equivalent individual models?\n", + "- How much memory does an ensemble use when working with it compared to working with the equivalent individual models?\n", + "- How much disk space is used to store ensembles compared to the equivalent individual models?\n", "- How long does it take to run FBA for all members of an ensemble compared to the equivalent individual models?\n", "\n", "## Ensemble memory requirements during use and when saved\n", "\n", - "`Ensembles` are structured to minimize the amount of RAM required when loaded and when being saved. One of the major challenges when working with ensembles of models is having all of the models readily available in RAM while conducting analyses. With efficient packaging of the features that are different between members of an ensemble, we were able to significantly reduce the amount of RAM and hard drive space required for working with ensembles of models. " + "`Ensembles` are structured to minimize the amount of memory required when loaded and when being saved. One of the major challenges when working with ensembles of models is having all of the models readily available in memory while conducting analyses. With efficient packaging of the features that are different between members of an ensemble, we were able to significantly reduce the amount of memory and hard drive space required for working with ensembles of models. " ] }, { @@ -26,6 +26,7 @@ "import os\n", "import psutil\n", "import medusa\n", + "import numpy\n", "from medusa.test import create_test_ensemble" ] }, @@ -38,7 +39,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "63.58 MB\n" + "57.82 MB\n" ] } ], @@ -85,7 +86,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "19.23 MB\n" + "17.50 MB\n" ] } ], @@ -115,8 +116,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "19230.47 MB or\n", - "18.78 GB\n" + "17500.00 MB or\n", + "17.09 GB\n" ] } ], @@ -150,7 +151,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "6.61 MB for a 1000 member ensemble\n" + "6.67 MB for a 1000 member ensemble\n" ] } ], @@ -174,9 +175,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.17 MB per model\n", - "1171.96 MB for 1000 individual model files.\n", - "1.14 GB for 1000 individual model files.\n" + "1.07 MB per model\n", + "1070.01 MB for 1000 individual model files.\n", + "1.04 GB for 1000 individual model files.\n" ] } ], @@ -200,7 +201,7 @@ "source": [ "## Flux analysis speed testing\n", "\n", - "Running FBA requires a relatively short amount of time to for a single model, however when working with ensembles of 1000s of models, the simple optimization problems can add up to significant amounts of time. Here we explore the expected timeframes for an ensemble and how that compares to using the equivalent number of individual models. It is important to note that during this benchmarking, we assume that the computer being used is capable to loading all individual modelings into the RAM, this may not be the case for many laptop computers. " + "Running FBA requires a relatively short amount of time for a single model, however when working with ensembles of 1000s of models, the simple optimization problems can add up to significant amounts of time. Here we explore the expected timeframes for FBA with an ensemble and how that compares to using the equivalent number of individual models. It is important to note that during this benchmarking, we assume that the computer being used is capable to loading all individual modelings into the RAM; this may not be the case for many modern laptop computers (e.g., ~16GB spare memory required)." ] }, { @@ -222,22 +223,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "1 processors: 142.41587114334106 seconds for entire ensemble\n", - "2 processors: 79.16171908378601 seconds for entire ensemble\n", - "4 processors: 44.92253303527832 seconds for entire ensemble\n", - "8 processors: 34.65370845794678 seconds for entire ensemble\n" + "1 processors: 87.24728102684021 seconds for entire ensemble\n", + "2 processors: 44.09945402145386 seconds for entire ensemble\n", + "3 processors: 32.84902577400207 seconds for entire ensemble\n", + "4 processors: 27.70060839653015 seconds for entire ensemble\n" ] } ], "source": [ "# Time required to run FBA on a 1000 member ensemble using the innate Medusa functions.\n", "runtimes = {}\n", - "for num_processes in [1,2,4,8]:\n", - " t0 = time.time()\n", - " flux_balance.optimize_ensemble(ensemble, num_processes = num_processes)\n", - " t1 = time.time()\n", - " runtimes[num_processes] = t1-t0\n", - " print(str(num_processes) + ' processors: ' + str(t1-t0) + ' seconds for entire ensemble')" + "trials = 5\n", + "for num_processes in [1,2,3,4]:\n", + " runtimes[num_processes] = []\n", + " for trial in range(0,trials):\n", + " t0 = time.time()\n", + " flux_balance.optimize_ensemble(ensemble, num_processes = num_processes)\n", + " t1 = time.time()\n", + " runtimes[num_processes].append(t1-t0)\n", + " print(str(num_processes) + ' processors: ' + str(numpy.mean(runtimes[num_processes])) + ' seconds for entire ensemble')" ] }, { @@ -249,7 +253,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "79.50 seconds for 1000 models\n" + "35.06 seconds for 1000 models\n", + "34.51 seconds for 1000 models\n", + "34.49 seconds for 1000 models\n", + "34.62 seconds for 1000 models\n", + "34.37 seconds for 1000 models\n", + "34.61 second average for 1000 models\n" ] } ], @@ -257,35 +266,41 @@ "# Time required to run FBA on 1000 individual models using a single processor.\n", "# This is the equivalent time that would be required if all 1000 models were pre-loaded in RAM.\n", "\n", - "t_total = 0\n", - "for member in ensemble.members:\n", - " # Set the member state \n", - " ensemble.set_state(member.id)\n", - " # Start the timer to capture only time required to run FBA on each model\n", - " t0 = time.time()\n", - " solution = ensemble.base_model.optimize()\n", - " t1 = time.time()\n", - " t_total = t1-t0 + t_total\n", - "print(\"%.2f\" % (t_total) ,'seconds for 1000 models')" + "trial_total = []\n", + "for trial in range(0,trials):\n", + " t_total = 0\n", + " for member in ensemble.members:\n", + " # Set the member state\n", + " ensemble.set_state(member.id)\n", + " # Start the timer to capture only time required to run FBA on each model\n", + " t0 = time.time()\n", + " solution = ensemble.base_model.optimize()\n", + " t1 = time.time()\n", + " t_total = t1-t0 + t_total\n", + " print(\"%.2f\" % (t_total) ,'seconds for 1000 models')\n", + " trial_total.append(t_total)\n", + "print(\"%.2f\" % (numpy.mean(trial_total)) ,'second average for 1000 models')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Loading individual models is about twice as fast as using Medusa ensembles (ignoring the time it takes to load all of the models), however requires about 300 times as much RAM. " + "Using individual models stored in memory is faster than an equivalent ensemble with 1-2 processors, but Medusa is faster with an increasing number of processors. Keep in mind, however, that this comparison doesn't consider the time it takes to load all of the models (\\~200x faster in Medusa for an ensemble this size), make any modifications to the media conditions for an ensemble (one operation in Medusa; 1000 independent operations with individual models), and that using individual models requires far more memory (\\~300x in this case).\n", + "\n", + "This comparison also doesn't factor in the time required for the first optimization performed with any COBRApy model. When a model is optimized once, the solver maintains the solution as a starting point for future optimization steps, substantially reducing the time required for future simulations. Medusa intrinsically takes advantage of this by only using one COBRApy model to represent the entire ensemble; the solution is recycled from member to member during ensemble FBA in Medusa. In contrast, the first optimization step for every individual model loaded into memory will be more computationally expensive, as seen by the timing in the cell below." ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "436.84 seconds for 1000 models\n" + "192.96 seconds for 1000 models\n" ] } ], @@ -307,9 +322,9 @@ ], "metadata": { "kernelspec": { - "display_name": "medusa", + "display_name": "medusa_devel", "language": "python", - "name": "medusa" + "name": "medusa_devel" }, "language_info": { "codemirror_mode": { @@ -321,9 +336,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.6" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/conf.py b/docs/conf.py index 4339345..2e6574d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -25,7 +25,7 @@ # The short X.Y version version = '' # The full version, including alpha/beta/rc tags -release = '0.1.3' +release = '0.2.0' # -- General configuration --------------------------------------------------- diff --git a/docs/creating_ensemble.ipynb b/docs/creating_ensemble.ipynb index 6bad64c..a60539c 100644 --- a/docs/creating_ensemble.ipynb +++ b/docs/creating_ensemble.ipynb @@ -815,9 +815,9 @@ ], "metadata": { "kernelspec": { - "display_name": "medusa_dev_1", + "display_name": "medusa_devel", "language": "python", - "name": "medusa_dev_1" + "name": "medusa_devel" }, "language_info": { "codemirror_mode": { @@ -829,9 +829,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.6" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/index.rst b/docs/index.rst index 45f21e9..380c95e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -50,6 +50,8 @@ Index * :doc:`creating_ensemble` * :doc:`simulating` * :doc:`io` +* :doc:`benchmark_mem_cpu` +* :doc:`benchmark_iterative_gapfill` * :doc:`faq` .. toctree:: @@ -61,6 +63,8 @@ Index creating_ensemble simulating io + benchmark_mem_cpu + benchmark_iterative_gapfill faq diff --git a/docs/machine_learning.ipynb b/docs/machine_learning.ipynb index 3b8bab6..8fa386f 100644 --- a/docs/machine_learning.ipynb +++ b/docs/machine_learning.ipynb @@ -83,44 +83,44 @@ " \n", " \n", " \n", - " Staphylococcus aureus_gapfilled_0\n", - " 118.953596\n", + " Staphylococcus aureus_gapfilled_518\n", + " 118.238182\n", " \n", " \n", - " Staphylococcus aureus_gapfilled_1\n", - " 106.883727\n", + " Staphylococcus aureus_gapfilled_860\n", + " 122.523063\n", " \n", " \n", - " Staphylococcus aureus_gapfilled_10\n", - " 117.959585\n", + " Staphylococcus aureus_gapfilled_900\n", + " 104.905551\n", " \n", " \n", - " Staphylococcus aureus_gapfilled_100\n", - " 145.714527\n", + " Staphylococcus aureus_gapfilled_434\n", + " 148.353976\n", " \n", " \n", - " Staphylococcus aureus_gapfilled_101\n", - " 117.819590\n", + " Staphylococcus aureus_gapfilled_343\n", + " 134.100850\n", " \n", " \n", - " Staphylococcus aureus_gapfilled_102\n", - " 128.540874\n", + " Staphylococcus aureus_gapfilled_706\n", + " 116.982207\n", " \n", " \n", - " Staphylococcus aureus_gapfilled_103\n", - " 126.180449\n", + " Staphylococcus aureus_gapfilled_175\n", + " 137.352545\n", " \n", " \n", - " Staphylococcus aureus_gapfilled_104\n", - " 137.812775\n", + " Staphylococcus aureus_gapfilled_85\n", + " 110.488964\n", " \n", " \n", - " Staphylococcus aureus_gapfilled_105\n", - " 124.171897\n", + " Staphylococcus aureus_gapfilled_345\n", + " 119.439103\n", " \n", " \n", - " Staphylococcus aureus_gapfilled_106\n", - " 114.238947\n", + " Staphylococcus aureus_gapfilled_161\n", + " 118.237318\n", " \n", " \n", "\n", @@ -128,16 +128,16 @@ ], "text/plain": [ " bio1\n", - "Staphylococcus aureus_gapfilled_0 118.953596\n", - "Staphylococcus aureus_gapfilled_1 106.883727\n", - "Staphylococcus aureus_gapfilled_10 117.959585\n", - "Staphylococcus aureus_gapfilled_100 145.714527\n", - "Staphylococcus aureus_gapfilled_101 117.819590\n", - "Staphylococcus aureus_gapfilled_102 128.540874\n", - "Staphylococcus aureus_gapfilled_103 126.180449\n", - "Staphylococcus aureus_gapfilled_104 137.812775\n", - "Staphylococcus aureus_gapfilled_105 124.171897\n", - "Staphylococcus aureus_gapfilled_106 114.238947" + "Staphylococcus aureus_gapfilled_518 118.238182\n", + "Staphylococcus aureus_gapfilled_860 122.523063\n", + "Staphylococcus aureus_gapfilled_900 104.905551\n", + "Staphylococcus aureus_gapfilled_434 148.353976\n", + "Staphylococcus aureus_gapfilled_343 134.100850\n", + "Staphylococcus aureus_gapfilled_706 116.982207\n", + "Staphylococcus aureus_gapfilled_175 137.352545\n", + "Staphylococcus aureus_gapfilled_85 110.488964\n", + "Staphylococcus aureus_gapfilled_345 119.439103\n", + "Staphylococcus aureus_gapfilled_161 118.237318" ] }, "execution_count": 3, @@ -163,20 +163,24 @@ "outputs": [ { "data": { + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], "source": [ "import matplotlib.pylab as plt\n", "fig, ax = plt.subplots()\n", - "plt.hist(biomass_fluxes['bio1'])\n", + "plt.hist(biomass_fluxes['bio1'], bins = 15, color = 'black', alpha = 0.4)\n", "ax.set_ylabel('# ensemble members')\n", "ax.set_xlabel('Flux through biomass reaction')\n", + "plt.savefig('pre_FBA_curation.svg')\n", "plt.show()" ] }, @@ -243,7 +247,7 @@ { "data": { "text/plain": [ - "0.8629187445521654" + "0.8684706250117109" ] }, "execution_count": 7, @@ -253,7 +257,7 @@ ], "source": [ "# create a regressor to predict biomass flux from reaction presence/absence\n", - "regressor = RandomForestRegressor(n_estimators=100,oob_score=True)\n", + "regressor = RandomForestRegressor(n_estimators=1000,oob_score=True)\n", "fit_regressor = regressor.fit(X=feature_frame[input_cols],y=feature_frame['bio1'])\n", "fit_regressor.oob_score_" ] @@ -309,43 +313,43 @@ " \n", " \n", " rxn01640_c_upper_bound\n", - " 0.131436\n", + " 0.129785\n", " \n", " \n", " rxn01640_c_lower_bound\n", - " 0.105932\n", + " 0.113434\n", " \n", " \n", " rxn12585_c_lower_bound\n", - " 0.066578\n", + " 0.044854\n", " \n", " \n", " rxn12585_c_upper_bound\n", - " 0.063844\n", + " 0.042830\n", " \n", " \n", - " rxn23244_c_lower_bound\n", - " 0.040210\n", + " rxn15617_c_lower_bound\n", + " 0.039388\n", " \n", " \n", - " rxn15617_c_upper_bound\n", - " 0.031893\n", + " rxn23244_c_lower_bound\n", + " 0.039336\n", " \n", " \n", - " rxn15617_c_lower_bound\n", - " 0.030840\n", + " rxn00602_c_lower_bound\n", + " 0.037124\n", " \n", " \n", - " rxn00602_c_lower_bound\n", - " 0.026529\n", + " rxn15617_c_upper_bound\n", + " 0.036253\n", " \n", " \n", " rxn00602_c_upper_bound\n", - " 0.026030\n", + " 0.032443\n", " \n", " \n", " rxn23244_c_upper_bound\n", - " 0.021880\n", + " 0.028802\n", " \n", " \n", "\n", @@ -353,16 +357,16 @@ ], "text/plain": [ " importance\n", - "rxn01640_c_upper_bound 0.131436\n", - "rxn01640_c_lower_bound 0.105932\n", - "rxn12585_c_lower_bound 0.066578\n", - "rxn12585_c_upper_bound 0.063844\n", - "rxn23244_c_lower_bound 0.040210\n", - "rxn15617_c_upper_bound 0.031893\n", - "rxn15617_c_lower_bound 0.030840\n", - "rxn00602_c_lower_bound 0.026529\n", - "rxn00602_c_upper_bound 0.026030\n", - "rxn23244_c_upper_bound 0.021880" + "rxn01640_c_upper_bound 0.129785\n", + "rxn01640_c_lower_bound 0.113434\n", + "rxn12585_c_lower_bound 0.044854\n", + "rxn12585_c_upper_bound 0.042830\n", + "rxn15617_c_lower_bound 0.039388\n", + "rxn23244_c_lower_bound 0.039336\n", + "rxn00602_c_lower_bound 0.037124\n", + "rxn15617_c_upper_bound 0.036253\n", + "rxn00602_c_upper_bound 0.032443\n", + "rxn23244_c_upper_bound 0.028802" ] }, "execution_count": 9, @@ -393,7 +397,7 @@ " ensemble.features.get_by_id('rxn01640_c_lower_bound').states[member] = 0\n", " ensemble.features.get_by_id('rxn01640_c_upper_bound').states[member] = 0\n", " \n", - "biomass_fluxes_post_curation = flux_balance.optimize_ensemble(ensemble,return_flux=\"bio1\")" + "biomass_fluxes_post_curation = flux_balance.optimize_ensemble(ensemble, return_flux=\"bio1\", num_processes = 4)" ] }, { @@ -403,7 +407,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEKCAYAAAAIO8L1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3XucVXW9//HXW0AHFEUY4qfinOF4zETuTqKWv1TS0MRr+tNKwQuU1/wdTS0z6GipmZcs0Sgv2A8t08xrekihJNME5K6mckYcUVQsJNHk8vn9sRawHffMrJnZe/aemffz8diPWeu71l7r82Vv5jNrfb/r+1VEYGZmVt8WpQ7AzMzKkxOEmZnl5QRhZmZ5OUGYmVleThBmZpaXE4SZmeXlBGFmZnk5QZiZWV5OEGZmllfXUgfQGpWVlVFdXV3qMKwJL6x8AYDd+uzW4D4rVqwAoF+/fm0Sk1lnNmfOnLcjom9T+7XrBFFdXc3s2bNLHYY1Yf/b9gdg5riZDe5z9dVXA3Deeee1QURmnZukV7Ls51tMZmaWlxOEmZnl5QRhZmZ5tes2CDMrH2vXrqWuro4PPvig1KFYqqKigv79+9OtW7cWvd8JwswKoq6ujp49e1JdXY2kUofT6UUEK1eupK6ujgEDBrToGL7FZGYF8cEHH9CnTx8nhzIhiT59+rTqis4JwswKxsmhvLT283CCMDOzvNwGYWZF8cADDxT0eGPGjMm0X11dHWeeeSZLlixhw4YNHHbYYVx11VVsueWWH9lv+fLlnHPOOdx9992NHu/QQw/ljjvuoFevXs2OedKkSWyzzTacf/75zX5vOXCCKGNT5kwp6PEm7DmhoMczKzcRwdFHH83pp5/Offfdx/r165kwYQIXX3wxV1111ab91q1bx4477thkcgB4+OGHixlyWfMtJjPrMB5//HEqKio4+eSTAejSpQvXXnstt9xyC5MnT+bwww/nwAMPZNSoUdTW1jJo0CAA1qxZw3HHHcfAgQM56qijGDly5KZhfKqrq3n77bepra1l9913Z/z48eyxxx4cfPDBvP/++wD8/Oc/59Of/jRDhw7lmGOOYc2aNaX5BygwJwgz6zAWL17Mnnvu+ZGybbfdlqqqKtatW8fcuXO5++67+eMf//iRfSZPnsz222/PkiVLuPTSS5kzZ07e47/44ouceeaZLF68mF69enHPPfcAcPTRR/PMM88wf/58dt99d26++ebiVLCNOUGYWadx0EEH0bt374+Vz5o1i+OPPx6AQYMGMWTIkLzvHzBgAMOGDQNgzz33pLa2FoBFixax3377MXjwYKZNm8bixYuLU4E25gRhZh3GwIEDP/bX/7vvvsuyZcvo2rUrW2+9dauOv9VWW21a7tKlC+vWrQNg3Lhx/PSnP2XhwoVMnDixwzxN7gRhZh3GqFGjWLNmDbfffjsA69ev57zzzmPcuHH06NGjwfd95jOf4a677gJgyZIlLFy4sFnnXb16NTvssANr165l2rRpLa9AmXEvJjMriqzdUgtJEvfeey9nnHEGl156KRs2bODQQw/lBz/4AXfeeWeD7zvjjDMYO3YsAwcO5FOf+hR77LEH2223XebzXnrppYwcOZK+ffsycuRIVq9eXYjqlJwiotQxtFhNTU105AmDOko3V08Y1Dk899xz7L777qUOo0XWr1/P2rVrqaio4OWXX+bzn/88L7zwwseenWiP8n0ukuZERE1T7/UVhJl1emvWrOGAAw5g7dq1RASTJ0/uEMmhtZwgzKzT69mzp6cvzsON1GZmlpcThJmZ5VW0BCHpFklvSlqUZ9t5kkJSZbouSddLeknSAkkjihWXmZllU8wriNuA0fULJe0MHAwsyyk+BNg1fU0AbixiXGZmlkHRGqkj4k+SqvNsuha4ALgvp+wI4PZI+tw+JamXpB0i4vVixWdmxVWKbtpdunRh8ODBrFu3jt13352pU6c2+oBcPtdddx0TJkxo9vtao7a2lieffJIvf/nLAMyePZvbb7+d66+/vs1iyKdN2yAkHQG8FhHz623aCXg1Z70uLTMzy6x79+7MmzePRYsWseWWW3LTTTc1+xjXXXddUUZj3TgsRz61tbXccccdm9ZrampKnhygDbu5SuoBfJvk9lJrjjOB5DYUVVVVBYjMWiPLX4mvr369yX2fqnuqYDGZAey3334sWLAAgGuuuYZbbrkFgNNOO41zzz2X9957j+OOO466ujrWr1/PJZdcwooVK1i+fDkHHHAAlZWVzJgx4yPHXL9+PRdeeCGPPPIIW2yxBePHj+fss8+murqa2bNnU1lZyezZszn//POZOXMmkyZN4uWXX2bp0qVUVVVx+eWXc+KJJ/Lee+8B8NOf/pR9992Xiy66iOeee45hw4YxduxYhg8fzo9+9CMefPBB3nnnHU455RSWLl1Kjx49mDJlCkOGDGHSpEksW7aMpUuXsmzZMs4991zOOeecgv4btuVzELsAA4D56Typ/YG5kvYCXgN2ztm3f1r2MRExBZgCyZPUxQzYzNqndevW8fvf/57Ro0czZ84cbr31Vp5++mkigpEjR/K5z32OpUuXsuOOO/LQQw8BsGrVKrbbbjuuueYaZsyYQWVl5ceOO2XKFGpra5k3bx5du3blnXfeaTKWJUuWMGvWLLp3786aNWuYPn06FRUVvPjii5xwwgnMnj2bK664YlNCAJg5c+am90+cOJHhw4fzu9/9jscff5yTTjqJefPmAfD8888zY8YMVq9ezW677cbpp59Ot27dCvAvmGizW0wRsTAiPhER1RFRTXIbaUREvAHcD5yU9mbaG1jl9gcza67333+fYcOGUVNTQ1VVFaeeeiqzZs3iqKOOYuutt2abbbbh6KOP5oknnmDw4MFMnz6dCy+8kCeeeCLT2Et/+MMf+NrXvkbXrsnf1vmGDq/v8MMPp3v37gCsXbuW8ePHM3jwYI499liWLFnS5PtnzZrFiSeeCMCBBx7IypUreffddwH44he/yFZbbUVlZSWf+MQnWLFiRZPHa46iXUFIuhPYH6iUVAdMjIiGZtF4GDgUeAlYA5xcrLjMrOPa2AaRxSc/+Unmzp3Lww8/zHe+8x1GjRrFd7/73Y/sc++99/K9730PgF/84hcNHqtr165s2LAB4GNDfecOMX7ttdfSr18/5s+fz4YNG6ioqMgUa0MaGn68UIrZi+mEJrZX5ywHcGaxYmmv5i+o35bfSns2vYtZR7Pffvsxbtw4LrroIiKCe++9l1/+8pcsX76c3r1789WvfpVevXptSgA9e/Zk9erVVFZWctRRR3HUUUdtOtZBBx3Ez372Mw444IBNt5h69+5NdXU1c+bM4ZBDDtk0y1w+q1aton///myxxRZMnTqV9evXf+ScDcU/bdo0LrnkEmbOnEllZSXbbrttAf+FGuaxmMysKEo1enB9I0aMYNy4cey1115A0kg9fPhwHn30Ub75zW+yxRZb0K1bN268MXn8asKECYwePZodd9zxY43Up512Gn/7298YMmQI3bp1Y/z48Zx11llMnDiRU089lUsuuYT999+/wVjOOOMMjjnmGG6/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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -452,15 +456,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here, we show the old distribution in red and the new distribution in blue, with vertical lines at the mean in the same color. As you can see, by resolving the identity of the `hutF`-encoded enzyme, we've reduced the mean and range of predicted flux through biomass. The reduction here is modest, but the process can be repeated for the other important features we identified to continue to refine the distribution and improve the reconstruction in a rational way." + "Here, we show the old distribution in gray and the new distribution in green, with vertical lines at the mean in the same color. As you can see, by resolving the identity of the `hutF`-encoded enzyme, we've reduced the mean and range of predicted flux through biomass. The reduction here is modest, but the process can be repeated for the other important features we identified to continue to refine the distribution and improve the reconstruction in a rational way." ] } ], "metadata": { "kernelspec": { - "display_name": "medusa_dev_1", + "display_name": "medusa_devel", "language": "python", - "name": "medusa_dev_1" + "name": "medusa_devel" }, "language_info": { "codemirror_mode": { @@ -472,9 +476,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.6" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/parallel_fba.ipynb b/docs/parallel_fba.ipynb index 4e82564..0aa70b4 100644 --- a/docs/parallel_fba.ipynb +++ b/docs/parallel_fba.ipynb @@ -31,21 +31,17 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1 processors: 175.3236665725708s\n", - "2 processors: 95.32818102836609s\n", - "3 processors: 68.18270087242126s\n", - "4 processors: 56.23384976387024s\n", - "5 processors: 53.41068649291992s\n", - "6 processors: 52.80183672904968s\n", - "7 processors: 50.88461422920227s\n", - "8 processors: 51.96336841583252s\n" + "1 processors: 89.6445517539978s\n", + "2 processors: 45.74347114562988s\n", + "3 processors: 33.75276780128479s\n", + "4 processors: 27.72901201248169s\n" ] } ], @@ -53,7 +49,7 @@ "import time\n", "\n", "runtimes = {}\n", - "for num_processes in range(1,9):\n", + "for num_processes in range(1,5):\n", " t0 = time.time()\n", " flux_balance.optimize_ensemble(ensemble, num_processes = num_processes)\n", " t1 = time.time()\n", @@ -68,17 +64,7 @@ "outputs": [ { "data": { - "text/plain": [ - "Text(0, 0.5, 'Runtime (s)')" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEKCAYAAAAIO8L1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAFzdJREFUeJzt3X20XXV95/H3hyCgCEXlyopAGkBkFrZjxEC1iI2iDj4sxS5FshRRqZEZcNCqHdQuazvLllZRl7ZCI9BAy6AoorQyKmMVtKNCEhHCkwIGCRNJBBSfQAPf+WPvK8frTu7JTc7dh+T9Wmuvs/dvP33vJdzP2U+/napCkqSpdui7AEnSeDIgJEmdDAhJUicDQpLUyYCQJHUyICRJnQwISVInA0KS1MmAkCR12rHvArbEnnvuWfPnz++7DEl6WFmxYsUPq2piuuUe1gExf/58li9f3ncZkvSwkuS2YZbzFJMkqZMBIUnqZEBIkjoZEJKkTgaEJKnTyAIiyTlJ1iVZNdD2iSRXt8PqJFe37fOT/GJg3pmjqkuSNJxR3ua6DPh74LzJhqp65eR4ktOBHw8sf0tVLRhhPZKkzTCygKiqK5LM75qXJMAxwHNGtX9J0pbp6xrEEcCdVfXdgbb9knwryeVJjuipLklSq68nqRcDFwxMrwXmVdVdSZ4GfCbJk6vq3qkrJlkCLAGYN2/eFhUx/9TPbdH6W2L1aS/qbd+SNIxZP4JIsiPwx8AnJtuq6v6quqsdXwHcAjypa/2qWlpVC6tq4cTEtF2JSJJmqI9TTM8FbqyqNZMNSSaSzGnH9wcOBG7toTZJUmuUt7leAHwdOCjJmiQntLOO5TdPLwE8C7imve31U8CJVXX3qGqTJE1vlHcxLd5I+2s72i4CLhpVLZKkzeeT1JKkTgaEJKmTASFJ6mRASJI6GRCSpE4GhCSpkwEhSepkQEiSOhkQkqROBoQkqZMBIUnqZEBIkjoZEJKkTgaEJKmTASFJ6mRASJI6GRCSpE4GhCSpkwEhSepkQEiSOhkQkqROIwuIJOckWZdk1UDbe5LckeTqdnjhwLx3JLk5yU1J/suo6pIkDWeURxDLgKM62j9YVQva4VKAJAcDxwJPbtf5aJI5I6xNkjSNkQVEVV0B3D3k4i8FPl5V91fV94CbgcNGVZskaXp9XIM4Ock17Smox7RtewO3Dyyzpm2TJPVktgPiDOAAYAGwFjh9czeQZEmS5UmWr1+/fmvXJ0lqzWpAVNWdVfVAVT0IfIyHTiPdAew7sOg+bVvXNpZW1cKqWjgxMTHagiVpOzarAZFk7sDky4DJO5wuAY5NsnOS/YADgStnszZJ0m/acVQbTnIBsAjYM8ka4C+ARUkWAAWsBt4IUFXXJbkQuB7YAJxUVQ+MqjZJ0vRGFhBVtbij+exNLP9e4L2jqkeStHl8klqS1MmAkCR1MiAkSZ0MCElSJwNCktTJgJAkdTIgJEmdDAhJUicDQpLUyYCQJHUyICRJnQwISVInA0KS1MmAkCR1MiAkSZ0MCElSJwNCktTJgJAkdTIgJEmdDAhJUqeRBUSSc5KsS7JqoO19SW5Mck2Si5Ps0bbPT/KLJFe3w5mjqkuSNJxRHkEsA46a0nYZ8HtV9Z+B7wDvGJh3S1UtaIcTR1iXJGkIIwuIqroCuHtK2xerakM7+Q1gn1HtX5K0Zfq8BvF64H8PTO+X5FtJLk9yRF9FSZIaO/ax0yTvAjYA57dNa4F5VXVXkqcBn0ny5Kq6t2PdJcASgHnz5s1WyZK03Zn1I4gkrwVeDLyqqgqgqu6vqrva8RXALcCTutavqqVVtbCqFk5MTMxS1ZK0/ZnVgEhyFPBnwEuq6ucD7RNJ5rTj+wMHArfOZm2SpN80slNMSS4AFgF7JlkD/AXNXUs7A5clAfhGe8fSs4C/SvIr4EHgxKq6u3PDkqRZMbKAqKrFHc1nb2TZi4CLRlWLJGnz+SS1JKmTASFJ6mRASJI6GRCSpE4GhCSpkwEhSepkQEiSOg31HESSxwOHA08AfgGsApZX1YMjrE2S1KNNBkSSZwOnAo8FvgWsA3YBjgYOSPIp4PSuTvUkSQ9v0x1BvBB4Q1V9f+qMJDvSdLr3PHwKWpK2OZsMiKp6+ybmbQA+s9UrkiSNhaEuUic5JcnuaZydZGWS54+6OElSf4a9i+n17XWG5wOPAY4DThtZVZKk3g0bEGk/Xwj8c1VdN9AmSdoGDRsQK5J8kSYgvpBkN5r3NkiStlHDvg/iBGABcGtV/TzJ44DXja4sSVLfNnkEkWQ+QFU9WFUrq+pH7fRdVXVNe9F6n9GXKUmabdMdQbwvyQ7AZ4EVwHqaB+WeCDwbOJLmVaJrRlmkJGn2TfccxCuSHAy8Cng9MBf4OXADcCnw3qq6b+RVSpJm3bTXIKrqeuBds1CLJGmM2JurJKnTSAMiyTlJ1iVZNdD22CSXJflu+/mYtj1JPpzk5iTXJDlklLVJkjZt1EcQy4CjprSdCnypqg4EvtROA7wAOLAdlgBnjLg2SdImDNsXU5K8Osm72+l5SQ6bbr2qugK4e0rzS4Fz2/FzaboOn2w/rxrfAPZIMneY+iRJW9+wRxAfBZ4BLG6nfwL8wwz3uVdVrW3HfwDs1Y7vDdw+sNyatk2S1INhA+IPquok4D6AqroH2GlLd15VBdTmrJNkSZLlSZavX79+S0uQJG3EsAHxqyRzaP+YJ5lg5n0x3Tl56qj9XNe23wHsO7DcPm3bb6iqpVW1sKoWTkxMzLAESdJ0hg2IDwMXA49P8l7ga8Bfz3CflwDHt+PH0zylPdn+mvZ6x9OBHw+cipIkzbKhOuurqvOTrKDpWiPA0VV1w3TrJbkAWATsmWQNTbccpwEXJjkBuA04pl38UpreYm+meVrbzgAlqUfD9uYKcCfw1XadRyY5pKpWbmqFqlq8kVlHdixbwEmbUY8kaYSGCogk/xN4LXALD11ULuA5oylL80/9XG/7Xn3ai3rbt6TxMewRxDHAAVX1y1EWI0kaH8NepF4F7DHKQiRJ42XYI4i/Ab7V9ql0/2RjVb1kJFVJkno3bECcC/wtcC2+i1qStgvDBsTPq+rDI61EkjRWhg2Iryb5G5qH2QZPMW3yNldJ0sPXsAHx1Pbz6QNt3uYqSduwYZ+kfvaoC5EkjZdNBkSSV1fVvyT50675VfWB0ZQlSerbdEcQu7afu3XM26xuuiVJDy+bDIiq+sd29P9U1X8Mzkty+MiqkiT1btgnqT8yZJskaRsx3TWIZwB/CExMuQ6xOzBnlIVJkvo13TWInYBHt8sNXoe4F3j5qIqSJPVvumsQlwOXJ1lWVbfNUk2SpDEw7INyOydZCswfXKeqfFBOkrZRwwbEJ4EzgbOAB0ZXjiRpXAwbEBuq6oyRViJJGivD3ub6r0n+W5K5SR47OYy0MklSr4Y9gji+/Xz7QFsB+2/dciRJ42LYzvr221o7THIQ8ImBpv2Bd9O80vQNwPq2/Z1VdenW2q8kafMMFRBJXtPVXlXnbe4Oq+omYEG73TnAHcDFwOuAD1bV+zd3m5KkrW/YU0yHDozvAhwJrAQ2OyCmOBK4papuS7KFm5IkbU3DnmJ60+B0kj2Aj2+F/R8LXDAwfXJ7tLIceGtV3TN1hSRLgCUA8+bN2wolSJK6DHsX01Q/A7boukSSnYCX0DxjAXAGcADN6ae1wOld61XV0qpaWFULJyYmtqQESdImDHsN4l956P0POwAH89Af9pl6AbCyqu4EmPxs9/cx4N+2cPuSpC0w7DWIwQvHG4DbqmrNFu57MQOnl5LMraq17eTLgFVbuH1J0hYY9hrE5YPTSXZI8qqqOn8mO02yK/A84I0DzX+XZAHNkcrqKfMkSbNsuvdB7A6cBOwNXAJc1k6/Dfg2MKOAqKqfAY+b0nbcTLYlSRqN6Y4g/hm4B/g68CfAO4EAR1fV1SOuTZLUo+kCYv+q+n2AJGfR3F00r6ruG3llkqReTRcQv5ocqaoHkqwxHDT/1M/1tu/Vp72ot31L25vpAuIpSe5txwM8sp0OUFW1+0irkyT1ZrpXjs6ZrUIkSeNlpk9SS5K2cQaEJKmTASFJ6mRASJI6GRCSpE4GhCSpkwEhSepkQEiSOhkQkqROBoQkqZMBIUnqNOwrR6WHBXualbYejyAkSZ0MCElSJwNCktSpt2sQSVYDPwEeADZU1cIkjwU+AcwHVgPHVNU9fdUobU3jfH1knGtTf/q+SP3sqvrhwPSpwJeq6rQkp7bT/6Of0iRp07b1YB23U0wvBc5tx88Fju6xFknarvV5BFHAF5MU8I9VtRTYq6rWtvN/AOzVW3WSxsK2/i19nPUZEM+sqjuSPB64LMmNgzOrqtrw+A1JlgBLAObNmzc7lUrSdqi3U0xVdUf7uQ64GDgMuDPJXID2c13HekuramFVLZyYmJjNkiVpu9JLQCTZNcluk+PA84FVwCXA8e1ixwOf7aM+SVJ/p5j2Ai5OMlnD/6qqzye5CrgwyQnAbcAxPdUnSdu9XgKiqm4FntLRfhdw5OxXJEmaatxuc5UkjQkDQpLUyYCQJHUyICRJnQwISVInA0KS1MmAkCR1MiAkSZ0MCElSJwNCktTJgJAkdTIgJEmdDAhJUicDQpLUyYCQJHUyICRJnQwISVInA0KS1MmAkCR1MiAkSZ0MCElSp1kPiCT7JvlykuuTXJfklLb9PUnuSHJ1O7xwtmuTJD1kxx72uQF4a1WtTLIbsCLJZe28D1bV+3uoSZI0xawHRFWtBda24z9JcgOw92zXIUnatF6vQSSZDzwV+GbbdHKSa5Kck+QxG1lnSZLlSZavX79+liqVpO1PbwGR5NHARcCbq+pe4AzgAGABzRHG6V3rVdXSqlpYVQsnJiZmrV5J2t70EhBJHkETDudX1acBqurOqnqgqh4EPgYc1kdtkqRGH3cxBTgbuKGqPjDQPndgsZcBq2a7NknSQ/q4i+lw4Djg2iRXt23vBBYnWQAUsBp4Yw+1SZJafdzF9DUgHbMune1aJEkb55PUkqROBoQkqZMBIUnqZEBIkjoZEJKkTgaEJKmTASFJ6mRASJI6GRCSpE4GhCSpkwEhSepkQEiSOhkQkqROBoQkqZMBIUnqZEBIkjoZEJKkTgaEJKmTASFJ6mRASJI6jV1AJDkqyU1Jbk5yat/1SNL2aqwCIskc4B+AFwAHA4uTHNxvVZK0fRqrgAAOA26uqlur6pfAx4GX9lyTJG2Xxi0g9gZuH5he07ZJkmZZqqrvGn4tycuBo6rqT9rp44A/qKqTB5ZZAixpJw8Cbpr1Qht7Aj/sad/TsbaZsbaZsbaZ6bO2362qiekW2nE2KtkMdwD7Dkzv07b9WlUtBZbOZlFdkiyvqoV919HF2mbG2mbG2mZmnGubNG6nmK4CDkyyX5KdgGOBS3quSZK2S2N1BFFVG5KcDHwBmAOcU1XX9VyWJG2XxiogAKrqUuDSvusYQu+nuTbB2mbG2mbG2mZmnGsDxuwitSRpfIzbNQhJ0pgwIDZTknOSrEuyqu9apkqyb5IvJ7k+yXVJTum7pklJdklyZZJvt7X9Zd81TZVkTpJvJfm3vmsZlGR1kmuTXJ1ked/1DEqyR5JPJbkxyQ1JntF3TQBJDmp/X5PDvUne3Hddk5K8pf3/YFWSC5Ls0ndNXTzFtJmSPAv4KXBeVf1e3/UMSjIXmFtVK5PsBqwAjq6q63sujSQBdq2qnyZ5BPA14JSq+kbPpf1akj8FFgK7V9WL+65nUpLVwMKqGrv7+ZOcC3y1qs5q7zx8VFX9qO+6BrVd+NxB80zVbWNQz940//4PrqpfJLkQuLSqlvVb2W/zCGIzVdUVwN1919GlqtZW1cp2/CfADYzJk+jV+Gk7+Yh2GJtvJ0n2AV4EnNV3LQ8XSX4HeBZwNkBV/XLcwqF1JHDLOITDgB2BRybZEXgU8P96rqeTAbGNSjIfeCrwzX4reUh7CudqYB1wWVWNTW3Ah4A/Ax7su5AOBXwxyYq2J4FxsR+wHvin9tTcWUl27buoDscCF/RdxKSqugN4P/B9YC3w46r6Yr9VdTMgtkFJHg1cBLy5qu7tu55JVfVAVS2geUL+sCRjcYouyYuBdVW1ou9aNuKZVXUITS/HJ7WnOcfBjsAhwBlV9VTgZ8BYddHfnvZ6CfDJvmuZlOQxNJ2Q7gc8Adg1yav7raqbAbGNac/vXwScX1Wf7rueLu1piC8DR/VdS+tw4CXtuf6PA89J8i/9lvSQ9hsnVbUOuJim1+NxsAZYM3Ak+CmawBgnLwBWVtWdfRcy4LnA96pqfVX9Cvg08Ic919TJgNiGtBeCzwZuqKoP9F3PoCQTSfZoxx8JPA+4sd+qGlX1jqrap6rm05yO+PeqGotvdEl2bW84oD1983xgLO6gq6ofALcnOahtOhLo/YaIKRYzRqeXWt8Hnp7kUe3/s0fSXC8cOwbEZkpyAfB14KAka5Kc0HdNAw4HjqP5Bjx5e98L+y6qNRf4cpJraPrcuqyqxup20jG1F/C1JN8GrgQ+V1Wf77mmQW8Czm//uy4A/rrnen6tDdTn0XxDHxvtEdengJXAtTR/h8fyqWpvc5UkdfIIQpLUyYCQJHUyICRJnQwISVInA0KS1MmAUO+SVJLTB6bfluQ9W2nby5K8fGtsa5r9vKLtzfTLo96XNFsMCI2D+4E/TrJn34UMajtSG9YJwBuq6tkz3Necmaw3apv5O9A2xoDQONhA86DQW6bOmHoEkOSn7eeiJJcn+WySW5OcluRV7Tsnrk1ywMBmnptkeZLvtP0uTXYc+L4kVyW5JskbB7b71SSX0PFUcJLF7fZXJfnbtu3dwDOBs5O8b8ryi5JckeRzSW5KcmaSHSZ/liSntw/BPSPJkW2nd9emee/Izu1yhyb5v2nepXFlkt02Uf/cdn9XtzUe0S67rJ2+Nslb2mUXJPlGu/7FbR9BJPlKkg+leffEKe3R0ap2/1fM5D+wHqaqysGh14Hm/Rq7A6uB3wHeBrynnbcMePngsu3nIuBHNE9o70zT3/9ftvNOAT40sP7nab4MHUjTf9AuwBLgz9tldgaW03Setoim07n9Oup8Ak03CRM0HdX9O837NgC+QvPOhqnrLALuA/YH5gCXTf48NL20HtOO7wLcDjypnT4PeDOwE3ArcGjbvnu7743V/1bgXW37HGA34Gk0T65P1rRH+3kN8Eft+F8N/M6+Anx0YPlrgb0H13XYPgaPIDQWqul19jzgv2/GaldV8w6M+4FbgMkuk68F5g8sd2FVPVhV36X5Y/ufaPo0ek3b/fg3gcfRBAjAlVX1vY79HQp8pZpO1jYA59O8D2E6V1bVrVX1AE2/QM9s2x+g6VgR4CCaDty+006f2277IGBtVV0Fze+p3ffG6r8KeF17Def3q3kvyK3A/kk+kuQo4N4073LYo6oun7K/SZ8YGP8PYFmSN9CEjrYTBoTGyYdozuUPvlNgA+2/0/bUzE4D8+4fGH9wYPpBmm/Zk6b2J1NAgDdV1YJ22K8e6pP/Z1v0U/y2rv0D3NeGxkx01l/NC62eRXNEtSzJa6rqHuApNEcGJzLcS5F+/TuoqhOBPwf2BVYkedwMa9bDjAGhsVFVdwMX0oTEpNU0p0ig6df/ETPY9CuS7NBel9gfuAn4AvBf2+7RSfKkTP+ymyuBP0qyZ3tReTFw+TTrQPPui/3agHslzesmp7oJmJ/kie30ce22bwLmJjm0rXO39sJxZ/1Jfhe4s6o+RhMEh7QX/3eoqoto/tAfUlU/Bu5JcsSU/f2WJAdU1Ter6t00Lwjad4ifWdsA71DQuDkdOHlg+mPAZ9sLuZ9nZt/uv0/zx3134MSqui/JWTSnoVYmCc0fvqM3tZGqWpvkVJp3WYSmZ9XPDrH/q4C/B57Yrntxx7bvS/I64JNtAFwFnFlVv0zySuAjabpJ/wXN+wQ2Vv8i4O1JfkVzbec1NK+d/afJi+PAO9rP44EzkzyK5jTU6zZS//uSHNj+zF8Cvj3Ez6xtgL25SiOUZBHwtqp6cd+1SJvLU0ySpE4eQUiSOnkEIUnqZEBIkjoZEJKkTgaEJKmTASFJ6mRASJI6/X9cXkiY5bUYrgAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -92,9 +78,14 @@ "source": [ "import matplotlib.pylab as plt\n", "fig,ax = plt.subplots()\n", - "plt.bar(runtimes.keys(), runtimes.values(), align = 'center')\n", + "plt.bar(runtimes.keys(), runtimes.values(), align = 'center', alpha = 0.6)\n", "plt.xlabel('Number of processors')\n", - "plt.ylabel('Runtime (s)')" + "plt.ylabel('Runtime (s)')\n", + "ax.set_xlabel('Number of processors',size=16)\n", + "ax.set_ylabel('Ensemble Flux Balance \\nAnalysis runtime (s)',size=16)\n", + "ax.tick_params(axis='both', which='major', labelsize=12)\n", + "ax.tick_params(axis='both', which='minor', labelsize=12)\n", + "plt.savefig('parallel_fba.svg')" ] }, { @@ -107,9 +98,9 @@ ], "metadata": { "kernelspec": { - "display_name": "medusa_dev_1", + "display_name": "medusa_devel", "language": "python", - "name": "medusa_dev_1" + "name": "medusa_devel" }, "language_info": { "codemirror_mode": { @@ -121,9 +112,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.6" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/parallel_fba.svg b/docs/parallel_fba.svg new file mode 100644 index 0000000..25de651 --- /dev/null +++ b/docs/parallel_fba.svg @@ -0,0 +1,1067 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/post_FBA_curation.png b/docs/post_FBA_curation.png new file mode 100644 index 0000000..4ec07dd Binary files /dev/null and b/docs/post_FBA_curation.png differ diff --git a/docs/post_FBA_curation.svg b/docs/post_FBA_curation.svg new file mode 100644 index 0000000..f60f55b --- /dev/null +++ b/docs/post_FBA_curation.svg @@ -0,0 +1,1302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/pre_FBA_curation.svg b/docs/pre_FBA_curation.svg new file mode 100644 index 0000000..91681fe --- /dev/null +++ b/docs/pre_FBA_curation.svg @@ -0,0 +1,1060 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/requirements.txt b/docs/requirements.txt index 4d663ac..d8c68c0 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -2,7 +2,7 @@ alabaster==0.7.12 astroid==2.1.0 Babel==2.6.0 backcall==0.1.0 -bleach==3.0.2 +bleach==3.1.4 certifi==2018.10.15 chardet==3.0.4 cobra==0.13.4 @@ -47,7 +47,7 @@ pandocfilters==1.4.2 parso==0.3.1 pexpect==4.6.0 pickleshare==0.7.5 -Pillow==5.3.0 +Pillow==6.2.0 pipdeptree==0.13.1 pipenv==2018.10.13 pkginfo==1.4.2 @@ -89,9 +89,9 @@ tornado==5.1.1 tqdm==4.28.1 traitlets==4.3.2 twine==1.12.1 -typed-ast==1.3.0 +typed-ast==1.3.2 Unidecode==1.0.23 -urllib3==1.24.1 +urllib3==1.24.2 virtualenv==16.1.0 virtualenv-clone==0.4.0 wcwidth==0.1.7 diff --git a/docs/stats_compare.ipynb b/docs/stats_compare.ipynb index c1c851c..70e98cd 100644 --- a/docs/stats_compare.ipynb +++ b/docs/stats_compare.ipynb @@ -334,9 +334,9 @@ ], "metadata": { "kernelspec": { - "display_name": "medusa_dev_1", + "display_name": "medusa_devel", "language": "python", - "name": "medusa_dev_1" + "name": "medusa_devel" }, "language_info": { "codemirror_mode": { @@ -348,9 +348,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.6" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/medusa/test/data/benchmarking/Staphylococcus_aureus_base_model.pickle b/medusa/test/data/benchmarking/Staphylococcus_aureus_base_model.pickle new file mode 100644 index 0000000..9b62bcb Binary files /dev/null and b/medusa/test/data/benchmarking/Staphylococcus_aureus_base_model.pickle differ diff --git a/medusa/test/data/benchmarking/Staphylococcus_aureus_ensemble1000.pickle b/medusa/test/data/benchmarking/Staphylococcus_aureus_ensemble1000.pickle new file mode 100644 index 0000000..7c87f58 Binary files /dev/null and b/medusa/test/data/benchmarking/Staphylococcus_aureus_ensemble1000.pickle differ diff --git a/requirements.txt b/requirements.txt index aa95f3a..4c72a9c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ alabaster==0.7.12 Babel==2.6.0 backcall==0.1.0 -bleach==3.0.2 +bleach==3.1.4 certifi==2018.10.15 chardet==3.0.4 cobra==0.13.4 @@ -45,7 +45,7 @@ pandocfilters==1.4.2 parso==0.3.1 pexpect==4.6.0 pickleshare==0.7.5 -Pillow==5.3.0 +Pillow==6.2.0 pipdeptree==0.13.1 pipenv==2018.10.13 ply==3.11 @@ -73,7 +73,7 @@ terminado==0.8.1 testpath==0.4.2 tornado==5.1.1 traitlets==4.3.2 -urllib3==1.24.1 +urllib3==1.24.2 virtualenv==16.1.0 virtualenv-clone==0.4.0 wcwidth==0.1.7