Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Maximum ENTropy Of the Stoichiometric matrix (MENTOS) ##\n",
- "\n",
- "If we know the standard chemical potentials $\\mu^0$ of the metabolites, the growth rate $v_0$, the external metabolite concentrations, $\\vec{c}_{ext}$, and we assume a maximum entropy principle, then we can solve for the internal metabolite concentrations $\\vec{c}$, the steady state fluxes, $\\vec{v}$ and the forward and reverse reaction rates $\\vec{r_{+}}$ and $\\vec{r_{-}}$.\n",
- "\n",
- "Reaction likelihoods, $L_j$, are based on the following ratio: \n",
- "\n",
- "$${L}_j = K_{j} /Q_j$$\n",
- "\t \n",
- "where $K_{j}$ is the equilibrium constant \n",
- "$$K_{j} = \\frac{\\prod^{products}_i (q_i)^{\\gamma_i}}{\\prod^{reactants}_i(q_i)^{\\gamma_i}} = \\frac{\\prod^{products}_i (e^{-\\frac{\\mu^0_i}{RT}})^{\\gamma_i}}{\\prod^{reactants}_i(e^{-\\frac{\\mu^0_i}{RT}})^{\\gamma_i}}$$ \n",
- "and $Q_j$ is the reaction quotient, $$ Q_j = \\frac{\\prod^{products}_i c_i^{\\gamma_i}}{\\prod^{reactants}_ic_i^{\\gamma_i}}$$\n",
- " where $\\gamma_i$ are the stoichiometric coefficients, $\\mu^0_i = -RT\\log q_i$ are the standard chemical potentials and $c_i$ are the chemical concentrations of the reactants and products of each reaction $j$. \n",
- "\n",
- "### Matrix form of the Equilibrium constant ###\n",
- "The log of the equilibrium constant is defined for each reaction $j$, as follows:\n",
- " $$\\begin{eqnarray}\n",
- " \\log K_{j} \n",
- " & = & -\\frac{1}{RT}(\\sum^{products}_i\\gamma_i\\mu_i^0 - \\sum^{reactants}_i\\gamma_i\\mu_i^0)\\\\\n",
- " \\end{eqnarray}$$\n",
- "\n",
- "In matrix form,\n",
- "$$ \\log\\vec{K} = -\\frac{1}{RT}S^T\\cdot \\vec{\\mu^0}$$\n",
- "$S$ is the $m\\times n$ matrix of stoichiometric coefficients, where\n",
- "\n",
- "$$\n",
- "s_{ij} =\n",
- "\\left\\{\n",
- " \\begin{array}{ll}\n",
- " \\gamma_{ij} & \\mbox{if metabolite $i$ is a product of reaction $j$ } \\\\\n",
- " -\\gamma_{ij} & \\mbox{if metabolite $i$ is a reactant of reaction $j$,} \\\\\n",
- " 0 & \\mbox{otherwise} \\\\\n",
- " \\end{array}\n",
- " \\right.\n",
- " $$\n",
- "\n",
- "### Matrix form of the Reaction Quotient ###\n",
- "\n",
- " The log of the reaction quotient is defined for each reaction, as follows:\n",
- " \n",
- " \n",
- " $$ \\log Q_j = \\sum^{products}_i\\gamma_i\\log c_i - \\sum^{reactants}_i\\gamma_i\\log c_i.$$\n",
- " \n",
- "In matrix form, \n",
- " \n",
- "$$\\log\\vec{Q} = S^T\\cdot\\log \\vec{c}$$\n",
- "\n",
- "### Matrix form of the reaction likelihood ratio ###\n",
- "The log of the likelihood ratio is defined for each reaction $r$ as follows:\n",
- "$$\\log {L}_j = \\log K_{j} - \\log Q_j$$\n",
- "\n",
- " Placing the likelihood ratio in matrix notation,\n",
- " $$\\begin{eqnarray}\n",
- " \\log \\vec{L} & = & \\log \\vec{K} - \\log \\vec{Q} \\\\\n",
- " & = & -\\frac{1}{RT}S^T\\cdot\\vec{\\mu^0} - S^T\\cdot\\log\\vec{c} \\\\\n",
- " \\end{eqnarray}$$\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "### Consider the entropy maximization problem:###\n",
- "$$ \\begin{array}{ll}\n",
- " \\underset{\\vec{c}, \\vec{v}}{\\mbox{maximize}} & \\sum_j\\mbox{entropy}(L_j) \\\\\n",
- " \\mbox{subject to} & \\log \\vec{L} \\geq -\\frac{1}{RT}S^T\\cdot\\vec{\\mu^0} - S^T\\cdot\\log\\vec{c} \\\\\n",
- " & S\\cdot \\vec{L} = 0 \\\\\n",
- " & \\log \\vec{c} \\geq \\log c_L \\\\\n",
- " & \\log A_{ext} = \\log E_{ext} = \\log c_U \\\\\n",
- " & \\log E_{ext} = \\log D_{ext} = \\log c_L \\\\\n",
- " \\end{array}$$\n",
- " \n",
- "The likelihood $L_j$ is just the ratio of the reaction forward and reverse rates $r_{+j}$ and $r_{-j}$.\n",
- "$$\\begin{eqnarray}\n",
- "L_j &=& \\frac{r_{+j}}{r_{-j}} \\\\\n",
- "\\end{eqnarray}$$\n",
- "The net flux $v_j$ is the difference of the forward and reverse rates:\n",
- "$$\\begin{eqnarray}\n",
- "v_j &=& r_{+j} - r_{-j} \\\\\n",
- "\\end{eqnarray}$$\n",
- "\n",
- "Solving for the forward reaction rates $r_{+j}$ and $r_{-j}$:\n",
- "$$\\begin{eqnarray}\n",
- "r_{-j} & = & \\frac{r_{+j}}{L_j} \\\\\n",
- " r_{+j} - r_{-j} & = & v_j \\\\\n",
- " r_{+j} - \\frac{r_{+j}}{L_j} & = & v_j \\\\\n",
- "r_{+j}(1 -\\frac{1}{L_j}) & = & v_j \\\\\n",
- "r_{+j} & = & \\frac{v_j}{1-\\frac{1}{L_j}} \\\\\n",
- " & = & \\frac{L_jv_j}{L_j - 1} \\\\\n",
- "r_{-j} & = & \\frac{v_j}{L_j - 1} \\\\\n",
- "\\end{eqnarray}$$\n",
- "\n",
- "Finally, the net flux is equal to the product of a reference flux $v_0$ and the normalized likelihoods\n",
- "$$\\begin{eqnarray}\n",
- "v_j &=& v_0\\frac{L_j}{\\sum_i L_j} \\\\\n",
- "\\end{eqnarray}$$\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Example: S. Cerevisae ##\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 66,
- "metadata": {
- "collapsed": false,
- "scrolled": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "['GLCi', 'G6P', 'F6P', 'FBP', 'DHAP', 'GAP', 'BPG', '3PG', '2PG', 'PEP', 'PYR', 'AcALD', 'ETH', 'ATP', 'ADP', 'NAD+', 'NADH', 'Pi', 'CO2', 'H2O']\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>UGLY_1</th>\n",
- " <th>UGLY_2</th>\n",
- " <th>UGLY_3</th>\n",
- " <th>UGLY_4</th>\n",
- " <th>UGLY_5</th>\n",
- " <th>DGLY_1</th>\n",
- " <th>DGLY_2</th>\n",
- " <th>DGLY_3</th>\n",
- " <th>DGLY_4</th>\n",
- " <th>DGLY_5</th>\n",
- " <th>...</th>\n",
- " <th>DGLY_7</th>\n",
- " <th>EXTR_1</th>\n",
- " <th>EXTR_2</th>\n",
- " <th>EXTR_3</th>\n",
- " <th>EXTR_4</th>\n",
- " <th>EXTR_5</th>\n",
- " <th>EXTR_6</th>\n",
- " <th>EXTR_7</th>\n",
- " <th>EXTR_8</th>\n",
- " <th>EXTR_9</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>GLCi</th>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>G6P</th>\n",
- " <td>1.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>F6P</th>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>FBP</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DHAP</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>GAP</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>1.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>BPG</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>3PG</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>2PG</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>PEP</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>PYR</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>AcALD</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ETH</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ATP</th>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ADP</th>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>NAD+</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>NADH</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>Pi</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>CO2</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>H2O</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>GLCi_ext</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ATP_ext</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ADP_ext</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>NAD+_ext</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>NADH_ext</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>Pi_ext</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>CO2_ext</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>H2O_ext</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>-1.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ETH_ext</th>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>...</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " <td>1.000</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "<p>29 rows × 21 columns</p>\n",
- "</div>"
- ],
- "text/plain": [
- " UGLY_1 UGLY_2 UGLY_3 UGLY_4 UGLY_5 DGLY_1 DGLY_2 DGLY_3 \\\n",
- "GLCi -1.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "G6P 1.000 -1.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "F6P 0.000 1.000 -1.000 0.000 0.000 0.000 0.000 0.000 \n",
- "FBP 0.000 0.000 1.000 -1.000 0.000 0.000 0.000 0.000 \n",
- "DHAP 0.000 0.000 0.000 1.000 -1.000 0.000 0.000 0.000 \n",
- "GAP 0.000 0.000 0.000 1.000 1.000 -1.000 0.000 0.000 \n",
- "BPG 0.000 0.000 0.000 0.000 0.000 1.000 -1.000 0.000 \n",
- "3PG 0.000 0.000 0.000 0.000 0.000 0.000 1.000 -1.000 \n",
- "2PG 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000 \n",
- "PEP 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "PYR 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "AcALD 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "ETH 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "ATP -1.000 0.000 -1.000 0.000 0.000 0.000 1.000 0.000 \n",
- "ADP 1.000 0.000 1.000 0.000 0.000 0.000 -1.000 0.000 \n",
- "NAD+ 0.000 0.000 0.000 0.000 0.000 -1.000 0.000 0.000 \n",
- "NADH 0.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 \n",
- "Pi 0.000 0.000 0.000 0.000 0.000 -1.000 0.000 0.000 \n",
- "CO2 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "H2O 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "GLCi_ext 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "ATP_ext 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "ADP_ext 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "NAD+_ext 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "NADH_ext 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "Pi_ext 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "CO2_ext 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "H2O_ext 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "ETH_ext 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 \n",
- "\n",
- " DGLY_4 DGLY_5 ... DGLY_7 EXTR_1 EXTR_2 EXTR_3 EXTR_4 \\\n",
- "GLCi 0.000 0.000 ... 0.000 1.000 0.000 0.000 0.000 \n",
- "G6P 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "F6P 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "FBP 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "DHAP 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "GAP 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "BPG 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "3PG 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "2PG -1.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "PEP 1.000 -1.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "PYR 0.000 1.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "AcALD 0.000 0.000 ... -1.000 0.000 0.000 0.000 0.000 \n",
- "ETH 0.000 0.000 ... 1.000 0.000 0.000 0.000 0.000 \n",
- "ATP 0.000 1.000 ... 0.000 0.000 1.000 0.000 0.000 \n",
- "ADP 0.000 -1.000 ... 0.000 0.000 0.000 1.000 0.000 \n",
- "NAD+ 0.000 0.000 ... 1.000 0.000 0.000 0.000 1.000 \n",
- "NADH 0.000 0.000 ... -1.000 0.000 0.000 0.000 0.000 \n",
- "Pi 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "CO2 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "H2O 1.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "GLCi_ext 0.000 0.000 ... 0.000 -1.000 0.000 0.000 0.000 \n",
- "ATP_ext 0.000 0.000 ... 0.000 0.000 -1.000 0.000 0.000 \n",
- "ADP_ext 0.000 0.000 ... 0.000 0.000 0.000 -1.000 0.000 \n",
- "NAD+_ext 0.000 0.000 ... 0.000 0.000 0.000 0.000 -1.000 \n",
- "NADH_ext 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "Pi_ext 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "CO2_ext 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "H2O_ext 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "ETH_ext 0.000 0.000 ... 0.000 0.000 0.000 0.000 0.000 \n",
- "\n",
- " EXTR_5 EXTR_6 EXTR_7 EXTR_8 EXTR_9 \n",
- "GLCi 0.000 0.000 0.000 0.000 0.000 \n",
- "G6P 0.000 0.000 0.000 0.000 0.000 \n",
- "F6P 0.000 0.000 0.000 0.000 0.000 \n",
- "FBP 0.000 0.000 0.000 0.000 0.000 \n",
- "DHAP 0.000 0.000 0.000 0.000 0.000 \n",
- "GAP 0.000 0.000 0.000 0.000 0.000 \n",
- "BPG 0.000 0.000 0.000 0.000 0.000 \n",
- "3PG 0.000 0.000 0.000 0.000 0.000 \n",
- "2PG 0.000 0.000 0.000 0.000 0.000 \n",
- "PEP 0.000 0.000 0.000 0.000 0.000 \n",
- "PYR 0.000 0.000 0.000 0.000 0.000 \n",
- "AcALD 0.000 0.000 0.000 0.000 0.000 \n",
- "ETH 0.000 0.000 0.000 0.000 -1.000 \n",
- "ATP 0.000 0.000 0.000 0.000 0.000 \n",
- "ADP 0.000 0.000 0.000 0.000 0.000 \n",
- "NAD+ 0.000 0.000 0.000 0.000 0.000 \n",
- "NADH 1.000 0.000 0.000 0.000 0.000 \n",
- "Pi 0.000 1.000 0.000 0.000 0.000 \n",
- "CO2 0.000 0.000 1.000 0.000 0.000 \n",
- "H2O 0.000 0.000 0.000 1.000 0.000 \n",
- "GLCi_ext 0.000 0.000 0.000 0.000 0.000 \n",
- "ATP_ext 0.000 0.000 0.000 0.000 0.000 \n",
- "ADP_ext 0.000 0.000 0.000 0.000 0.000 \n",
- "NAD+_ext 0.000 0.000 0.000 0.000 0.000 \n",
- "NADH_ext -1.000 0.000 0.000 0.000 0.000 \n",
- "Pi_ext 0.000 -1.000 0.000 0.000 0.000 \n",
- "CO2_ext 0.000 0.000 -1.000 0.000 0.000 \n",
- "H2O_ext 0.000 0.000 0.000 -1.000 0.000 \n",
- "ETH_ext 0.000 0.000 0.000 0.000 1.000 \n",
- "\n",
- "[29 rows x 21 columns]"
- ]
- },
- "execution_count": 66,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import pandas as pd\n",
- "import numpy as np\n",
- "import sys\n",
- "from IPython.display import display, HTML\n",
- "sys.path.append('')\n",
- "metabolites = ['GLCi','G6P','F6P','FBP','DHAP','GAP','BPG','3PG','2PG','PEP','PYR','AcALD','ETH',\n",
- " 'ATP','ADP','NAD+','NADH','Pi','CO2','H2O',\n",
- " 'GLCi_ext','ATP_ext','ADP_ext','NAD+_ext','NADH_ext','Pi_ext','CO2_ext','H2O_ext','ETH_ext']\n",
- "internal_mets = [m for m in metabolites if 'ext' not in m]\n",
- "print(internal_mets)\n",
- "\n",
- "rxns1 = ['UGLY_{}'.format(i) for i in range(1,6)]\n",
- "rxns2 = ['DGLY_{}'.format(i) for i in range(1,8)]\n",
- "rxns3 = ['EXTR_{}'.format(i) for i in range(1,10)]\n",
- "rxns = rxns1 + rxns2 + rxns3\n",
- "\n",
- "data = {'UGLY_1': pd.Series({'GLCi':-1,'ATP':-1,'G6P':+1,'ADP':+1}),\n",
- " 'UGLY_2': pd.Series({'G6P':-1,'F6P':+1}),\n",
- " 'UGLY_3': pd.Series({'F6P':-1,'ATP':-1,'FBP':+1,'ADP':+1}),\n",
- " 'UGLY_4': pd.Series({'FBP':-1,'DHAP':+1,'GAP':+1}),\n",
- " 'UGLY_5': pd.Series({'DHAP':-1,'GAP':+1}),\n",
- " 'DGLY_1': pd.Series({'GAP':-1,'NAD+':-1,'Pi':-1,'BPG':+1,'NADH':+1}),\n",
- " 'DGLY_2': pd.Series({'BPG':-1,'ADP':-1,'3PG':+1,'ATP':+1}),\n",
- " 'DGLY_3': pd.Series({'3PG':-1,'2PG':+1}),\n",
- " 'DGLY_4': pd.Series({'2PG':-1,'PEP':+1,'H2O':+1}),\n",
- " 'DGLY_5': pd.Series({'PEP':-1,'ADP':-1,'PYR':+1,'ATP':+1}),\n",
- " 'DGLY_6': pd.Series({'PYR':-1,'AcALD':+1,'CO2':+1}),\n",
- " 'DGLY_7': pd.Series({'AcALD':-1,'NADH':-1,'ETH':+1,'NAD+':+1}),\n",
- " 'EXTR_1': pd.Series({'GLCi_ext':-1,'GLCi':+1}), \n",
- " 'EXTR_2': pd.Series({'ATP_ext':-1,'ATP':+1}),\n",
- " 'EXTR_3': pd.Series({'ADP_ext':-1,'ADP':+1}),\n",
- " 'EXTR_4': pd.Series({'NAD+_ext':-1,'NAD+':+1}),\n",
- " 'EXTR_5': pd.Series({'NADH_ext':-1,'NADH':+1}),\n",
- " 'EXTR_6': pd.Series({'Pi_ext':-1,'Pi':+1}),\n",
- " 'EXTR_7': pd.Series({'CO2_ext':-1,'CO2':+1}),\n",
- " 'EXTR_8': pd.Series({'H2O_ext':-1,'H2O':+1}),\n",
- " 'EXTR_9': pd.Series({'ETH_ext':+1,'ETH':-1})}\n",
- "\n",
- "fullS = pd.DataFrame(data, columns=rxns, index=metabolites).fillna(0)\n",
- "fullS"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "When the network is in steady state, the concentrations of the internal metabolites do not change. Therefore\n",
- "$$ \\frac{d\\vec{c}}{dt} = S\\cdot\\vec{v} = 0$$\n",
- "where $\\vec{c}$ are the concentrations of the internal metabolites, and $\\vec{v}$ are the steady state fluxes, and $S$ is the stoichiometric matrix that only includes internal metabolites.\n",
- "\n",
- "\n",
- "$$\n",
- "S\\cdot\\vec{v} = \\left[ {\\begin{array}{cccccccccc}\n",
- " & R_1 & R_2 & R_3 & R_4 & R_5 & R_6 & R_7 & R_8 & R_9 \\\\\n",
- "A & 1 & -1 & -1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n",
- "B & 0 & 1 & 0 & -1 & 0 & -2 & 0 & 0 & 0 \\\\\n",
- "C & 0 & 0 & 1 & 0 & 0 & 1 & -1 & 0 & 0 \\\\\n",
- "D & 0 & 0 & 0 & 2 & 0 & 0 & 1 & -1 & 0 \\\\\n",
- "E & 0 & 0 & 0 & -1 & 1 & 0 & 0 & 0 & 0 \\\\\n",
- "F & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & -1 \\\\\n",
- "\\end{array}}\\right]\\cdot\\left[ {\\begin{array}{c}\n",
- "v_1 \\\\ v_2 \\\\ v_3 \\\\ v_4 \\\\ v_5 \\\\ v_6 \\\\ v_7 \\\\ v_8 \\\\ v_9 \\\\\n",
- "\\end{array}}\\right] = 0\n",
- "$$\n",
- "\n",
- "Given a set of initial conditions, we can find the optimal growth rate by solving the following optimization problem:\n",
- "$$\\max_v( v_{growth} )$$\n",
- "$$\\mbox{Subject to:}$$\n",
- "$$\\begin{eqnarray}\n",
- "& S\\cdot v & = 0 \\\\\n",
- "0 \\leq & v & \\leq 10 \\\\\n",
- "\\end{eqnarray}$$"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 108,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "status: optimal\n",
- "Optimal value: -7.285052249904632e-12\n",
- "Optimal var: \n",
- "\n",
- "Metabolite number: 20\n",
- "Reaction number: 21\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Flux</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>UGLY_1</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_2</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_3</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_4</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_5</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_1</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_2</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_3</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_4</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_5</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_6</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_7</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_1</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_2</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_3</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_4</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_5</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_6</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_7</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_8</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_9</th>\n",
- " <td>-0.000</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Flux\n",
- "UGLY_1 -0.000\n",
- "UGLY_2 -0.000\n",
- "UGLY_3 -0.000\n",
- "UGLY_4 -0.000\n",
- "UGLY_5 -0.000\n",
- "DGLY_1 -0.000\n",
- "DGLY_2 -0.000\n",
- "DGLY_3 -0.000\n",
- "DGLY_4 -0.000\n",
- "DGLY_5 -0.000\n",
- "DGLY_6 -0.000\n",
- "DGLY_7 -0.000\n",
- "EXTR_1 -0.000\n",
- "EXTR_2 0.000\n",
- "EXTR_3 -0.000\n",
- "EXTR_4 0.000\n",
- "EXTR_5 -0.000\n",
- "EXTR_6 -0.000\n",
- "EXTR_7 0.000\n",
- "EXTR_8 0.000\n",
- "EXTR_9 -0.000"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "from cvxpy import *\n",
- "S = fullS.loc[internal_mets].as_matrix()\n",
- "m,n = S.shape\n",
- "v = Variable(n)\n",
- "growth = v[11]\n",
- "prob = Problem( \n",
- " Maximize( growth ), \n",
- " [ S*v == 0,\n",
- " 0 <= v,v <= 10,])\n",
- "prob.solve()\n",
- "print(\"status: {}\".format( prob.status))\n",
- "print(\"Optimal value: {}\".format( prob.value))\n",
- "print(\"Optimal var: \\n\", )\n",
- "print(\"Metabolite number:\", m)\n",
- "print(\"Reaction number:\", n)\n",
- "display(pd.DataFrame( v.value, index=rxns, columns=['Flux']))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Maximum entropy of the reaction likelihoods ##\n",
- "\n",
- "\n",
- "Chemical potential $\\vec{\\mu^0}$ is the Gibbs energy of formation $\\Delta G^0_f$ for each metabolite:\n",
- "$$\n",
- "\\vec{\\mu^0} = \\Delta \\vec{G^0_f} = \\left[ {\\begin{array}{cc}\n",
- "A & 4 \\\\\n",
- "B & 2 \\\\\n",
- "C & 2 \\\\\n",
- "D & 0 \\\\\n",
- "E & 2 \\\\\n",
- "F & 1 \\\\\n",
- "\\end{array}}\\right]\n",
- "$$\n",
- "\n",
- "Which implies a Change in Gibbs free energy $S^T\\vec{\\mu^0} = \\Delta G^0$ for each reaction:\n",
- "$$\n",
- "\\Delta \\vec{G^0} = \\left[ {\\begin{array}{cc}\n",
- "R_1 & 0 \\\\\n",
- "R_2 & -2 \\\\\n",
- "R_3 & -2 \\\\\n",
- "R_4 & -4 \\\\\n",
- "R_5 & 0 \\\\\n",
- "R_6 & -1 \\\\\n",
- "R_7 & -2 \\\\\n",
- "R_8 & 0 \\\\\n",
- "R_9 & 0 \\\\\n",
- "\\end{array}}\\right]\n",
- "$$\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 109,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Delta G0</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>UGLY_1</th>\n",
- " <td>-24.574</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_2</th>\n",
- " <td>3.197</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_3</th>\n",
- " <td>-22.476</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_4</th>\n",
- " <td>22.152</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_5</th>\n",
- " <td>7.660</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_1</th>\n",
- " <td>2.300</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_2</th>\n",
- " <td>-8.139</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_3</th>\n",
- " <td>5.898</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_4</th>\n",
- " <td>-3.413</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_5</th>\n",
- " <td>-29.080</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_6</th>\n",
- " <td>-11.382</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_7</th>\n",
- " <td>-22.548</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_1</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_2</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_3</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_4</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_5</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_6</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_7</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_8</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_9</th>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Delta G0\n",
- "UGLY_1 -24.574\n",
- "UGLY_2 3.197\n",
- "UGLY_3 -22.476\n",
- "UGLY_4 22.152\n",
- "UGLY_5 7.660\n",
- "DGLY_1 2.300\n",
- "DGLY_2 -8.139\n",
- "DGLY_3 5.898\n",
- "DGLY_4 -3.413\n",
- "DGLY_5 -29.080\n",
- "DGLY_6 -11.382\n",
- "DGLY_7 -22.548\n",
- "EXTR_1 0.000\n",
- "EXTR_2 0.000\n",
- "EXTR_3 0.000\n",
- "EXTR_4 0.000\n",
- "EXTR_5 0.000\n",
- "EXTR_6 0.000\n",
- "EXTR_7 0.000\n",
- "EXTR_8 0.000\n",
- "EXTR_9 0.000"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "mu = pd.Series([-428.089955,-1319.772461,-1316.575034,-2206.160120,-1095.833908,\n",
- " -1088.173908,-2206.386288,-1347.416642,-1341.518794,-1189.043118,\n",
- " -351.014518,23.603348,62.265022,-2292.311889,-1425.202960,\n",
- " 1056.224770,1117.434626,-1059.302414,-386.000000,-155.888326,\n",
- " -428.089955,-2292.311889,-1425.202960,1056.224770,1117.434626,-1059.302414,\n",
- " -386.000000,-155.888326,62.265022], index=metabolites)\n",
- "deltaG0 = fullS.transpose().dot(mu)\n",
- "display(pd.DataFrame(deltaG0,columns=['Delta G0']))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 110,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "def generate_metabolite_report( log_c, fullS, likelihood, constraints, metabolites, internal_metabolites ):\n",
- " R = 8.3144598/1000.0 # ideal gas constant\n",
- " T = 298.15 # standard temperature in Kelvin\n",
- " n_A = 6.022e23 # Avogadros number\n",
- " V = 1e-15 # Volume of cell in Liters\n",
- " mets = pd.DataFrame(n_A*V*np.exp(log_c.value), index=metabolites, columns=['Counts'], dtype=int)\n",
- " mets['Concentrations'] = pd.DataFrame(np.exp(log_c.value), index=metabolites)\n",
- " mets['Log Concentrations'] = pd.DataFrame(log_c.value, index=metabolites)\n",
- " mets['Metabolite production rate'] = pd.DataFrame(fullS.as_matrix()*likelihood.value, index=metabolites)\n",
- " mets['Chemical potential'] = mu\n",
- " mets['Steady state constraints'] = pd.DataFrame(constraints[-1].dual_value, index=internal_metabolites)\n",
- " return mets\n",
- "\n",
- "def generate_rxn_report(likelihood, rxns, deltaG0, reference_flux, reference_flux_value, constraints):\n",
- " df = pd.DataFrame(likelihood.value,index=rxns, columns=['Rxn likelihoods'])\n",
- " df['Delta G'] = pd.DataFrame(cvx.log(likelihood).value*(-R*T), index=rxns)\n",
- " #df['Q_r'] = pd.DataFrame(np.exp(log_Q.value),index=rxns)\n",
- " #df['K_eq'] = pd.DataFrame(np.exp(log_K.value),index=rxns)\n",
- " #df['log Q_r'] = pd.DataFrame(log_Q.value, index=rxns)\n",
- " #df['log K_eq'] = pd.DataFrame(log_K.value, index=rxns)\n",
- " df['Delta G0'] = pd.DataFrame(deltaG0, index=rxns)\n",
- " df['Normalized Log Likelihoods'] = np.log(df['Rxn likelihoods'])/np.log(df['Rxn likelihoods']).sum()\n",
- " df['Fluxes'] = df['Rxn likelihoods']/df['Rxn likelihoods'][reference_flux]*reference_flux_value\n",
- " df['Forward rate'] = df['Rxn likelihoods']* df['Fluxes']/(df['Rxn likelihoods'] - 1)\n",
- " df['Reverse rate'] = df['Fluxes']/(df['Rxn likelihoods'] - 1)\n",
- " df['Likelihood constraints'] = pd.DataFrame(constraints[0].dual_value, index=rxns)\n",
- " df['Entropy'] = pd.DataFrame(cvx.entr(likelihood).value,index=rxns)\n",
- " return df"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 111,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "ECOS 2.0.4 - (C) embotech GmbH, Zurich Switzerland, 2012-15. Web: www.embotech.com/ECOS\n",
- "\n",
- "It pcost dcost gap pres dres k/t mu step sigma IR | BT\n",
- " 0 +0.000e+00 -6.555e+02 +2e+02 1e+00 5e-01 1e+00 1e+00 --- --- 0 0 - | - - \n",
- " 1 +6.048e+01 -5.516e+02 +8e+01 8e-01 4e-01 2e+00 4e-01 0.6410 1e-01 1 1 1 | 0 1\n",
- " 2 +8.545e+01 -4.528e+02 +5e+01 7e-01 3e-01 2e+00 3e-01 0.6266 4e-01 1 1 1 | 3 2\n",
- " 3 +6.376e+01 -3.663e+02 +4e+01 5e-01 2e-01 2e+00 2e-01 0.9791 7e-01 1 1 1 | 7 0\n",
- " 4 +4.750e+01 -2.200e+02 +2e+01 3e-01 1e-01 1e+00 1e-01 0.5561 8e-02 1 1 1 | 1 2\n",
- " 5 +1.060e+01 -7.818e+01 +6e+00 9e-02 4e-02 5e-01 3e-02 0.7548 5e-02 1 1 1 | 1 1\n",
- " 6 +7.914e+00 -3.177e+01 +2e+00 4e-02 1e-02 4e-01 1e-02 0.9791 3e-01 1 1 1 | 5 0\n",
- " 7 +2.155e+00 -9.671e+00 +5e-01 1e-02 4e-03 1e-01 3e-03 0.7499 2e-02 1 1 1 | 1 1\n",
- " 8 +6.776e-01 -2.693e+00 +1e-01 4e-03 1e-03 5e-02 6e-04 0.7724 1e-02 1 1 1 | 1 1\n",
- " 9 +1.927e-01 -8.431e-01 +3e-02 1e-03 3e-04 2e-02 2e-04 0.7407 3e-02 1 1 1 | 1 1\n",
- "10 +5.136e-02 -2.407e-01 +7e-03 3e-04 9e-05 5e-03 4e-05 0.7674 1e-02 1 1 1 | 1 1\n",
- "11 +1.442e-02 -7.780e-02 +2e-03 1e-04 3e-05 2e-03 1e-05 0.7341 3e-02 1 1 1 | 1 1\n",
- "12 +3.064e-03 -2.226e-02 +5e-04 3e-05 8e-06 5e-04 3e-06 0.7696 1e-02 1 1 1 | 1 1\n",
- "13 +8.066e-04 -6.742e-03 +1e-04 8e-06 2e-06 2e-04 8e-07 0.7464 2e-02 1 1 1 | 1 1\n",
- "14 +1.635e-04 -1.866e-03 +3e-05 2e-06 7e-07 5e-05 2e-07 0.7742 1e-02 1 0 0 | 1 1\n",
- "15 +8.973e-05 -8.213e-04 +1e-05 1e-06 3e-07 2e-05 7e-08 0.6266 8e-02 1 0 0 | 2 2\n",
- "16 -2.807e-05 -2.465e-04 +3e-06 2e-07 7e-08 6e-06 2e-08 0.7833 1e-02 1 0 0 | 1 1\n",
- "17 -1.434e-05 -1.281e-04 +1e-06 1e-07 4e-08 3e-06 7e-09 0.7833 3e-01 1 0 0 | 5 1\n",
- "18 -9.082e-06 -3.773e-05 +3e-07 3e-08 1e-08 9e-07 2e-09 0.7741 1e-02 1 0 0 | 1 1\n",
- "19 -6.035e-06 -1.986e-05 +1e-07 2e-08 6e-09 4e-07 7e-10 0.6266 1e-01 1 0 0 | 3 2\n",
- "20 -4.139e-06 -7.923e-06 +3e-08 4e-09 3e-09 1e-07 2e-10 0.7833 6e-02 1 0 0 | 2 1\n",
- "21 -2.596e-06 -3.840e-06 +9e-09 1e-09 2e-09 4e-08 5e-11 0.7833 1e-01 1 0 0 | 3 1\n",
- "\n",
- "OPTIMAL (within feastol=2.3e-09, reltol=3.6e-03, abstol=9.4e-09).\n",
- "Runtime: 0.002306 seconds.\n",
- "\n",
- "status: optimal\n",
- "Optimal value: 2.5964494520781914e-06\n",
- "Optimal Concentrations are:\n",
- "\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Counts</th>\n",
- " <th>Concentrations</th>\n",
- " <th>Log Concentrations</th>\n",
- " <th>Metabolite production rate</th>\n",
- " <th>Chemical potential</th>\n",
- " <th>Steady state constraints</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>GLCi</th>\n",
- " <td>487542087648814336</td>\n",
- " <td>809601606.856</td>\n",
- " <td>20.512</td>\n",
- " <td>-0.000</td>\n",
- " <td>-428.090</td>\n",
- " <td>31.657</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>G6P</th>\n",
- " <td>278807642794</td>\n",
- " <td>462.982</td>\n",
- " <td>6.138</td>\n",
- " <td>0.000</td>\n",
- " <td>-1319.772</td>\n",
- " <td>159.867</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>F6P</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>89937920356619536.000</td>\n",
- " <td>39.038</td>\n",
- " <td>-0.000</td>\n",
- " <td>-1316.575</td>\n",
- " <td>192.486</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>FBP</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>1494625034495.931</td>\n",
- " <td>28.033</td>\n",
- " <td>0.000</td>\n",
- " <td>-2206.160</td>\n",
- " <td>321.371</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DHAP</th>\n",
- " <td>6266702749882</td>\n",
- " <td>10406.348</td>\n",
- " <td>9.250</td>\n",
- " <td>0.000</td>\n",
- " <td>-1095.834</td>\n",
- " <td>160.708</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>GAP</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>1393018036859844427776.000</td>\n",
- " <td>48.686</td>\n",
- " <td>-0.000</td>\n",
- " <td>-1088.174</td>\n",
- " <td>193.681</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>BPG</th>\n",
- " <td>1934355</td>\n",
- " <td>0.003</td>\n",
- " <td>-5.741</td>\n",
- " <td>0.000</td>\n",
- " <td>-2206.386</td>\n",
- " <td>246.384</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>3PG</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>4878692923812172589863070388297884762112.000</td>\n",
- " <td>91.386</td>\n",
- " <td>-0.000</td>\n",
- " <td>-1347.417</td>\n",
- " <td>176.529</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>2PG</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>40677313678470625660146975318769326201346982649...</td>\n",
- " <td>128.045</td>\n",
- " <td>0.000</td>\n",
- " <td>-1341.519</td>\n",
- " <td>202.877</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>PEP</th>\n",
- " <td>317</td>\n",
- " <td>0.000</td>\n",
- " <td>-14.456</td>\n",
- " <td>0.000</td>\n",
- " <td>-1189.043</td>\n",
- " <td>110.070</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>PYR</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>13111105173369700041974457004066422434824192.000</td>\n",
- " <td>99.282</td>\n",
- " <td>-0.000</td>\n",
- " <td>-351.015</td>\n",
- " <td>40.483</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>AcALD</th>\n",
- " <td>357</td>\n",
- " <td>0.000</td>\n",
- " <td>-14.338</td>\n",
- " <td>-0.000</td>\n",
- " <td>23.603</td>\n",
- " <td>-52.644</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ETH</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>39041318105917975595407598335667289448032859406...</td>\n",
- " <td>148.727</td>\n",
- " <td>-0.000</td>\n",
- " <td>62.265</td>\n",
- " <td>-26.539</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ATP</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>60246279459142416.000</td>\n",
- " <td>38.637</td>\n",
- " <td>0.000</td>\n",
- " <td>-2292.312</td>\n",
- " <td>122.560</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ADP</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>1922033603447802687692281780317672137818112.000</td>\n",
- " <td>97.362</td>\n",
- " <td>0.000</td>\n",
- " <td>-1425.203</td>\n",
- " <td>26.607</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>NAD+</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>669880823205123.500</td>\n",
- " <td>34.138</td>\n",
- " <td>-0.000</td>\n",
- " <td>1056.225</td>\n",
- " <td>43.173</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>NADH</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>53966573195750759180711684404550966443970705867...</td>\n",
- " <td>144.446</td>\n",
- " <td>-0.000</td>\n",
- " <td>1117.435</td>\n",
- " <td>42.820</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>Pi</th>\n",
- " <td>3998170324985369600</td>\n",
- " <td>6639273206.552</td>\n",
- " <td>22.616</td>\n",
- " <td>0.000</td>\n",
- " <td>-1059.302</td>\n",
- " <td>25.997</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>CO2</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>16349881919983659317283948865226036435923705851...</td>\n",
- " <td>170.883</td>\n",
- " <td>0.000</td>\n",
- " <td>-386.000</td>\n",
- " <td>119.594</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>H2O</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>18739469334030543441896149584586521855118177000...</td>\n",
- " <td>194.045</td>\n",
- " <td>0.000</td>\n",
- " <td>-155.888</td>\n",
- " <td>119.234</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>GLCi_ext</th>\n",
- " <td>60220</td>\n",
- " <td>0.000</td>\n",
- " <td>-9.210</td>\n",
- " <td>-0.000</td>\n",
- " <td>-428.090</td>\n",
- " <td>nan</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ATP_ext</th>\n",
- " <td>5781120</td>\n",
- " <td>0.010</td>\n",
- " <td>-4.646</td>\n",
- " <td>0.000</td>\n",
- " <td>-2292.312</td>\n",
- " <td>nan</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ADP_ext</th>\n",
- " <td>337232</td>\n",
- " <td>0.001</td>\n",
- " <td>-7.488</td>\n",
- " <td>-0.000</td>\n",
- " <td>-1425.203</td>\n",
- " <td>nan</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>NAD+_ext</th>\n",
- " <td>1565720</td>\n",
- " <td>0.003</td>\n",
- " <td>-5.952</td>\n",
- " <td>0.000</td>\n",
- " <td>1056.225</td>\n",
- " <td>nan</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>NADH_ext</th>\n",
- " <td>49982</td>\n",
- " <td>0.000</td>\n",
- " <td>-9.397</td>\n",
- " <td>-0.000</td>\n",
- " <td>1117.435</td>\n",
- " <td>nan</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>Pi_ext</th>\n",
- " <td>204748</td>\n",
- " <td>0.000</td>\n",
- " <td>-7.987</td>\n",
- " <td>-0.000</td>\n",
- " <td>-1059.302</td>\n",
- " <td>nan</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>CO2_ext</th>\n",
- " <td>6022</td>\n",
- " <td>0.000</td>\n",
- " <td>-11.513</td>\n",
- " <td>0.000</td>\n",
- " <td>-386.000</td>\n",
- " <td>nan</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>H2O_ext</th>\n",
- " <td>1</td>\n",
- " <td>0.000</td>\n",
- " <td>-20.210</td>\n",
- " <td>0.000</td>\n",
- " <td>-155.888</td>\n",
- " <td>nan</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ETH_ext</th>\n",
- " <td>-9223372036854775808</td>\n",
- " <td>20050953274589531887069525414495425974415097627...</td>\n",
- " <td>203.323</td>\n",
- " <td>0.000</td>\n",
- " <td>62.265</td>\n",
- " <td>nan</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Counts \\\n",
- "GLCi 487542087648814336 \n",
- "G6P 278807642794 \n",
- "F6P -9223372036854775808 \n",
- "FBP -9223372036854775808 \n",
- "DHAP 6266702749882 \n",
- "GAP -9223372036854775808 \n",
- "BPG 1934355 \n",
- "3PG -9223372036854775808 \n",
- "2PG -9223372036854775808 \n",
- "PEP 317 \n",
- "PYR -9223372036854775808 \n",
- "AcALD 357 \n",
- "ETH -9223372036854775808 \n",
- "ATP -9223372036854775808 \n",
- "ADP -9223372036854775808 \n",
- "NAD+ -9223372036854775808 \n",
- "NADH -9223372036854775808 \n",
- "Pi 3998170324985369600 \n",
- "CO2 -9223372036854775808 \n",
- "H2O -9223372036854775808 \n",
- "GLCi_ext 60220 \n",
- "ATP_ext 5781120 \n",
- "ADP_ext 337232 \n",
- "NAD+_ext 1565720 \n",
- "NADH_ext 49982 \n",
- "Pi_ext 204748 \n",
- "CO2_ext 6022 \n",
- "H2O_ext 1 \n",
- "ETH_ext -9223372036854775808 \n",
- "\n",
- " Concentrations \\\n",
- "GLCi 809601606.856 \n",
- "G6P 462.982 \n",
- "F6P 89937920356619536.000 \n",
- "FBP 1494625034495.931 \n",
- "DHAP 10406.348 \n",
- "GAP 1393018036859844427776.000 \n",
- "BPG 0.003 \n",
- "3PG 4878692923812172589863070388297884762112.000 \n",
- "2PG 40677313678470625660146975318769326201346982649... \n",
- "PEP 0.000 \n",
- "PYR 13111105173369700041974457004066422434824192.000 \n",
- "AcALD 0.000 \n",
- "ETH 39041318105917975595407598335667289448032859406... \n",
- "ATP 60246279459142416.000 \n",
- "ADP 1922033603447802687692281780317672137818112.000 \n",
- "NAD+ 669880823205123.500 \n",
- "NADH 53966573195750759180711684404550966443970705867... \n",
- "Pi 6639273206.552 \n",
- "CO2 16349881919983659317283948865226036435923705851... \n",
- "H2O 18739469334030543441896149584586521855118177000... \n",
- "GLCi_ext 0.000 \n",
- "ATP_ext 0.010 \n",
- "ADP_ext 0.001 \n",
- "NAD+_ext 0.003 \n",
- "NADH_ext 0.000 \n",
- "Pi_ext 0.000 \n",
- "CO2_ext 0.000 \n",
- "H2O_ext 0.000 \n",
- "ETH_ext 20050953274589531887069525414495425974415097627... \n",
- "\n",
- " Log Concentrations Metabolite production rate Chemical potential \\\n",
- "GLCi 20.512 -0.000 -428.090 \n",
- "G6P 6.138 0.000 -1319.772 \n",
- "F6P 39.038 -0.000 -1316.575 \n",
- "FBP 28.033 0.000 -2206.160 \n",
- "DHAP 9.250 0.000 -1095.834 \n",
- "GAP 48.686 -0.000 -1088.174 \n",
- "BPG -5.741 0.000 -2206.386 \n",
- "3PG 91.386 -0.000 -1347.417 \n",
- "2PG 128.045 0.000 -1341.519 \n",
- "PEP -14.456 0.000 -1189.043 \n",
- "PYR 99.282 -0.000 -351.015 \n",
- "AcALD -14.338 -0.000 23.603 \n",
- "ETH 148.727 -0.000 62.265 \n",
- "ATP 38.637 0.000 -2292.312 \n",
- "ADP 97.362 0.000 -1425.203 \n",
- "NAD+ 34.138 -0.000 1056.225 \n",
- "NADH 144.446 -0.000 1117.435 \n",
- "Pi 22.616 0.000 -1059.302 \n",
- "CO2 170.883 0.000 -386.000 \n",
- "H2O 194.045 0.000 -155.888 \n",
- "GLCi_ext -9.210 -0.000 -428.090 \n",
- "ATP_ext -4.646 0.000 -2292.312 \n",
- "ADP_ext -7.488 -0.000 -1425.203 \n",
- "NAD+_ext -5.952 0.000 1056.225 \n",
- "NADH_ext -9.397 -0.000 1117.435 \n",
- "Pi_ext -7.987 -0.000 -1059.302 \n",
- "CO2_ext -11.513 0.000 -386.000 \n",
- "H2O_ext -20.210 0.000 -155.888 \n",
- "ETH_ext 203.323 0.000 62.265 \n",
- "\n",
- " Steady state constraints \n",
- "GLCi 31.657 \n",
- "G6P 159.867 \n",
- "F6P 192.486 \n",
- "FBP 321.371 \n",
- "DHAP 160.708 \n",
- "GAP 193.681 \n",
- "BPG 246.384 \n",
- "3PG 176.529 \n",
- "2PG 202.877 \n",
- "PEP 110.070 \n",
- "PYR 40.483 \n",
- "AcALD -52.644 \n",
- "ETH -26.539 \n",
- "ATP 122.560 \n",
- "ADP 26.607 \n",
- "NAD+ 43.173 \n",
- "NADH 42.820 \n",
- "Pi 25.997 \n",
- "CO2 119.594 \n",
- "H2O 119.234 \n",
- "GLCi_ext nan \n",
- "ATP_ext nan \n",
- "ADP_ext nan \n",
- "NAD+_ext nan \n",
- "NADH_ext nan \n",
- "Pi_ext nan \n",
- "CO2_ext nan \n",
- "H2O_ext nan \n",
- "ETH_ext nan "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Rxn likelihoods</th>\n",
- " <th>Delta G</th>\n",
- " <th>Delta G0</th>\n",
- " <th>Normalized Log Likelihoods</th>\n",
- " <th>Fluxes</th>\n",
- " <th>Forward rate</th>\n",
- " <th>Reverse rate</th>\n",
- " <th>Likelihood constraints</th>\n",
- " <th>Entropy</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>UGLY_1</th>\n",
- " <td>0.000</td>\n",
- " <td>49.076</td>\n",
- " <td>-24.574</td>\n",
- " <td>0.059</td>\n",
- " <td>4.134</td>\n",
- " <td>-0.000</td>\n",
- " <td>-4.134</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_2</th>\n",
- " <td>0.000</td>\n",
- " <td>49.245</td>\n",
- " <td>3.197</td>\n",
- " <td>0.060</td>\n",
- " <td>3.862</td>\n",
- " <td>-0.000</td>\n",
- " <td>-3.862</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_3</th>\n",
- " <td>0.000</td>\n",
- " <td>48.928</td>\n",
- " <td>-22.476</td>\n",
- " <td>0.059</td>\n",
- " <td>4.390</td>\n",
- " <td>-0.000</td>\n",
- " <td>-4.390</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_4</th>\n",
- " <td>0.000</td>\n",
- " <td>48.948</td>\n",
- " <td>22.152</td>\n",
- " <td>0.059</td>\n",
- " <td>4.353</td>\n",
- " <td>-0.000</td>\n",
- " <td>-4.353</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>UGLY_5</th>\n",
- " <td>0.000</td>\n",
- " <td>48.955</td>\n",
- " <td>7.660</td>\n",
- " <td>0.059</td>\n",
- " <td>4.342</td>\n",
- " <td>-0.000</td>\n",
- " <td>-4.342</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_1</th>\n",
- " <td>0.000</td>\n",
- " <td>46.937</td>\n",
- " <td>2.300</td>\n",
- " <td>0.057</td>\n",
- " <td>9.799</td>\n",
- " <td>-0.000</td>\n",
- " <td>-9.799</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_2</th>\n",
- " <td>0.000</td>\n",
- " <td>47.041</td>\n",
- " <td>-8.139</td>\n",
- " <td>0.057</td>\n",
- " <td>9.397</td>\n",
- " <td>-0.000</td>\n",
- " <td>-9.397</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_3</th>\n",
- " <td>0.000</td>\n",
- " <td>46.990</td>\n",
- " <td>5.898</td>\n",
- " <td>0.057</td>\n",
- " <td>9.593</td>\n",
- " <td>-0.000</td>\n",
- " <td>-9.593</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_4</th>\n",
- " <td>0.000</td>\n",
- " <td>47.195</td>\n",
- " <td>-3.413</td>\n",
- " <td>0.057</td>\n",
- " <td>8.830</td>\n",
- " <td>-0.000</td>\n",
- " <td>-8.830</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_5</th>\n",
- " <td>0.000</td>\n",
- " <td>47.213</td>\n",
- " <td>-29.080</td>\n",
- " <td>0.057</td>\n",
- " <td>8.765</td>\n",
- " <td>-0.000</td>\n",
- " <td>-8.765</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_6</th>\n",
- " <td>0.000</td>\n",
- " <td>47.156</td>\n",
- " <td>-11.382</td>\n",
- " <td>0.057</td>\n",
- " <td>8.971</td>\n",
- " <td>-0.000</td>\n",
- " <td>-8.971</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>DGLY_7</th>\n",
- " <td>0.000</td>\n",
- " <td>46.887</td>\n",
- " <td>-22.548</td>\n",
- " <td>0.057</td>\n",
- " <td>10.000</td>\n",
- " <td>-0.000</td>\n",
- " <td>-10.000</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_1</th>\n",
- " <td>0.000</td>\n",
- " <td>49.414</td>\n",
- " <td>0.000</td>\n",
- " <td>0.060</td>\n",
- " <td>3.608</td>\n",
- " <td>-0.000</td>\n",
- " <td>-3.608</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_2</th>\n",
- " <td>-0.000</td>\n",
- " <td>nan</td>\n",
- " <td>0.000</td>\n",
- " <td>nan</td>\n",
- " <td>-7.300</td>\n",
- " <td>-0.000</td>\n",
- " <td>7.300</td>\n",
- " <td>0.000</td>\n",
- " <td>-inf</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_3</th>\n",
- " <td>0.000</td>\n",
- " <td>46.821</td>\n",
- " <td>0.000</td>\n",
- " <td>0.057</td>\n",
- " <td>10.269</td>\n",
- " <td>-0.000</td>\n",
- " <td>-10.269</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_4</th>\n",
- " <td>-0.000</td>\n",
- " <td>nan</td>\n",
- " <td>0.000</td>\n",
- " <td>nan</td>\n",
- " <td>-0.226</td>\n",
- " <td>-0.000</td>\n",
- " <td>0.226</td>\n",
- " <td>0.000</td>\n",
- " <td>-inf</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_5</th>\n",
- " <td>0.000</td>\n",
- " <td>60.929</td>\n",
- " <td>0.000</td>\n",
- " <td>0.074</td>\n",
- " <td>0.035</td>\n",
- " <td>-0.000</td>\n",
- " <td>-0.035</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_6</th>\n",
- " <td>0.000</td>\n",
- " <td>46.800</td>\n",
- " <td>0.000</td>\n",
- " <td>0.057</td>\n",
- " <td>10.357</td>\n",
- " <td>-0.000</td>\n",
- " <td>-10.357</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_7</th>\n",
- " <td>-0.000</td>\n",
- " <td>nan</td>\n",
- " <td>0.000</td>\n",
- " <td>nan</td>\n",
- " <td>-6.853</td>\n",
- " <td>-0.000</td>\n",
- " <td>6.853</td>\n",
- " <td>0.000</td>\n",
- " <td>-inf</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_8</th>\n",
- " <td>-0.000</td>\n",
- " <td>nan</td>\n",
- " <td>0.000</td>\n",
- " <td>nan</td>\n",
- " <td>-6.756</td>\n",
- " <td>-0.000</td>\n",
- " <td>6.756</td>\n",
- " <td>0.000</td>\n",
- " <td>-inf</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>EXTR_9</th>\n",
- " <td>0.000</td>\n",
- " <td>46.779</td>\n",
- " <td>0.000</td>\n",
- " <td>0.057</td>\n",
- " <td>10.445</td>\n",
- " <td>-0.000</td>\n",
- " <td>-10.445</td>\n",
- " <td>0.000</td>\n",
- " <td>0.000</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Rxn likelihoods Delta G Delta G0 Normalized Log Likelihoods \\\n",
- "UGLY_1 0.000 49.076 -24.574 0.059 \n",
- "UGLY_2 0.000 49.245 3.197 0.060 \n",
- "UGLY_3 0.000 48.928 -22.476 0.059 \n",
- "UGLY_4 0.000 48.948 22.152 0.059 \n",
- "UGLY_5 0.000 48.955 7.660 0.059 \n",
- "DGLY_1 0.000 46.937 2.300 0.057 \n",
- "DGLY_2 0.000 47.041 -8.139 0.057 \n",
- "DGLY_3 0.000 46.990 5.898 0.057 \n",
- "DGLY_4 0.000 47.195 -3.413 0.057 \n",
- "DGLY_5 0.000 47.213 -29.080 0.057 \n",
- "DGLY_6 0.000 47.156 -11.382 0.057 \n",
- "DGLY_7 0.000 46.887 -22.548 0.057 \n",
- "EXTR_1 0.000 49.414 0.000 0.060 \n",
- "EXTR_2 -0.000 nan 0.000 nan \n",
- "EXTR_3 0.000 46.821 0.000 0.057 \n",
- "EXTR_4 -0.000 nan 0.000 nan \n",
- "EXTR_5 0.000 60.929 0.000 0.074 \n",
- "EXTR_6 0.000 46.800 0.000 0.057 \n",
- "EXTR_7 -0.000 nan 0.000 nan \n",
- "EXTR_8 -0.000 nan 0.000 nan \n",
- "EXTR_9 0.000 46.779 0.000 0.057 \n",
- "\n",
- " Fluxes Forward rate Reverse rate Likelihood constraints Entropy \n",
- "UGLY_1 4.134 -0.000 -4.134 0.000 0.000 \n",
- "UGLY_2 3.862 -0.000 -3.862 0.000 0.000 \n",
- "UGLY_3 4.390 -0.000 -4.390 0.000 0.000 \n",
- "UGLY_4 4.353 -0.000 -4.353 0.000 0.000 \n",
- "UGLY_5 4.342 -0.000 -4.342 0.000 0.000 \n",
- "DGLY_1 9.799 -0.000 -9.799 0.000 0.000 \n",
- "DGLY_2 9.397 -0.000 -9.397 0.000 0.000 \n",
- "DGLY_3 9.593 -0.000 -9.593 0.000 0.000 \n",
- "DGLY_4 8.830 -0.000 -8.830 0.000 0.000 \n",
- "DGLY_5 8.765 -0.000 -8.765 0.000 0.000 \n",
- "DGLY_6 8.971 -0.000 -8.971 0.000 0.000 \n",
- "DGLY_7 10.000 -0.000 -10.000 0.000 0.000 \n",
- "EXTR_1 3.608 -0.000 -3.608 0.000 0.000 \n",
- "EXTR_2 -7.300 -0.000 7.300 0.000 -inf \n",
- "EXTR_3 10.269 -0.000 -10.269 0.000 0.000 \n",
- "EXTR_4 -0.226 -0.000 0.226 0.000 -inf \n",
- "EXTR_5 0.035 -0.000 -0.035 0.000 0.000 \n",
- "EXTR_6 10.357 -0.000 -10.357 0.000 0.000 \n",
- "EXTR_7 -6.853 -0.000 6.853 0.000 -inf \n",
- "EXTR_8 -6.756 -0.000 6.756 0.000 -inf \n",
- "EXTR_9 10.445 -0.000 -10.445 0.000 0.000 "
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "from IPython.display import display, HTML\n",
- "import cvxpy as cvx\n",
- "pd.options.display.float_format = '{:.3f}'.format\n",
- "internal_metabolites = internal_mets\n",
- "R = 8.3144598/1000.0 # ideal gas constant\n",
- "T = 298.15 # standard temperature\n",
- "n_A = 6.022e23 # Avogadro's number\n",
- "V = 1e-15 # volume of cell in Liters\n",
- "c_L = 1e-10 # lower bound of metabolite concentrations\n",
- "c_U = 1e-1 # upper bound of metabolite concentrations\n",
- "reference_flux= 'DGLY_7'\n",
- "reference_flux_value = 10.0 \n",
- "log_c = cvx.Variable(29) # log of the concentrations\n",
- "likelihood = cvx.Variable(21) # Likelihoods of the reactions\n",
- "obj = Maximize(cvx.sum_entries( cvx.entr( likelihood ) ) ) # maximizing entropy\n",
- "log_Q = fullS.as_matrix().T*log_c # log of the Reaction quotient\n",
- "S = fullS.loc[internal_mets].as_matrix() # Only internal metabolites are in steady state\n",
- "log_K = cvx.Constant(-1.0/(R*T)*deltaG0.as_matrix()) # log of the Equilibrium constnat\n",
- "constraints = [cvx.log(likelihood) >= log_K - log_Q,\n",
- "# cvx.log(c_U) >= log_c,\n",
- " log_c >= cvx.log(c_L),\n",
- " log_c[20] == cvx.log(1.00e-4),\n",
- " log_c[21] == cvx.log(9.60e-3),\n",
- " log_c[22] == cvx.log(5.60e-4),\n",
- " log_c[23] == cvx.log(2.60e-3),\n",
- " log_c[24] == cvx.log(8.30e-5),\n",
- " log_c[25] == cvx.log(3.40e-4),\n",
- " log_c[26] == cvx.log(1.00e-5),\n",
- " log_c[27] == cvx.log(1.67e-9), \n",
- " S*likelihood == 0]\n",
- "prob = cvx.Problem(obj, constraints)\n",
- "prob.solve( verbose=True)\n",
- "print(\"status: {}\".format( prob.status))\n",
- "print(\"Optimal value: {}\".format( prob.value))\n",
- "print(\"Optimal Concentrations are:\\n\")\n",
- "\n",
- "mets = generate_metabolite_report( log_c, fullS, likelihood, constraints, metabolites, internal_metabolites )\n",
- "display(mets)\n",
- "reactions = generate_rxn_report(likelihood, rxns, deltaG0, reference_flux, reference_flux_value, constraints)\n",
- "display(reactions)\n"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "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.5.0"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement