diff --git a/.gitignore b/.gitignore index 9a02ae6f5..1cc05365d 100644 --- a/.gitignore +++ b/.gitignore @@ -100,6 +100,7 @@ ipython_config.py .idea/**/dynamic.xml .idea/**/uiDesigner.xml .idea/**/dbnavigator.xml +.idea/** # Gradle .idea/**/gradle.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 000000000..74459b697 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..60adcbf46 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..c8e807676 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..94a25f7f4 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/documentation_builder/conf.py b/documentation_builder/conf.py index 6d0384206..f7e44110a 100644 --- a/documentation_builder/conf.py +++ b/documentation_builder/conf.py @@ -15,6 +15,7 @@ import sys from os.path import dirname, join + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. @@ -25,14 +26,16 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +# Note that, for now, autoapi.extension should be loaded before sphinx.ext.viewcode +# because of this bug: https://github.com/readthedocs/sphinx-autoapi/issues/422 extensions = [ "sphinx.ext.autodoc", "sphinx.ext.intersphinx", "sphinx.ext.mathjax", + "autoapi.extension", "sphinx.ext.viewcode", "sphinx.ext.napoleon", "sphinx.ext.autosummary", - "autoapi.extension", "nbsphinx", ] # Document Python Code @@ -58,6 +61,7 @@ # This import has to be here. from cobra import __version__ as release # noqa: E402 + version = ".".join(release.split(".")[:2]) # List of patterns, relative to source directory, that match files and @@ -69,8 +73,7 @@ # -- Options for HTML output -------------------------------------------------- mathjax_path = ( - "https://cdn.mathjax.org/mathjax/latest/" - "MathJax.js?config=TeX-AMS-MML_HTMLorMML" + "https://cdn.mathjax.org/mathjax/latest/" "MathJax.js?config=TeX-AMS-MML_HTMLorMML" ) # -- Options for LaTeX output -------------------------------------------------- @@ -100,9 +103,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [ - ("index", "cobra", u"cobra Documentation", [u"The cobrapy core team"], 1) -] +man_pages = [("index", "cobra", "cobra Documentation", ["The cobrapy core team"], 1)] # -- Options for Texinfo output ------------------------------------------------ @@ -123,8 +124,8 @@ # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { - "http://docs.python.org/": None, - "http://docs.scipy.org/doc/numpy/": None, - "http://docs.scipy.org/doc/scipy/reference": None, + "python": ("http://docs.python.org/", None), + "numpy": ("http://docs.scipy.org/doc/numpy/", None), + "scipy": ("http://docs.scipy.org/doc/scipy/reference", None), } intersphinx_cache_limit = 10 # days to keep the cached inventories diff --git a/documentation_builder/index.rst b/documentation_builder/index.rst index e42591a17..7ab66eec8 100644 --- a/documentation_builder/index.rst +++ b/documentation_builder/index.rst @@ -27,6 +27,7 @@ be viewed at `nbviewer solvers constraints_objectives dfba + metadata pymatbridge faq API diff --git a/documentation_builder/metadata.ipynb b/documentation_builder/metadata.ipynb new file mode 100644 index 000000000..364ee1205 --- /dev/null +++ b/documentation_builder/metadata.ipynb @@ -0,0 +1,735 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "bVgYSbcPLbwU" + }, + "source": [ + "# Metadata\n", + "\n", + "Each cobra Object, such as a metabolite, reaction, and gene, can have metadata, which includes annotations, object history and creators.\n", + "This data can be obtain and manipulated via the `metadata` attribute of cobra objects, which is an instance of the `Metadata` class. Additionally, the `annotation` attribute of cobra objects provides an simplified interface to the metadata for compatibility with older cobrapy versions." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Rv-QKmAPM8PY", + "pycharm": { + "name": "#%% md\n" + } + }, + "source": [ + "## History\n", + "\n", + "The `history` attribute, present in the `metadata` attribute of a cobra object provides access to the history of an object, such as its creators, date of creation and modified date." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "EsBAtYeHLbwc", + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from cobra.core import Model\n", + "from cobra.core.metadata import History, Creator\n", + "from datetime import datetime\n", + "\n", + "model = Model(name=\"Illustrative E. coli Model\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": [ + "Object creators can be created using the `Creator` class and dates can be provided as a datetime string or directly as a `datetime` object. They can be added directly via constructor." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "history = History(\n", + " creators=[\n", + " Creator(\n", + " name=\"Matthias Koenig\",\n", + " organisation=\"HU\",\n", + " email=\"test@test.com\",\n", + " ),\n", + " ],\n", + " created_date=\"2020-06-26T02:34:30+05:30\",\n", + " modified_dates=[\n", + " \"2020-06-26T12:34:11+00:00\",\n", + " \"2020-06-26T00:34:11+05:30\",\n", + " ],\n", + " )\n", + "\n", + "model.annotation.history = history" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": [ + "Or by adding them to an existing history object." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "new_creator = Creator(\n", + " name=\"Andreas Draeger\",\n", + " organisation=\"University of Tübingen\",\n", + " email=\"test2@test2.com\",\n", + " )\n", + "\n", + "model.annotation.history.creators.append(new_creator)\n", + "modified_hdtime = datetime.now()\n", + "model.annotation.history.modified_dates.append(modified_hdtime)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": [ + "## Standardized annotations\n", + "\n", + "Standardized annotations relate scientific identifiers (https://identifiers.org), such as BiGG ids, CHEBI ids, and DOIs, to cobrapy objects. A `StandardizedAnnotation` object consists of a set of resources that specify the identifiers, a qualifier that defines the annotation's relation to the cobrapy object, and optionally nested annotations." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "from cobra.core.metadata import Qualifier, Resource, StandardizedAnnotation\n", + "\n", + "annotations = [\n", + " StandardizedAnnotation(\n", + " qualifier=Qualifier.Biological_hasTaxon,\n", + " resources=[\"http://identifiers.org/taxonomy/511145\"]\n", + " ),\n", + " StandardizedAnnotation(\n", + " qualifier=Qualifier.Modelling_is,\n", + " resources=Resource(\"http://identifiers.org/bigg.model/e_coli_core\"),\n", + " annotations=[\n", + " StandardizedAnnotation(\n", + " qualifier=Qualifier.Biological_isDescribedBy,\n", + " resources=[Resource(\"https://identifiers.org/pubmed/1111111\"),\n", + " Resource.from_data((\"eco\", \"ECO:0000004\"))])\n", + " ]\n", + " ),\n", + " StandardizedAnnotation(\n", + " qualifier=Qualifier.Biological_hasPart,\n", + " resources=[\"https://identifiers.org/kegg.module/M00009\"],\n", + " ),\n", + " StandardizedAnnotation(\n", + " qualifier=Qualifier.Biological_hasPart,\n", + " resources=[\"https://identifiers.org/kegg.module/M00003\"],\n", + " )\n", + "]\n", + "model.add_annotations(annotations)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Standardized annotations can be accessed like a list, or specific annotations can be found using a query." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + "
Qualifier\n", + " Qualifier.Biological_hasTaxon\n", + "
URIhttp://identifiers.org/taxonomy/511145
Namespacetaxonomy
Identifier511145
Memory address0x732386ec29d0
" + ], + "text/plain": [ + "cobra.core.metadata.standardized.StandardizedAnnotation({'qualifier': 'bqb_hasTaxon', 'resources': ['http://identifiers.org/taxonomy/511145']})" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.metadata.standardized[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Search function: 'Modelling_'\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Qualifier\n", + " Qualifier.Modelling_is\n", + "
URIhttp://identifiers.org/bigg.model/e_coli_core
Namespacebigg.model
Identifiere_coli_core
Memory address0x732386ec3810
Nested
annotations
\n", + " \n", + " \n", + " \n", + "
Qualifier\n", + " Qualifier.Biological_isDescribedBy\n", + "
URIhttps://identifiers.org/pubmed/1111111https://identifiers.org/eco/ECO:0000004
Namespacepubmedeco
Identifier1111111ECO:0000004
Memory address0x732386ed36900x732386ed3750
" + ], + "text/plain": [ + "cobra.core.metadata.standardized.StandardizedAnnotation({'qualifier': 'bqm_is', 'resources': ['http://identifiers.org/bigg.model/e_coli_core'], 'annotations': [{'qualifier': 'bqb_isDescribedBy', 'resources': ['https://identifiers.org/pubmed/1111111', 'https://identifiers.org/eco/ECO:0000004']}]})" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.metadata.standardized.query('Modelling_', 'qualifier')[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Additionally, resources, URIs and identifier can be accessed directly from the `metadata.standardized` attribute." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "https://identifiers.org/pubmed/1111111\n", + "https://identifiers.org/eco/ECO:0000004\n" + ] + } + ], + "source": [ + "# Methods that start with all_ include all nested annotations,\n", + "# so the following only prints nested URIs.\n", + "for resource in model.metadata.standardized.all_resources:\n", + " if resource not in model.metadata.standardized.resources:\n", + " print(resource.uri)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More complex selection logic can be implemented using the `metadata.standardized.resources_for` method. This method enables filtering based on qualifiers and namespaces. All KEGG Modules that are defined as a part of the biological entity that is represented by the annotation can be obtained as follows:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Resource(https://identifiers.org/kegg.module/M00009),\n", + " Resource(https://identifiers.org/kegg.module/M00003)]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.metadata.standardized.resources_for(qualifier=Qualifier.Biological_hasPart, namespace=\"kegg.module\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A flattened representation of the standardized annotation tree can be generated using `metadata.standardized.to_records`. This can be useful when converting annotations to e.g. a pandas DataFrame." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
qualifierurinamespaceidentifierannotation_groupparent_group
0bqb_hasTaxonhttp://identifiers.org/taxonomy/511145taxonomy51114510
1bqm_ishttp://identifiers.org/bigg.model/e_coli_corebigg.modele_coli_core20
2bqb_isDescribedByhttps://identifiers.org/pubmed/1111111pubmed111111132
3bqb_isDescribedByhttps://identifiers.org/eco/ECO:0000004ecoECO:000000432
4bqb_hasParthttps://identifiers.org/kegg.module/M00009kegg.moduleM0000940
5bqb_hasParthttps://identifiers.org/kegg.module/M00003kegg.moduleM0000350
\n", + "
" + ], + "text/plain": [ + " qualifier uri \\\n", + "0 bqb_hasTaxon http://identifiers.org/taxonomy/511145 \n", + "1 bqm_is http://identifiers.org/bigg.model/e_coli_core \n", + "2 bqb_isDescribedBy https://identifiers.org/pubmed/1111111 \n", + "3 bqb_isDescribedBy https://identifiers.org/eco/ECO:0000004 \n", + "4 bqb_hasPart https://identifiers.org/kegg.module/M00009 \n", + "5 bqb_hasPart https://identifiers.org/kegg.module/M00003 \n", + "\n", + " namespace identifier annotation_group parent_group \n", + "0 taxonomy 511145 1 0 \n", + "1 bigg.model e_coli_core 2 0 \n", + "2 pubmed 1111111 3 2 \n", + "3 eco ECO:0000004 3 2 \n", + "4 kegg.module M00009 4 0 \n", + "5 kegg.module M00003 5 0 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "pd.DataFrame.from_records(model.metadata.standardized.to_records())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "source": [ + "## Custom annotations\n", + "\n", + "Custom annotations define key-value/URI pairs that can be used for storing any type of key-value pair data which is not suitable to store anywhere else in the model, where an optional URI provides an explanation of the key-value pair. Standardized annotations should be preferred whenever possible, since they provide more interoperability with other tools. Custom annotations can be accessed through an object's `metadata.custom` attribute, which largely behaves like a python dict." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "CustomAnnotation('answer': '42' ('https://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy'))" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from cobra.core.metadata import CustomAnnotation\n", + "\n", + "entry1 = CustomAnnotation(\n", + " key=\"cobra_flag\",\n", + " value=\"starred\",\n", + " uri=\"https://cobrapy.readthedocs.io\",\n", + ")\n", + "entry2 = CustomAnnotation.from_data({\n", + " \"key\": \"answer\",\n", + " \"value\": \"42\",\n", + " \"uri\": \"https://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy\",\n", + "})\n", + "\n", + "model.add_annotations([entry1, entry2])\n", + "\n", + "model.metadata.custom[\"answer\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Keys should be unique, but entries can be overwritten:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This is not allowed.\n", + "Nothing changed: starred\n", + "A new flag: important!\n" + ] + } + ], + "source": [ + "try:\n", + " model.metadata.custom.add({\"key\": \"cobra_flag\", \"value\": \"important!\"})\n", + "except IndexError:\n", + " print(\"This is not allowed.\")\n", + "print(f\"Nothing changed: {model.metadata.custom['cobra_flag'].value}\")\n", + "\n", + "model.metadata.custom[\"cobra_flag\"] = \"important!\"\n", + "print(f\"A new flag: {model.metadata.custom['cobra_flag'].value}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`CustomAnnotation` objects are cobrapy objects, so they can have their own metadata. One could add further, standardized, evidence of the information in the key-value pair." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + "
Qualifier\n", + " Qualifier.Modelling_isDescribedBy\n", + "
URIhttps://identifiers.org/eco/ECO:0000362
Namespaceeco
IdentifierECO:0000362
Memory address0x732386ef3c50
" + ], + "text/plain": [ + "cobra.core.metadata.standardized.StandardizedAnnotation({'qualifier': 'bqm_isDescribedBy', 'resources': ['https://identifiers.org/eco/ECO:0000362']})" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "entry2.add_annotations([\n", + " StandardizedAnnotation(\n", + " qualifier=Qualifier.Modelling_isDescribedBy,\n", + " resources=\"https://identifiers.org/eco/ECO:0000362\")\n", + "])\n", + "model.metadata.custom[\"answer\"].metadata.standardized[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Legacy annotation interface\n", + "Each cobrapy object provides a legacy annotation interface, accessible through the `annotation` attribute. This interface provides dict-like access to the resources of standardized annotations. However, since standardized annotations also have qualifiers and can be nested and organized, a dict-like class is unable to provide comprehensive interface. When changing or adding resources using this interface, their qualifiers and order are set using defaults and may not be optimal. This interface is in place to retain compatibility with older cobrapy versions and ease migration to the new metadata interface. It is therefore advised to use `metadata.standardized` when writing new code." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Taxon: ['511145']\n", + "Modules: ['M00003', 'M00009']\n" + ] + } + ], + "source": [ + "print(f\"Taxon: {model.annotation['taxonomy']}\")\n", + "print(f\"Modules: {model.annotation['kegg.module']}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some of the issues with this interface become clear when we try to add an NCBI RefSeq genome to the metadata of the model." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['GCF_000005845.2']\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + "
Qualifier\n", + " Qualifier.Biological_is\n", + "
URIhttps://identifiers.org/refseq.gcf/GCF_000005845.2
Namespacerefseq.gcf
IdentifierGCF_000005845.2
Memory address0x732386efd890
" + ], + "text/plain": [ + "cobra.core.metadata.standardized.StandardizedAnnotation({'qualifier': 'bqb_is', 'resources': ['https://identifiers.org/refseq.gcf/GCF_000005845.2']})" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.annotation[\"refseq.gcf\"] = \"GCF_000005845.2\"\n", + "print(model.annotation[\"refseq.gcf\"])\n", + "model.metadata.standardized[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The genome sequence is added with the qualifier `Qualifier.Biological_is`, whilst `Qualifier.Biological_hasPart` would be more appropriate, since the genome is part of the bacterial cell the model aims to represent. In this case, the annotation can easily be corrected through the `metadata.standardized` interface, but in other cases it could require more effort, since the resource could be added to an existing annotation with the same qualifier." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['GCF_000005845.2']\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " \n", + "
Qualifier\n", + " Qualifier.Biological_hasPart\n", + "
URIhttps://identifiers.org/refseq.gcf/GCF_000005845.2
Namespacerefseq.gcf
IdentifierGCF_000005845.2
Memory address0x732386efd890
" + ], + "text/plain": [ + "cobra.core.metadata.standardized.StandardizedAnnotation({'qualifier': 'bqb_hasPart', 'resources': ['https://identifiers.org/refseq.gcf/GCF_000005845.2']})" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.metadata.standardized[0].qualifier = Qualifier.Biological_hasPart\n", + "print(model.annotation[\"refseq.gcf\"])\n", + "model.metadata.standardized[0]" + ] + } + ], + "metadata": { + "colab": { + "name": "metadata.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/documentation_builder/requirements.txt b/documentation_builder/requirements.txt index 51ee40a3c..d4bc245b7 100644 --- a/documentation_builder/requirements.txt +++ b/documentation_builder/requirements.txt @@ -1,4 +1,4 @@ -Sphinx~=5.3 +Sphinx sphinxcontrib-napoleon sphinx-autoapi nbsphinx>=0.2.4 diff --git a/scripts/compare-benchmark.py b/scripts/compare-benchmark.py index b281896aa..e3f254f10 100644 --- a/scripts/compare-benchmark.py +++ b/scripts/compare-benchmark.py @@ -1,7 +1,6 @@ import argparse import json -import re -from os.path import basename +from pathlib import Path import pandas as pd @@ -12,12 +11,13 @@ def benchmark_to_df(json_file): with open(json_file) as jf: content = json.load(jf) - df = pd.DataFrame(columns=("test", "time [ms] ")) + # df = pd.DataFrame(columns=("test", "time [ms] ")) + benchmark_data = [] for b in content["benchmarks"]: - df = df.append( + benchmark_data.append( {"test": b["name"], "time [ms] ": b["stats"]["mean"] * 1000.0}, - ignore_index=True, ) + df = pd.DataFrame.from_records(benchmark_data) return df @@ -36,9 +36,8 @@ def benchmark_to_df(json_file): first = benchmark_to_df(args.first) second = benchmark_to_df(args.second) - re_name = "^[0-9]+_(.+).json$" - first_name = re.findall(re_name, basename(args.first))[0] - second_name = re.findall(re_name, basename(args.second))[0] + first_name = Path(args.first).stem + second_name = Path(args.second).stem both = pd.merge( first, second, how="inner", on="test", suffixes=(first_name, second_name) ) diff --git a/scripts/parse_identifiers_registry.py b/scripts/parse_identifiers_registry.py new file mode 100644 index 000000000..446dcb26a --- /dev/null +++ b/scripts/parse_identifiers_registry.py @@ -0,0 +1,44 @@ +import re +from pprint import pprint + +import requests + +PATTERN_RE = re.compile(r"^\^?([a-zA-Z_]+):") + + +def parse_registry(data): + namespaces = data["_embedded"]["namespaces"] + special_cases = {} + patterns_with_extra_colon = [] + for namespace in namespaces: + pattern = namespace["pattern"] + if namespace["namespaceEmbeddedInLui"]: + special_cases[namespace["prefix"]] = pattern + pattern_namespace = PATTERN_RE.match(pattern) + if not pattern_namespace: + print( + f"ERROR: No namespace found in pattern: {pattern} ({namespace['deprecated']})" + ) + else: + pattern_namespace = pattern_namespace.group(1) + if pattern_namespace.lower() != namespace["prefix"]: + print( + f"ERROR: {namespace['prefix']} -> {pattern_namespace} ({namespace['deprecated']})" + ) + else: + if ":" in pattern: + patterns_with_extra_colon.append(namespace["prefix"]) + + return special_cases, patterns_with_extra_colon + + +if __name__ == "__main__": + data = requests.get( + "https://registry.api.identifiers.org/restApi/namespaces?sort=name,asc&size=10000" + ).json() + + special_cases, patterns_with_extra_colon = parse_registry(data) + print("COMPACT_URL_INTEGRATED_NAMESPACES:") + pprint(list(special_cases.keys())) + print("COMPACT_URL_IDENTIFIERS_WITH_COLON:") + pprint(patterns_with_extra_colon) diff --git a/setup.cfg b/setup.cfg index 2c6e66bee..18753f880 100644 --- a/setup.cfg +++ b/setup.cfg @@ -6,7 +6,7 @@ parse = (?P\d+) \.(?P\d+) \.(?P\d+) (?P[a]*)(?P\d*) -serialize = +serialize = {major}.{minor}.{patch}{release}{num} {major}.{minor}.{patch} tag_name = {new_version} @@ -15,7 +15,7 @@ tag_name = {new_version} name = cobra url = https://opencobra.github.io/cobrapy download_url = https://pypi.org/project/cobra -project_urls = +project_urls = Source Code = https://github.com/opencobra/cobrapy Documentation = https://cobrapy.readthedocs.io Bug Tracker = https://github.com/opencobra/cobrapy/issues @@ -23,7 +23,7 @@ author = The cobrapy core development team. author_email = cobra-pie@googlegroups.com maintainer = Moritz E. Beber maintainer_email = moritz.beber@gmail.com -classifiers = +classifiers = Development Status :: 5 - Production/Stable Intended Audience :: Science/Research License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) @@ -40,7 +40,7 @@ license = LGPL-2.0-or-later OR GPL-2.0-or-later description = COBRApy is a package for constraint-based modeling of metabolic networks. long_description = file: README.rst, INSTALL.rst long_description_content_type = text/x-rst -keywords = +keywords = metabolism biology constraint-based @@ -52,39 +52,41 @@ keywords = [options] zip_safe = True -install_requires = - appdirs ~=1.4 - depinfo ~=2.2 - diskcache ~=5.0 - future - httpx ~=0.24 - importlib_resources - numpy >=1.13 - optlang ~=1.8 - pandas >=1.0,<3.0 - pydantic >=1.6 - python-libsbml ~=5.19 - rich >=8.0 - ruamel.yaml ~=0.16 - swiglpk -tests_require = +install_requires = + appdirs ~=1.4 + depinfo ~=2.2 + diskcache ~=5.0 + future + httpx ~=0.24 + importlib_resources + numpy >=1.13 + optlang ~=1.8 + pandas >=1.0,<3.0 + pydantic >=1.6 + python-libsbml >=5.20.0, <5.20.5 ; python_version < '3.9' + python-libsbml >=5.20.5 ; python_version >= '3.9' + rich >=8.0 + ruamel.yaml ~=0.16 + swiglpk + jsonschema +tests_require = tox packages = find: -package_dir = +package_dir = = src [options.packages.find] where = src [options.package_data] -cobra = +cobra = data/* io/*.json [options.extras_require] -array = +array = scipy -development = +development = black bumpversion isort @@ -96,7 +98,7 @@ universal = 1 [bumpversion:part:release] optional_value = placeholder first_value = placeholder -values = +values = placeholder a diff --git a/src/cobra/__init__.py b/src/cobra/__init__.py index 3531c96ac..89bdc5231 100644 --- a/src/cobra/__init__.py +++ b/src/cobra/__init__.py @@ -5,13 +5,17 @@ from cobra.core import ( Configuration, DictList, + Object, Gene, Metabolite, Model, - Object, Reaction, Solution, Species, + StandardizedAnnotation, + CustomAnnotation, + Qualifier, + Resource, ) from cobra import flux_analysis from cobra import io diff --git a/src/cobra/core/__init__.py b/src/cobra/core/__init__.py index 12e082517..ca4823c81 100644 --- a/src/cobra/core/__init__.py +++ b/src/cobra/core/__init__.py @@ -1,10 +1,18 @@ from cobra.core.configuration import Configuration from cobra.core.dictlist import DictList -from cobra.core.gene import Gene, GPR +from cobra.core.object import Object +from cobra.core.gene import GPR, Gene +from cobra.core.group import Group from cobra.core.metabolite import Metabolite +from cobra.core.metadata import ( + Metadata, + Resource, + Qualifier, + StandardizedAnnotation, + CustomAnnotation, +) +from cobra.core.metadata.history import Creator, History from cobra.core.model import Model -from cobra.core.object import Object from cobra.core.reaction import Reaction -from cobra.core.group import Group from cobra.core.solution import Solution, get_solution from cobra.core.species import Species diff --git a/src/cobra/core/metadata/__init__.py b/src/cobra/core/metadata/__init__.py new file mode 100644 index 000000000..9cf36b8ff --- /dev/null +++ b/src/cobra/core/metadata/__init__.py @@ -0,0 +1,15 @@ +"""Provide functions for loading, saving and modifying metadata annotations.""" + +from cobra.core.metadata.resource import ( + Resource, + Qualifier, + QualifiersAlias, + parse_identifiers_uri, +) +from cobra.core.metadata.standardized import ( + StandardizedAnnotation, + StandardizedAnnotationStore, +) +from cobra.core.metadata.history import Creator, History +from cobra.core.metadata.custom import CustomAnnotation, CustomAnnotationStore +from cobra.core.metadata.metadata import Metadata diff --git a/src/cobra/core/metadata/custom.py b/src/cobra/core/metadata/custom.py new file mode 100644 index 000000000..20cedfc1f --- /dev/null +++ b/src/cobra/core/metadata/custom.py @@ -0,0 +1,494 @@ +"""Classes to handle custom annotations. + +Custom annotations correspond to key-value pairs, described in the SBML FBC3 proposal. +For the latest version of the FBC3 proposal, see Release Candidate 1: +https://github.com/sbmlteam/sbml-specifications/blob/develop/sbml-level-3/version-1/fbc/spec/sbml-fbc-version-3-release-1.pdf +""" + +# TODO: Update docstring with final release, when available. +import uuid +from collections import UserDict +from typing import Any, Dict, Iterable, Optional, Union + +from ...util import format_long_string +from .. import object as cobject + + +class CustomAnnotation(cobject.Object): + """Custom annotation entry that represents a key-value/URI pair. + + `CustomAnnotation` object allow users to associate an arbitrary string value and/or + URI with a key. This key-value store is meant to supplement the + StandardizedAnnotation class, where MIRIAM-compliant annotations can be associated + with model components. Whenever possible, `StandardizedAnnotation` objects should be + preferred over CustomAnnotation objects, since they enable better interoperability + between modelling tools. + + Parameters + ---------- + key: str + Mandatory and descriptive string used for accessing the value/URI. + value: str, optional + Associated value. Default None. + uri: str, optional + URN or URL that links to the definition of the used key. Default None. + """ + + def __init__( + self, key: str, value: Optional[str] = None, uri: Optional[str] = None + ): + """Initialize a `CustomAnnotation` key-value pair object.""" + super(__class__, self).__init__() + self._key = key + self._value = value + self._uri = uri + self._parent = None + + def _set_parent(self, parent: Optional["CustomAnnotationStore"]) -> None: + if self._parent is None or parent is None: + self._parent = parent + else: + raise ValueError( + "CustomAnnotation already has a parent. Create a new " + "annotation if you would like to add an annotation to a second object." + ) + + def remove_from_parent(self): + """Remove this CustomAnnotation object from its `CustomAnnotationStore`. + + This method only removes and disassociates this object from its associated + `CustomAnnotationStore` (e.g. `component.metadata.custom`), it does not + delete the object itself. + + Raises + ------ + ValueError + If the object is not associated with a `CustomAnnotationStore`. + + See Also + -------- + CustomAnnotationStore.add + Object.add_annotation + """ + if self._parent is None: + raise ValueError( + "Cannot remove annotation since no object is associated with it." + ) + self._parent.remove(self) + + @property + def key(self) -> str: + """Get the key. + + The key is read-only to prevent duplication of keys in `CustomAnnotationStore` + objects. + + Returns + ------- + str + The key of the `CustomAnnotation` object. + """ + return self._key + + @property + def value(self) -> Optional[str]: + """Get the value associated to the key. + + Returns + ------- + str or None + The value associated with the key, or None if no value was provided. + """ + return self._value + + @value.setter + def value(self, value: Optional[str]) -> None: + """Set the value associated to the key. + + Parameters + ---------- + value: str or None + The value to be associated with the key. + """ + self._value = value + + @property + def uri(self) -> Optional[str]: + """Get the URI (URN or URL) associated to the key. + + Returns + ------- + str or None + The URI associated with the key, or None if no URI was provided. + """ + return self._uri + + @uri.setter + def uri(self, uri: Optional[str]) -> None: + """Set the URI associated to the key. + + Parameters + ---------- + uri: str or None + The URI to be associated with the key. + """ + self._uri = uri + + @staticmethod + def from_data( + data: Union[Dict, "CustomAnnotation"], + ) -> "CustomAnnotation": + """Create a `CustomAnnotation` object from data. + + Parameters + ---------- + data: dict or CustomAnnotation + Data to use to create the `CustomAnnotation`object. If data is of type dict, + it should contain the key "key" and optionally "value", "uri", "id" and + "name". If the data is already a `CustomAnnotation` object, this object will + be returned. + + Returns + ------- + CustomAnnotation + + Raises + ------ + TypeError if data is not a dict or CustomAnnotation object. + + See Also + -------- + to_dict + """ + from cobra.core.metadata.metadata import Metadata + + if isinstance(data, CustomAnnotation): + return data + elif isinstance(data, dict): + if "key" not in data: + data["key"] = uuid.uuid4().hex + ann = CustomAnnotation( + key=data["key"], value=data.get("value"), uri=data.get("uri") + ) + if "id" in data: + ann.id = data["id"] + if "name" in data: + ann.name = data["name"] + if "metadata" in data: + ann.metadata = Metadata.from_dict(data["metadata"]) + return ann + else: + raise TypeError(f"Invalid format for CustomAnnotation: '{data}'") + + def to_dict(self, include_key: bool = True, include_metadata: bool = False) -> dict: + """Create a dictionary with the data of the `CustomAnnotation` object. + + Parameters + ---------- + include_key: bool + Whether to include the key of the CustomAnnotation in the dict. Default + True. + include_metadata: bool + Whether to include the nested metadata of the CustomAnnotation in the dict. + Default True. + + + Returns + ------- + dict + Dictionary containing all the `CustomAnnotation` data. Dictionary will + contain the key "key" and optionally "value", "uri", "id" and "name". + """ + out_dict: Dict[str, Any] = {"key": self.key} if include_key else {} + for k in ["value", "uri", "id", "name"]: + if (v := getattr(self, k, None)) is not None and v != "": + out_dict[k] = v + if self.metadata: + out_dict["metadata"] = self.metadata.to_dict() + return out_dict + + def __str__(self) -> str: + """Get string representation of the CustomAnnotation as dictionary. + + Returns + ------- + str + """ + return str(self.to_dict()) + + def __repr__(self) -> str: + """Get string representation, including module and class name. + + Returns + ------- + str + """ + return ( + f"CustomAnnotation({repr(self.key)}: {repr(self.value)}" + f" ({repr(self.uri)}))" + ) + + def __deepcopy__(self, memo: dict): + """Copy the CustomAnnotation efficiently with memo. + + Parameters + ---------- + memo: dict + Automatically passed parameter, dict of already copied items. + + Returns + ------- + CustomAnnotation + A new annotation that is a deep copy of the original. + """ + + annotation = CustomAnnotation(key=self.key, value=self.value, uri=self.uri) + # memo[id(self)] = annotation + annotation.id = self.id + annotation.name = self.name + annotation.metadata = self.metadata.__deepcopy__(memo) + return annotation + + def copy(self) -> "CustomAnnotation": + """Copy the annotation and all its nested metadata. + + Returns + ------- + CustomAnnotation + A new annotation that is a deep copy of the original. + """ + + return self.__deepcopy__({}) + + +class CustomAnnotationStore(UserDict): + """A dict-like object that stores a collection of `CustomAnnotation` objects. + + This store allows users to associate arbitrary string values and/or + URIs with keys. This key-value store is meant to supplement the standardized + MIRIAM-compliant annotations. Whenever possible, standardized annotations are + preferred over custom annotations, since they enable better interoperability + between modelling tools. + + Parameters + ---------- + entries: None, CustomAnnotationStore or list of CustomAnnotation or dicts, + optional + Custom annotations to initialize the store with. Default None. + """ + + def __init__( + self, + entries: Optional[ + Union[ + Dict, Iterable[Union[Dict, CustomAnnotation]], "CustomAnnotationStore" + ] + ] = None, + ): + """Initialize the dict-like CustomAnnotationStore class.""" + super().__init__() + if entries is None: + return + elif isinstance(entries, dict): + for k, item in entries.items(): + entry = CustomAnnotation.from_data({**item, "key": k}) + self[entry.key] = entry + elif isinstance(entries, CustomAnnotationStore): + for item in entries.values(): + entry = CustomAnnotation.from_data(item.copy()) + self[entry.key] = entry + else: + for item in entries: + entry = CustomAnnotation.from_data(item) + self[entry.key] = entry + + def __setitem__( + self, key: str, item: Optional[Union[Dict, CustomAnnotation, str]] + ) -> None: + """Set the value and/or URI associated with the key. + + Parameters + ---------- + key: str + Key used to look up value/URI in store. + item: dict, str, CustomAnnotation or None + Value/URI to associate to key. If item is of type str, this will be + interpreted as value. If a dict is provided, this dict can contain any of + the keys "value", "uri", "id", "name", "key". + + Raises + ------ + ValueError if the "key" key in the provided dictionary or the key attribute of + the CustomAnnotation does not match the key argument. + + See Also + -------- + add + """ + if isinstance(item, dict): + if "key" in item and item["key"] != key: + raise ValueError( + "The key in the annotation dictionary is not equal to the key " + "provided in the index." + ) + # Make sure the key is also provided to the CustomAnnotation class. + item = {**item, "key": key} + elif isinstance(item, CustomAnnotation): + if item.key != key: + raise ValueError( + "The key in the annotation object is not equal to the key " + "provided in the index." + ) + elif isinstance(item, str): + item = {"key": key, "value": item} + else: + raise TypeError( + "CustomAnnotationStore entries should be provided as dict, str " + "or CustomAnnotation object." + ) + self.add(item, overwrite=True) + + def __str__(self) -> str: + """Convert the custom annotation store to str. + + Returns + ------ + str + """ + return str(self.to_dict()) + + def __repr__(self) -> str: + """Get string representation, including module and class name. + + Returns + ------- + str + """ + return ( + f"{self.__class__.__module__}.{self.__class__.__qualname__}" + f"({self.to_dict()!r})" + ) + + def _repr_html_(self) -> str: + """Get HTML representation. + + Returns + ------- + str + HTML formatted string + """ + return f"""

{self.__class__.__qualname__}

+

{format_long_string(self.__str__(), 100)}

""" + + def to_dict(self) -> dict: + """Get dictionary representation. + + Returns + ------- + dict + keys are the keys, and each value is the CustomAnnotation represented as + a dict. + """ + return {k: v.to_dict(include_key=False) for k, v in self.data.items()} + + def add( + self, + items: Union[CustomAnnotation, Dict, Iterable[Union[CustomAnnotation, Dict]]], + overwrite: bool = False, + ) -> None: + """Add custom annotations to the store. + + Parameters + ---------- + items: dict, CustomAnnotation or a list of dict or CustomAnnotation objects + Custom annotation items to add to the store. CustomAnnotation objects can + either be provided directly, or as a dictionary. + overwrite: bool, optional + Whether to overwrite an existing custom annotation with the same key. + Default False. + + Raises + ------ + IndexError if overwrite is False and the key of a custom annotation already + exists in the store. + """ + if isinstance(items, CustomAnnotation): + items = [items] + elif isinstance(items, dict): + items = [CustomAnnotation.from_data(items)] + for item in items: + item = CustomAnnotation.from_data(item) + if not overwrite and item.key in self.data: + raise IndexError(f"Key '{item.key}' already exists in store.") + item._set_parent(self) + self.data[item.key] = item + + def remove( + self, + items: Union[CustomAnnotation, str, Iterable[Union[CustomAnnotation, str]]], + ) -> None: + """Remove a custom annotation from the store. + + Parameters + ---------- + items: str, CustomAnnotation or a list of str or CustomAnnotation objects + Remove the proved CustomAnnotation objects from the store. If str objects + are provided, they are interpreted as keys of the annotations to remove. + + Raises + ------ + ValueError if a provided CustomAnnotation object is not present in the store. + """ + if isinstance(items, (str, CustomAnnotation)): + items = [items] + + for item in items: + if isinstance(item, CustomAnnotation): + if item.key not in self.data: + raise ValueError("The provided key was not found in the store.") + ann = self.data[item.key] + if ann is not item: + raise ValueError( + "Provided custom annotation does not match the " + "custom annotation in the store." + ) + item = ann.key + if item not in self.data: + raise ValueError("The provided key was not found in the store.") + # If CustomAnnotation object is removed from CustomAnnotationStore, it will + # also not belong to the parent object anymore. + self.data[item]._set_parent(None) + del self.data[item] + + def __deepcopy__(self, memo: dict): + """Copy the CustomAnnotationStore efficiently with memo. + + Parameters + ---------- + memo: dict + Automatically passed parameter, dict of already copied items. + + Returns + ------- + CustomAnnotationStore + A new store that is a deep copy of the original store. + """ + new = CustomAnnotationStore() + # memo[id(self)] = new + new.add([ann.__deepcopy__(memo) for ann in self.values()]) + return new + + def copy(self) -> "CustomAnnotationStore": + """Copy the annotation store and all its annotations. + + Returns + ------- + CustomAnnotationStore + A new store that is a deep copy of the original store. + """ + return self.__deepcopy__({}) + + # query + + # add_key_value_pair + # delete_key_value_pair?? Maybe with query diff --git a/src/cobra/core/metadata/history.py b/src/cobra/core/metadata/history.py new file mode 100644 index 000000000..09801f39f --- /dev/null +++ b/src/cobra/core/metadata/history.py @@ -0,0 +1,522 @@ +"""Encodes History and Creator. + +The history allows to encode provenance meta-data about +model objects. The history allows to encode who created or modified +objects in a model with respective time stamps. +""" + +import re +from datetime import datetime +from typing import Any, Dict, Iterable, List, Optional, Union + + +STRTIME_FORMAT = "%Y-%m-%dT%H:%M:%S%z" + + +class History: + """History object encoding object provenance. + + Parameters + ---------- + creators: list + list of Creator class. Optional, default None. + created_date: datetime + Created date. Optional, default None. + modified_dates: list + Dates when this annotation was modified. List of datetime dates or strings. + Optional, default None. + """ + + def __init__( + self, + creators: Optional[List["Creator"]] = None, + created_date: Optional[Union[datetime, str]] = None, + modified_dates: Optional[List[Union[datetime, str]]] = None, + ): + """Initialize the class.""" + + self._creators: List[Creator] = [] + self._created_date: Optional[datetime] = None + self._modified_dates: List[datetime] = [] + + # use properties to set fields + self.creators = creators + self.created_date = created_date + self.modified_dates = modified_dates + + @property + def creators(self) -> List["Creator"]: + """Get creators for History. + + Returns + ------- + list + A list of Creator objects. + """ + return self._creators + + @creators.setter + def creators(self, values: Optional[Iterable[Union[Dict, "Creator"]]]) -> None: + """Set creators for History. + + Parameters + ---------- + values: iterable + An iterable of dictionaries and/or Creator objects. + """ + if values is None: + self._creators = [] + else: + self._creators = [Creator.from_data(v) for v in values] + + @staticmethod + def parse_datetime(value: Optional[Union[str, datetime]]) -> Optional[datetime]: + """Parse datetime into str. + + Parameters + ---------- + value: str or datetime + Optional. If None, the function will return None. + str is converted to datetime. + If given datetime, the format will be validated. + + Returns + ------- + datetime: optional + Returns None if given None. + + Raises + ------ + TypeError + If value is not None, or an instance of str, datetime. + """ + if value is None: + return None + if isinstance(value, datetime): + return value + elif isinstance(value, str): + return History.date_from_str(value) + else: + raise TypeError( + f"Invalid type passed for datetime. " + f"Accepted types are 'str' or 'datetime' objects: {value}" + ) + + @staticmethod + def date_from_str(datetime_str: str) -> datetime: + """Validate if the date format is of type w3cdtf ISO 8601. + + Parameters + ---------- + datetime_str: str + Datetime in string format. + + Returns + ------- + datetime if valid format + + Raises + ------ + ValueError if not valid. + """ + if not isinstance(datetime_str, str): + raise TypeError(f"The date passed must be of type string: {datetime_str}") + + # python 3.6 doesn't allow : (colon) in the utc offset. + try: + datetime_return = datetime.strptime(datetime_str, STRTIME_FORMAT) + return datetime_return + except ValueError as e: + datetime_str = datetime_str.replace("Z", "+0000") + datetime_str = re.sub(r"(\+\d\d):(\d\d)\Z", "\\1\\2", datetime_str) + try: + datetime_return = datetime.strptime(datetime_str, STRTIME_FORMAT) + except ValueError: + raise ValueError(str(e)) + return datetime_return + + @property + def created_date(self) -> Optional[datetime]: + """Get created date for History. + + Returns + ------- + datetime + """ + return self._created_date + + @created_date.setter + def created_date(self, date: Optional[Union[str, "datetime"]]) -> None: + """Set created date for History. + + Parameters + ---------- + date: str or datetime + """ + self._created_date = self.parse_datetime(date) + + @property + def modified_dates(self) -> List[datetime]: + """Get modified dates. + + Returns + ------- + list + List of datetimes when this annotation was modified, if any exist. + List can be empty. + """ + return self._modified_dates + + @modified_dates.setter + def modified_dates(self, dates: Optional[Iterable[Union[str, datetime]]]) -> None: + """Set modified dates. + + Parameters + ------- + list + List of datetimes or strings when this annotation was modified. + """ + if dates is None: + self._modified_dates = [] + else: + mds = [self.parse_datetime(d) for d in dates] + self._modified_dates = [md for md in mds if md is not None] + + @staticmethod + def from_data(data: Optional[Union[Dict, "History"]]) -> "History": + """Parse history from data. + + Parameters + ---------- + data: dict or History + Dict will be parsed to History object. + + Returns + ------- + History + + Raises + ------ + TypeError + If data is neither dict, History or None. + """ + if data is None: + return History() + elif isinstance(data, History): + return data + elif isinstance(data, dict): + return History(**data) + else: + raise TypeError(f"Unsupported type for History: '{data}'") + + def is_empty(self) -> bool: + """Check if history is empty. + + Returns + ------- + bool + Returns False if at least one history attribute is set, else True. + """ + if self.creators: + return False + if self.created_date: + return False + if self.modified_dates: + return False + return True + + def __eq__(self, other: "History") -> bool: + """Check equality of two history objects. + + A history is equal if all attributes are equal. + If one and only one of self or other is empty will return False. + If both are empty, will return True. + + Returns + ------- + bool - True if equal, False otherwise. + """ + if self.is_empty() and other.is_empty(): + return True + elif (self.is_empty() and not other.is_empty()) or ( + not self.is_empty() and other.is_empty() + ): + return False + # check equality of creators + if len(self.creators) != len(other.creators): + return False + for k, creator in enumerate(self.creators): + if creator != other.creators[k]: + return False + + # checking equality of created_date + if self.created_date != other.created_date: + return False + + # checking equality of modified_dates + if len(self.modified_dates) != len(other.modified_dates): + return False + for k, modified_date in enumerate(self.modified_dates): + if modified_date != other.modified_dates[k]: + return False + + return True + + def to_dict(self) -> Dict: + """Return dictionary representation of History. + + Returns + ------- + dict - Dictionary representation, of this format + { + "creators": list[dict] + "created_date": str + "modified_dates": list[str] + } + """ + return { + "creators": [c.to_dict() for c in self.creators], + "created_date": self.created_date and self.created_date.isoformat(), + "modified_dates": [ + mod_date.isoformat() for mod_date in self._modified_dates + ], + } + + def __str__(self) -> str: + """Return a string representation. + + Returns + ------- + str + History in a flattened dictionary. + """ + return str(self.to_dict()) + + def __repr__(self): + """Return a string with module and class name. + + Returns + ------- + str + History in a string, with module and class name. + """ + return ( + f"{self.__class__.__module__}.{self.__class__.__qualname__}" + f"({self.creators}, {self.created_date}, {self.modified_dates})" + ) + + +class Creator: + """Metadata for person who created an object. + + The creator has optional name, email and organisation properties. + Separate given and family name values will be combined to a single + value for name. (This prevents confusion due to different cultural + conventions, see for example: + https://uxmovement.com/forms/why-your-form-only-needs-one-name-field/) + + Parameters + ---------- + name: str + Full name of the creator. Optional, default None. + email: str + Email address of the creator. Optional, default None. + organisation: str + Name of the organisation of the creator, or the organisation that + created the model. Optional, default None. + """ + + def __init__( + self, + name: Optional[str] = None, + email: Optional[str] = None, + organisation: Optional[str] = None, + given_name: Optional[str] = None, + family_name: Optional[str] = None, + ): + """Create an Creator metadata object.""" + self._name: Optional[str] = None + self._email: Optional[str] = None + self._organisation: Optional[str] = None + + self.name = Creator._fix_name( + name=name, given_name=given_name, family_name=family_name + ) + self.email = email + self.organisation = organisation + + @staticmethod + def _fix_name( + name: Optional[str] = None, + given_name: Optional[str] = None, + family_name: Optional[str] = None, + ): + if name is not None and name != family_name: + if given_name is not None or family_name is not None: + raise ValueError( + """Too many name values were provided. Either a name or a + given and/or family name should be provided.""" + ) + return name + if given_name is not None and family_name is not None: + # This probably does not convert all names correctly. + # Names should however preferentially be represented as a single value. + return f"{given_name} {family_name}" + elif given_name is not None: + return given_name + else: + # This also covers the case where all values are None + return family_name + + @property + def name(self) -> Optional[str]: + """Get the model creator name. + + Returns + ------- + str + Creator name. + """ + return self._name + + @name.setter + def name(self, value: Optional[str]) -> None: + """Set the name of the model creator. + + Parameters + ---------- + value: str + Name of the creator. + """ + self._name = value + + @property + def email(self) -> Optional[str]: + """Get the email address of the model creator. + + Returns + ------- + str + Email address. + """ + return self._email + + @email.setter + def email(self, value: Optional[str]) -> None: + """Set the email of the model creator. + + Parameters + ---------- + value: str + Email address of the creator. + """ + self._email = value + + @property + def organisation(self) -> Optional[str]: + """Get the organisation of the model creator. + + Returns + ------- + str + Organisation. + """ + return self._organisation + + @organisation.setter + def organisation(self, value: Optional[str]) -> None: + """Set the organisation of the model creator. + + Parameters + ---------- + value: str + Organisation of the model creator. + """ + self._organisation = value + + @staticmethod + def from_data(data: Union[Dict, "Creator"]) -> "Creator": + """Parse creator from data. + + Parameters + ---------- + data: dict or Creator + Dictionary will be converted to Creator class. + + Returns + ------- + Creator - the creator in the Creator class + """ + if not data: + return Creator() + elif isinstance(data, Creator): + return data + elif isinstance(data, dict): + return Creator(**data) + else: + raise TypeError(f"Invalid format for Creator: {data}") + + def _asdict(self) -> Dict: + d = {} + if self.name is not None: + d["name"] = self.name + if self.email is not None: + d["email"] = self.email + if self.organisation is not None: + d["organisation"] = self.organisation + return d + + def to_dict(self) -> Dict: + """Convert Creator to dictionary. + + Returns + ------- + dict in this format + { + "name": str, + "email": str, + "organisation": str, + } + """ + return dict(self._asdict()) + + def __str__(self) -> str: + """Return string representation of Creator. + + Returns + ------- + str + String version of flattened dictionary. + """ + return str(self.to_dict()) + + def __repr__(self): + """Return the Creator with module, class, and internal fields. + + Returns + ------- + str + """ + return ( + f"{self.__class__.__module__}.{self.__class__.__qualname__}" + f"('{self.name}', '{self.email}', " + f"'{self.organisation}')" + ) + + def __eq__(self, other: Any) -> bool: + """Determine whether the Creator is equal to another Creator object. + + Parameters + ---------- + other: Creator + Creator object to compare to. + """ + if not isinstance(other, __class__): + return False + if self.name != other.name: + return False + if self.email != other.email: + return False + if self.organisation != other.organisation: + return False + return True diff --git a/src/cobra/core/metadata/metadata.py b/src/cobra/core/metadata/metadata.py new file mode 100644 index 000000000..c506853b4 --- /dev/null +++ b/src/cobra/core/metadata/metadata.py @@ -0,0 +1,412 @@ +"""The Metadata class that provides an interface to all types of cobra metadata.""" + +from collections import OrderedDict +from datetime import datetime +from typing import Dict, Iterable, List, Optional, Union + +import cobra.core.metadata.custom as CA +import cobra.core.metadata.standardized as SA + +from ..metadata.history import Creator, History + + +class Metadata: + """Metadata of a cobrapy object. + + Metadata encodes additional information on an object, such as annotations. This + information is mainly stored in the SBML annotation tags. + + Metadata consists of four components: + - standardized: contains annotations in a standardized format, based on + https://identifier.org identifiers and BioModels.net qualifiers. + This information is also exposed via the object.annotation interface for + full backwards compatibility with earlier cobrapy versions. See + Metadata.standardized and Object.annotation. + - history: storing the object history consisting of creators, created date, and + modified dates. + - custom: contains custom annotations as key-value pairs. + - sbo - a single SBO term for the object. + + Parameters + ---------- + standardized : dict, list of StandardizedAnnotation, StandardizedAnnotationStore + Collection of standardized annotations. Dictionaries and lists of + StandardizedAnnotations are converted to a StandardizedAnnotationStore and + set as the `Metadata.standardized` attribute. + history : dict, History + The history information as a History object or dictionary. + custom: list + Custom annotation key-value pairs. + sbo: str + The sbo term to use for the entity. + + Examples + -------- + >>> from cobra.core import Metabolite, StandardizedAnnotation, Qualifier + >>> metabolite = Metabolite(id="ac", name="Acetate") + >>> type(metabolite.metadata).__name__ + Metadata + >>> metabolite.metadata.add_standardized( + [StandardizedAnnotation( + qualifier=Qualifier.Modelling_is, + resources=["bigg.metabolite:ac"], + )] + ) + >>> metabolite.metadata.standardized.resources_for( + qualifier=Qualifier.Modelling_is, + namespace="bigg.metabolite" + ) + [Resource(https://identifiers.org/bigg.metabolite:ac)] + """ + + def __init__( + self, + standardized: Optional[ + Union[ + Dict, + List["SA.StandardizedAnnotation"], + "SA.StandardizedAnnotationStore", + ] + ] = None, + history: Optional[Union[Dict, History]] = None, + custom: Optional[ + Union[Dict, List["CA.CustomAnnotation"], "CA.CustomAnnotationStore"] + ] = None, + sbo: str = "", + ): + """Initialize the Metadata class.""" + self._standardized = None + self._custom = None + + self.history = history + self.sbo = sbo + + if standardized is not None: + self.standardized = standardized + if custom is not None: + self.custom = custom + + @property + def standardized(self) -> "SA.StandardizedAnnotationStore": + """Get the standardized annotations. + + Returns + ------- + StandardizedAnnotationStore + """ + if self._standardized is None: + self._standardized = SA.StandardizedAnnotationStore() + return self._standardized + + @standardized.setter + def standardized( + self, + values: Optional[ + Union[ + Dict, + Iterable["SA.StandardizedAnnotation"], + "SA.StandardizedAnnotationStore", + ] + ], + ) -> None: + """Set the standardized annotations. + + Parameters + ---------- + values: dict, list of StandardizedAnnotation or StandardizedAnnotationStore + Lists and dicts are converted to StandardizedAnnotationStore using + StandardizedAnnotationStore.from_data(). + + See Also + -------- + StandardizedAnnotationStore.from_data + """ + if values is None: + self._standardized = None + else: + self._standardized = SA.StandardizedAnnotationStore.from_data(values) + + def add_standardized( + self, annotations: List[Union[Dict, "SA.StandardizedAnnotation"]] + ) -> None: + """Add one or more standardized annotations. + + This method will add StandardizedAnnotation objects to the standardized field. + + Parameters + ---------- + annotations: list of dict or StandardizedAnnotation + A list of standardized annotations to add to the metadata. + + See Also + -------- + StandardizedAnnotationStore.add + """ + self.standardized.add(annotations) + + @property + def history(self) -> History: + """Get history of the object. + + Returns + ------- + History + """ + return self._history + + @history.setter + def history(self, history: Optional[Union[Dict, History]]) -> None: + """Set history of the object. + + Parameters + ---------- + history: History or dict or None + If None is given, will set the History to be empty. + Dict is converted via History.from_data() + """ + self._history = History.from_data(history) + + def add_creators(self, creators: Iterable[Union[Creator, dict]]) -> None: + """Add one or more creators to the object history. + + The creators will be parsed and need to be a Creator object or a dictionary + in the correct format. + + Parameters + ---------- + creators: Iterable of dict or Creator + An iterable of dicts or Creator objects. + + See Also + -------- + Creator.from_data() + """ + self.history.creators.extend( + [Creator.from_data(creator) for creator in creators] + ) + + def add_modification_dates( + self, dates: Union[datetime, str, Iterable[Union[datetime, str]]] + ) -> None: + """Add modification dates to the object history. + + The dates will be parsed and need to be string in the acceptable format or + datetime. + + Parameters + ---------- + dates: Iterable or str or datetime + An iterable of strings or datetime objects, or one str or one datetime. + + See Also + -------- + History.parse_datetime() + """ + if isinstance(dates, (str, datetime)): + dates = [dates] + self.history.modified_dates.extend([History.parse_datetime(d) for d in dates]) + + @property + def sbo(self) -> str: + """Return the SBO term of the Metadata. + + Returns + ------- + str: SBO as string + """ + return self._sbo + + @sbo.setter + def sbo(self, value: Union[str, List[str]]) -> None: + """Set the SBO term.""" + if isinstance(value, list): + value = value[0] + self._sbo = value + + @property + def custom(self) -> "CA.CustomAnnotationStore": + """Returns the custom key-value pair annotations. + + Returns + ------- + CustomAnnotationStore: The custom annotations. + """ + if self._custom is None: + self._custom = CA.CustomAnnotationStore() + return self._custom + + @custom.setter + def custom( + self, + annotations: Optional[ + Union[Dict, List["CA.CustomAnnotation"], "CA.CustomAnnotationStore"] + ], + ) -> None: + """Set the custom key-value pair annotations. + + Parameters + ---------- + annotations: dict, list of CustomAnnotation or CustomAnnotationStore + A dictionary or CustomAnnotationStore instance that contains all custom + annotation key-value pairs. + """ + if annotations is None: + self._custom = None + elif isinstance(annotations, CA.CustomAnnotationStore): + self._custom = annotations + else: + self._custom = CA.CustomAnnotationStore(annotations) + + def __eq__(self, other: Union[Dict, "Metadata"]) -> bool: + """Compare two Metadata objects to find out whether they are equal. + + If given a dict, the dictionary is converted to Metadata and then compared. + + Two metadata objects are equal (the function will return True) if + - standardized annotations are equal + - all attributes of the history are equal + - custom annotations are equal + If one of these three conditions is not true, the function will return False. + + Parameters + ---------- + other: Metadata or dict + + Returns + ------- + bool: True if equal, False otherwise. + """ + if isinstance(other, dict): + return self == Metadata.from_dict(other) + elif isinstance(other, Metadata): + return ( + (self.standardized == other.standardized) + and (self.history == other.history) + and (self.custom == other.custom) + ) + else: + raise TypeError( + "Can only compare Metadata objects to dictionaries or other Metadata" + f"objects, not: {type(other)}." + ) + + def __ne__(self, other) -> bool: + """Compare two Metadata objects to find out whether they are not equal. + + Returns the inverse of `Metadata.__eq__`. + + Parameters + ---------- + other: Metadata or dict + + Returns + ------- + bool: False if equal, True otherwise. + + See Also + -------- + Metadata.__eq__() + """ + return not self.__eq__(other) + + def to_dict(self) -> Dict: + """Create a dictionary from the Metadata object. + + The dictionary will contain any of the keys 'sbo', 'standardized', 'history', + and 'custom', if the corresponding attributes are not empty. + + Returns + ------- + dict + + See Also + -------- + StandardizedAnnotationStore.to_list_of_dicts + History.to_dict + CustomAnnotationStore.to_dict + """ + d = OrderedDict() + if self.sbo: + # set first SBO term as sbo + d["sbo"] = self.sbo + + if self._standardized is not None and self.standardized: + d["standardized"] = self.standardized.to_list_of_dicts() + + if self.history and not self.history.is_empty(): + d["history"] = self.history.to_dict() + + if self._custom is not None and self.custom: + d["custom"] = self.custom.to_dict() + + return d + + @staticmethod + def from_dict(data: Dict) -> "Metadata": + """Generate a Metadata instance from dictionary. + + The dictionary should have any of the keys 'standardized', 'history', 'sbo', and + 'custom', which will be converted to the corresponding attributes. + + Parameters + ---------- + data: dict + Dictionary to transform into Metadata. + + Returns + ------- + Metadata + """ + standardized = data.get("standardized", None) + history = data.get("history", None) + custom = data.get("custom", None) + + if standardized or history or custom: + annotation = Metadata( + standardized=standardized, history=history, custom=custom + ) + else: + annotation = Metadata() + # annotation.standardized.add_simple_annotations(data) + # raise ValueError() + # TODO: Fix + + if "sbo" in data: + annotation.sbo = data["sbo"] + + return annotation + + def __deepcopy__(self, memo: dict): + """Copy the metadata efficiently with memo. + + Parameters + ---------- + memo: dict + Automatically passed parameter, dict of already copied items. + + Returns + ------- + Metadata + A new metadata instance that is a deep copy of the original. + """ + + if (new_val := memo.get(own_id := id(self))) is not None: + return new_val + new = Metadata(history=self.history.to_dict(), sbo=self.sbo) + memo[own_id] = new + if self._standardized is not None: + new._standardized = self._standardized.__deepcopy__() + if self._custom is not None: + new.custom = self._custom.__deepcopy__(memo) + return new + + def copy(self) -> "Metadata": + """Copy the metadata and all its attributes. + + Returns + ------- + Metadata + A new Metadata instance that is a deep copy of the original. + """ + + return self.__deepcopy__({}) diff --git a/src/cobra/core/metadata/resource.py b/src/cobra/core/metadata/resource.py new file mode 100644 index 000000000..8bce4746f --- /dev/null +++ b/src/cobra/core/metadata/resource.py @@ -0,0 +1,758 @@ +"""Classes and functions to handle standardized annotation resources and qualifiers. + +Resources represent a piece of information that relates to a cobrapy object through a +Qualifier, as captured in the StandardizedAnnotation class. +""" + +import logging +import re +from enum import Enum +from typing import Any, Dict, Optional, Tuple, Union + + +LOGGER = logging.getLogger(__name__) + +__all__ = ["parse_identifiers_uri", "namespace_and_identifier_to_uri"] + +# the URL pattern to parse namespace and identifier +URL_OLD_IDENTIFIERS_PATTERN = re.compile( + r"^https?://identifiers.org/(.+?)/(.+)(\?.*)?$" +) +URL_COMPACT_IDENTIFIERS_PATTERN = re.compile( + r"^https?://identifiers.org/((.+)/)?([^:/]+):(.+)(\?.*)?$" +) +COMPACT_IDENTIFIERS_PATTERN = re.compile(r"^[a-zA-Z0-9_\.\-]+:.+$") +# Code to update the following constants can be found in: +# scripts/parse_identifiers_registry.py +COMPACT_URL_INTEGRATED_NAMESPACES = [ + "mge", + "ark", + "bto", + "cco", + "cl", + "chebi", + "cheminf", + "did", + "envo", + "eco", + "fma", + "foodon", + "gsso", + "go", + "go_ref", + "gro", + "doid", + "hp", + "mir", + "mp", + "ms", + "mcro", + "mi", + "ma", + "mgi", + "nando", + "nmr", + "oma.hog", + "ocid", + "opl", + "obcs", + "pw", + "pato", + "eo", + "po", + "mod", + "pr", + "rrid", + "so", + "swh", + "stato", + "slm", + "sbo", + "uberon", + "uo", + "mzspec", + "vario", +] +COMPACT_URL_IDENTIFIERS_WITH_COLON = [ + "arraymap", + "bgee.family", + "bgee.organ", + "bgee.stage", + "biocyc", + "bbkg", + "cabri", + "dip", + "ga4ghdos", + "dev.ga4ghdos", + "doi", + "glyconavi", + "gramene.gene", + "gramene.taxonomy", + "hgnc", + "imgt.hla", + "isbn", + "kegg.environ", + "kegg.genes", + "kegg", + "metacyc.compound", + "metacyc.reaction", + "miriam.collection", + "miriam.resource", + "narcis", + "nbn", + "nmdc", + "orphanet.ordo", + "panther.family", + "ps", + "psipar", + "sisu", + "storedb", + "tair.gene", + "tair.protein", + "treebase", + "vgnc", +] +# This does not actually fix anything, since these special cases are broken on +# identifiers.org. However, future cases could need this logic. +COMPACT_URL_NAMESPACE_EXCEPTIONS = { + "hog": "oma.hog", # This one is weird. Hard to check what works, server is down. + "peo": "eo", # The sample URL on identifiers.org is wrong and does not work. +} + + +class Qualifier(Enum): + """The possible qualifiers of a standardized annotation. + + The qualifiers and their detailed description are present in: + https://co.mbine.org/author/biomodels.net-qualifiers/ + + Qualifiers are divided into two groups + + Biological (bqb/bqbiol): These kinds of qualifiers define the relationship between a + biological object represented by a model element and its annotation. + + Modelling (bqm/bqmodel): These kinds of qualifiers define the relationship between a + modelling object and its annotation. + + See Also + -------- + QualifiersAlias + StandardizedAnnotation + Resource + """ + + Biological_is = "bqb_is" + """The biological entity represented by the cobrapy object is the subject of the + referenced resource. This could serve to link a reaction to its counterpart in + (e.g.) the ChEBI or Reactome databases.""" + Biological_hasPart = "bqb_hasPart" + """The biological entity represented by the cobrapy object includes the subject of + the referenced resource, either physically or logically. This relation might be used + to link a complex to a description of its components""" + Biological_isPartOf = "bqb_isPartOf" + """The biological entity represented by the cobrapy object is a physical or logical + part of the subject of the referenced resource. This relation might be used to link + a component to the description of the complex to which it belongs.""" + Biological_isVersionOf = "bqb_isVersionOf" + """The biological entity represented by the cobrapy object is a version or an + instance of the subject of the referenced resource. This relation can be used to + link a reaction to its EC-code.""" + Biological_hasVersion = "bqb_hasVersion" + """The subject of the referenced resource is a version or an instance of the + biological entity represented by the cobrapy object. This relation may be used to + describe the components of a pool of metabolites.""" + Biological_isHomologTo = "bqb_isHomologTo" + """The biological entity represented by the cobrapy object is homolog to the subject + of the referenced resource, i.e. they share a common ancestor.""" + Biological_isDescribedBy = "bqb_isDescribedBy" + """The biological entity represented by the cobrapy object is described by the + referenced resource. This relation could be used, for example, to link a species or + a parameter to a publication describing the quantity of the species or the value of + the parameter.""" + Biological_isEncodedBy = "bqb_isEncodedBy" + """The biological entity represented by the cobrapy object is encoded, either + directly or by virtue of transitivity, by the subject of the referenced resource.""" + Biological_encodes = "bqb_encodes" + """The biological entity represented by the cobrapy object encodes, either directly + or by virtue of transitivity, the subject of the referenced resource.""" + Biological_occursIn = "bqb_occursIn" + """The biological entity represented by the cobrapy object takes place in the + subject of the reference resource""" + Biological_hasProperty = "bqb_hasProperty" + """The subject of the referenced resource is a property of the biological entity + represented by the cobrapy object. This relation might be used when a biological + entity has a given activity or exerts a specific function.""" + Biological_isPropertyOf = "bqb_isPropertyOf" + """The biological entity represented by the cobrapy object is a property of the + referenced resource.""" + Biological_hasTaxon = "bqb_hasTaxon" + """The biological entity represented by the cobrapy object is taxonomically + restricted, where the restriction is the subject of the referenced resource. This + relation may be used to ascribe a species restriction to a biochemical reaction.""" + Biological_unknown = "bqb_unknown" + """The relation between the resource an biological entity represented by the cobrapy + object is unknown. Use sparingly, since this qualifier does not provide much + information.""" + + Modelling_is = "bqm_is" + """The cobrapy object is the subject of the referenced resource. This may, for + example, be used to link the model to an entry in a model database.""" + Modelling_isDescribedBy = "bqm_isDescribedBy" + """The cobrapy object is described by the referenced resource. This could link a + component (e.g., a reaction) to a publication describing it.""" + Modelling_isDerivedFrom = "bqm_isDerivedFrom" + """The cobrapy object is derived from the modeling object represented by the + referenced resource. For instance, they can be the fruit of a refinement or their + adaptation for use in a different context.""" + Modelling_isInstanceOf = "bqm_isInstanceOf" + """The cobrapy object is an instance of the subject of the referenced resource.""" + Modelling_hasInstance = "bqm_hasInstance" + """The subject of the referenced resource is an instance of the cobrapy object. This + could be used, for example, to link a generic model with its specific forms.""" + Modelling_unknown = "bqm_unknown" + """The relation between the cobrapy object an the resource is unknown. Use + sparingly, since this qualifier does not provide much information.""" + + +class QualifiersAlias(set, Enum): + """Aliases for common combinations of qualifiers. + + Examples + -------- + >>> from cobra.core.metadata import Qualifier, QualifiersAlias + >>> Qualifier.Biological_isPartOf in QualifiersAlias.Biological_any + True + >>> Qualifier.Modelling_unknown in QualifiersAlias.Modelling_known + False + + See Also + -------- + Qualifier + StandardizedAnnotationStore.resources_for + """ + + Any_is = {Qualifier.Biological_is, Qualifier.Modelling_is} + Any_isDescribedBy = { + Qualifier.Biological_isDescribedBy, + Qualifier.Modelling_isDescribedBy, + } + Any_unknown = {Qualifier.Biological_unknown, Qualifier.Modelling_unknown} + Roughly_equals = { + Qualifier.Biological_is, + Qualifier.Biological_encodes, + Qualifier.Biological_isEncodedBy, + Qualifier.Biological_isVersionOf, + Qualifier.Modelling_isInstanceOf, + } + Biological_any = { + Qualifier.Biological_is, + Qualifier.Biological_hasPart, + Qualifier.Biological_isPartOf, + Qualifier.Biological_isVersionOf, + Qualifier.Biological_hasVersion, + Qualifier.Biological_isHomologTo, + Qualifier.Biological_isEncodedBy, + Qualifier.Biological_encodes, + Qualifier.Biological_isDescribedBy, + Qualifier.Biological_hasTaxon, + Qualifier.Biological_hasProperty, + Qualifier.Biological_isPropertyOf, + Qualifier.Biological_occursIn, + Qualifier.Biological_unknown, + } + Biological_known = { + Qualifier.Biological_is, + Qualifier.Biological_hasPart, + Qualifier.Biological_isPartOf, + Qualifier.Biological_isVersionOf, + Qualifier.Biological_hasVersion, + Qualifier.Biological_isHomologTo, + Qualifier.Biological_isEncodedBy, + Qualifier.Biological_encodes, + Qualifier.Biological_isDescribedBy, + Qualifier.Biological_hasTaxon, + Qualifier.Biological_hasProperty, + Qualifier.Biological_isPropertyOf, + Qualifier.Biological_occursIn, + } + Modelling_any = { + Qualifier.Modelling_is, + Qualifier.Modelling_isInstanceOf, + Qualifier.Modelling_hasInstance, + Qualifier.Modelling_isDescribedBy, + Qualifier.Modelling_isDerivedFrom, + Qualifier.Modelling_unknown, + } + Modelling_known = { + Qualifier.Modelling_is, + Qualifier.Modelling_isInstanceOf, + Qualifier.Modelling_hasInstance, + Qualifier.Modelling_isDescribedBy, + Qualifier.Modelling_isDerivedFrom, + } + Roughly_instanceOf = { + Qualifier.Modelling_isInstanceOf, + Qualifier.Modelling_isDerivedFrom, + Qualifier.Biological_isVersionOf, + } + + +class Resource: + """Defines a standardized annotation resource. + + Together with a Qualifier, Resource objects form the basis of a + StandardizedAnnotation object. Resources are based around perennial URIs that link + to scientific information and identifiers. A URI provided to the Resource class + should be an https://identifiers.org URL. + + Parameters + ---------- + uri: str + URI to use to create the resource. It should be of the old identifiers.org + format 'http(s)://identifiers.org//' or the compact + identifier URL format + http(s)://identifiers.org/:. Alternatively, a + compact identifier can be provided directly, without the preceding + 'http(s)://identifiers.org/', e.g. 'CHEBI:11881'. + strict: bool, optional + Whether to raise a ValueError when the provided URI does not match the + identifiers.org pattern. If set to False, it will accept any URI and set + `namespace` and `identifier` to None if the URI cannot be parsed. + Default True. + + Raises + ------ + ValueError + If `strict` is set to True and a provided URI does not match the + identifiers.org pattern. + + Examples + -------- + >>> from cobra.core import Resource + >>> chebi_resource = Resource("https://identifiers.org/chebi/CHEBI:11881") + >>> chebi_resource.namespace + chebi + >>> chebi_resource.identifier + CHEBI:11881 + >>> chebi_resource == Resource("CHEBI:11881") + True + >>> try: + ebi_resource = Resource( + "https://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:11881", + ) + except ValueError: + print("Not an identifiers.org URL.") + Not an identifiers.org URL. + >>> ebi_resource = Resource( + "https://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:11881", + strict=False, + ) + >>> ebi_resource.uri + https://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:11881 + >>> ebi_resource.namespace is None + True + >>> chebi_resource == ebi_resource + False + """ + + def __init__( + self, + uri: str, + namespace: Optional[str] = None, + identifier: Optional[str] = None, + strict: bool = True, + ) -> None: + """Initialize a standardized annotation Resource from a URI.""" + self._strict = strict + self._parent = None + + if not self._strict: + if namespace is not None and identifier is not None: + self._namespace = namespace + self._identifier = identifier + self._uri = uri + else: + self._namespace = None + self._identifier = None + self.uri = uri + else: + if namespace is not None or identifier is not None: + self._namespace = None + self._identifier = None + self.uri = uri + if self.namespace != namespace or self.identifier != identifier: + raise ValueError( + "The provided namespace and/or identifier did not match the " + f"values determined from the URI. Provided: '{namespace}':" + f"'{identifier}', determined: '{self.namespace}':" + f"'{self.identifier}'" + ) + else: + self._namespace = None + self._identifier = None + self.uri = uri + + def _set_parent(self, parent): + if self._parent is None or parent is None: + self._parent = parent + else: + raise ValueError( + "Resource already has a different parent. Create a new " + "resource if you would like to add a resource to a second object." + ) + + def remove_from_parent(self): + """Remove the Resource from its parent StandardizedAnnotation object.""" + if self._parent is None: + raise ValueError( + "Cannot remove resource, since no parent is associated with resource." + ) + self._parent._remove_resource(self) + self._parent = None + + @classmethod + def from_data( + cls, + data: Union[Dict[str, str], Tuple[str, str], str, "Resource"], + strict: bool = True, + ): + """Create a Resource instance from various formats of data. + + Parameters + ---------- + data: dict, tuple, str or Resource + If `data` is a dictionary and has a 'uri' key, the corresponding value will + be used to create a Resource object, otherwise the keys 'namespace' and + 'identifier' will be converted an identifiers.org URI. If `data` is a tuple, + it should be of length 2, where the first element is the namespace and the + second the identifier. If `data` is a string, it is interpreted as the URI + of the Resource. If a Resource object is provided, this object will simply + be returned. + strict: bool, optional + Whether to raise a ValueError when the provided URI does not match the + identifiers.org pattern. If set to False, it will accept any URI and set + `namespace` and `identifier` to None if the URI cannot be parsed. + Default True. + + Returns + ------- + Resource + + Raises + ------ + TypeError + If `data` is not of the correct type to create a Resource object. + ValueError + If `strict` is set to True and a provided URI does not match the + identifiers.org pattern. + """ + if isinstance(data, Resource): + data._strict = strict + return data + if isinstance(data, str): + return Resource(data, strict=strict) + if not isinstance(data, (dict, tuple)): + raise TypeError( + f"Resources can be created from str, tuple, dict, or Resource" + f"types, not {type(data)}." + ) + if isinstance(data, dict): + if (uri := data.get("uri", None)) is not None: + return Resource(uri, strict=strict) + namespace = data["namespace"].lower() + identifier = data["identifier"] + else: + if len(data) != 2: + raise TypeError( + "Tuples should have length 2 to be converted to a Resource, " + f"not length {len(data)}: {data}" + ) + namespace = data[0].lower() + identifier = data[1] + if not isinstance(namespace, str) or not isinstance(identifier, str): + raise TypeError("Namespace and identifier should be of type str.") + uri = namespace_and_identifier_to_uri(namespace, identifier) + return Resource(uri, strict=strict) + + @property + def uri(self) -> str: + """Get the URI of the resource. + + Returns + ------- + str + """ + return self._uri + + @uri.setter + def uri(self, value: str) -> None: + """Set the URI of the resource. + + Parameters + ---------- + value: str + The URI or identifiers.org compact identifier, typically of the format + 'https://identifiers.org/:'. + """ + if (identifier_match := parse_identifiers_uri(value)) is not None: + namespace, identifier, _provider, uri = identifier_match + self._namespace = namespace + self._identifier = identifier + self._uri = uri + return + if self._strict: + raise ValueError( + f"The provided URI is not a valid identifiers.org address: {value}" + ) + self._namespace = None + self._identifier = None + self._uri = value + + @property + def namespace(self) -> Optional[str]: + """Get the namespace of the resource. + + Returns + ------- + str or None + The namespace of the resource (e.g. 'chebi'). If `strict` was set to False + upon initialization and the URI could not be interpreted, this method will + return None. + """ + return self._namespace + + @property + def identifier(self) -> Optional[str]: + """Get the identifier of the resource. + + Returns + ------- + str or None + The identifier of the resource (e.g. 'CHEBI:36927'). If `strict` was set to + False upon initialization and the URI could not be interpreted, this method + will return None. + """ + + return self._identifier + + def to_dict(self): + """Convert the resource to a dictionary. + + The dictionary will have the key "uri" and optionally "namespace" and + "identifier", if the corresponding attributes are not None. + + Returns + ------- + dict + """ + return { + k: v + for k in ["uri", "namespace", "identifier"] + if (v := getattr(self, k, None)) is not None + } + + def __repr__(self) -> str: + """Get the string representation of the resource. + + Returns + ------- + str + """ + return f"Resource({self.uri})" + + def _repr_html_(self) -> str: + """Return the resource as an HTML string. + + Returns + ------- + str + """ + return f""" + + + + + + + + + + + +
URI{self.uri}
Namespace{self.namespace}
Identifier{self.identifier}
Memory address{id(self):#x}
""" + + def __eq__(self, other: Any): + """Determine equality between the resource and another object. + + Parameters + ---------- + other: Resource, str, dict or tuple + The value of `other` is converted to a Resource object, if it was not + already of that type. If the Resource object has a `namespace` and + `identifier` that are not None, i.e. the URI was a valid identifiers.org + URI, the two objects are equal if their `namespace` and `identifier` are + equal. If the `namespace` and `identifier` are None, the resources are equal + if their URI is equal. + Returns + ------- + bool + True if objects are equal, based on their `namespace` and `identifier` + combination (or URI, if those attributes are None). + """ + if isinstance(other, (dict, tuple, str)): + try: + other_resource = Resource.from_data(other, strict=False) + except TypeError: + return False + return self == other_resource + if isinstance(other, Resource): + if ( + self.namespace is None + or self.identifier is None + or other.namespace is None + or other.identifier is None + ): + return self.uri == other.uri + return ( + self.namespace == other.namespace + and self.identifier == other.identifier + ) + return False + + def __hash__(self): + """Create a hash of the namespace and identifier, or URI of the resource.""" + if self.namespace is None: + return hash(self.uri) + else: + return hash((self.namespace, self.identifier)) + + def __deepcopy__(self, memo: Optional[dict] = None): + """Copy the Resource efficiently with memo. + + Parameters + ---------- + memo: dict + Automatically passed parameter, dict of already copied items. + + Returns + ------- + Resource + A new Resource that is a deep copy of the original. + """ + new = Resource( + uri=self._uri, + namespace=self._namespace, + identifier=self._identifier, + strict=False, + ) + new._strict = self._strict + # memo[id(self)] = new + return new + + def copy(self): + """Copy the Resource. + + Returns + ------- + Resource + A new Resource that is a deep copy of the original. + """ + return self.__deepcopy__() + + +def parse_identifiers_uri(uri: str) -> Optional[Tuple[str, str, Optional[str], str]]: + """Parse namespace and term from given identifiers annotation uri. + + Parameters + ---------- + uri : str + uri (identifiers.org url) or identifiers.org compact identifier (e.g. + "CHEBI:11881"). + + Returns + ------- + (namespace, identifier, provider) if resolvable, None otherwise + """ + if not (uri.startswith("http://") or uri.startswith("https://")): + # Try to interpret the uri as a identifiers.org compact identifier. + if not COMPACT_IDENTIFIERS_PATTERN.match(uri): + return None + uri = f"https://identifiers.org/{uri}" + # Try to match the new format first + match = URL_COMPACT_IDENTIFIERS_PATTERN.match(uri) + if match: + provider, orig_namespace, identifier = ( + match.group(2), + match.group(3), + match.group(4), + ) + # For most compact URLs the namespace prefix is simply the lower case + # version of what is matched in the URL, but there are some exceptions + # that need correcting. + namespace = COMPACT_URL_NAMESPACE_EXCEPTIONS.get( + orig_namespace.lower(), orig_namespace.lower() + ) + # If what is interpreted as provider is a namespace where identifiers have + # colons, the url should be intrepreted as the old format instead. + if provider == namespace or provider not in COMPACT_URL_IDENTIFIERS_WITH_COLON: + # In the cases where the namespace is integrated in the compact URL, the + # identifier should be reconstructed. E.g. in the case of ChEBI, the + # namespace is 'chebi' and a identifier can be 'CHEBI:11881'. + if namespace in COMPACT_URL_INTEGRATED_NAMESPACES: + identifier = f"{orig_namespace}:{identifier}" + return namespace, identifier, provider, uri + # Otherwise try the old format + match = URL_OLD_IDENTIFIERS_PATTERN.match(uri) + if match: + provider, namespace, identifier = ( + None, + match.group(1), + match.group(2), + ) + return namespace, identifier, provider, uri + + LOGGER.warning( + f"{uri} does not conform to " + f"'http(s)://identifiers.org/namespace/id' or " + f"'http(s)://identifiers.org/(provider/)namespace:id" + ) + return None + + +def namespace_and_identifier_to_uri(namespace: str, identifier: str) -> str: + """Convert a namespace and identifier pair to a identifiers.org URL. + + Parameters + ---------- + namespace : str + Namespace of the entity. + identifier : str + Identifier of the entity. + + Returns + ------- + str + identifiers.org URL + """ + if namespace in COMPACT_URL_INTEGRATED_NAMESPACES: + return f"https://identifiers.org/{namespace}/{identifier}" + return f"https://identifiers.org/{namespace}:{identifier}" + + +DEFAULT_QUALIFIERS = { + "pubmed": Qualifier.Modelling_isDescribedBy, + "doi": Qualifier.Modelling_isDescribedBy, + "ec-code": Qualifier.Biological_isVersionOf, + "go": Qualifier.Biological_isVersionOf, + "eco": Qualifier.Modelling_isDescribedBy, + "google.patent": Qualifier.Modelling_isDescribedBy, + "taxonomy": Qualifier.Biological_hasTaxon, + "arxiv": Qualifier.Modelling_isDescribedBy, + "isbn": Qualifier.Modelling_isDescribedBy, + "bigg.model": Qualifier.Modelling_is, +} + + +def get_default_qualifier(namespace): + return DEFAULT_QUALIFIERS.get(str(namespace), Qualifier.Biological_is) + # return Qualifier.Biological_is diff --git a/src/cobra/core/metadata/standardized.py b/src/cobra/core/metadata/standardized.py new file mode 100644 index 000000000..88faa4163 --- /dev/null +++ b/src/cobra/core/metadata/standardized.py @@ -0,0 +1,1832 @@ +"""Classes to handle standardized annotations and legacy dict-like annotations. + +Standardized annotations enable users to associate MIRIAM-compliant annotations to model +components. They correspond to Controlled Vocabulary terms (CV terms), as described in +the SBML level 3 version 2 Core specification: +https://identifiers.org/combine.specifications:sbml.level-3.version-2.core.release-2 +""" + +import re +from collections import UserList +from collections.abc import Iterable as ABCIterable +from collections.abc import KeysView, MutableMapping +from typing import ( # TypeAlias, # Not supported in older python versions + Any, + Callable, + Dict, + FrozenSet, + Generator, + Iterable, + Iterator, + List, + Optional, + Pattern, + Tuple, + Union, +) + +from cobra.core.metadata import Qualifier, Resource +from cobra.core.metadata.metadata import Metadata +from cobra.core.metadata.resource import QualifiersAlias, get_default_qualifier + + +# TypeAlias +StandardizedAnnotationInput = Union["StandardizedAnnotation", dict, str, Resource] + + +class StandardizedAnnotation: + """Standardized annotation entry that defines a relation to MIRIAM resources. + + `StandardizedAnnotation` can be used to annotate cobra objects in a structural and + standardized manner. This improves interoperability with other tools and neatly + structures annotations. Therefore, standardized annotations should be preferred over + custom annotations (`CustomAnnotation`), whenever possible. + + A `StandardizedAnnotation` object defines a set of MIRIAM (identifiers.org) + resources and their relation to a modelling object. Relations are defined using + the `Qualifier` enum, which defines a predefined set of qualifiers that either + relate to the modelling object (e.g. `Qualifier.Modelling_is`) or relate to the + biological object represented by the modelling object (e.g. + `Qualifier.Biological_is`). + + For example, the cobra reaction representing a + cytosolic transketolase reaction in Homo sapiens can be annotated with the + resource "https://identifiers.org/reactome/R-HSA-163751" using the qualifier + `Qualifier.Biological_is`, since the reactome entry R-HSA-163751 represents the + biological reaction entity which is represented by the reaction object. Similarly, + the RHEA resource "https://identifiers.org/rhea/RHEA:27628" can be added to the + same `StandardizedAnnotation` object, since it relates to the same information about + the cobra reaction and `Qualifier.Biological_is` is also applicable. The EC code + ("https://identifiers.org/ec-code/2.2.1.1") for the same reaction should however be + annotated using the `Biological_isVersionOf` qualifier, since the reaction can be + seen as a version of the enzymatic activity represented by EC 2.2.1.1. Optionally, a + standardized annotation object can have nested annotations. In the transketolase + example, this could include a StandardizedAnnotation object with the qualifier + `Qualifier.Biological_isDescribedBy` and the resource + "https://identifiers.org/pubmed/9357955". This nested annotation adds additional + information to the parent annotation, without changing its meaning. + + See `Biomodels Qualifiers + `_ + For a definition of all qualifiers, see `SBML Level 3, Version 2 Core, p 104 + `_ + + Parameters + ---------- + resources: Resource, str, list or None, optional + The resources as `Resource` objects or strings (URI format: + https://identifiers.org//). Default None. + qualifier: Qualifier or str + The qualifier for the relationship. Default `Qualifier.Biological_is`. + annotations: list or None, optional + List of StandardizedAnnotation objects that represent additional (nested) + annotations of this object. + """ + + def __init__( + self, + resources: Optional[ + Union["Resource", str, Iterable[Union["Resource", str]]] + ] = None, + qualifier: Union[Qualifier, str] = Qualifier.Biological_is, + annotations: Optional[Iterable["StandardizedAnnotation"]] = None, + ): + """Initialize a standardized annotation.""" + self._resources = [] + self.resources = resources + self._qualifier: Qualifier = self.check_qualifier_type(qualifier) + self._annotations: Optional[StandardizedAnnotationStore] = ( + StandardizedAnnotationStore.from_data(annotations) + if annotations is not None + else None + ) + self._parent: Optional[StandardizedAnnotationStore] = None + + def _set_parent(self, parent): + if self._parent is None or parent is None: + self._parent = parent + else: + raise ValueError( + "StandardizedAnnotation already has a parent. Create a new " + "annotation if you would like to add an annotation to a second object." + ) + + def remove_from_parent(self) -> None: + """Remove annotation from parent (`StandardizedAnnotationStore`). + + Raises + ------ + ValueError + If there is no known parent object. + + See Also + -------- + StandardizedAnnotationStore.remove + """ + if self._parent is None: + raise ValueError( + "Cannot remove annotation, since no object is associated with it." + ) + self._parent.remove(self) + + def _remove_resource(self, resource): + self.resources.remove(resource) + + @property + def qualifier(self) -> Qualifier: + """Get the qualifier. + + Returns + ------- + Qualifier + """ + return self._qualifier + + @qualifier.setter + def qualifier(self, qualifier: Union[str, Qualifier]) -> None: + """Set the qualifier. + + Parameters + ---------- + qualifier: str or Qualifier + + See Also + -------- + StandardizedAnnotation.check_qualifier_type() + """ + self._qualifier = self.check_qualifier_type(qualifier) + + @property + def resources(self) -> List["Resource"]: + """Get the list of resources. + + Returns + ------- + list of Resource objects + """ + return self._resources + + @resources.setter + def resources(self, resources: Iterable[Union[str, "Resource"]]) -> None: + """Set the resources. + + Parameters + ---------- + resources: list of str or Resource + + See Also + -------- + StandardizedAnnotation.check_resource_type() + """ + for idf in self._resources: + idf._set_parent(None) + self._resources = self.check_resource_type(resources) + for idf in self._resources: + idf._set_parent(self) + + def add_resources(self, resources: Iterable[Union[str, "Resource"]]) -> None: + """Add resources to the standardized annotation. + + Parameters + ---------- + resources: list of str or Resource objects + List of resources to append to the existing ones. + """ + resources = self.check_resource_type(resources) + for resource in resources: + resource._set_parent(self) + self.resources.extend(resources) + + @property + def uris(self) -> FrozenSet[str]: + """Get the set of URIs represented by the resources of this annotation. + + Returns + ------- + Set of URIs + + See Also + -------- + all_uris + Resource.uri + """ + return frozenset({entry.uri for entry in self.resources}) + + @property + def all_uris(self) -> FrozenSet[str]: + """Get all the URIs in this annotation, including nested annotations. + + Returns + ------- + Set of URIs + + See Also + -------- + uris + Resource.uri + """ + resources = {entry.uri for entry in self.resources} + for entry in self.annotations: + resources.update(entry.uris) + return frozenset(resources) + + @property + def annotations(self) -> "StandardizedAnnotationStore": + """Get the nested annotations. + + Returns + ------- + List of annotations + """ + if self._annotations is None: + self._annotations = StandardizedAnnotationStore() + return self._annotations + + @annotations.setter + def annotations(self, annotations: Iterable["StandardizedAnnotation"]) -> None: + """Set the nested annotations. + + Parameters + ---------- + annotations - list of StandardizedAnnotation objects. + """ + self._annotations = StandardizedAnnotationStore.from_data(annotations) + + @staticmethod + def check_resource_type( + resources: Optional[ + Union[ + "Resource", + str, + Dict[str, str], + Tuple[str, str], + Iterable[Union["Resource", str, Dict[str, str], Tuple[str, str]]], + ] + ], + ) -> List["Resource"]: + """Check and parse resources. + + Parameters + ---------- + resources: Resource, str, dict, tuple, or list thereof, optional + Input data to check if it is or can be transformed to Resource objects. + String must start with http:// or https:// to be acceptable. + Dictionary must match the format required by from_data. + If None is given, an empty StandardizedAnnotation object is returned. + No parsing of identifiers/URIs is done, perhaps in future versions. + + Returns + ------- + list of Resource objects + + See Also + -------- + Resource.from_dict + """ + if resources is None: + return [] + elif isinstance(resources, (Resource, str, dict)): + return [Resource.from_data(resources, strict=False)] + elif isinstance(resources, ABCIterable): + return [ + Resource.from_data(resource, strict=False) for resource in resources + ] + else: + raise TypeError( + f"Allowed types for resources are Resource, str, or a list thereof," + f"not {type(resources)}: {resources}" + ) + + @staticmethod + def check_qualifier_type(qual: Union[str, Qualifier]) -> Qualifier: + """Check and parse input to Qualifier class. + + Parameters + ---------- + qual: str or Qualifier, optional + Input data to check if it is or can be transformed to Qualifier class. + Strings must be a member of the Qualifier values. + If None is given, an empty Qualifier is returned. + + Returns + ------- + Qualifier + + Raises + ------ + TypeError + If given anything other than None, str, or Qualifier. + Will raise this error if given a string that does not match the defined + Qualifier members. + """ + if isinstance(qual, str) and qual not in Qualifier._value2member_map_: + raise TypeError(f"{qual} is not a supported enum Qualifier") + elif isinstance(qual, Qualifier): + return qual + elif isinstance(qual, str): + return Qualifier._value2member_map_[qual] + else: + raise TypeError( + f"Allowed types for StandardAnnotation qualifiers are Qualifier or" + f"str member of the Qualifier enum {type(qual)}, {qual}" + ) + + def to_dict(self) -> Dict: + """Convert annotation to a python dict. + + Returns + ------- + dict: + A dict that has up to three keys + "qualifier" - the qualifier as a string + "resources" - the resources as list + "annotations" (optionally) - the nested annotations as a list + """ + d = { + "qualifier": self.qualifier.value, + "resources": [resource.uri for resource in self.resources], + } + if self.annotations: + d["annotations"] = self.annotations.to_list_of_dicts() + return d + + def to_tuples(self) -> List[Tuple[str, str]]: + """Convert the annotation to a list of tuples of namespace-identifier pairs. + + This does not contain the qualifier or nested annotations. + + Returns + ------- + List of namespace-identifier pairs as tuples + """ + return [ + (resource.namespace, resource.identifier) + for resource in self.resources + if resource.namespace is not None and resource.identifier is not None + ] + + def to_records(self) -> List[Dict[str, Any]]: + """Convert the annotation to a list of dictionaries that represent resources. + + Each entry in the list represents a resource associated with this object, + either directly or as nested annotation. The resulting list is thus a flattened + representation of all resources. The hierarchical information is included + using the "annotation_group" and "parent_group" entries in the dictionaries. + Each annotation group represents a single StandardizedAnnotation object (without + its nested annotations). If a resource is found in a nested annotation, the + "parent_group" value will be set to the "annotation_group" value of its parent + StandardizedAnnotation object. + + Returns + ------- + list of dict objects + Each dict represents a Resource records. + + See Also + -------- + StandardizedAnnotationStore.to_records + """ + records, _ = self._to_records() + return records + + def _to_records( + self, group_counter: int = 1, parent_group: int = 0 + ) -> Tuple[List[Dict[str, Any]], int]: + records = [] + for resource in self.resources: + entry = { + "qualifier": self.qualifier.value, + "uri": resource.uri, + "namespace": resource.namespace, + "identifier": resource.identifier, + "annotation_group": group_counter, + "parent_group": parent_group, + } + records.append(entry) + if self.annotations: + new_records, group_counter = self.annotations._to_records( + group_counter=(group_counter + 1), parent_group=group_counter + ) + records.extend(new_records) + else: + group_counter = group_counter + 1 + return records, group_counter + + @classmethod + def from_dict(cls, data_dict: Dict) -> "StandardizedAnnotation": + """Generate a StandardizedAnnotation object from a python dict. + + Parameters + ---------- + data_dict: dict + A dict that has up to three keys + "qualifier" - the qualifier as a string, optional. If not present, the + qualifier is set to `Qualifier.Biological_is`. + "resources" - the resources as a list of strings, optional. + "annotations" - the nested annotations as a list of dicts, optional. + + Returns + ------- + StandardizedAnnotation + + See Also + -------- + to_dict + + """ + return cls( + resources=data_dict.get("resources", None), + qualifier=data_dict.get("qualifier", Qualifier.Biological_is), + annotations=data_dict.get("annotations", None), + ) + + def __eq__(self, other: Any) -> bool: + """Compare StandardizedAnnotation to another object and determine equality. + + If a dict is given, it is transformed to `StandardizedAnnotation` before + comparison. Will return False for any other type. The order of the resources + is ignored. + + Parameters + ---------- + other + + Returns + ------- + bool + False if other is not StandardizedAnnotation or dict. + False if qualifiers, resources or nested annotations are different. + True otherwise. + + See Also + -------- + StandardizedAnnotation.from_dict() + """ + + if isinstance(other, dict): + return self == StandardizedAnnotation.from_dict(other) + if isinstance(other, StandardizedAnnotation): + if self.qualifier != other.qualifier: + return False + if len(self.resources) != len(other.resources): + return False + for idf in self.resources: + if idf not in other.resources: + return False + if self.annotations != other.annotations: + return False + return True + return False + + def __repr__(self) -> str: + """Return the StandardizedAnnotation as str with module and class. + + Returns + ------- + str + """ + return ( + f"{self.__class__.__module__}.{self.__class__.__qualname__}" + f"({self.to_dict()})" + ) + + def _repr_html_(self) -> str: + """Return the StandardizedAnnotation as HTML string. + + Returns + ------- + str + HTML formatted string + """ + # TODO: Fix this HTML + cols = { + "uri": "URI", + "namespace": "Namespace", + "identifier": "Identifier", + "address": "Memory address", + } + n = len(self.resources) + s = f""" + + + + """ + for resource in self.resources: + cols["uri"] += f"" + cols["namespace"] += f"" + cols["identifier"] += f"" + cols["address"] += f"" + for v in cols.values(): + s += f"{v}" + if self.annotations: + s += f""" + + " + + s += "
Qualifier + {self.qualifier} +
{resource.uri}{resource.namespace}{resource.identifier}{id(resource):#x}
Nested
annotations
""" + for annotation in self.annotations: + s += annotation._repr_html_() + s += "
" + return s + + def __deepcopy__(self, memo: Optional[dict] = None): + """Copy the StandardizedAnnotation efficiently with memo. + + Parameters + ---------- + memo: dict + Automatically passed parameter, dict of already copied items. + + Returns + ------- + StandardizedAnnotation + A new annotation that is a deep copy of the original. + """ + + new = StandardizedAnnotation( + qualifier=self.qualifier, + ) + # memo[id(self)] = new + new.resources = [r.__deepcopy__() for r in self._resources] + if self._annotations is not None: + new._annotations = self._annotations.__deepcopy__() + return new + + def copy(self) -> "StandardizedAnnotation": + """Copy the annotation and all its nested annotations. + + Returns + ------- + StandardizedAnnotation + A new annotation that is a deep copy of the original. + """ + + return self.__deepcopy__() + + +class StandardizedAnnotationStore(UserList): + """A list-like object that stores a collection of `StandardizedAnnotation` objects. + + Stores a collection of standardized annotations that define the relation of + MIRIAM-compliant resources to a cobra modelling object. In practice, this class is + automatically instantiated as the `standardized` attribute of the `Metadata` class, + which can be accessed through `object.metadata.standardized`. In addition, nested + annotations in a `StandardizedAnnotation` object also make use of the + `StandardizedAnnotationStore` class. + + Parameters + ---------- + data: list of StandardizedAnnotation, dict, str or Resource objects + List of standardized annotations to initialize the store with. Dictionaries + are converted to standardized annotations using + `StandardizedAnnotation.from_dict`. Strings are interpreted as identifier + URIs and together with other Resource objects stored in a new + `StandardizedAnnotation` with `Qualifier.Biological_is` as qualifier. + """ + + def __init__( + self, + data: Optional[ + Iterable[Union[StandardizedAnnotation, Dict, Resource, str]] + ] = None, + ): + """Initialize a standardized annotation store.""" + self._take_ownership_of_resources: bool = getattr( + self, "_take_ownership_of_resources", True + ) + if data is None: + data = [] + + checked_data = [ + filtered_entry + for entry in data + if (not isinstance(entry, (str, Resource))) + and (filtered_entry := self._check_standardized_annotation(entry)) + is not None + ] + # str and Resource instances are handled separately and added as one + # Standardized annotation instance with the default qualifier (Biological_is). + if no_qualifier_data := [ + entry for entry in data if isinstance(entry, (str, Resource)) + ]: + checked_data.insert(0, StandardizedAnnotation(resources=no_qualifier_data)) + if self._take_ownership_of_resources: + for entry in checked_data: + entry._set_parent(self) + super().__init__(checked_data) + + @staticmethod + def _check_standardized_annotation( + ann: Optional[Union[StandardizedAnnotation, Dict, str, Resource]], + ) -> Optional["StandardizedAnnotation"]: + if ann is None: + return None + if isinstance(ann, StandardizedAnnotation): + return ann + elif isinstance(ann, (str, Resource)): + return StandardizedAnnotation(ann) + elif isinstance(ann, dict): + return StandardizedAnnotation.from_dict(ann) + else: + raise TypeError( + f"Allowed types for StandardizedAnnotation are str and" + f"StandardizedAnnotation, not {type(ann)}: {ann}" + ) + + @staticmethod + def from_data( + data: Optional[ + Union[ + Iterable[Union[str, Dict, "StandardizedAnnotation"]], + str, + Dict, + "StandardizedAnnotation", + "StandardizedAnnotationStore", + ] + ], + ) -> "StandardizedAnnotationStore": + """Create a StandardizedAnnotationStore object from given data. + + Parameters + ---------- + data: StandardizedAnnotation, dict, str or Resource, or list thereof, or + StandardizedAnnotationStore or None + A standardized annotation or a list of standardized annotations to use to + create a store with. Dictionaries are converted to standardized annotations + using `StandardizedAnnotation.from_dict`. Strings are interpreted as + identifier URIs and together with other Resource objects stored in a new + `StandardizedAnnotation` with `Qualifier.Biological_is` as qualifier. + If data is already a StandardizedAnnotationStore, this object will simply be + returned. + + Returns + ------- + StandardizedAnnotationStore + + Raises + ------ + TypeError + """ + if data is None: + return StandardizedAnnotationStore() + elif isinstance(data, StandardizedAnnotationStore): + return data + elif isinstance(data, (StandardizedAnnotation, dict, str)): + if not data: + return StandardizedAnnotationStore() + return StandardizedAnnotationStore([data]) + elif isinstance(data, ABCIterable): + return StandardizedAnnotationStore(data) + else: + raise TypeError(f"Invalid format for StandardizedAnnotationStore: '{data}'") + + def to_list_of_dicts(self) -> List[dict]: + """Convert the StandardizedAnnotationStore to a list of python dicts. + + Returns: + ------- + list: + a list where each item is a dict representing a standardized annotation + object, as created by StandardizedAnnotation.to_dict(). Mainly used for JSON + and YAML export. + + See Also + -------- + StandardizedAnnotation.to_dict + """ + return [annotation.to_dict() for annotation in self] + + def to_records(self): + """Convert the store to a list of dictionaries that represent resources. + + Each entry in the list represents an resources associated with one of the + standardized annotation in this object, either directly or as nested annotation. + The resulting list is thus a flattened representation of all resources. + The hierarchical information is included using the "annotation_group" and + "parent_group" entries in the dictionaries. Each annotation group represents a + single StandardizedAnnotation object (without its nested annotations). If a + resource is found in a nested annotation, the "parent_group" value will be set + to the "annotation_group" value of its parent StandardizedAnnotation object. + + Returns + ------- + List of dictionaries representing Resource records + + See Also + -------- + StandardizedAnnotation.to_records + """ + records, _ = self._to_records() + return records + + def _to_records( + self, group_counter: int = 1, parent_group: int = 0 + ) -> Tuple[List[Dict], int]: + records = [] + for entry in self.data: + new_l, group_counter = entry._to_records( + group_counter=group_counter, parent_group=parent_group + ) + records.extend(new_l) + return records, group_counter + + def _find_first_by_qualifier( + self, + qualifier: Qualifier = Qualifier.Biological_is, + ) -> Optional[StandardizedAnnotation]: + for entry in self.data: + if entry.qualifier == qualifier: + return entry + return None + + def _find_first_or_create_by_qualifier( + self, qualifier: Qualifier = Qualifier.Biological_is + ) -> StandardizedAnnotation: + entry = self._find_first_by_qualifier(qualifier) + if entry is None: + entry = StandardizedAnnotation(qualifier=qualifier, resources=[]) + if self._take_ownership_of_resources: + entry._set_parent(self) + self.data.insert(0, entry) + return entry + + def add( + self, + annotations: Union[ + "StandardizedAnnotationStore", + StandardizedAnnotation, + Dict, + str, + Resource, + List[Union[StandardizedAnnotation, Dict, str, Resource]], + ], + ) -> None: + """Add one or multiple standardized annotations to the store. + + Dictionaries are converted to standardized annotations using + `StandardizedAnnotation.from_dict`. Strings are interpreted as identifier + URIs and together with other Resource objects stored in a new + `StandardizedAnnotation` with `Qualifier.Biological_is` as qualifier. + + If a list is passed, this method is equivalent to + `StandardizedAnnotationStore.extend` and if a single annotation is passed, this + method is equivalent to `StandardizedAnnotationStore.append`. + + Parameters + ---------- + annotations : StandardizedAnnotation, dict, str or Resource, or list thereof + Single or multiple annotations to add to the store. + + See Also + -------- + append + extend + """ + if isinstance(annotations, (StandardizedAnnotation, dict, str, Resource)): + self.append(annotations) + else: + self.extend(annotations) + + def append(self, item: Union[StandardizedAnnotation, Dict, str, Resource]) -> None: + """Append a single annotation to the end of the store. + + Parameters + ---------- + item: StandardizedAnnotation, dict, str or Resource + Annotation to append to the standardized annotation store. + """ + self.extend([item]) + + def extend( + self, + other: Union[ + "StandardizedAnnotationStore", + Iterable[Union[StandardizedAnnotation, Dict, str, Resource]], + ], + ) -> None: + """Extend store by appending elements from the iterable. + + Parameters + ---------- + iterable : Iterable + Annotations to add to the store. + """ + if isinstance(other, StandardizedAnnotationStore): + self.extend(other.data) + elif isinstance(other, Iterable): + checked_data = [ + checked_item + for item in other + if (checked_item := self._check_standardized_annotation(item)) + is not None + ] + if self._take_ownership_of_resources: + for d in checked_data: + d._set_parent(self) + self.data.extend(checked_data) + + def remove(self, item: "StandardizedAnnotation"): + """Remove a standardized annotation from the store. + + Parameters + ---------- + item: StandardizedAnnotation + Annotation to remove from the store. + """ + self.data.remove(item) + item._set_parent(None) + + @property + def resources(self) -> FrozenSet[Resource]: + """Get resources. + + Returns + ------- + FrozenSet + a set of resources in the standardized annotation store, not including + resources of nested annotations. + """ + resources = set() + for entry in self.data: + resources.update(entry.resources) + return frozenset(resources) + + @property + def all_resources(self) -> FrozenSet[Resource]: + """Get all resources, including resources in nested annotations. + + Returns + ------- + FrozenSet + a set of all resources in the standardized annotation store, including + resources of nested annotations. + """ + resources = set() + for entry in self.data: + resources.update(entry.resources) + if entry.annotations: + resources.update(entry.annotations.all_resources) + return frozenset(resources) + + def resources_for( + self, + namespace: Optional[Union[str, List[str]]] = None, + qualifier: Optional[ + Union[ + Qualifier, + QualifiersAlias, + List[Union[Qualifier, QualifiersAlias]], + ] + ] = None, + nested: bool = False, + ) -> List[Resource]: + """Get resources for a namespace or qualifier. + + Filter annotations based on their qualifier and its resources on their + namespace. Optionally also return and filter nested resources on their + namespace. + + Parameters + ---------- + namespace: None, str or list of str, optional + One or multiple namespaces to filter resources with. Selects a resource when + its namespace matches any of the provided namespaces. If it is set to None, + no filtering based on the namespace will be performed. Default None. + qualifier: None, Qualifier, QualifiersAlias or list of Qualifier/QualifiersAlias + One or multiple qualifiers to filter annotations with. Selects an annotation + when its qualifier matches any of the provided qualifiers. If it is set to + None, no filtering based on qualifiers will be performed. Nested annotations + are never filtered based on their qualifier. Default None. + nested: bool + Whether to return resources from nested annotations. Nested annotations are + selected when `nested` is True and the top-level annotation is selected + based on its qualifier. I.e. nested annotations are not filtered on their + own qualifier. Conversely, resources in nested annotations are selected + based on their namespace. Default False. + + Returns + ------- + list of Resource objects + """ + # TODO: Examples + namespace_sel, qualifier_sel = True, True + if namespace is None: + namespace_sel = False + namespace = [] + if not isinstance(namespace, list): + namespace = [namespace] + + if qualifier is None: + qualifier_sel = False + qualifier = [] + if not isinstance(qualifier, list): + qualifier = [qualifier] + qualifiers_and_aliases = qualifier + qualifier = [] + for q in qualifiers_and_aliases: + if isinstance(q, Qualifier): + qualifier.append(q) + elif isinstance(q, QualifiersAlias): + qualifier.extend(q) + else: + raise TypeError( + "Qualifiers should have type Qualifier or QualifiersAlias," + f"not {type(q)}" + ) + + qualifier_set = set(qualifier) + namespace_set = set(namespace) + resources = [] + for annotation in self: + if qualifier_sel and annotation.qualifier not in qualifier_set: + continue + if not namespace_sel: + resources.extend(annotation.resources) + else: + for resource in annotation.resources: + if resource.namespace is None: + continue + if resource.namespace in namespace_set: + resources.append(resource) + if nested and annotation.annotations: + # Do not select for qualifiers in nested annotations + resources.extend( + annotation.annotations.resources_for( + namespace=list(namespace_set) if namespace_sel else None, + nested=nested, + ) + ) + return resources + + @property + def uris(self) -> FrozenSet[str]: + """Get URIs. + + Returns + ------- + FrozenSet + A set of URIs in the standardized annotation store, not including URIs of + nested annotations. + """ + resources = set() + for entry in self.data: + resources.update(entry.uris) + return frozenset(resources) + + @property + def all_uris(self) -> FrozenSet[str]: + """Get all URIs, including URIs of nested annotations. + + Returns + ------- + FrozenSet + A set of URIs in the standardized annotation store, including URIs of + nested annotations. + """ + resources = set() + for entry in self.data: + resources.update(entry.uris) + if entry.annotations: + resources.update(entry.annotations.all_uris) + return frozenset(resources) + + @property + def qualifiers(self) -> FrozenSet[Qualifier]: + """Get qualifiers of annotations in the store, not including nested annotations. + + Returns + ------- + FrozenSet + A set of qualifiers in the standardized annotation store, not including + qualifiers of nested annotations. + """ + qualifier_set = set() + for entry in self.data: + qualifier_set.add(entry.qualifier) + return frozenset(qualifier_set) + + @property + def all_qualifiers(self) -> FrozenSet[Qualifier]: + """Get all qualifiers of annotations in the store, including nested annotations. + + Returns + ------- + FrozenSet + A set of qualifiers in the standardized annotation store, including + qualifiers of nested annotations. + """ + qualifier_set = set() + for entry in self.data: + qualifier_set.add(entry.qualifier) + if entry.annotations: + qualifier_set.update(entry.annotations.all_qualifiers) + return frozenset(qualifier_set) + + def __iter__(self) -> Iterator[StandardizedAnnotation]: + """Get an iterator for the standardized annotations in the store. + + Returns + ------- + Iterator + """ + return iter(self.data) + + def __len__(self) -> int: + """Get the number of standardized annotations in the store. + + Returns + ------- + int + """ + return len(self.data) + + def query( + self, + search_function: Union[str, Pattern, Callable], + attribute: Union[str, None] = None, + ) -> "StandardizedAnnotationList": + """Query the annotation store for matching StandardizedAnnotation objects. + + Parameters + ---------- + search_function : a string, regular expression or function + Used to find the matching elements in the store. + - a regular expression (possibly compiled), in which case the + given attribute of the object should match the regular expression. + - a function which takes one argument and returns True for + desired values + + attribute : string or None + the name attribute of the object to passed as argument to the + `search_function`. If this is None and a regular expression/string is given, + will match the regular expression to both qualifier and resources. + + Returns + ------- + StandardizedAnnotationList + A list-like collection of StandardizedAnnotation objects which match the + query. + + Examples + -------- + >>> from cobra.io import load_model + >>> model = load_model('iJO1366') + >>> model.metadata.standardized.query('Biological_', 'qualifier') + >>> import re + >>> regex = re.compile('^Modelling') + >>> model.annotation.standardized.query(regex, 'qualifier') + """ + + # TODO: Clean up this whole method. + def select_attribute( + x: StandardizedAnnotation, + ) -> Union[StandardizedAnnotation, Resource, Qualifier, set]: + if attribute is None: + return x + else: + return getattr(x, attribute) + + try: + # if the search_function is a regular expression + regex_searcher = re.compile(search_function) + print(f"Search function: '{search_function}'") + if attribute is None: + attribute = "" + + if attribute == "qualifier": + matches = [ + annotation + for annotation in self + if ( + regex_searcher.findall(select_attribute(annotation).name) != [] + or regex_searcher.findall(select_attribute(annotation).value) + != [] + ) + ] + elif attribute == "resources": + matches = [ + annotation + for annotation in self.data + if any( + regex_searcher.findall(res.uri) + for res in select_attribute(annotation) + ) + ] + else: + matches = [ + annotation + for annotation in self.data + if regex_searcher.findall(annotation.qualifier.name) != [] + or regex_searcher.findall(annotation.qualifier.value) != [] + or any( + regex_searcher.findall(res.uri) for res in annotation.resources + ) + ] + except TypeError as err: + print(err) + matches = [ + annotation + for annotation in self.data + if search_function(select_attribute(annotation)) + ] + + return StandardizedAnnotationList(matches) + + def __setitem__(self, key: int, value: StandardizedAnnotationInput) -> None: + """Set item in the store at the provided index. + + Removes the current annotation at the provided index and replaces it with the + provided annotation. + + Parameters + ---------- + key: int + value: StandardizedAnnotation, dict, str or Resource + """ + checked_value = self._check_standardized_annotation(value) + if checked_value is None: + raise TypeError("Value cannot be None.") + # TODO: Elaborate (or automatically delete when None) + if self._take_ownership_of_resources: + self.data[key]._set_parent(None) + checked_value._set_parent(self) + UserList.__setitem__(self, key, checked_value) + + def __getitem__( + self, + key: Union[ + int, + Qualifier, + QualifiersAlias, + List[Union[int, Qualifier, QualifiersAlias]], + ], + ) -> Union[StandardizedAnnotation, "StandardizedAnnotationList"]: + """Access standardized annotations by integer index or qualifier. + + Parameters + ---------- + key: int, Qualifier, QualifiersAlias or list thereof + If `key` is an integer, the `StandardizedAnnotation` at that position in the + list will be returned. When a list of integers is provided, a + `StandardizedAnnotationList` with the corresponding annotations is returned. + When one or more Qualifier or `QualifiersAlias` enums are provided, a + `StandardizedAnnotationList` of all annotations (not nested) with any of + those qualifiers is returned. + """ + if isinstance(key, int): + return self.data[key] + if isinstance(key, (Qualifier, QualifiersAlias)): + key = [key] + if not isinstance(key, list): + raise TypeError(f"Indexed using key of wrong type: {type(key)}") + selection = [] + for k in key: + if isinstance(k, int): + selection.append(self.data[k]) + elif isinstance(k, Qualifier): + selection.extend( + annotation for annotation in self if annotation.qualifier == k + ) + elif isinstance(k, QualifiersAlias): + selection.extend( + annotation for annotation in self if annotation.qualifier in k + ) + else: + raise TypeError(f"Indexed using a key of wrong type: {type(key)}") + return StandardizedAnnotationList(selection) + + def __eq__(self, other: Any) -> bool: + """Compare two standardized annotation stores and determine equality. + + Equality is defined as them having the same data, but not necessarily being the + same object. If the given item is not a StandardizedAnnotationStore, list or + dict, this function will return False. + + Parameters + ---------- + other + + Returns + ------- + bool: True if the data matches, False otherwise + """ + if isinstance(other, (ABCIterable, dict)) and not isinstance( + other, StandardizedAnnotationStore + ): + return self.__eq__(StandardizedAnnotationStore.from_data(other)) + if not isinstance(other, StandardizedAnnotationStore): + return False + if len(self.data) != len(other.data): + return False + for other_entry in other.data: + if other_entry not in self.data: + return False + return True + + def _repr_html_(self) -> str: + """Convert StandardizedAnnotationStore to HTML. + + Returns + ------- + str + HTML representation of the annotation store. + """ + entries = [annotation._repr_html_() for annotation in self] + return f"""StandardizedAnnotationStore{"

".join(entries)}""" + + def __deepcopy__(self, memo: Optional[dict] = None): + """Copy the StandardizedAnnotationStore efficiently with memo. + + Parameters + ---------- + memo: dict + Automatically passed parameter, dict of already copied items. + + Returns + ------- + StandardizedAnnotationStore + A new annotation store that is a deep copy of the original. + """ + + new = StandardizedAnnotationStore() + # memo[id(self)] = new + new.extend([ann.__deepcopy__() for ann in self]) + return new + + def copy(self) -> "StandardizedAnnotationStore": + """Copy the annotation store and all its annotations. + + Returns + ------- + StandardizedAnnotationStore + A new store that is a deep copy of the original store. + """ + + return self.__deepcopy__() + + +class StandardizedAnnotationList(StandardizedAnnotationStore): + """Class to create lists of StandardizedAnnotation objects. + + This class is very similar to the StandardizedAnnotationStore class, which stores + all standardized annotation objects of a cobrapy object. The difference is that this + class does not take ownership (becomes parent of) its resources. It can therefore be + used to create lists of StandardizedAnnotation objects of different cobrapy objects, + or create views of a subset of the annotations of a single object. + + Parameters + ---------- + data: list of StandardizedAnnotation, dict, str or Resource objects + List of standardized annotations to initialize the store with. Dictionaries + are converted to standardized annotations using + `StandardizedAnnotation.from_dict`. Strings are interpreted as identifier + URIs and together with other Resource objects stored in a new + `StandardizedAnnotation` with `Qualifier.Biological_is` as qualifier. + + """ + + def __init__( + self, + data: Optional[ + Iterable[Union[StandardizedAnnotation, Dict, Resource, str]] + ] = None, + ): + """Initialize a standardized annotation store.""" + + self._take_ownership_of_resources: bool = False + super(StandardizedAnnotationList, self).__init__(data) + + +class SimplifiedAnnotationInterface(MutableMapping): + """Class to interface with metadata using a dict-like interface. + + This class is used to maintain compatibility with older cobrapy versions. It is + typically accessed through an objects annotation attribute. It allows a user to get + and set standardized annotations through a dict-like interface. When reading + existing annotations, qualifiers are ignored and resources are pooled. When + setting new annotations, qualifiers are set based on defaults (typically + `Qualifiers.Biological_is`). + This class is automatically instantiated as the `annotation` attribute of cobrapy + objects. + + Warnings + -------- + * This is not the preferred method to access annotations, since information and + hierarchy is lost in this interface. + * This interface was added to not break existing code, for new code + `object.metadata.standardized` should be preferred. + * Editing existing annotations using this interface can cause the annotations to + become less organized. + + Parameters + ---------- + metadata: Metadata + Metadata object where annotations will be stored and retrieved from. + """ + + def __init__(self, metadata: Metadata) -> None: + """Initialize the simplified annotation interface using a `Metadata` object.""" + self._metadata: Metadata = metadata + + def add( + self, + data: Optional[ + Union[ + Dict, + str, + "SimplifiedAnnotationInterface", + Tuple[str, Union[str, List[str]]], + Resource, + List[Union[str, Resource, Tuple[str, Union[str, List[str]]]]], + ] + ] = None, + ) -> None: + """Add an annotation. + + Parameters + ---------- + data: str, tuple, Resource or list thereof, or dict or + SimplifiedAnnotationInterface + Add resources as annotations, using default qualifiers. Tuples are + interpreted as namespace-identifiers pairs, strings should be valid URIs and + if a dictionary is provided, its keys should represent namespaces and its + values identifiers. + + Raises + ------ + TypeError + If values could not be converted to Resource objects. + ValueError + If tuples of lengths other than 2 were provided. + """ + if data is None: + data = [] + + if isinstance(data, SimplifiedAnnotationInterface): + data = data.to_dict() + + if isinstance(data, dict): + data = list(data.items()) + + if isinstance(data, (str, tuple)): + data = [data] + + if not isinstance(data, list): + raise TypeError( + "The supplied annotations were not of type List, or could " + "not be converted to a list." + ) + + annotations = {} + for entry in data: + if isinstance(entry, tuple): + if len(entry) != 2: + raise ValueError( + "Only tuples of length 2 can be converted to annotations." + ) + expanded_entries = [] + if isinstance(entry[1], list): + expanded_entries.extend([(entry[0], v) for v in entry[1]]) + else: + expanded_entries.append(entry) + entry = expanded_entries + elif isinstance(entry, str): + entry = [entry] + else: + raise TypeError("Entry could could not be converted to an Resource.") + for x in entry: + if isinstance(x, tuple) and x[0].lower() == "sbo": + self._metadata.sbo = x[1] + continue + if not isinstance(x, Resource): + x = Resource.from_data(x, strict=False) + if x.namespace is None: + raise ValueError(f"Could not determine namespace of resource {x}.") + + qualifier = get_default_qualifier(x.namespace) + if qualifier not in annotations: + annotations[qualifier] = [] + annotations[qualifier].append(x) + + for qualifier, resources in annotations.items(): + ann = self._metadata.standardized._find_first_or_create_by_qualifier( + qualifier + ) + ann.add_resources(resources) + + @property + def sbo(self) -> str: + """Get the SBO term of the annotations. + + Returns + ------- + str + + See Also + -------- + Metadata.sbo + """ + return self._metadata.sbo + + @sbo.setter + def sbo(self, value: str) -> None: + """Set the SBO term of the annotations. + + Parameters + ---------- + value: str + + See Also + -------- + Metadata.sbo + """ + self._metadata.sbo = value + + def __getitem__(self, key: str) -> List[str]: + """Get resources for a given namespace. + + Collects all standardized annotations for namespace `key` and returns a list of + all resources as strings, or raise IndexError if none were found. + + Parameters + ---------- + key: str + Namespace of the resources. + + Returns + ------- + list of str + List of resources as strings. + + Raises + ------ + IndexError + If no resources were found for the given namespace. + """ + if not isinstance(key, str): + raise TypeError("Index should be of type str.") + key = key.lower() + if key == "sbo": + return [self._metadata.sbo] + + results = [] + for ann in self._metadata.standardized: + for resource in ann.resources: + if (v := resource.identifier) is not None and resource.namespace == key: + results.append(v) + + if results: + # Deduplicate and sort results to have consistent results and make + # comparisons easier. E.g. __eq__(...) relies on this. + return list(sorted(set(results))) + else: + raise IndexError(f"No resources found for namespace '{key}'") + + def get(self, key: str, default: Any = None): + """Get resources for a given namespace. + + Performs indexing in the same manner as `__get__`, except it will not raise + IndexError when the index does not exist, but rather returns a default value. + + Parameters + ---------- + key: str + Namespace of the resources. + default: optional + Default value to return when index is not found. Default None. + + Returns + ------- + list of str or `default` + List of resources as strings or the `default` value. + """ + # Example of usage: + # https://github.com/opencobra/memote/blob/develop/src/memote/support/thermodynamics.py + try: + return self[key] + except IndexError: + return default + + def __delitem__(self, key: str) -> None: + """Delete all resources for a given namespace. + + Deletes all resources for namespace `key` from their `StandardizedAnnotation` + objects or raise IndexError if none were found. + + Parameters + ---------- + key: str + Namespace of the resources. + + Raises + ------ + IndexError + If no resources were found for the given namespace. + """ + if not isinstance(key, str): + raise TypeError("Index should be of type str.") + + key = key.lower() + + if key == "sbo": + self._metadata.sbo = "" + return + + deleted_any = False + for ann in self._metadata.standardized: + for resource in list(ann.resources): + if resource.namespace is not None and resource.namespace == key: + resource.remove_from_parent() + deleted_any = True + if not deleted_any: + raise IndexError(f"Could not find annotations for f'{key}')") + + def __setitem__(self, key: str, value: Union[str, List[str]]) -> None: + """Set resources for a given namespace. + + Removes all existing resources with namespace `key` and inserts + the provided resources. + + Parameters + ---------- + key: str + Namespace of the resources. + value: str or list of str + Resources to set for the provided namespace. + """ + if not isinstance(key, str): + raise TypeError("Index should be of type str.") + key = key.lower() + + try: + del self[key] + except IndexError: + pass + + self.add({key: value}) + + def __eq__(self, other: Any) -> bool: + """Determine equality between the simplified annotations and another object. + + If the other object is of a type other than dict or + `StandardizedAnnotationInterface`, the objects are considered not equal. + Otherwise, objects are equal if there dictionary representation is equal. + + Parameters + ---------- + other + + Returns + ------- + bool + """ + self_dict = self.to_dict() + if isinstance(other, dict): + other_dict = other + elif isinstance(other, SimplifiedAnnotationInterface): + other_dict = other.to_dict() + else: + return False + return self_dict == other_dict + + def objects(self) -> Generator[Tuple[str, List[Resource]], None, None]: + """Get a generator for all pairs of namespace and Resource objects. + + Creates a generator that can be used to iterate over the data as pairs (tuples) + of a namespace and a list of its corresponding Resource objects. This method + is very similar to the `items` method, except that it yields Resource objects + instead of strings. + + Returns + ------- + generator + Yields pairs of namespace and a list of Resource objects. + + See Also + -------- + items + """ + visited_namespaces = set("sbo") + while True: + current_namespace = None + resources = [] + for entry in self._metadata.standardized: + for resource in entry.resources: + if resource.namespace is None: + continue + if resource.namespace in visited_namespaces: + continue + if current_namespace is None: + current_namespace = resource.namespace + resources.append(resource) + else: + if resource.namespace == current_namespace: + resources.append(resource) + if current_namespace is not None: + visited_namespaces.add(current_namespace) + resources = list(sorted(set(resources), key=lambda x: x.identifier)) + if resources: + yield (current_namespace, resources) + else: + break + if sbo_term := self._metadata.sbo: + yield ("sbo", [Resource.from_data(("sbo", sbo_term))]) + + def items(self) -> Iterator[Tuple[str, List[str]]]: + """Get a generator for all pairs of namespace and identifiers. + + Creates a generator that can be used to iterate over the data as pairs (tuples) + of a namespace and a list of its corresponding identifiers. This method is very + similar to the `objects` method, except that it yields strings instead of + Resource objects. + + Returns + ------- + generator + Yields pairs of namespace and a list of identifiers. + + See Also + -------- + objects + """ + for k, v in self.objects(): + yield (k, [x.identifier for x in v]) + + def __iter__(self): + """Get an iterator for the namespaces (keys) of the annotations. + + Returns + ------- + Iterator + """ + + for k, _ in self.objects(): + yield k + + def keys(self): + """Get a view of the namespaces (keys) of the annotations. + + Returns + ------- + Iterator + """ + + return KeysView(self) + + def values(self): + """Get a generator for the values of the annotations. + + The values are lists of identifiers with the same namespace. + + Returns + ------- + Generator + + See Also + -------- + identifiers + tuples + """ + for _, v in self.items(): + yield v + + def identifiers(self): + """Get a generator for the individual identifiers of the annotations. + + Returns + ------- + Generator + + See Also + -------- + values + tuples + """ + for _, v in self.items(): + for identifier in v: + yield identifier + + def tuples(self): + """Get a generator for the individual identifiers as namespace-identifier pairs. + + Returns + ------- + Generator + + See Also + -------- + values + identifiers + """ + for k, v in self.items(): + for identifier in v: + yield (k, identifier) + + @property + def number_of_resources(self) -> int: + """The number of individual resources. + + Is different from the length of the object, since a single namespace can have + multiple resources associated with it. + + Returns + ------- + int + + See Also + -------- + __len__ + """ + return sum(1 for _ in self.identifiers()) + + def __len__(self) -> int: + """Get the length of the object, which corresponds to the number of namespaces. + + Returns + ------- + int + + See Also + -------- + number_of_resources + """ + return sum(1 for _ in self) + + def delete_annotation(self, value: str) -> None: + """Delete a resource based on its identifier value. + + Parameters + ---------- + value: str + Identifier value of the resource to delete. + + Raises + ------ + ValueError + If no resource was found for the provided value. + """ + for _, entries in self.objects(): + for entry in entries: + if entry.identifier == value: + entry.remove_from_parent() + return + raise ValueError(f"No annotation found for '{value}'") + + def to_dict(self) -> Dict[str, List[str]]: + """Convert the simplified annotations to a dictionary. + + The keys of the dictionary represent namespaces and the values are lists of + corresponding identifiers. + + Returns + ------- + dict + """ + return dict(self) + + def copy(self) -> Dict[str, List[str]]: + """Convert the simplified annotations to a dictionary. + + This method returns a dictionary and not a new `SimplifiedAnnotationInterface`, + since the interface is in place for compatibility purposes. Existing code will + expect a copy of an object's `annotation` attribute to be a dictionary. This + method is thus equivalent to `to_dict`. + + Returns + ------- + dict + + See Also + -------- + to_dict + """ + # Example of usage of this method: + # https://github.com/draeger-lab/MassChargeCuration/blob/main/MCC/ModelInterface/CobraPyInterface.py + return self.to_dict() + + def clear(self) -> None: + """Remove all annotations.""" + # Could probably handle this better by directly removing all standardized + # annotations. Currently, empty StandardizedAnnotation objects will remain. + for k in self: + del self[k] + + def __deepcopy__(self, memo: dict): + """Create a deepcopy of the SimplifiedAnnotationStore. + + Parameters + ---------- + memo: dict + Automatically passed parameter, dict of already copied items. + + Returns + ------- + SimplifiedAnnotationInterface + A new interface that is a deep copy of the original. + """ + new = SimplifiedAnnotationInterface(self._metadata.__deepcopy__(memo)) + # memo[id(self)] = new + return new diff --git a/src/cobra/core/model.py b/src/cobra/core/model.py index 2d1215a12..3b56bf08f 100644 --- a/src/cobra/core/model.py +++ b/src/cobra/core/model.py @@ -382,28 +382,43 @@ def copy(self) -> "Model": cobra.Model: new model copy """ new = self.__class__() + memo = {id(self): new} do_not_copy_by_ref = { "metabolites", "reactions", "genes", "notes", - "annotation", + "_annotation", + "_metadata", "groups", } + + def copy_metadata(old_obj, new_obj): + if old_obj._metadata is not None: + new_obj.metadata = old_obj._metadata.__deepcopy__(memo) + # new_obj.metadata.history = old_obj.metadata.history.to_dict() + # new_obj.metadata.standardized.add( + # old_obj.metadata.standardized.to_list_of_dicts() + # ) + # new_obj.metadata.custom = old_obj.metadata.custom.to_dict() + # new_obj.metadata.sbo = old_obj.metadata.sbo + + # raise ValueError() for attr in self.__dict__: if attr not in do_not_copy_by_ref: new.__dict__[attr] = self.__dict__[attr] new.notes = deepcopy(self.notes) - new.annotation = deepcopy(self.annotation) + copy_metadata(self, new) new.metabolites = DictList() - do_not_copy_by_ref = {"_reaction", "_model"} + do_not_copy_by_ref = {"_reaction", "_model", "_annotation", "_metadata"} for metabolite in self.metabolites: new_met = metabolite.__class__() for attr, value in metabolite.__dict__.items(): if attr not in do_not_copy_by_ref: new_met.__dict__[attr] = copy(value) if attr == "formula" else value new_met._model = new + copy_metadata(metabolite, new_met) new.metabolites.append(new_met) new.genes = DictList() @@ -415,16 +430,24 @@ def copy(self) -> "Model": copy(value) if attr == "formula" else value ) new_gene._model = new + copy_metadata(gene, new_gene) new.genes.append(new_gene) new.reactions = DictList() - do_not_copy_by_ref = {"_model", "_metabolites", "_genes"} + do_not_copy_by_ref = { + "_model", + "_metabolites", + "_genes", + "_annotation", + "_metadata", + } for reaction in self.reactions: new_reaction = reaction.__class__() for attr, value in reaction.__dict__.items(): if attr not in do_not_copy_by_ref: new_reaction.__dict__[attr] = copy(value) new_reaction._model = new + copy_metadata(reaction, new_reaction) new.reactions.append(new_reaction) # update awareness for metabolite, stoic in reaction._metabolites.items(): @@ -434,7 +457,7 @@ def copy(self) -> "Model": new_reaction.update_genes_from_gpr() new.groups = DictList() - do_not_copy_by_ref = {"_model", "_members"} + do_not_copy_by_ref = {"_model", "_members", "_annotation", "_metadata"} # Groups can be members of other groups. We initialize them first and # then update their members. for group in self.groups: @@ -443,6 +466,7 @@ def copy(self) -> "Model": if attr not in do_not_copy_by_ref: new_group.__dict__[attr] = copy(value) new_group._model = new + copy_metadata(group, new_group) new.groups.append(new_group) for group in self.groups: new_group = new.groups.get_by_id(group.id) @@ -683,7 +707,7 @@ def add_boundary( rxn = Reaction(id=reaction_id, name=name, lower_bound=lb, upper_bound=ub) rxn.add_metabolites({metabolite: -1}) if sbo_term: - rxn.annotation["sbo"] = sbo_term + rxn.metadata.sbo = sbo_term self.add_reactions([rxn]) return rxn diff --git a/src/cobra/core/object.py b/src/cobra/core/object.py index 78d092d05..4b2bb6f45 100644 --- a/src/cobra/core/object.py +++ b/src/cobra/core/object.py @@ -1,6 +1,16 @@ """Define base Object class in Cobra.""" -from typing import Optional +from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Tuple, Union + + +if TYPE_CHECKING: + from cobra.core.metadata import ( + CustomAnnotation, + Metadata, + Resource, + StandardizedAnnotation, + ) + from cobra.core.metadata.standardized import SimplifiedAnnotationInterface class Object: @@ -16,17 +26,16 @@ def __init__(self, id: Optional[str] = None, name: str = "") -> None: name: string, optional The name to associate with the object. Default "". - Objects will have notes and _annotation as dicitionaries, initialized as empty - dictionaries. + Objects will have notes and metadata as empty attributes. """ self._id = id self.name = name self.notes = {} - self._annotation = {} + self.metadata = None @property - def id(self) -> str: + def id(self) -> Optional[str]: """Get the Object id. Returns @@ -70,33 +79,216 @@ def _set_id_with_model(self, value) -> None: self._id = value @property - def annotation(self) -> dict: - """Get annotation dictionary. + def metadata(self) -> "Metadata": + """Get objects metadata. Returns ------- - _annotation: dict - Returns _annotation as a dictionary. + Metadata + Metadata object containing annotations and object creator and history. """ + from cobra.core.metadata import Metadata + from cobra.core.metadata.standardized import SimplifiedAnnotationInterface + + if self._metadata is None: + self._metadata = Metadata() + self._annotation = SimplifiedAnnotationInterface(self._metadata) + return self._metadata + + @metadata.setter + def metadata(self, metadata: Optional["Metadata"]): + """Set the metadata of the object. + + Parameters + ---------- + metadata: Metadata + Metadata object containing annotations and object history. + """ + from cobra.core.metadata import Metadata + from cobra.core.metadata.standardized import SimplifiedAnnotationInterface + + if metadata is None: + self._metadata = None + self._annotation = None + elif isinstance(metadata, Metadata): + self._metadata = metadata + self._annotation = SimplifiedAnnotationInterface(self._metadata) + else: + raise TypeError( + f"The data passed for annotation must be inside " + f"a dictionary or Metadata: {metadata}" + ) + + @property + def annotation(self) -> "SimplifiedAnnotationInterface": + """Access standardized annotations through a dict-like interface. + + Warnings + -------- + This attribute is in place to retain compatibility with older cobrapy versions. + For new code, it is recommended to directly use the methods of + StandardizedAnnotationStore, which can be accessed through + `object.metadata.standardized`. + + Returns + ------- + SimplifiedAnnotationInterface + + See Also + -------- + StandardizedAnnotationStore + SimplifiedAnnotationInterface + """ + from cobra.core.metadata.standardized import SimplifiedAnnotationInterface + + if self._annotation is None: + self._annotation = SimplifiedAnnotationInterface(self.metadata) return self._annotation @annotation.setter - def annotation(self, annotation): - """Set annotation. + def annotation( + self, + value: Optional[ + Union[ + Dict, + "SimplifiedAnnotationInterface", + List[Union[str, "Resource", Tuple[str, Union[str, List[str]]]]], + ] + ], + ): + """Set the standardized annotations using a dict-like object. + + This method removes all standardized annotations and adds the ones provided as + argument. + + Warnings + -------- + This attribute is in place to retain compatibility with older cobrapy versions. + For new code, it is recommended to directly use the methods of + StandardizedAnnotationStore, which can be accessed through + `object.metadata.standardized`. Parameters ---------- - annotation: dict - Annotation dictionary to set _annotation to. Will raise error if not dict. + value: dict, SimplifiedAnnotationInterface, list of str, Resource or tuples. + Sets resources as annotations, using default qualifiers. Tuples are + interpreted as namespace-identifiers pairs, strings should be valid URIs and + if a dictionary is provided, its keys should represent namespaces and its + values identifiers. - Raises - ------ - TypeError if annotation not a dict. + See Also + -------- + SimplifiedAnnotationInterface.clear + SimplifiedAnnotationInterface.add """ - if not isinstance(annotation, dict): - raise TypeError("Annotation must be a dict") - else: - self._annotation = annotation + self.annotation.clear() + if value is not None: + self.annotation.add(value) + + def add_annotations( + self, + annotations: Union[ + str, + "Resource", + Tuple[str, str], + "StandardizedAnnotation", + "CustomAnnotation", + Iterable[ + Union[ + str, + "Resource", + Tuple[str, str], + "StandardizedAnnotation", + "CustomAnnotation", + ] + ], + ], + ): + """Add annotations to the metadata object by inferring the annotation type. + + If a StandardizedAnnotation or CustomAnnotation object is present, it is added + to the `standardized` or `custom` attribute, respectively. Strings, tuples, and + Resource objects are added using the `SimplifiedAnnotationInterface`, which + means that they are added to the `standardized` attribute using a default + qualifier (typically Qualifier.Biological_is). + + Parameters + ---------- + annotations: (list of) StandardizedAnnotation, CustomAnnotation, str, tuple + Annotations to add to the metadata. + + See Also + -------- + StandardizedAnnotationStore.add + CustomAnnotationStore.add + SimplifiedAnnotationInterface.add + """ + from cobra.core.metadata import ( + CustomAnnotation, + Resource, + StandardizedAnnotation, + ) + + if isinstance( + annotations, + (str, tuple, Resource, StandardizedAnnotation, CustomAnnotation), + ): + annotations = [annotations] + + for annotation in annotations: + if isinstance(annotation, (str, tuple, Resource)): + self.annotation.add(annotation) + elif isinstance(annotation, StandardizedAnnotation): + self.metadata.standardized.add([annotation]) + elif isinstance(annotation, CustomAnnotation): + self.metadata.custom.add(annotation) + else: + raise TypeError( + "Could not convert object to annotation: " + f"{annotation} ({type(annotation)})" + ) + + def remove_annotations( + self, + annotations: Union[ + "StandardizedAnnotation", + "CustomAnnotation", + Iterable[Union["StandardizedAnnotation", "CustomAnnotation"]], + ], + ): + """Remove an annotation from the Metadata object. + + This method only accepts StandardizedAnnotation and CustomAnnotation objects, + or a list thereof, and removes them from the corresponding annotation stores at + Metadata.standardized and Metadata.custom. + + Parameters + ---------- + annotations: (list of) StandardizedAnnotation or CustomAnnotation objects + Annotations to remove from metadata. + + See Also + -------- + StandardizedAnnotationStore.remove + CustomAnnotationStore.remove + """ + from cobra.core.metadata import CustomAnnotation, StandardizedAnnotation + + if isinstance(annotations, StandardizedAnnotation) or isinstance( + annotations, CustomAnnotation + ): + annotations = [annotations] + + for annotation in annotations: + if isinstance(annotation, StandardizedAnnotation): + self.metadata.standardized.remove(annotation) + elif isinstance(annotation, CustomAnnotation): + self.metadata.custom.remove(annotation) + else: + raise TypeError( + "All annotations should be of type StandardizedAnnotation " + f"or CustomAnnotation, not: {type(annotation)}." + ) def __getstate__(self) -> dict: """Get state of annotation. diff --git a/src/cobra/core/reaction.py b/src/cobra/core/reaction.py index 9b1755dfe..9b711463e 100644 --- a/src/cobra/core/reaction.py +++ b/src/cobra/core/reaction.py @@ -1679,25 +1679,26 @@ def _repr_html_(self) -> str: return f""" - + - + - + diff --git a/src/cobra/data/mini.json b/src/cobra/data/mini.json index df70c0a4f..8414ac8ab 100644 --- a/src/cobra/data/mini.json +++ b/src/cobra/data/mini.json @@ -5,1120 +5,1166 @@ }, "genes": [ { - "id": "b0755", + "id": "G_b0755", "name": "gpmA" }, { - "id": "b0875", + "id": "G_b0875", "name": "aqpZ" }, { - "id": "b1101", + "id": "G_b1101", "name": "ptsG" }, { - "id": "b1380", + "id": "G_b1380", "name": "ldhA" }, { - "id": "b1621", + "id": "G_b1621", "name": "malX" }, { - "annotation": { - "ncbiprotein": [ - "1208453", - "1652654" + "id": "G_b1676", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "https://identifiers.org/ncbiprotein:1208453", + "https://identifiers.org/ncbiprotein:1652654" + ] + } ] }, - "id": "b1676", "name": "pykF" }, { - "id": "b1723", + "id": "G_b1723", "name": "pfkB" }, { - "id": "b1773", + "id": "G_b1773", "name": "ydjI" }, { - "id": "b1779", + "id": "G_b1779", "name": "gapA" }, { - "id": "b1817", + "id": "G_b1817", "name": "manX" }, { - "id": "b1818", + "id": "G_b1818", "name": "manY" }, { - "id": "b1819", + "id": "G_b1819", "name": "manZ" }, { - "id": "b1854", + "id": "G_b1854", "name": "pykA" }, { - "id": "b2097", + "id": "G_b2097", "name": "fbaB" }, { - "id": "b2133", + "id": "G_b2133", "name": "dld" }, { - "id": "b2415", + "id": "G_b2415", "name": "ptsH" }, { - "id": "b2416", + "id": "G_b2416", "name": "ptsI" }, { - "id": "b2417", + "id": "G_b2417", "name": "crr" }, { - "annotation": { - "ncbiprotein": "1653839" + "id": "G_b2779", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "https://identifiers.org/ncbiprotein:1653839" + ] + } + ] }, - "id": "b2779", "name": "eno" }, { - "id": "b2925", + "id": "G_b2925", "name": "fbaA" }, { - "annotation": { - "ncbiprotein": "1653609" + "id": "G_b2926", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "https://identifiers.org/ncbiprotein:1653609" + ] + } + ] }, - "id": "b2926", "name": "pgk" }, { - "id": "b2987", + "id": "G_b2987", "name": "pitB" }, { - "id": "b3493", + "id": "G_b3493", "name": "pitA" }, { - "id": "b3612", + "id": "G_b3612", "name": "gpmM" }, { - "annotation": { - "ncbiprotein": [ - "1006614", - "1651919" + "id": "G_b3916", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "https://identifiers.org/ncbiprotein:1006614", + "https://identifiers.org/ncbiprotein:1651919" + ] + } ] }, - "id": "b3916", "name": "pfkA" }, { - "id": "b3919", + "id": "G_b3919", "name": "tpiA" }, { - "annotation": { - "ncbiprotein": "1653253" + "id": "G_b4025", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "https://identifiers.org/ncbiprotein:1653253" + ] + } + ] }, - "id": "b4025", "name": "pgi" }, { - "id": "b4395", + "id": "G_b4395", "name": "ytjC" }, { - "id": "s0001", + "id": "G_s0001", "name": "G_s0001" } ], + "groups": [], "id": "mini_textbook", "metabolites": [ { - "annotation": { - "bigg.metabolite": "13dpg", - "biocyc": "DPG", - "chebi": [ - "CHEBI:16001", - "CHEBI:1658", - "CHEBI:20189", - "CHEBI:57604", - "CHEBI:11881" - ], - "hmdb": "HMDB01270", - "kegg.compound": "C00236", - "pubchem.substance": "3535", - "reactome": "REACT_29800", - "seed.compound": "cpd00203", - "unipathway.compound": "UPC00236" - }, "charge": -4, "compartment": "c", "formula": "C3H4O10P2", - "id": "13dpg_c", + "id": "M_13dpg_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/13dpg", + "http://identifiers.org/biocyc/DPG", + "http://identifiers.org/chebi/CHEBI:16001", + "http://identifiers.org/chebi/CHEBI:1658", + "http://identifiers.org/chebi/CHEBI:20189", + "http://identifiers.org/chebi/CHEBI:57604", + "http://identifiers.org/chebi/CHEBI:11881", + "http://identifiers.org/hmdb/HMDB01270", + "http://identifiers.org/kegg.compound/C00236", + "http://identifiers.org/pubchem.substance/3535", + "http://identifiers.org/reactome/REACT_29800", + "http://identifiers.org/seed.compound/cpd00203", + "http://identifiers.org/unipathway.compound/UPC00236" + ] + } + ] + }, "name": "3-Phospho-D-glyceroyl phosphate" }, { - "annotation": { - "bigg.metabolite": "2pg", - "biocyc": "2-PG", - "chebi": [ - "CHEBI:1267", - "CHEBI:58289", - "CHEBI:17835", - "CHEBI:21028", - "CHEBI:11651", - "CHEBI:12986", - "CHEBI:24344", - "CHEBI:39868" - ], - "hmdb": [ - "HMDB03391", - "HMDB00362" - ], - "kegg.compound": "C00631", - "pubchem.substance": "3904", - "reactome": "REACT_30485", - "seed.compound": "cpd00482", - "unipathway.compound": "UPC00631" - }, "charge": -3, "compartment": "c", "formula": "C3H4O7P", - "id": "2pg_c", + "id": "M_2pg_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/2pg", + "http://identifiers.org/biocyc/2-PG", + "http://identifiers.org/chebi/CHEBI:1267", + "http://identifiers.org/chebi/CHEBI:58289", + "http://identifiers.org/chebi/CHEBI:17835", + "http://identifiers.org/chebi/CHEBI:21028", + "http://identifiers.org/chebi/CHEBI:11651", + "http://identifiers.org/chebi/CHEBI:12986", + "http://identifiers.org/chebi/CHEBI:24344", + "http://identifiers.org/chebi/CHEBI:39868", + "http://identifiers.org/hmdb/HMDB03391", + "http://identifiers.org/hmdb/HMDB00362", + "http://identifiers.org/kegg.compound/C00631", + "http://identifiers.org/pubchem.substance/3904", + "http://identifiers.org/reactome/REACT_30485", + "http://identifiers.org/seed.compound/cpd00482", + "http://identifiers.org/unipathway.compound/UPC00631" + ] + } + ] + }, "name": "D-Glycerate 2-phosphate" }, { - "annotation": { - "bigg.metabolite": "3pg", - "biocyc": "G3P", - "chebi": [ - "CHEBI:40016", - "CHEBI:58272", - "CHEBI:57998", - "CHEBI:11879", - "CHEBI:1657", - "CHEBI:1659", - "CHEBI:17050", - "CHEBI:21029", - "CHEBI:11882", - "CHEBI:11880", - "CHEBI:12987", - "CHEBI:17794", - "CHEBI:24345" - ], - "hmdb": "HMDB00807", - "kegg.compound": [ - "C00197", - "C00597" - ], - "pubchem.substance": "3497", - "reactome": "REACT_29728", - "seed.compound": "cpd00169", - "unipathway.compound": [ - "UPC00597", - "UPC00197" - ] - }, "charge": -3, "compartment": "c", "formula": "C3H4O7P", - "id": "3pg_c", + "id": "M_3pg_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/3pg", + "http://identifiers.org/biocyc/G3P", + "http://identifiers.org/chebi/CHEBI:40016", + "http://identifiers.org/chebi/CHEBI:58272", + "http://identifiers.org/chebi/CHEBI:57998", + "http://identifiers.org/chebi/CHEBI:11879", + "http://identifiers.org/chebi/CHEBI:1657", + "http://identifiers.org/chebi/CHEBI:1659", + "http://identifiers.org/chebi/CHEBI:17050", + "http://identifiers.org/chebi/CHEBI:21029", + "http://identifiers.org/chebi/CHEBI:11882", + "http://identifiers.org/chebi/CHEBI:11880", + "http://identifiers.org/chebi/CHEBI:12987", + "http://identifiers.org/chebi/CHEBI:17794", + "http://identifiers.org/chebi/CHEBI:24345", + "http://identifiers.org/hmdb/HMDB00807", + "http://identifiers.org/kegg.compound/C00197", + "http://identifiers.org/kegg.compound/C00597", + "http://identifiers.org/pubchem.substance/3497", + "http://identifiers.org/reactome/REACT_29728", + "http://identifiers.org/seed.compound/cpd00169", + "http://identifiers.org/unipathway.compound/UPC00597", + "http://identifiers.org/unipathway.compound/UPC00197" + ] + } + ] + }, "name": "3-Phospho-D-glycerate" }, { - "annotation": { - "bigg.metabolite": "adp", - "biocyc": [ - "ADP", - "ADP-GROUP" - ], - "cas": [ - "58-64-0" - ], - "chebi": [ - "CHEBI:13222", - "CHEBI:16761", - "CHEBI:2342", - "CHEBI:22244", - "CHEBI:40553", - "CHEBI:456216" - ], - "hmdb": "HMDB01341", - "kegg.compound": "C00008", - "kegg.glycan": "G11113", - "pubchem.substance": "3310", - "reactome": [ - "REACT_190072", - "REACT_481002", - "REACT_211606", - "REACT_429160", - "REACT_29370", - "REACT_196180", - "REACT_113581", - "REACT_113582", - "REACT_114564", - "REACT_114565", - "REACT_429153" - ], - "seed.compound": "cpd00008", - "unipathway.compound": "UPC00008" - }, "charge": -3, "compartment": "c", "formula": "C10H12N5O10P2", - "id": "adp_c", + "id": "M_adp_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/adp", + "http://identifiers.org/biocyc/ADP", + "http://identifiers.org/biocyc/ADP-GROUP", + "http://identifiers.org/cas/58-64-0", + "http://identifiers.org/cas/58-64-0", + "http://identifiers.org/chebi/CHEBI:13222", + "http://identifiers.org/chebi/CHEBI:16761", + "http://identifiers.org/chebi/CHEBI:2342", + "http://identifiers.org/chebi/CHEBI:22244", + "http://identifiers.org/chebi/CHEBI:40553", + "http://identifiers.org/chebi/CHEBI:456216", + "http://identifiers.org/hmdb/HMDB01341", + "http://identifiers.org/kegg.compound/C00008", + "http://identifiers.org/kegg.glycan/G11113", + "http://identifiers.org/pubchem.substance/3310", + "http://identifiers.org/reactome/REACT_190072", + "http://identifiers.org/reactome/REACT_481002", + "http://identifiers.org/reactome/REACT_211606", + "http://identifiers.org/reactome/REACT_429160", + "http://identifiers.org/reactome/REACT_29370", + "http://identifiers.org/reactome/REACT_196180", + "http://identifiers.org/reactome/REACT_113581", + "http://identifiers.org/reactome/REACT_113582", + "http://identifiers.org/reactome/REACT_114564", + "http://identifiers.org/reactome/REACT_114565", + "http://identifiers.org/reactome/REACT_429153", + "http://identifiers.org/seed.compound/cpd00008", + "http://identifiers.org/unipathway.compound/UPC00008" + ] + } + ] + }, "name": "ADP" }, { - "annotation": { - "bigg.metabolite": "atp", - "biocyc": "ATP", - "cas": [ - "56-65-5" - ], - "chebi": [ - "CHEBI:40938", - "CHEBI:15422", - "CHEBI:57299", - "CHEBI:13236", - "CHEBI:10789", - "CHEBI:30616", - "CHEBI:22249", - "CHEBI:10841", - "CHEBI:2359" - ], - "hmdb": "HMDB00538", - "kegg.compound": "C00002", - "kegg.drug": "D08646", - "pubchem.substance": "3304", - "reactome": [ - "REACT_190078", - "REACT_113592", - "REACT_113593", - "REACT_114570", - "REACT_29358", - "REACT_389573", - "REACT_139836", - "REACT_211579" - ], - "seed.compound": "cpd00002", - "unipathway.compound": "UPC00002" - }, "charge": -4, "compartment": "c", "formula": "C10H12N5O13P3", - "id": "atp_c", + "id": "M_atp_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/atp", + "http://identifiers.org/biocyc/ATP", + "http://identifiers.org/cas/56-65-5", + "http://identifiers.org/cas/56-65-5", + "http://identifiers.org/chebi/CHEBI:40938", + "http://identifiers.org/chebi/CHEBI:15422", + "http://identifiers.org/chebi/CHEBI:57299", + "http://identifiers.org/chebi/CHEBI:13236", + "http://identifiers.org/chebi/CHEBI:10789", + "http://identifiers.org/chebi/CHEBI:30616", + "http://identifiers.org/chebi/CHEBI:22249", + "http://identifiers.org/chebi/CHEBI:10841", + "http://identifiers.org/chebi/CHEBI:2359", + "http://identifiers.org/hmdb/HMDB00538", + "http://identifiers.org/kegg.compound/C00002", + "http://identifiers.org/kegg.drug/D08646", + "http://identifiers.org/pubchem.substance/3304", + "http://identifiers.org/reactome/REACT_190078", + "http://identifiers.org/reactome/REACT_113592", + "http://identifiers.org/reactome/REACT_113593", + "http://identifiers.org/reactome/REACT_114570", + "http://identifiers.org/reactome/REACT_29358", + "http://identifiers.org/reactome/REACT_389573", + "http://identifiers.org/reactome/REACT_139836", + "http://identifiers.org/reactome/REACT_211579", + "http://identifiers.org/seed.compound/cpd00002", + "http://identifiers.org/unipathway.compound/UPC00002" + ] + } + ] + }, "name": "ATP" }, { - "annotation": { - "bigg.metabolite": "dhap", - "biocyc": "DIHYDROXY-ACETONE-PHOSPHATE", - "cas": [ - "57-04-5" - ], - "chebi": [ - "CHEBI:14341", - "CHEBI:57642", - "CHEBI:14342", - "CHEBI:16108", - "CHEBI:5454", - "CHEBI:24355", - "CHEBI:39571" - ], - "hmdb": [ - "HMDB01473", - "HMDB11735" - ], - "kegg.compound": "C00111", - "pubchem.substance": "3411", - "reactome": [ - "REACT_188451", - "REACT_75970", - "REACT_390404" - ], - "seed.compound": "cpd00095", - "unipathway.compound": "UPC00111" - }, "charge": -2, "compartment": "c", "formula": "C3H5O6P", - "id": "dhap_c", + "id": "M_dhap_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/dhap", + "http://identifiers.org/biocyc/DIHYDROXY-ACETONE-PHOSPHATE", + "http://identifiers.org/cas/57-04-5", + "http://identifiers.org/cas/57-04-5", + "http://identifiers.org/chebi/CHEBI:14341", + "http://identifiers.org/chebi/CHEBI:57642", + "http://identifiers.org/chebi/CHEBI:14342", + "http://identifiers.org/chebi/CHEBI:16108", + "http://identifiers.org/chebi/CHEBI:5454", + "http://identifiers.org/chebi/CHEBI:24355", + "http://identifiers.org/chebi/CHEBI:39571", + "http://identifiers.org/hmdb/HMDB01473", + "http://identifiers.org/hmdb/HMDB11735", + "http://identifiers.org/kegg.compound/C00111", + "http://identifiers.org/pubchem.substance/3411", + "http://identifiers.org/reactome/REACT_188451", + "http://identifiers.org/reactome/REACT_75970", + "http://identifiers.org/reactome/REACT_390404", + "http://identifiers.org/seed.compound/cpd00095", + "http://identifiers.org/unipathway.compound/UPC00111" + ] + } + ] + }, "name": "Dihydroxyacetone phosphate" }, { - "annotation": { - "bigg.metabolite": "f6p", - "biocyc": "FRUCTOSE-6P", - "cas": [ - "643-13-0" - ], - "chebi": [ - "CHEBI:57634", - "CHEBI:12352", - "CHEBI:45804", - "CHEBI:61527", - "CHEBI:61553", - "CHEBI:10375", - "CHEBI:16084", - "CHEBI:42378", - "CHEBI:22768" - ], - "hmdb": "HMDB03971", - "kegg.compound": [ - "C05345", - "C00085" - ], - "pubchem.substance": "3385", - "seed.compound": "cpd00072", - "unipathway.compound": [ - "UPC05345", - "UPC00085" - ] - }, "charge": -2, "compartment": "c", "formula": "C6H11O9P", - "id": "f6p_c", + "id": "M_f6p_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/f6p", + "http://identifiers.org/biocyc/FRUCTOSE-6P", + "http://identifiers.org/cas/643-13-0", + "http://identifiers.org/cas/643-13-0", + "http://identifiers.org/chebi/CHEBI:57634", + "http://identifiers.org/chebi/CHEBI:12352", + "http://identifiers.org/chebi/CHEBI:45804", + "http://identifiers.org/chebi/CHEBI:61527", + "http://identifiers.org/chebi/CHEBI:61553", + "http://identifiers.org/chebi/CHEBI:10375", + "http://identifiers.org/chebi/CHEBI:16084", + "http://identifiers.org/chebi/CHEBI:42378", + "http://identifiers.org/chebi/CHEBI:22768", + "http://identifiers.org/hmdb/HMDB03971", + "http://identifiers.org/kegg.compound/C05345", + "http://identifiers.org/kegg.compound/C00085", + "http://identifiers.org/pubchem.substance/3385", + "http://identifiers.org/seed.compound/cpd00072", + "http://identifiers.org/unipathway.compound/UPC05345", + "http://identifiers.org/unipathway.compound/UPC00085" + ] + } + ] + }, "name": "D-Fructose 6-phosphate" }, { - "annotation": { - "bigg.metabolite": "fdp", - "biocyc": "FRUCTOSE-16-DIPHOSPHATE", - "cas": [ - "488-69-7" - ], - "chebi": [ - "CHEBI:32968", - "CHEBI:49299", - "CHEBI:42553", - "CHEBI:32966", - "CHEBI:37736", - "CHEBI:28013", - "CHEBI:32967", - "CHEBI:41014", - "CHEBI:22767", - "CHEBI:10374", - "CHEBI:40595", - "CHEBI:40591" - ], - "kegg.compound": [ - "C05378", - "C00354" - ], - "pubchem.substance": "3647", - "seed.compound": "cpd00290", - "unipathway.compound": "UPC00354" - }, "charge": -4, "compartment": "c", "formula": "C6H10O12P2", - "id": "fdp_c", + "id": "M_fdp_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/fdp", + "http://identifiers.org/biocyc/FRUCTOSE-16-DIPHOSPHATE", + "http://identifiers.org/cas/488-69-7", + "http://identifiers.org/cas/488-69-7", + "http://identifiers.org/chebi/CHEBI:32968", + "http://identifiers.org/chebi/CHEBI:49299", + "http://identifiers.org/chebi/CHEBI:42553", + "http://identifiers.org/chebi/CHEBI:32966", + "http://identifiers.org/chebi/CHEBI:37736", + "http://identifiers.org/chebi/CHEBI:28013", + "http://identifiers.org/chebi/CHEBI:32967", + "http://identifiers.org/chebi/CHEBI:41014", + "http://identifiers.org/chebi/CHEBI:22767", + "http://identifiers.org/chebi/CHEBI:10374", + "http://identifiers.org/chebi/CHEBI:40595", + "http://identifiers.org/chebi/CHEBI:40591", + "http://identifiers.org/kegg.compound/C05378", + "http://identifiers.org/kegg.compound/C00354", + "http://identifiers.org/pubchem.substance/3647", + "http://identifiers.org/seed.compound/cpd00290", + "http://identifiers.org/unipathway.compound/UPC00354" + ] + } + ] + }, "name": "D-Fructose 1,6-bisphosphate" }, { - "annotation": { - "bigg.metabolite": "g3p", - "cas": [ - "142-10-9" - ], - "chebi": [ - "CHEBI:17138", - "CHEBI:14333", - "CHEBI:5446", - "CHEBI:58027" - ], - "hmdb": "HMDB01112", - "kegg.compound": [ - "C00661", - "C00118" - ], - "pubchem.substance": "3930", - "seed.compound": "cpd00102", - "unipathway.compound": [ - "UPC00661", - "UPC00118" - ] - }, "charge": -2, "compartment": "c", "formula": "C3H5O6P", - "id": "g3p_c", + "id": "M_g3p_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/g3p", + "http://identifiers.org/cas/142-10-9", + "http://identifiers.org/cas/142-10-9", + "http://identifiers.org/chebi/CHEBI:17138", + "http://identifiers.org/chebi/CHEBI:14333", + "http://identifiers.org/chebi/CHEBI:5446", + "http://identifiers.org/chebi/CHEBI:58027", + "http://identifiers.org/hmdb/HMDB01112", + "http://identifiers.org/kegg.compound/C00661", + "http://identifiers.org/kegg.compound/C00118", + "http://identifiers.org/pubchem.substance/3930", + "http://identifiers.org/seed.compound/cpd00102", + "http://identifiers.org/unipathway.compound/UPC00661", + "http://identifiers.org/unipathway.compound/UPC00118" + ] + } + ] + }, "name": "Glyceraldehyde 3-phosphate" }, { - "annotation": { - "bigg.metabolite": "g6p", - "biocyc": [ - "D-glucose-6-phosphate", - "GLC-6-P" - ], - "cas": [ - "56-73-5" - ], - "chebi": [ - "CHEBI:10399", - "CHEBI:22797", - "CHEBI:41041", - "CHEBI:17719", - "CHEBI:4170", - "CHEBI:61548", - "CHEBI:58247", - "CHEBI:12375" - ], - "hmdb": [ - "HMDB03498", - "HMDB06793", - "HMDB01401", - "HMDB01549" - ], - "kegg.compound": [ - "C00092", - "C01172" - ], - "pubchem.substance": "3392", - "reactome": "REACT_1629756", - "seed.compound": "cpd00079", - "unipathway.compound": "UPC00092" - }, "charge": -2, "compartment": "c", "formula": "C6H11O9P", - "id": "g6p_c", + "id": "M_g6p_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/g6p", + "http://identifiers.org/biocyc/D-glucose-6-phosphate", + "http://identifiers.org/biocyc/GLC-6-P", + "http://identifiers.org/cas/56-73-5", + "http://identifiers.org/cas/56-73-5", + "http://identifiers.org/chebi/CHEBI:10399", + "http://identifiers.org/chebi/CHEBI:22797", + "http://identifiers.org/chebi/CHEBI:41041", + "http://identifiers.org/chebi/CHEBI:17719", + "http://identifiers.org/chebi/CHEBI:4170", + "http://identifiers.org/chebi/CHEBI:61548", + "http://identifiers.org/chebi/CHEBI:58247", + "http://identifiers.org/chebi/CHEBI:12375", + "http://identifiers.org/hmdb/HMDB03498", + "http://identifiers.org/hmdb/HMDB06793", + "http://identifiers.org/hmdb/HMDB01401", + "http://identifiers.org/hmdb/HMDB01549", + "http://identifiers.org/kegg.compound/C00092", + "http://identifiers.org/kegg.compound/C01172", + "http://identifiers.org/pubchem.substance/3392", + "http://identifiers.org/reactome/REACT_1629756", + "http://identifiers.org/seed.compound/cpd00079", + "http://identifiers.org/unipathway.compound/UPC00092" + ] + } + ] + }, "name": "D-Glucose 6-phosphate" }, { - "annotation": { - "bigg.metabolite": "glc__D", - "cas": [ - "50-99-7" - ], - "kegg.compound": "C00031", - "pubchem.substance": "3333" - }, "charge": 0, "compartment": "e", "formula": "C6H12O6", - "id": "glc__D_e", + "id": "M_glc__D_e", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/glc__D", + "http://identifiers.org/cas/50-99-7", + "http://identifiers.org/cas/50-99-7", + "http://identifiers.org/kegg.compound/C00031", + "http://identifiers.org/pubchem.substance/3333" + ] + } + ] + }, "name": "D-Glucose" }, { - "annotation": { - "bigg.metabolite": "h2o", - "biocyc": [ - "WATER", - "OH", - "OXONIUM" - ], - "cas": [ - "7732-18-5" - ], - "chebi": [ - "CHEBI:15377", - "CHEBI:13365", - "CHEBI:41979", - "CHEBI:16234", - "CHEBI:36385", - "CHEBI:42857", - "CHEBI:27313", - "CHEBI:44819", - "CHEBI:29373", - "CHEBI:10743", - "CHEBI:5594", - "CHEBI:29356", - "CHEBI:53442", - "CHEBI:29375", - "CHEBI:29374", - "CHEBI:13419", - "CHEBI:43228", - "CHEBI:44292", - "CHEBI:13352", - "CHEBI:41981", - "CHEBI:29412", - "CHEBI:42043", - "CHEBI:33811", - "CHEBI:33813", - "CHEBI:35511", - "CHEBI:5585", - "CHEBI:44641", - "CHEBI:44701" - ], - "hmdb": [ - "HMDB01039", - "HMDB02111" - ], - "kegg.compound": [ - "C01328", - "C00001", - "C18714", - "C18712" - ], - "kegg.drug": [ - "D00001", - "D06322", - "D03703" - ], - "pubchem.substance": "3303", - "reactome": [ - "REACT_947593", - "REACT_189422", - "REACT_141343", - "REACT_113518", - "REACT_1605715", - "REACT_109276", - "REACT_113521", - "REACT_113519", - "REACT_2022884", - "REACT_351603", - "REACT_29356" - ], - "seed.compound": [ - "cpd15275", - "cpd00001" - ], - "unipathway.compound": [ - "UPC00001", - "UPC01328" - ] - }, "charge": 0, "compartment": "c", "formula": "H2O", - "id": "h2o_c", + "id": "M_h2o_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/h2o", + "http://identifiers.org/biocyc/WATER", + "http://identifiers.org/biocyc/OH", + "http://identifiers.org/biocyc/OXONIUM", + "http://identifiers.org/cas/7732-18-5", + "http://identifiers.org/cas/7732-18-5", + "http://identifiers.org/chebi/CHEBI:15377", + "http://identifiers.org/chebi/CHEBI:13365", + "http://identifiers.org/chebi/CHEBI:41979", + "http://identifiers.org/chebi/CHEBI:16234", + "http://identifiers.org/chebi/CHEBI:36385", + "http://identifiers.org/chebi/CHEBI:42857", + "http://identifiers.org/chebi/CHEBI:27313", + "http://identifiers.org/chebi/CHEBI:44819", + "http://identifiers.org/chebi/CHEBI:29373", + "http://identifiers.org/chebi/CHEBI:10743", + "http://identifiers.org/chebi/CHEBI:5594", + "http://identifiers.org/chebi/CHEBI:29356", + "http://identifiers.org/chebi/CHEBI:53442", + "http://identifiers.org/chebi/CHEBI:29375", + "http://identifiers.org/chebi/CHEBI:29374", + "http://identifiers.org/chebi/CHEBI:13419", + "http://identifiers.org/chebi/CHEBI:43228", + "http://identifiers.org/chebi/CHEBI:44292", + "http://identifiers.org/chebi/CHEBI:13352", + "http://identifiers.org/chebi/CHEBI:41981", + "http://identifiers.org/chebi/CHEBI:29412", + "http://identifiers.org/chebi/CHEBI:42043", + "http://identifiers.org/chebi/CHEBI:33811", + "http://identifiers.org/chebi/CHEBI:33813", + "http://identifiers.org/chebi/CHEBI:35511", + "http://identifiers.org/chebi/CHEBI:5585", + "http://identifiers.org/chebi/CHEBI:44641", + "http://identifiers.org/chebi/CHEBI:44701", + "http://identifiers.org/hmdb/HMDB01039", + "http://identifiers.org/hmdb/HMDB02111", + "http://identifiers.org/kegg.compound/C01328", + "http://identifiers.org/kegg.compound/C00001", + "http://identifiers.org/kegg.compound/C18714", + "http://identifiers.org/kegg.compound/C18712", + "http://identifiers.org/kegg.drug/D00001", + "http://identifiers.org/kegg.drug/D06322", + "http://identifiers.org/kegg.drug/D03703", + "http://identifiers.org/pubchem.substance/3303", + "http://identifiers.org/reactome/REACT_947593", + "http://identifiers.org/reactome/REACT_189422", + "http://identifiers.org/reactome/REACT_141343", + "http://identifiers.org/reactome/REACT_113518", + "http://identifiers.org/reactome/REACT_1605715", + "http://identifiers.org/reactome/REACT_109276", + "http://identifiers.org/reactome/REACT_113521", + "http://identifiers.org/reactome/REACT_113519", + "http://identifiers.org/reactome/REACT_2022884", + "http://identifiers.org/reactome/REACT_351603", + "http://identifiers.org/reactome/REACT_29356", + "http://identifiers.org/seed.compound/cpd15275", + "http://identifiers.org/seed.compound/cpd00001", + "http://identifiers.org/unipathway.compound/UPC00001", + "http://identifiers.org/unipathway.compound/UPC01328" + ] + } + ] + }, "name": "H2O" }, { - "annotation": { - "bigg.metabolite": "h2o", - "biocyc": [ - "WATER", - "OH", - "OXONIUM" - ], - "cas": [ - "7732-18-5" - ], - "chebi": [ - "CHEBI:15377", - "CHEBI:13365", - "CHEBI:41979", - "CHEBI:16234", - "CHEBI:36385", - "CHEBI:42857", - "CHEBI:27313", - "CHEBI:44819", - "CHEBI:29373", - "CHEBI:10743", - "CHEBI:5594", - "CHEBI:29356", - "CHEBI:53442", - "CHEBI:29375", - "CHEBI:29374", - "CHEBI:13419", - "CHEBI:43228", - "CHEBI:44292", - "CHEBI:13352", - "CHEBI:41981", - "CHEBI:29412", - "CHEBI:42043", - "CHEBI:33811", - "CHEBI:33813", - "CHEBI:35511", - "CHEBI:5585", - "CHEBI:44641", - "CHEBI:44701" - ], - "hmdb": [ - "HMDB01039", - "HMDB02111" - ], - "kegg.compound": [ - "C01328", - "C00001", - "C18714", - "C18712" - ], - "kegg.drug": [ - "D00001", - "D06322", - "D03703" - ], - "pubchem.substance": "3303", - "reactome": [ - "REACT_947593", - "REACT_189422", - "REACT_141343", - "REACT_113518", - "REACT_1605715", - "REACT_109276", - "REACT_113521", - "REACT_113519", - "REACT_2022884", - "REACT_351603", - "REACT_29356" - ], - "seed.compound": [ - "cpd15275", - "cpd00001" - ], - "unipathway.compound": [ - "UPC00001", - "UPC01328" - ] - }, "charge": 0, "compartment": "e", "formula": "H2O", - "id": "h2o_e", + "id": "M_h2o_e", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/h2o", + "http://identifiers.org/biocyc/WATER", + "http://identifiers.org/biocyc/OH", + "http://identifiers.org/biocyc/OXONIUM", + "http://identifiers.org/cas/7732-18-5", + "http://identifiers.org/cas/7732-18-5", + "http://identifiers.org/chebi/CHEBI:15377", + "http://identifiers.org/chebi/CHEBI:13365", + "http://identifiers.org/chebi/CHEBI:41979", + "http://identifiers.org/chebi/CHEBI:16234", + "http://identifiers.org/chebi/CHEBI:36385", + "http://identifiers.org/chebi/CHEBI:42857", + "http://identifiers.org/chebi/CHEBI:27313", + "http://identifiers.org/chebi/CHEBI:44819", + "http://identifiers.org/chebi/CHEBI:29373", + "http://identifiers.org/chebi/CHEBI:10743", + "http://identifiers.org/chebi/CHEBI:5594", + "http://identifiers.org/chebi/CHEBI:29356", + "http://identifiers.org/chebi/CHEBI:53442", + "http://identifiers.org/chebi/CHEBI:29375", + "http://identifiers.org/chebi/CHEBI:29374", + "http://identifiers.org/chebi/CHEBI:13419", + "http://identifiers.org/chebi/CHEBI:43228", + "http://identifiers.org/chebi/CHEBI:44292", + "http://identifiers.org/chebi/CHEBI:13352", + "http://identifiers.org/chebi/CHEBI:41981", + "http://identifiers.org/chebi/CHEBI:29412", + "http://identifiers.org/chebi/CHEBI:42043", + "http://identifiers.org/chebi/CHEBI:33811", + "http://identifiers.org/chebi/CHEBI:33813", + "http://identifiers.org/chebi/CHEBI:35511", + "http://identifiers.org/chebi/CHEBI:5585", + "http://identifiers.org/chebi/CHEBI:44641", + "http://identifiers.org/chebi/CHEBI:44701", + "http://identifiers.org/hmdb/HMDB01039", + "http://identifiers.org/hmdb/HMDB02111", + "http://identifiers.org/kegg.compound/C01328", + "http://identifiers.org/kegg.compound/C00001", + "http://identifiers.org/kegg.compound/C18714", + "http://identifiers.org/kegg.compound/C18712", + "http://identifiers.org/kegg.drug/D00001", + "http://identifiers.org/kegg.drug/D06322", + "http://identifiers.org/kegg.drug/D03703", + "http://identifiers.org/pubchem.substance/3303", + "http://identifiers.org/reactome/REACT_947593", + "http://identifiers.org/reactome/REACT_189422", + "http://identifiers.org/reactome/REACT_141343", + "http://identifiers.org/reactome/REACT_113518", + "http://identifiers.org/reactome/REACT_1605715", + "http://identifiers.org/reactome/REACT_109276", + "http://identifiers.org/reactome/REACT_113521", + "http://identifiers.org/reactome/REACT_113519", + "http://identifiers.org/reactome/REACT_2022884", + "http://identifiers.org/reactome/REACT_351603", + "http://identifiers.org/reactome/REACT_29356", + "http://identifiers.org/seed.compound/cpd15275", + "http://identifiers.org/seed.compound/cpd00001", + "http://identifiers.org/unipathway.compound/UPC00001", + "http://identifiers.org/unipathway.compound/UPC01328" + ] + } + ] + }, "name": "H2O" }, { - "annotation": { - "bigg.metabolite": "h", - "biocyc": "PROTON", - "cas": [ - "12408-02-5" - ], - "chebi": [ - "CHEBI:24636", - "CHEBI:15378", - "CHEBI:10744", - "CHEBI:13357", - "CHEBI:5584" - ], - "kegg.compound": "C00080", - "pubchem.substance": "3380", - "reactome": [ - "REACT_194688", - "REACT_425978", - "REACT_193465", - "REACT_374900", - "REACT_74722", - "REACT_425999", - "REACT_428040", - "REACT_163953", - "REACT_372511", - "REACT_2000349", - "REACT_70106", - "REACT_1470067", - "REACT_113529", - "REACT_425969", - "REACT_428548", - "REACT_156540", - "REACT_1614597", - "REACT_351626", - "REACT_427899" - ], - "seed.compound": "cpd00067", - "unipathway.compound": "UPC00080" - }, "charge": 1, "compartment": "c", "formula": "H", - "id": "h_c", + "id": "M_h_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/h", + "http://identifiers.org/biocyc/PROTON", + "http://identifiers.org/cas/12408-02-5", + "http://identifiers.org/cas/12408-02-5", + "http://identifiers.org/chebi/CHEBI:24636", + "http://identifiers.org/chebi/CHEBI:15378", + "http://identifiers.org/chebi/CHEBI:10744", + "http://identifiers.org/chebi/CHEBI:13357", + "http://identifiers.org/chebi/CHEBI:5584", + "http://identifiers.org/kegg.compound/C00080", + "http://identifiers.org/pubchem.substance/3380", + "http://identifiers.org/reactome/REACT_194688", + "http://identifiers.org/reactome/REACT_425978", + "http://identifiers.org/reactome/REACT_193465", + "http://identifiers.org/reactome/REACT_374900", + "http://identifiers.org/reactome/REACT_74722", + "http://identifiers.org/reactome/REACT_425999", + "http://identifiers.org/reactome/REACT_428040", + "http://identifiers.org/reactome/REACT_163953", + "http://identifiers.org/reactome/REACT_372511", + "http://identifiers.org/reactome/REACT_2000349", + "http://identifiers.org/reactome/REACT_70106", + "http://identifiers.org/reactome/REACT_1470067", + "http://identifiers.org/reactome/REACT_113529", + "http://identifiers.org/reactome/REACT_425969", + "http://identifiers.org/reactome/REACT_428548", + "http://identifiers.org/reactome/REACT_156540", + "http://identifiers.org/reactome/REACT_1614597", + "http://identifiers.org/reactome/REACT_351626", + "http://identifiers.org/reactome/REACT_427899", + "http://identifiers.org/seed.compound/cpd00067", + "http://identifiers.org/unipathway.compound/UPC00080" + ] + } + ] + }, "name": "H+" }, { - "annotation": { - "bigg.metabolite": "h", - "biocyc": "PROTON", - "cas": [ - "12408-02-5" - ], - "chebi": [ - "CHEBI:24636", - "CHEBI:15378", - "CHEBI:10744", - "CHEBI:13357", - "CHEBI:5584" - ], - "kegg.compound": "C00080", - "pubchem.substance": "3380", - "reactome": [ - "REACT_194688", - "REACT_425978", - "REACT_193465", - "REACT_374900", - "REACT_74722", - "REACT_425999", - "REACT_428040", - "REACT_163953", - "REACT_372511", - "REACT_2000349", - "REACT_70106", - "REACT_1470067", - "REACT_113529", - "REACT_425969", - "REACT_428548", - "REACT_156540", - "REACT_1614597", - "REACT_351626", - "REACT_427899" - ], - "seed.compound": "cpd00067", - "unipathway.compound": "UPC00080" - }, "charge": 1, "compartment": "e", "formula": "H", - "id": "h_e", + "id": "M_h_e", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/h", + "http://identifiers.org/biocyc/PROTON", + "http://identifiers.org/cas/12408-02-5", + "http://identifiers.org/cas/12408-02-5", + "http://identifiers.org/chebi/CHEBI:24636", + "http://identifiers.org/chebi/CHEBI:15378", + "http://identifiers.org/chebi/CHEBI:10744", + "http://identifiers.org/chebi/CHEBI:13357", + "http://identifiers.org/chebi/CHEBI:5584", + "http://identifiers.org/kegg.compound/C00080", + "http://identifiers.org/pubchem.substance/3380", + "http://identifiers.org/reactome/REACT_194688", + "http://identifiers.org/reactome/REACT_425978", + "http://identifiers.org/reactome/REACT_193465", + "http://identifiers.org/reactome/REACT_374900", + "http://identifiers.org/reactome/REACT_74722", + "http://identifiers.org/reactome/REACT_425999", + "http://identifiers.org/reactome/REACT_428040", + "http://identifiers.org/reactome/REACT_163953", + "http://identifiers.org/reactome/REACT_372511", + "http://identifiers.org/reactome/REACT_2000349", + "http://identifiers.org/reactome/REACT_70106", + "http://identifiers.org/reactome/REACT_1470067", + "http://identifiers.org/reactome/REACT_113529", + "http://identifiers.org/reactome/REACT_425969", + "http://identifiers.org/reactome/REACT_428548", + "http://identifiers.org/reactome/REACT_156540", + "http://identifiers.org/reactome/REACT_1614597", + "http://identifiers.org/reactome/REACT_351626", + "http://identifiers.org/reactome/REACT_427899", + "http://identifiers.org/seed.compound/cpd00067", + "http://identifiers.org/unipathway.compound/UPC00080" + ] + } + ] + }, "name": "H+" }, { - "annotation": { - "bigg.metabolite": "lac__D", - "biocyc": "META:D-LACTATE", - "chebi": [ - "CHEBI:11001", - "CHEBI:16004", - "CHEBI:18684", - "CHEBI:341", - "CHEBI:42105", - "CHEBI:42111", - "CHEBI:43701" - ], - "hmdb": [ - "HMDB00171", - "HMDB01311" - ], - "kegg.compound": "C00256", - "metanetx.chemical": "MNXM285", - "seed.compound": "cpd00221" - }, "charge": -1, "compartment": "c", "formula": "C3H5O3", - "id": "lac__D_c", + "id": "M_lac__D_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/lac__D", + "http://identifiers.org/biocyc/META:D-LACTATE", + "http://identifiers.org/chebi/CHEBI:11001", + "http://identifiers.org/chebi/CHEBI:16004", + "http://identifiers.org/chebi/CHEBI:18684", + "http://identifiers.org/chebi/CHEBI:341", + "http://identifiers.org/chebi/CHEBI:42105", + "http://identifiers.org/chebi/CHEBI:42111", + "http://identifiers.org/chebi/CHEBI:43701", + "http://identifiers.org/hmdb/HMDB00171", + "http://identifiers.org/hmdb/HMDB01311", + "http://identifiers.org/kegg.compound/C00256", + "http://identifiers.org/metanetx.chemical/MNXM285", + "http://identifiers.org/seed.compound/cpd00221" + ] + } + ] + }, "name": "D-Lactate" }, { - "annotation": { - "bigg.metabolite": "lac__D", - "biocyc": "META:D-LACTATE", - "chebi": [ - "CHEBI:11001", - "CHEBI:16004", - "CHEBI:18684", - "CHEBI:341", - "CHEBI:42105", - "CHEBI:42111", - "CHEBI:43701" - ], - "hmdb": [ - "HMDB00171", - "HMDB01311" - ], - "kegg.compound": "C00256", - "metanetx.chemical": "MNXM285", - "seed.compound": "cpd00221" - }, "charge": -1, "compartment": "e", "formula": "C3H5O3", - "id": "lac__D_e", + "id": "M_lac__D_e", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/lac__D", + "http://identifiers.org/biocyc/META:D-LACTATE", + "http://identifiers.org/chebi/CHEBI:11001", + "http://identifiers.org/chebi/CHEBI:16004", + "http://identifiers.org/chebi/CHEBI:18684", + "http://identifiers.org/chebi/CHEBI:341", + "http://identifiers.org/chebi/CHEBI:42105", + "http://identifiers.org/chebi/CHEBI:42111", + "http://identifiers.org/chebi/CHEBI:43701", + "http://identifiers.org/hmdb/HMDB00171", + "http://identifiers.org/hmdb/HMDB01311", + "http://identifiers.org/kegg.compound/C00256", + "http://identifiers.org/metanetx.chemical/MNXM285", + "http://identifiers.org/seed.compound/cpd00221" + ] + } + ] + }, "name": "D-Lactate" }, { - "annotation": { - "bigg.metabolite": "nad", - "biocyc": "NAD", - "cas": [ - "53-84-9" - ], - "chebi": [ - "CHEBI:21901", - "CHEBI:7422", - "CHEBI:44214", - "CHEBI:15846", - "CHEBI:13394", - "CHEBI:13393", - "CHEBI:44215", - "CHEBI:13389", - "CHEBI:57540", - "CHEBI:44281" - ], - "hmdb": "HMDB00902", - "kegg.compound": "C00003", - "kegg.drug": "D00002", - "pubchem.substance": "3305", - "reactome": [ - "REACT_192307", - "REACT_29360", - "REACT_427523", - "REACT_194653", - "REACT_113526" - ], - "seed.compound": "cpd00003", - "unipathway.compound": "UPC00003" - }, "charge": -1, "compartment": "c", "formula": "C21H26N7O14P2", - "id": "nad_c", + "id": "M_nad_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/nad", + "http://identifiers.org/biocyc/NAD", + "http://identifiers.org/cas/53-84-9", + "http://identifiers.org/cas/53-84-9", + "http://identifiers.org/chebi/CHEBI:21901", + "http://identifiers.org/chebi/CHEBI:7422", + "http://identifiers.org/chebi/CHEBI:44214", + "http://identifiers.org/chebi/CHEBI:15846", + "http://identifiers.org/chebi/CHEBI:13394", + "http://identifiers.org/chebi/CHEBI:13393", + "http://identifiers.org/chebi/CHEBI:44215", + "http://identifiers.org/chebi/CHEBI:13389", + "http://identifiers.org/chebi/CHEBI:57540", + "http://identifiers.org/chebi/CHEBI:44281", + "http://identifiers.org/hmdb/HMDB00902", + "http://identifiers.org/kegg.compound/C00003", + "http://identifiers.org/kegg.drug/D00002", + "http://identifiers.org/pubchem.substance/3305", + "http://identifiers.org/reactome/REACT_192307", + "http://identifiers.org/reactome/REACT_29360", + "http://identifiers.org/reactome/REACT_427523", + "http://identifiers.org/reactome/REACT_194653", + "http://identifiers.org/reactome/REACT_113526", + "http://identifiers.org/seed.compound/cpd00003", + "http://identifiers.org/unipathway.compound/UPC00003" + ] + } + ] + }, "name": "Nicotinamide adenine dinucleotide" }, { - "annotation": { - "bigg.metabolite": "nadh", - "biocyc": "NADH", - "cas": [ - "58-68-4" - ], - "chebi": [ - "CHEBI:13395", - "CHEBI:21902", - "CHEBI:16908", - "CHEBI:7423", - "CHEBI:44216", - "CHEBI:57945", - "CHEBI:13396" - ], - "hmdb": "HMDB01487", - "kegg.compound": "C00004", - "pubchem.substance": "3306", - "reactome": [ - "REACT_192305", - "REACT_73473", - "REACT_194697", - "REACT_29362" - ], - "seed.compound": "cpd00004", - "unipathway.compound": "UPC00004" - }, "charge": -2, "compartment": "c", "formula": "C21H27N7O14P2", - "id": "nadh_c", + "id": "M_nadh_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/nadh", + "http://identifiers.org/biocyc/NADH", + "http://identifiers.org/cas/58-68-4", + "http://identifiers.org/cas/58-68-4", + "http://identifiers.org/chebi/CHEBI:13395", + "http://identifiers.org/chebi/CHEBI:21902", + "http://identifiers.org/chebi/CHEBI:16908", + "http://identifiers.org/chebi/CHEBI:7423", + "http://identifiers.org/chebi/CHEBI:44216", + "http://identifiers.org/chebi/CHEBI:57945", + "http://identifiers.org/chebi/CHEBI:13396", + "http://identifiers.org/hmdb/HMDB01487", + "http://identifiers.org/kegg.compound/C00004", + "http://identifiers.org/pubchem.substance/3306", + "http://identifiers.org/reactome/REACT_192305", + "http://identifiers.org/reactome/REACT_73473", + "http://identifiers.org/reactome/REACT_194697", + "http://identifiers.org/reactome/REACT_29362", + "http://identifiers.org/seed.compound/cpd00004", + "http://identifiers.org/unipathway.compound/UPC00004" + ] + } + ] + }, "name": "Nicotinamide adenine dinucleotide - reduced" }, { - "annotation": { - "bigg.metabolite": "pep", - "biocyc": "PHOSPHO-ENOL-PYRUVATE", - "cas": [ - "138-08-9" - ], - "chebi": [ - "CHEBI:44897", - "CHEBI:44894", - "CHEBI:14812", - "CHEBI:8147", - "CHEBI:26055", - "CHEBI:26054", - "CHEBI:58702", - "CHEBI:18021" - ], - "hmdb": "HMDB00263", - "kegg.compound": "C00074", - "pubchem.substance": "3374", - "reactome": [ - "REACT_29492", - "REACT_372364" - ], - "seed.compound": "cpd00061", - "unipathway.compound": "UPC00074" - }, "charge": -3, "compartment": "c", "formula": "C3H2O6P", - "id": "pep_c", + "id": "M_pep_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/pep", + "http://identifiers.org/biocyc/PHOSPHO-ENOL-PYRUVATE", + "http://identifiers.org/cas/138-08-9", + "http://identifiers.org/cas/138-08-9", + "http://identifiers.org/chebi/CHEBI:44897", + "http://identifiers.org/chebi/CHEBI:44894", + "http://identifiers.org/chebi/CHEBI:14812", + "http://identifiers.org/chebi/CHEBI:8147", + "http://identifiers.org/chebi/CHEBI:26055", + "http://identifiers.org/chebi/CHEBI:26054", + "http://identifiers.org/chebi/CHEBI:58702", + "http://identifiers.org/chebi/CHEBI:18021", + "http://identifiers.org/hmdb/HMDB00263", + "http://identifiers.org/kegg.compound/C00074", + "http://identifiers.org/pubchem.substance/3374", + "http://identifiers.org/reactome/REACT_29492", + "http://identifiers.org/reactome/REACT_372364", + "http://identifiers.org/seed.compound/cpd00061", + "http://identifiers.org/unipathway.compound/UPC00074" + ] + } + ] + }, "name": "Phosphoenolpyruvate" }, { - "annotation": { - "bigg.metabolite": "pi", - "biocyc": [ - "Pi", - "PHOSPHATE-GROUP", - "CPD0-1421" - ], - "cas": [ - "14265-44-2" - ], - "chebi": [ - "CHEBI:37583", - "CHEBI:7793", - "CHEBI:37585", - "CHEBI:34683", - "CHEBI:14791", - "CHEBI:34855", - "CHEBI:29137", - "CHEBI:29139", - "CHEBI:63036", - "CHEBI:26020", - "CHEBI:39739", - "CHEBI:32597", - "CHEBI:32596", - "CHEBI:43474", - "CHEBI:63051", - "CHEBI:43470", - "CHEBI:9679", - "CHEBI:35433", - "CHEBI:4496", - "CHEBI:45024", - "CHEBI:18367", - "CHEBI:26078", - "CHEBI:39745", - "CHEBI:24838" - ], - "hmdb": "HMDB02142", - "kegg.compound": [ - "C13556", - "C13558", - "C00009" - ], - "kegg.drug": "D05467", - "pubchem.substance": "3311", - "reactome": [ - "REACT_947590", - "REACT_109277", - "REACT_113548", - "REACT_2255331", - "REACT_29372", - "REACT_113550", - "REACT_113551" - ], - "seed.compound": [ - "cpd09464", - "cpd09463", - "cpd00009" - ], - "unipathway.compound": "UPC00009" - }, "charge": -2, "compartment": "c", "formula": "HO4P", - "id": "pi_c", + "id": "M_pi_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/pi", + "http://identifiers.org/biocyc/Pi", + "http://identifiers.org/biocyc/PHOSPHATE-GROUP", + "http://identifiers.org/biocyc/CPD0-1421", + "http://identifiers.org/cas/14265-44-2", + "http://identifiers.org/cas/14265-44-2", + "http://identifiers.org/chebi/CHEBI:37583", + "http://identifiers.org/chebi/CHEBI:7793", + "http://identifiers.org/chebi/CHEBI:37585", + "http://identifiers.org/chebi/CHEBI:34683", + "http://identifiers.org/chebi/CHEBI:14791", + "http://identifiers.org/chebi/CHEBI:34855", + "http://identifiers.org/chebi/CHEBI:29137", + "http://identifiers.org/chebi/CHEBI:29139", + "http://identifiers.org/chebi/CHEBI:63036", + "http://identifiers.org/chebi/CHEBI:26020", + "http://identifiers.org/chebi/CHEBI:39739", + "http://identifiers.org/chebi/CHEBI:32597", + "http://identifiers.org/chebi/CHEBI:32596", + "http://identifiers.org/chebi/CHEBI:43474", + "http://identifiers.org/chebi/CHEBI:63051", + "http://identifiers.org/chebi/CHEBI:43470", + "http://identifiers.org/chebi/CHEBI:9679", + "http://identifiers.org/chebi/CHEBI:35433", + "http://identifiers.org/chebi/CHEBI:4496", + "http://identifiers.org/chebi/CHEBI:45024", + "http://identifiers.org/chebi/CHEBI:18367", + "http://identifiers.org/chebi/CHEBI:26078", + "http://identifiers.org/chebi/CHEBI:39745", + "http://identifiers.org/chebi/CHEBI:24838", + "http://identifiers.org/hmdb/HMDB02142", + "http://identifiers.org/kegg.compound/C13556", + "http://identifiers.org/kegg.compound/C13558", + "http://identifiers.org/kegg.compound/C00009", + "http://identifiers.org/kegg.drug/D05467", + "http://identifiers.org/pubchem.substance/3311", + "http://identifiers.org/reactome/REACT_947590", + "http://identifiers.org/reactome/REACT_109277", + "http://identifiers.org/reactome/REACT_113548", + "http://identifiers.org/reactome/REACT_2255331", + "http://identifiers.org/reactome/REACT_29372", + "http://identifiers.org/reactome/REACT_113550", + "http://identifiers.org/reactome/REACT_113551", + "http://identifiers.org/seed.compound/cpd09464", + "http://identifiers.org/seed.compound/cpd09463", + "http://identifiers.org/seed.compound/cpd00009", + "http://identifiers.org/unipathway.compound/UPC00009" + ] + } + ] + }, "name": "Phosphate" }, { - "annotation": { - "bigg.metabolite": "pi", - "biocyc": [ - "Pi", - "PHOSPHATE-GROUP", - "CPD0-1421" - ], - "cas": [ - "14265-44-2" - ], - "chebi": [ - "CHEBI:37583", - "CHEBI:7793", - "CHEBI:37585", - "CHEBI:34683", - "CHEBI:14791", - "CHEBI:34855", - "CHEBI:29137", - "CHEBI:29139", - "CHEBI:63036", - "CHEBI:26020", - "CHEBI:39739", - "CHEBI:32597", - "CHEBI:32596", - "CHEBI:43474", - "CHEBI:63051", - "CHEBI:43470", - "CHEBI:9679", - "CHEBI:35433", - "CHEBI:4496", - "CHEBI:45024", - "CHEBI:18367", - "CHEBI:26078", - "CHEBI:39745", - "CHEBI:24838" - ], - "hmdb": "HMDB02142", - "kegg.compound": [ - "C13556", - "C13558", - "C00009" - ], - "kegg.drug": "D05467", - "pubchem.substance": "3311", - "reactome": [ - "REACT_947590", - "REACT_109277", - "REACT_113548", - "REACT_2255331", - "REACT_29372", - "REACT_113550", - "REACT_113551" - ], - "seed.compound": [ - "cpd09464", - "cpd09463", - "cpd00009" - ], - "unipathway.compound": "UPC00009" - }, "charge": -2, "compartment": "e", "formula": "HO4P", - "id": "pi_e", + "id": "M_pi_e", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/pi", + "http://identifiers.org/biocyc/Pi", + "http://identifiers.org/biocyc/PHOSPHATE-GROUP", + "http://identifiers.org/biocyc/CPD0-1421", + "http://identifiers.org/cas/14265-44-2", + "http://identifiers.org/cas/14265-44-2", + "http://identifiers.org/chebi/CHEBI:37583", + "http://identifiers.org/chebi/CHEBI:7793", + "http://identifiers.org/chebi/CHEBI:37585", + "http://identifiers.org/chebi/CHEBI:34683", + "http://identifiers.org/chebi/CHEBI:14791", + "http://identifiers.org/chebi/CHEBI:34855", + "http://identifiers.org/chebi/CHEBI:29137", + "http://identifiers.org/chebi/CHEBI:29139", + "http://identifiers.org/chebi/CHEBI:63036", + "http://identifiers.org/chebi/CHEBI:26020", + "http://identifiers.org/chebi/CHEBI:39739", + "http://identifiers.org/chebi/CHEBI:32597", + "http://identifiers.org/chebi/CHEBI:32596", + "http://identifiers.org/chebi/CHEBI:43474", + "http://identifiers.org/chebi/CHEBI:63051", + "http://identifiers.org/chebi/CHEBI:43470", + "http://identifiers.org/chebi/CHEBI:9679", + "http://identifiers.org/chebi/CHEBI:35433", + "http://identifiers.org/chebi/CHEBI:4496", + "http://identifiers.org/chebi/CHEBI:45024", + "http://identifiers.org/chebi/CHEBI:18367", + "http://identifiers.org/chebi/CHEBI:26078", + "http://identifiers.org/chebi/CHEBI:39745", + "http://identifiers.org/chebi/CHEBI:24838", + "http://identifiers.org/hmdb/HMDB02142", + "http://identifiers.org/kegg.compound/C13556", + "http://identifiers.org/kegg.compound/C13558", + "http://identifiers.org/kegg.compound/C00009", + "http://identifiers.org/kegg.drug/D05467", + "http://identifiers.org/pubchem.substance/3311", + "http://identifiers.org/reactome/REACT_947590", + "http://identifiers.org/reactome/REACT_109277", + "http://identifiers.org/reactome/REACT_113548", + "http://identifiers.org/reactome/REACT_2255331", + "http://identifiers.org/reactome/REACT_29372", + "http://identifiers.org/reactome/REACT_113550", + "http://identifiers.org/reactome/REACT_113551", + "http://identifiers.org/seed.compound/cpd09464", + "http://identifiers.org/seed.compound/cpd09463", + "http://identifiers.org/seed.compound/cpd00009", + "http://identifiers.org/unipathway.compound/UPC00009" + ] + } + ] + }, "name": "Phosphate" }, { - "annotation": { - "bigg.metabolite": "pyr", - "biocyc": "PYRUVATE", - "cas": [ - "127-17-3" - ], - "chebi": [ - "CHEBI:15361", - "CHEBI:14987", - "CHEBI:8685", - "CHEBI:32816", - "CHEBI:45253", - "CHEBI:26466", - "CHEBI:26462" - ], - "hmdb": "HMDB00243", - "kegg.compound": "C00022", - "lipidmaps": "LMFA01060077", - "pubchem.substance": "3324", - "reactome": [ - "REACT_113557", - "REACT_389680", - "REACT_29398" - ], - "seed.compound": "cpd00020", - "unipathway.compound": "UPC00022" - }, "charge": -1, "compartment": "c", "formula": "C3H3O3", - "id": "pyr_c", + "id": "M_pyr_c", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/pyr", + "http://identifiers.org/biocyc/PYRUVATE", + "http://identifiers.org/cas/127-17-3", + "http://identifiers.org/cas/127-17-3", + "http://identifiers.org/chebi/CHEBI:15361", + "http://identifiers.org/chebi/CHEBI:14987", + "http://identifiers.org/chebi/CHEBI:8685", + "http://identifiers.org/chebi/CHEBI:32816", + "http://identifiers.org/chebi/CHEBI:45253", + "http://identifiers.org/chebi/CHEBI:26466", + "http://identifiers.org/chebi/CHEBI:26462", + "http://identifiers.org/hmdb/HMDB00243", + "http://identifiers.org/kegg.compound/C00022", + "http://identifiers.org/lipidmaps/LMFA01060077", + "http://identifiers.org/pubchem.substance/3324", + "http://identifiers.org/reactome/REACT_113557", + "http://identifiers.org/reactome/REACT_389680", + "http://identifiers.org/reactome/REACT_29398", + "http://identifiers.org/seed.compound/cpd00020", + "http://identifiers.org/unipathway.compound/UPC00022" + ] + } + ] + }, "name": "Pyruvate" } ], "reactions": [ { - "annotation": { - "bigg.reaction": "ATPM" - }, "gene_reaction_rule": "", - "id": "ATPM", + "id": "R_ATPM", "lower_bound": 8.39, "metabolites": { - "adp_c": 1.0, - "atp_c": -1.0, - "h2o_c": -1.0, - "h_c": 1.0, - "pi_c": 1.0 + "M_adp_c": 1.0, + "M_atp_c": -1.0, + "M_h2o_c": -1.0, + "M_h_c": 1.0, + "M_pi_c": 1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ATPM" + ] + } + ] }, "name": "ATP maintenance requirement", "objective_coefficient": 1.0, @@ -1126,266 +1172,376 @@ }, { "gene_reaction_rule": "", - "id": "D_LACt2", + "id": "R_D_LACt2", "lower_bound": -1000.0, "metabolites": {}, "name": "", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "ENO" - }, "gene_reaction_rule": "b2779", - "id": "ENO", + "id": "R_ENO", "lower_bound": -1000.0, "metabolites": { - "2pg_c": -1.0, - "h2o_c": 1.0, - "pep_c": 1.0 + "M_2pg_c": -1.0, + "M_h2o_c": 1.0, + "M_pep_c": 1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ENO" + ] + } + ] }, "name": "enolase", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "glc", - "sbo": "SBO:0000627" - }, "gene_reaction_rule": "", - "id": "EX_glc__D_e", + "id": "R_EX_glc__D_e", "lower_bound": -10.0, "metabolites": { - "glc__D_e": -1.0 + "M_glc__D_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/glc" + ] + } + ] }, "name": "D-Glucose exchange", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "h", - "sbo": "SBO:0000627" - }, "gene_reaction_rule": "", - "id": "EX_h_e", + "id": "R_EX_h_e", "lower_bound": -1000.0, "metabolites": { - "h_e": -1.0 + "M_h_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/h" + ] + } + ] }, "name": "H+ exchange", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "lac__D", - "sbo": "SBO:0000627" - }, "gene_reaction_rule": "", - "id": "EX_lac__D_e", + "id": "R_EX_lac__D_e", "lower_bound": 0.0, "metabolites": { - "lac__D_e": -1.0 + "M_lac__D_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/lac__D" + ] + } + ] }, "name": "D-lactate exchange", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "FBA" - }, "gene_reaction_rule": "b1773 or b2097 or b2925", - "id": "FBA", + "id": "R_FBA", "lower_bound": -1000.0, "metabolites": { - "dhap_c": 1.0, - "fdp_c": -1.0, - "g3p_c": 1.0 + "M_dhap_c": 1.0, + "M_fdp_c": -1.0, + "M_g3p_c": 1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/FBA" + ] + } + ] }, "name": "fructose-bisphosphate aldolase", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "GAPD" - }, "gene_reaction_rule": "b1779", - "id": "GAPD", + "id": "R_GAPD", "lower_bound": -1000.0, "metabolites": { - "13dpg_c": 1.0, - "g3p_c": -1.0, - "h_c": 1.0, - "nad_c": -1.0, - "nadh_c": 1.0, - "pi_c": -1.0 + "M_13dpg_c": 1.0, + "M_g3p_c": -1.0, + "M_h_c": 1.0, + "M_nad_c": -1.0, + "M_nadh_c": 1.0, + "M_pi_c": -1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GAPD" + ] + } + ] }, "name": "glyceraldehyde-3-phosphate dehydrogenase", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "GLCpts" - }, "gene_reaction_rule": "(b2415 and b2417 and b1101 and b2416) or (b2415 and b2417 and b1621 and b2416) or (b2415 and b1818 and b1817 and b1819 and b2416)", - "id": "GLCpts", + "id": "R_GLCpts", "lower_bound": 0.0, "metabolites": { - "g6p_c": 1.0, - "glc__D_e": -1.0, - "pep_c": -1.0, - "pyr_c": 1.0 + "M_g6p_c": 1.0, + "M_glc__D_e": -1.0, + "M_pep_c": -1.0, + "M_pyr_c": 1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GLCpts" + ] + } + ] }, "name": "D-glucose transport via PEP:Pyr PTS", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "H2Ot" - }, "gene_reaction_rule": "b0875 or s0001", - "id": "H2Ot", + "id": "R_H2Ot", "lower_bound": -1000.0, "metabolites": { - "h2o_c": 1.0, - "h2o_e": -1.0 + "M_h2o_c": 1.0, + "M_h2o_e": -1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/H2Ot" + ] + } + ] }, "name": "R H2O transport via - diffusion", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "LDH_D", - "biocyc": "META:DLACTDEHYDROGNAD-RXN", - "ec-code": "1.1.1.28", - "kegg.reaction": "R00704", - "metanetx.reaction": "MNXR101037", - "rhea": [ - "16369", - "16370", - "16371", - "16372" - ], - "sbo": "SBO:0000375" - }, "gene_reaction_rule": "b2133 or b1380", - "id": "LDH_D", + "id": "R_LDH_D", "lower_bound": -1000.0, "metabolites": { - "h_c": 1.0, - "lac__D_c": -1.0, - "nad_c": -1.0, - "nadh_c": 1.0, - "pyr_c": 1.0 + "M_h_c": 1.0, + "M_lac__D_c": -1.0, + "M_nad_c": -1.0, + "M_nadh_c": 1.0, + "M_pyr_c": 1.0 + }, + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/LDH_D", + "http://identifiers.org/biocyc/META:DLACTDEHYDROGNAD-RXN", + "http://identifiers.org/ec-code/1.1.1.28", + "http://identifiers.org/kegg.reaction/R00704", + "http://identifiers.org/metanetx.reaction/MNXR101037", + "http://identifiers.org/rhea/16369", + "http://identifiers.org/rhea/16370", + "http://identifiers.org/rhea/16371", + "http://identifiers.org/rhea/16372" + ] + } + ] }, "name": "D-lactate dehydrogenase", "subsystem": "Pyruvate Metabolism", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "PFK" - }, "gene_reaction_rule": "b3916 or b1723", - "id": "PFK", + "id": "R_PFK", "lower_bound": 0.0, "metabolites": { - "adp_c": 1.0, - "atp_c": -1.0, - "f6p_c": -1.0, - "fdp_c": 1.0, - "h_c": 1.0 + "M_adp_c": 1.0, + "M_atp_c": -1.0, + "M_f6p_c": -1.0, + "M_fdp_c": 1.0, + "M_h_c": 1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PFK" + ] + } + ] }, "name": "phosphofructokinase", "objective_coefficient": 1.0, "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "PGI" - }, "gene_reaction_rule": "b4025", - "id": "PGI", + "id": "R_PGI", "lower_bound": -1000.0, "metabolites": { - "f6p_c": 1.0, - "g6p_c": -1.0 + "M_f6p_c": 1.0, + "M_g6p_c": -1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PGI" + ] + } + ] }, "name": "glucose-6-phosphate isomerase", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "PGK" - }, "gene_reaction_rule": "b2926", - "id": "PGK", + "id": "R_PGK", "lower_bound": -1000.0, "metabolites": { - "13dpg_c": 1.0, - "3pg_c": -1.0, - "adp_c": 1.0, - "atp_c": -1.0 + "M_13dpg_c": 1.0, + "M_3pg_c": -1.0, + "M_adp_c": 1.0, + "M_atp_c": -1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PGK" + ] + } + ] }, "name": "phosphoglycerate kinase", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "PGM" - }, "gene_reaction_rule": "b4395 or b3612 or b0755", - "id": "PGM", + "id": "R_PGM", "lower_bound": -1000.0, "metabolites": { - "2pg_c": -1.0, - "3pg_c": 1.0 + "M_2pg_c": -1.0, + "M_3pg_c": 1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PGM" + ] + } + ] }, "name": "phosphoglycerate mutase", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "PIt2r" - }, "gene_reaction_rule": "b2987 or b3493", - "id": "PIt2r", + "id": "R_PIt2r", "lower_bound": -1000.0, "metabolites": { - "h_c": 1.0, - "h_e": -1.0, - "pi_c": 1.0, - "pi_e": -1.0 + "M_h_c": 1.0, + "M_h_e": -1.0, + "M_pi_c": 1.0, + "M_pi_e": -1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PIt2r" + ] + } + ] }, "name": "R phosphate reversible transport via - symport", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "PYK" - }, "gene_reaction_rule": "b1854 or b1676", - "id": "PYK", + "id": "R_PYK", "lower_bound": 0.0, "metabolites": { - "adp_c": -1.0, - "atp_c": 1.0, - "h_c": -1.0, - "pep_c": -1.0, - "pyr_c": 1.0 + "M_adp_c": -1.0, + "M_atp_c": 1.0, + "M_h_c": -1.0, + "M_pep_c": -1.0, + "M_pyr_c": 1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PYK" + ] + } + ] }, "name": "pyruvate kinase", "upper_bound": 1000.0 }, { - "annotation": { - "bigg.reaction": "TPI" - }, "gene_reaction_rule": "b3919", - "id": "TPI", + "id": "R_TPI", "lower_bound": -1000.0, "metabolites": { - "dhap_c": -1.0, - "g3p_c": 1.0 + "M_dhap_c": -1.0, + "M_g3p_c": 1.0 + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/TPI" + ] + } + ] }, "name": "triose-phosphate isomerase", "upper_bound": 1000.0 diff --git a/src/cobra/data/mini.mat b/src/cobra/data/mini.mat index 9f46abd4c..b3ade4f10 100644 Binary files a/src/cobra/data/mini.mat and b/src/cobra/data/mini.mat differ diff --git a/src/cobra/data/mini.yml b/src/cobra/data/mini.yml index cd9a28a41..72aced4e4 100644 --- a/src/cobra/data/mini.yml +++ b/src/cobra/data/mini.yml @@ -1,1168 +1,1233 @@ !!omap - metabolites: - !!omap - - id: 13dpg_c + - id: M_13dpg_c - name: 3-Phospho-D-glyceroyl phosphate - compartment: c - charge: -4 - formula: C3H4O10P2 - - annotation: !!omap - - bigg.metabolite: 13dpg - - biocyc: DPG - - chebi: - - CHEBI:16001 - - CHEBI:1658 - - CHEBI:20189 - - CHEBI:57604 - - CHEBI:11881 - - hmdb: HMDB01270 - - kegg.compound: C00236 - - pubchem.substance: '3535' - - reactome: REACT_29800 - - seed.compound: cpd00203 - - unipathway.compound: UPC00236 - - !!omap - - id: 2pg_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/13dpg + - http://identifiers.org/biocyc/DPG + - http://identifiers.org/chebi/CHEBI:16001 + - http://identifiers.org/chebi/CHEBI:1658 + - http://identifiers.org/chebi/CHEBI:20189 + - http://identifiers.org/chebi/CHEBI:57604 + - http://identifiers.org/chebi/CHEBI:11881 + - http://identifiers.org/hmdb/HMDB01270 + - http://identifiers.org/kegg.compound/C00236 + - http://identifiers.org/pubchem.substance/3535 + - http://identifiers.org/reactome/REACT_29800 + - http://identifiers.org/seed.compound/cpd00203 + - http://identifiers.org/unipathway.compound/UPC00236 + - !!omap + - id: M_2pg_c - name: D-Glycerate 2-phosphate - compartment: c - charge: -3 - formula: C3H4O7P - - annotation: !!omap - - bigg.metabolite: 2pg - - biocyc: 2-PG - - chebi: - - CHEBI:1267 - - CHEBI:58289 - - CHEBI:17835 - - CHEBI:21028 - - CHEBI:11651 - - CHEBI:12986 - - CHEBI:24344 - - CHEBI:39868 - - hmdb: - - HMDB03391 - - HMDB00362 - - kegg.compound: C00631 - - pubchem.substance: '3904' - - reactome: REACT_30485 - - seed.compound: cpd00482 - - unipathway.compound: UPC00631 - - !!omap - - id: 3pg_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/2pg + - http://identifiers.org/biocyc/2-PG + - http://identifiers.org/chebi/CHEBI:1267 + - http://identifiers.org/chebi/CHEBI:58289 + - http://identifiers.org/chebi/CHEBI:17835 + - http://identifiers.org/chebi/CHEBI:21028 + - http://identifiers.org/chebi/CHEBI:11651 + - http://identifiers.org/chebi/CHEBI:12986 + - http://identifiers.org/chebi/CHEBI:24344 + - http://identifiers.org/chebi/CHEBI:39868 + - http://identifiers.org/hmdb/HMDB03391 + - http://identifiers.org/hmdb/HMDB00362 + - http://identifiers.org/kegg.compound/C00631 + - http://identifiers.org/pubchem.substance/3904 + - http://identifiers.org/reactome/REACT_30485 + - http://identifiers.org/seed.compound/cpd00482 + - http://identifiers.org/unipathway.compound/UPC00631 + - !!omap + - id: M_3pg_c - name: 3-Phospho-D-glycerate - compartment: c - charge: -3 - formula: C3H4O7P - - annotation: !!omap - - bigg.metabolite: 3pg - - biocyc: G3P - - chebi: - - CHEBI:40016 - - CHEBI:58272 - - CHEBI:57998 - - CHEBI:11879 - - CHEBI:1657 - - CHEBI:1659 - - CHEBI:17050 - - CHEBI:21029 - - CHEBI:11882 - - CHEBI:11880 - - CHEBI:12987 - - CHEBI:17794 - - CHEBI:24345 - - hmdb: HMDB00807 - - kegg.compound: - - C00197 - - C00597 - - pubchem.substance: '3497' - - reactome: REACT_29728 - - seed.compound: cpd00169 - - unipathway.compound: - - UPC00597 - - UPC00197 - - !!omap - - id: adp_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/3pg + - http://identifiers.org/biocyc/G3P + - http://identifiers.org/chebi/CHEBI:40016 + - http://identifiers.org/chebi/CHEBI:58272 + - http://identifiers.org/chebi/CHEBI:57998 + - http://identifiers.org/chebi/CHEBI:11879 + - http://identifiers.org/chebi/CHEBI:1657 + - http://identifiers.org/chebi/CHEBI:1659 + - http://identifiers.org/chebi/CHEBI:17050 + - http://identifiers.org/chebi/CHEBI:21029 + - http://identifiers.org/chebi/CHEBI:11882 + - http://identifiers.org/chebi/CHEBI:11880 + - http://identifiers.org/chebi/CHEBI:12987 + - http://identifiers.org/chebi/CHEBI:17794 + - http://identifiers.org/chebi/CHEBI:24345 + - http://identifiers.org/hmdb/HMDB00807 + - http://identifiers.org/kegg.compound/C00197 + - http://identifiers.org/kegg.compound/C00597 + - http://identifiers.org/pubchem.substance/3497 + - http://identifiers.org/reactome/REACT_29728 + - http://identifiers.org/seed.compound/cpd00169 + - http://identifiers.org/unipathway.compound/UPC00597 + - http://identifiers.org/unipathway.compound/UPC00197 + - !!omap + - id: M_adp_c - name: ADP - compartment: c - charge: -3 - formula: C10H12N5O10P2 - - annotation: !!omap - - bigg.metabolite: adp - - biocyc: - - ADP - - ADP-GROUP - - cas: - - 58-64-0 - - chebi: - - CHEBI:13222 - - CHEBI:16761 - - CHEBI:2342 - - CHEBI:22244 - - CHEBI:40553 - - CHEBI:456216 - - hmdb: HMDB01341 - - kegg.compound: C00008 - - kegg.glycan: G11113 - - pubchem.substance: '3310' - - reactome: - - REACT_190072 - - REACT_481002 - - REACT_211606 - - REACT_429160 - - REACT_29370 - - REACT_196180 - - REACT_113581 - - REACT_113582 - - REACT_114564 - - REACT_114565 - - REACT_429153 - - seed.compound: cpd00008 - - unipathway.compound: UPC00008 - - !!omap - - id: atp_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/adp + - http://identifiers.org/biocyc/ADP + - http://identifiers.org/biocyc/ADP-GROUP + - http://identifiers.org/cas/58-64-0 + - http://identifiers.org/cas/58-64-0 + - http://identifiers.org/chebi/CHEBI:13222 + - http://identifiers.org/chebi/CHEBI:16761 + - http://identifiers.org/chebi/CHEBI:2342 + - http://identifiers.org/chebi/CHEBI:22244 + - http://identifiers.org/chebi/CHEBI:40553 + - http://identifiers.org/chebi/CHEBI:456216 + - http://identifiers.org/hmdb/HMDB01341 + - http://identifiers.org/kegg.compound/C00008 + - http://identifiers.org/kegg.glycan/G11113 + - http://identifiers.org/pubchem.substance/3310 + - http://identifiers.org/reactome/REACT_190072 + - http://identifiers.org/reactome/REACT_481002 + - http://identifiers.org/reactome/REACT_211606 + - http://identifiers.org/reactome/REACT_429160 + - http://identifiers.org/reactome/REACT_29370 + - http://identifiers.org/reactome/REACT_196180 + - http://identifiers.org/reactome/REACT_113581 + - http://identifiers.org/reactome/REACT_113582 + - http://identifiers.org/reactome/REACT_114564 + - http://identifiers.org/reactome/REACT_114565 + - http://identifiers.org/reactome/REACT_429153 + - http://identifiers.org/seed.compound/cpd00008 + - http://identifiers.org/unipathway.compound/UPC00008 + - !!omap + - id: M_atp_c - name: ATP - compartment: c - charge: -4 - formula: C10H12N5O13P3 - - annotation: !!omap - - bigg.metabolite: atp - - biocyc: ATP - - cas: - - 56-65-5 - - chebi: - - CHEBI:40938 - - CHEBI:15422 - - CHEBI:57299 - - CHEBI:13236 - - CHEBI:10789 - - CHEBI:30616 - - CHEBI:22249 - - CHEBI:10841 - - CHEBI:2359 - - hmdb: HMDB00538 - - kegg.compound: C00002 - - kegg.drug: D08646 - - pubchem.substance: '3304' - - reactome: - - REACT_190078 - - REACT_113592 - - REACT_113593 - - REACT_114570 - - REACT_29358 - - REACT_389573 - - REACT_139836 - - REACT_211579 - - seed.compound: cpd00002 - - unipathway.compound: UPC00002 - - !!omap - - id: dhap_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/atp + - http://identifiers.org/biocyc/ATP + - http://identifiers.org/cas/56-65-5 + - http://identifiers.org/cas/56-65-5 + - http://identifiers.org/chebi/CHEBI:40938 + - http://identifiers.org/chebi/CHEBI:15422 + - http://identifiers.org/chebi/CHEBI:57299 + - http://identifiers.org/chebi/CHEBI:13236 + - http://identifiers.org/chebi/CHEBI:10789 + - http://identifiers.org/chebi/CHEBI:30616 + - http://identifiers.org/chebi/CHEBI:22249 + - http://identifiers.org/chebi/CHEBI:10841 + - http://identifiers.org/chebi/CHEBI:2359 + - http://identifiers.org/hmdb/HMDB00538 + - http://identifiers.org/kegg.compound/C00002 + - http://identifiers.org/kegg.drug/D08646 + - http://identifiers.org/pubchem.substance/3304 + - http://identifiers.org/reactome/REACT_190078 + - http://identifiers.org/reactome/REACT_113592 + - http://identifiers.org/reactome/REACT_113593 + - http://identifiers.org/reactome/REACT_114570 + - http://identifiers.org/reactome/REACT_29358 + - http://identifiers.org/reactome/REACT_389573 + - http://identifiers.org/reactome/REACT_139836 + - http://identifiers.org/reactome/REACT_211579 + - http://identifiers.org/seed.compound/cpd00002 + - http://identifiers.org/unipathway.compound/UPC00002 + - !!omap + - id: M_dhap_c - name: Dihydroxyacetone phosphate - compartment: c - charge: -2 - formula: C3H5O6P - - annotation: !!omap - - bigg.metabolite: dhap - - biocyc: DIHYDROXY-ACETONE-PHOSPHATE - - cas: - - 57-04-5 - - chebi: - - CHEBI:14341 - - CHEBI:57642 - - CHEBI:14342 - - CHEBI:16108 - - CHEBI:5454 - - CHEBI:24355 - - CHEBI:39571 - - hmdb: - - HMDB01473 - - HMDB11735 - - kegg.compound: C00111 - - pubchem.substance: '3411' - - reactome: - - REACT_188451 - - REACT_75970 - - REACT_390404 - - seed.compound: cpd00095 - - unipathway.compound: UPC00111 - - !!omap - - id: f6p_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/dhap + - http://identifiers.org/biocyc/DIHYDROXY-ACETONE-PHOSPHATE + - http://identifiers.org/cas/57-04-5 + - http://identifiers.org/cas/57-04-5 + - http://identifiers.org/chebi/CHEBI:14341 + - http://identifiers.org/chebi/CHEBI:57642 + - http://identifiers.org/chebi/CHEBI:14342 + - http://identifiers.org/chebi/CHEBI:16108 + - http://identifiers.org/chebi/CHEBI:5454 + - http://identifiers.org/chebi/CHEBI:24355 + - http://identifiers.org/chebi/CHEBI:39571 + - http://identifiers.org/hmdb/HMDB01473 + - http://identifiers.org/hmdb/HMDB11735 + - http://identifiers.org/kegg.compound/C00111 + - http://identifiers.org/pubchem.substance/3411 + - http://identifiers.org/reactome/REACT_188451 + - http://identifiers.org/reactome/REACT_75970 + - http://identifiers.org/reactome/REACT_390404 + - http://identifiers.org/seed.compound/cpd00095 + - http://identifiers.org/unipathway.compound/UPC00111 + - !!omap + - id: M_f6p_c - name: D-Fructose 6-phosphate - compartment: c - charge: -2 - formula: C6H11O9P - - annotation: !!omap - - bigg.metabolite: f6p - - biocyc: FRUCTOSE-6P - - cas: - - 643-13-0 - - chebi: - - CHEBI:57634 - - CHEBI:12352 - - CHEBI:45804 - - CHEBI:61527 - - CHEBI:61553 - - CHEBI:10375 - - CHEBI:16084 - - CHEBI:42378 - - CHEBI:22768 - - hmdb: HMDB03971 - - kegg.compound: - - C05345 - - C00085 - - pubchem.substance: '3385' - - seed.compound: cpd00072 - - unipathway.compound: - - UPC05345 - - UPC00085 - - !!omap - - id: fdp_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/f6p + - http://identifiers.org/biocyc/FRUCTOSE-6P + - http://identifiers.org/cas/643-13-0 + - http://identifiers.org/cas/643-13-0 + - http://identifiers.org/chebi/CHEBI:57634 + - http://identifiers.org/chebi/CHEBI:12352 + - http://identifiers.org/chebi/CHEBI:45804 + - http://identifiers.org/chebi/CHEBI:61527 + - http://identifiers.org/chebi/CHEBI:61553 + - http://identifiers.org/chebi/CHEBI:10375 + - http://identifiers.org/chebi/CHEBI:16084 + - http://identifiers.org/chebi/CHEBI:42378 + - http://identifiers.org/chebi/CHEBI:22768 + - http://identifiers.org/hmdb/HMDB03971 + - http://identifiers.org/kegg.compound/C05345 + - http://identifiers.org/kegg.compound/C00085 + - http://identifiers.org/pubchem.substance/3385 + - http://identifiers.org/seed.compound/cpd00072 + - http://identifiers.org/unipathway.compound/UPC05345 + - http://identifiers.org/unipathway.compound/UPC00085 + - !!omap + - id: M_fdp_c - name: D-Fructose 1,6-bisphosphate - compartment: c - charge: -4 - formula: C6H10O12P2 - - annotation: !!omap - - bigg.metabolite: fdp - - biocyc: FRUCTOSE-16-DIPHOSPHATE - - cas: - - 488-69-7 - - chebi: - - CHEBI:32968 - - CHEBI:49299 - - CHEBI:42553 - - CHEBI:32966 - - CHEBI:37736 - - CHEBI:28013 - - CHEBI:32967 - - CHEBI:41014 - - CHEBI:22767 - - CHEBI:10374 - - CHEBI:40595 - - CHEBI:40591 - - kegg.compound: - - C05378 - - C00354 - - pubchem.substance: '3647' - - seed.compound: cpd00290 - - unipathway.compound: UPC00354 - - !!omap - - id: g3p_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/fdp + - http://identifiers.org/biocyc/FRUCTOSE-16-DIPHOSPHATE + - http://identifiers.org/cas/488-69-7 + - http://identifiers.org/cas/488-69-7 + - http://identifiers.org/chebi/CHEBI:32968 + - http://identifiers.org/chebi/CHEBI:49299 + - http://identifiers.org/chebi/CHEBI:42553 + - http://identifiers.org/chebi/CHEBI:32966 + - http://identifiers.org/chebi/CHEBI:37736 + - http://identifiers.org/chebi/CHEBI:28013 + - http://identifiers.org/chebi/CHEBI:32967 + - http://identifiers.org/chebi/CHEBI:41014 + - http://identifiers.org/chebi/CHEBI:22767 + - http://identifiers.org/chebi/CHEBI:10374 + - http://identifiers.org/chebi/CHEBI:40595 + - http://identifiers.org/chebi/CHEBI:40591 + - http://identifiers.org/kegg.compound/C05378 + - http://identifiers.org/kegg.compound/C00354 + - http://identifiers.org/pubchem.substance/3647 + - http://identifiers.org/seed.compound/cpd00290 + - http://identifiers.org/unipathway.compound/UPC00354 + - !!omap + - id: M_g3p_c - name: Glyceraldehyde 3-phosphate - compartment: c - charge: -2 - formula: C3H5O6P - - annotation: !!omap - - bigg.metabolite: g3p - - cas: - - 142-10-9 - - chebi: - - CHEBI:17138 - - CHEBI:14333 - - CHEBI:5446 - - CHEBI:58027 - - hmdb: HMDB01112 - - kegg.compound: - - C00661 - - C00118 - - pubchem.substance: '3930' - - seed.compound: cpd00102 - - unipathway.compound: - - UPC00661 - - UPC00118 - - !!omap - - id: g6p_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/g3p + - http://identifiers.org/cas/142-10-9 + - http://identifiers.org/cas/142-10-9 + - http://identifiers.org/chebi/CHEBI:17138 + - http://identifiers.org/chebi/CHEBI:14333 + - http://identifiers.org/chebi/CHEBI:5446 + - http://identifiers.org/chebi/CHEBI:58027 + - http://identifiers.org/hmdb/HMDB01112 + - http://identifiers.org/kegg.compound/C00661 + - http://identifiers.org/kegg.compound/C00118 + - http://identifiers.org/pubchem.substance/3930 + - http://identifiers.org/seed.compound/cpd00102 + - http://identifiers.org/unipathway.compound/UPC00661 + - http://identifiers.org/unipathway.compound/UPC00118 + - !!omap + - id: M_g6p_c - name: D-Glucose 6-phosphate - compartment: c - charge: -2 - formula: C6H11O9P - - annotation: !!omap - - bigg.metabolite: g6p - - biocyc: - - D-glucose-6-phosphate - - GLC-6-P - - cas: - - 56-73-5 - - chebi: - - CHEBI:10399 - - CHEBI:22797 - - CHEBI:41041 - - CHEBI:17719 - - CHEBI:4170 - - CHEBI:61548 - - CHEBI:58247 - - CHEBI:12375 - - hmdb: - - HMDB03498 - - HMDB06793 - - HMDB01401 - - HMDB01549 - - kegg.compound: - - C00092 - - C01172 - - pubchem.substance: '3392' - - reactome: REACT_1629756 - - seed.compound: cpd00079 - - unipathway.compound: UPC00092 - - !!omap - - id: glc__D_e + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/g6p + - http://identifiers.org/biocyc/D-glucose-6-phosphate + - http://identifiers.org/biocyc/GLC-6-P + - http://identifiers.org/cas/56-73-5 + - http://identifiers.org/cas/56-73-5 + - http://identifiers.org/chebi/CHEBI:10399 + - http://identifiers.org/chebi/CHEBI:22797 + - http://identifiers.org/chebi/CHEBI:41041 + - http://identifiers.org/chebi/CHEBI:17719 + - http://identifiers.org/chebi/CHEBI:4170 + - http://identifiers.org/chebi/CHEBI:61548 + - http://identifiers.org/chebi/CHEBI:58247 + - http://identifiers.org/chebi/CHEBI:12375 + - http://identifiers.org/hmdb/HMDB03498 + - http://identifiers.org/hmdb/HMDB06793 + - http://identifiers.org/hmdb/HMDB01401 + - http://identifiers.org/hmdb/HMDB01549 + - http://identifiers.org/kegg.compound/C00092 + - http://identifiers.org/kegg.compound/C01172 + - http://identifiers.org/pubchem.substance/3392 + - http://identifiers.org/reactome/REACT_1629756 + - http://identifiers.org/seed.compound/cpd00079 + - http://identifiers.org/unipathway.compound/UPC00092 + - !!omap + - id: M_glc__D_e - name: D-Glucose - compartment: e - charge: 0 - formula: C6H12O6 - - annotation: !!omap - - bigg.metabolite: glc__D - - cas: - - 50-99-7 - - kegg.compound: C00031 - - pubchem.substance: '3333' - - !!omap - - id: h2o_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/glc__D + - http://identifiers.org/cas/50-99-7 + - http://identifiers.org/cas/50-99-7 + - http://identifiers.org/kegg.compound/C00031 + - http://identifiers.org/pubchem.substance/3333 + - !!omap + - id: M_h2o_c - name: H2O - compartment: c - charge: 0 - formula: H2O - - annotation: !!omap - - bigg.metabolite: h2o - - biocyc: - - WATER - - OH - - OXONIUM - - cas: - - 7732-18-5 - - chebi: - - CHEBI:15377 - - CHEBI:13365 - - CHEBI:41979 - - CHEBI:16234 - - CHEBI:36385 - - CHEBI:42857 - - CHEBI:27313 - - CHEBI:44819 - - CHEBI:29373 - - CHEBI:10743 - - CHEBI:5594 - - CHEBI:29356 - - CHEBI:53442 - - CHEBI:29375 - - CHEBI:29374 - - CHEBI:13419 - - CHEBI:43228 - - CHEBI:44292 - - CHEBI:13352 - - CHEBI:41981 - - CHEBI:29412 - - CHEBI:42043 - - CHEBI:33811 - - CHEBI:33813 - - CHEBI:35511 - - CHEBI:5585 - - CHEBI:44641 - - CHEBI:44701 - - hmdb: - - HMDB01039 - - HMDB02111 - - kegg.compound: - - C01328 - - C00001 - - C18714 - - C18712 - - kegg.drug: - - D00001 - - D06322 - - D03703 - - pubchem.substance: '3303' - - reactome: - - REACT_947593 - - REACT_189422 - - REACT_141343 - - REACT_113518 - - REACT_1605715 - - REACT_109276 - - REACT_113521 - - REACT_113519 - - REACT_2022884 - - REACT_351603 - - REACT_29356 - - seed.compound: - - cpd15275 - - cpd00001 - - unipathway.compound: - - UPC00001 - - UPC01328 - - !!omap - - id: h2o_e + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/h2o + - http://identifiers.org/biocyc/WATER + - http://identifiers.org/biocyc/OH + - http://identifiers.org/biocyc/OXONIUM + - http://identifiers.org/cas/7732-18-5 + - http://identifiers.org/cas/7732-18-5 + - http://identifiers.org/chebi/CHEBI:15377 + - http://identifiers.org/chebi/CHEBI:13365 + - http://identifiers.org/chebi/CHEBI:41979 + - http://identifiers.org/chebi/CHEBI:16234 + - http://identifiers.org/chebi/CHEBI:36385 + - http://identifiers.org/chebi/CHEBI:42857 + - http://identifiers.org/chebi/CHEBI:27313 + - http://identifiers.org/chebi/CHEBI:44819 + - http://identifiers.org/chebi/CHEBI:29373 + - http://identifiers.org/chebi/CHEBI:10743 + - http://identifiers.org/chebi/CHEBI:5594 + - http://identifiers.org/chebi/CHEBI:29356 + - http://identifiers.org/chebi/CHEBI:53442 + - http://identifiers.org/chebi/CHEBI:29375 + - http://identifiers.org/chebi/CHEBI:29374 + - http://identifiers.org/chebi/CHEBI:13419 + - http://identifiers.org/chebi/CHEBI:43228 + - http://identifiers.org/chebi/CHEBI:44292 + - http://identifiers.org/chebi/CHEBI:13352 + - http://identifiers.org/chebi/CHEBI:41981 + - http://identifiers.org/chebi/CHEBI:29412 + - http://identifiers.org/chebi/CHEBI:42043 + - http://identifiers.org/chebi/CHEBI:33811 + - http://identifiers.org/chebi/CHEBI:33813 + - http://identifiers.org/chebi/CHEBI:35511 + - http://identifiers.org/chebi/CHEBI:5585 + - http://identifiers.org/chebi/CHEBI:44641 + - http://identifiers.org/chebi/CHEBI:44701 + - http://identifiers.org/hmdb/HMDB01039 + - http://identifiers.org/hmdb/HMDB02111 + - http://identifiers.org/kegg.compound/C01328 + - http://identifiers.org/kegg.compound/C00001 + - http://identifiers.org/kegg.compound/C18714 + - http://identifiers.org/kegg.compound/C18712 + - http://identifiers.org/kegg.drug/D00001 + - http://identifiers.org/kegg.drug/D06322 + - http://identifiers.org/kegg.drug/D03703 + - http://identifiers.org/pubchem.substance/3303 + - http://identifiers.org/reactome/REACT_947593 + - http://identifiers.org/reactome/REACT_189422 + - http://identifiers.org/reactome/REACT_141343 + - http://identifiers.org/reactome/REACT_113518 + - http://identifiers.org/reactome/REACT_1605715 + - http://identifiers.org/reactome/REACT_109276 + - http://identifiers.org/reactome/REACT_113521 + - http://identifiers.org/reactome/REACT_113519 + - http://identifiers.org/reactome/REACT_2022884 + - http://identifiers.org/reactome/REACT_351603 + - http://identifiers.org/reactome/REACT_29356 + - http://identifiers.org/seed.compound/cpd15275 + - http://identifiers.org/seed.compound/cpd00001 + - http://identifiers.org/unipathway.compound/UPC00001 + - http://identifiers.org/unipathway.compound/UPC01328 + - !!omap + - id: M_h2o_e - name: H2O - compartment: e - charge: 0 - formula: H2O - - annotation: !!omap - - bigg.metabolite: h2o - - biocyc: - - WATER - - OH - - OXONIUM - - cas: - - 7732-18-5 - - chebi: - - CHEBI:15377 - - CHEBI:13365 - - CHEBI:41979 - - CHEBI:16234 - - CHEBI:36385 - - CHEBI:42857 - - CHEBI:27313 - - CHEBI:44819 - - CHEBI:29373 - - CHEBI:10743 - - CHEBI:5594 - - CHEBI:29356 - - CHEBI:53442 - - CHEBI:29375 - - CHEBI:29374 - - CHEBI:13419 - - CHEBI:43228 - - CHEBI:44292 - - CHEBI:13352 - - CHEBI:41981 - - CHEBI:29412 - - CHEBI:42043 - - CHEBI:33811 - - CHEBI:33813 - - CHEBI:35511 - - CHEBI:5585 - - CHEBI:44641 - - CHEBI:44701 - - hmdb: - - HMDB01039 - - HMDB02111 - - kegg.compound: - - C01328 - - C00001 - - C18714 - - C18712 - - kegg.drug: - - D00001 - - D06322 - - D03703 - - pubchem.substance: '3303' - - reactome: - - REACT_947593 - - REACT_189422 - - REACT_141343 - - REACT_113518 - - REACT_1605715 - - REACT_109276 - - REACT_113521 - - REACT_113519 - - REACT_2022884 - - REACT_351603 - - REACT_29356 - - seed.compound: - - cpd15275 - - cpd00001 - - unipathway.compound: - - UPC00001 - - UPC01328 - - !!omap - - id: h_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/h2o + - http://identifiers.org/biocyc/WATER + - http://identifiers.org/biocyc/OH + - http://identifiers.org/biocyc/OXONIUM + - http://identifiers.org/cas/7732-18-5 + - http://identifiers.org/cas/7732-18-5 + - http://identifiers.org/chebi/CHEBI:15377 + - http://identifiers.org/chebi/CHEBI:13365 + - http://identifiers.org/chebi/CHEBI:41979 + - http://identifiers.org/chebi/CHEBI:16234 + - http://identifiers.org/chebi/CHEBI:36385 + - http://identifiers.org/chebi/CHEBI:42857 + - http://identifiers.org/chebi/CHEBI:27313 + - http://identifiers.org/chebi/CHEBI:44819 + - http://identifiers.org/chebi/CHEBI:29373 + - http://identifiers.org/chebi/CHEBI:10743 + - http://identifiers.org/chebi/CHEBI:5594 + - http://identifiers.org/chebi/CHEBI:29356 + - http://identifiers.org/chebi/CHEBI:53442 + - http://identifiers.org/chebi/CHEBI:29375 + - http://identifiers.org/chebi/CHEBI:29374 + - http://identifiers.org/chebi/CHEBI:13419 + - http://identifiers.org/chebi/CHEBI:43228 + - http://identifiers.org/chebi/CHEBI:44292 + - http://identifiers.org/chebi/CHEBI:13352 + - http://identifiers.org/chebi/CHEBI:41981 + - http://identifiers.org/chebi/CHEBI:29412 + - http://identifiers.org/chebi/CHEBI:42043 + - http://identifiers.org/chebi/CHEBI:33811 + - http://identifiers.org/chebi/CHEBI:33813 + - http://identifiers.org/chebi/CHEBI:35511 + - http://identifiers.org/chebi/CHEBI:5585 + - http://identifiers.org/chebi/CHEBI:44641 + - http://identifiers.org/chebi/CHEBI:44701 + - http://identifiers.org/hmdb/HMDB01039 + - http://identifiers.org/hmdb/HMDB02111 + - http://identifiers.org/kegg.compound/C01328 + - http://identifiers.org/kegg.compound/C00001 + - http://identifiers.org/kegg.compound/C18714 + - http://identifiers.org/kegg.compound/C18712 + - http://identifiers.org/kegg.drug/D00001 + - http://identifiers.org/kegg.drug/D06322 + - http://identifiers.org/kegg.drug/D03703 + - http://identifiers.org/pubchem.substance/3303 + - http://identifiers.org/reactome/REACT_947593 + - http://identifiers.org/reactome/REACT_189422 + - http://identifiers.org/reactome/REACT_141343 + - http://identifiers.org/reactome/REACT_113518 + - http://identifiers.org/reactome/REACT_1605715 + - http://identifiers.org/reactome/REACT_109276 + - http://identifiers.org/reactome/REACT_113521 + - http://identifiers.org/reactome/REACT_113519 + - http://identifiers.org/reactome/REACT_2022884 + - http://identifiers.org/reactome/REACT_351603 + - http://identifiers.org/reactome/REACT_29356 + - http://identifiers.org/seed.compound/cpd15275 + - http://identifiers.org/seed.compound/cpd00001 + - http://identifiers.org/unipathway.compound/UPC00001 + - http://identifiers.org/unipathway.compound/UPC01328 + - !!omap + - id: M_h_c - name: H+ - compartment: c - charge: 1 - formula: H - - annotation: !!omap - - bigg.metabolite: h - - biocyc: PROTON - - cas: - - 12408-02-5 - - chebi: - - CHEBI:24636 - - CHEBI:15378 - - CHEBI:10744 - - CHEBI:13357 - - CHEBI:5584 - - kegg.compound: C00080 - - pubchem.substance: '3380' - - reactome: - - REACT_194688 - - REACT_425978 - - REACT_193465 - - REACT_374900 - - REACT_74722 - - REACT_425999 - - REACT_428040 - - REACT_163953 - - REACT_372511 - - REACT_2000349 - - REACT_70106 - - REACT_1470067 - - REACT_113529 - - REACT_425969 - - REACT_428548 - - REACT_156540 - - REACT_1614597 - - REACT_351626 - - REACT_427899 - - seed.compound: cpd00067 - - unipathway.compound: UPC00080 - - !!omap - - id: h_e + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/h + - http://identifiers.org/biocyc/PROTON + - http://identifiers.org/cas/12408-02-5 + - http://identifiers.org/cas/12408-02-5 + - http://identifiers.org/chebi/CHEBI:24636 + - http://identifiers.org/chebi/CHEBI:15378 + - http://identifiers.org/chebi/CHEBI:10744 + - http://identifiers.org/chebi/CHEBI:13357 + - http://identifiers.org/chebi/CHEBI:5584 + - http://identifiers.org/kegg.compound/C00080 + - http://identifiers.org/pubchem.substance/3380 + - http://identifiers.org/reactome/REACT_194688 + - http://identifiers.org/reactome/REACT_425978 + - http://identifiers.org/reactome/REACT_193465 + - http://identifiers.org/reactome/REACT_374900 + - http://identifiers.org/reactome/REACT_74722 + - http://identifiers.org/reactome/REACT_425999 + - http://identifiers.org/reactome/REACT_428040 + - http://identifiers.org/reactome/REACT_163953 + - http://identifiers.org/reactome/REACT_372511 + - http://identifiers.org/reactome/REACT_2000349 + - http://identifiers.org/reactome/REACT_70106 + - http://identifiers.org/reactome/REACT_1470067 + - http://identifiers.org/reactome/REACT_113529 + - http://identifiers.org/reactome/REACT_425969 + - http://identifiers.org/reactome/REACT_428548 + - http://identifiers.org/reactome/REACT_156540 + - http://identifiers.org/reactome/REACT_1614597 + - http://identifiers.org/reactome/REACT_351626 + - http://identifiers.org/reactome/REACT_427899 + - http://identifiers.org/seed.compound/cpd00067 + - http://identifiers.org/unipathway.compound/UPC00080 + - !!omap + - id: M_h_e - name: H+ - compartment: e - charge: 1 - formula: H - - annotation: !!omap - - bigg.metabolite: h - - biocyc: PROTON - - cas: - - 12408-02-5 - - chebi: - - CHEBI:24636 - - CHEBI:15378 - - CHEBI:10744 - - CHEBI:13357 - - CHEBI:5584 - - kegg.compound: C00080 - - pubchem.substance: '3380' - - reactome: - - REACT_194688 - - REACT_425978 - - REACT_193465 - - REACT_374900 - - REACT_74722 - - REACT_425999 - - REACT_428040 - - REACT_163953 - - REACT_372511 - - REACT_2000349 - - REACT_70106 - - REACT_1470067 - - REACT_113529 - - REACT_425969 - - REACT_428548 - - REACT_156540 - - REACT_1614597 - - REACT_351626 - - REACT_427899 - - seed.compound: cpd00067 - - unipathway.compound: UPC00080 - - !!omap - - id: lac__D_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/h + - http://identifiers.org/biocyc/PROTON + - http://identifiers.org/cas/12408-02-5 + - http://identifiers.org/cas/12408-02-5 + - http://identifiers.org/chebi/CHEBI:24636 + - http://identifiers.org/chebi/CHEBI:15378 + - http://identifiers.org/chebi/CHEBI:10744 + - http://identifiers.org/chebi/CHEBI:13357 + - http://identifiers.org/chebi/CHEBI:5584 + - http://identifiers.org/kegg.compound/C00080 + - http://identifiers.org/pubchem.substance/3380 + - http://identifiers.org/reactome/REACT_194688 + - http://identifiers.org/reactome/REACT_425978 + - http://identifiers.org/reactome/REACT_193465 + - http://identifiers.org/reactome/REACT_374900 + - http://identifiers.org/reactome/REACT_74722 + - http://identifiers.org/reactome/REACT_425999 + - http://identifiers.org/reactome/REACT_428040 + - http://identifiers.org/reactome/REACT_163953 + - http://identifiers.org/reactome/REACT_372511 + - http://identifiers.org/reactome/REACT_2000349 + - http://identifiers.org/reactome/REACT_70106 + - http://identifiers.org/reactome/REACT_1470067 + - http://identifiers.org/reactome/REACT_113529 + - http://identifiers.org/reactome/REACT_425969 + - http://identifiers.org/reactome/REACT_428548 + - http://identifiers.org/reactome/REACT_156540 + - http://identifiers.org/reactome/REACT_1614597 + - http://identifiers.org/reactome/REACT_351626 + - http://identifiers.org/reactome/REACT_427899 + - http://identifiers.org/seed.compound/cpd00067 + - http://identifiers.org/unipathway.compound/UPC00080 + - !!omap + - id: M_lac__D_c - name: D-Lactate - compartment: c - charge: -1 - formula: C3H5O3 - - annotation: !!omap - - bigg.metabolite: lac__D - - biocyc: META:D-LACTATE - - chebi: - - CHEBI:11001 - - CHEBI:16004 - - CHEBI:18684 - - CHEBI:341 - - CHEBI:42105 - - CHEBI:42111 - - CHEBI:43701 - - hmdb: - - HMDB00171 - - HMDB01311 - - kegg.compound: C00256 - - metanetx.chemical: MNXM285 - - seed.compound: cpd00221 - - !!omap - - id: lac__D_e + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/lac__D + - http://identifiers.org/biocyc/META:D-LACTATE + - http://identifiers.org/chebi/CHEBI:11001 + - http://identifiers.org/chebi/CHEBI:16004 + - http://identifiers.org/chebi/CHEBI:18684 + - http://identifiers.org/chebi/CHEBI:341 + - http://identifiers.org/chebi/CHEBI:42105 + - http://identifiers.org/chebi/CHEBI:42111 + - http://identifiers.org/chebi/CHEBI:43701 + - http://identifiers.org/hmdb/HMDB00171 + - http://identifiers.org/hmdb/HMDB01311 + - http://identifiers.org/kegg.compound/C00256 + - http://identifiers.org/metanetx.chemical/MNXM285 + - http://identifiers.org/seed.compound/cpd00221 + - !!omap + - id: M_lac__D_e - name: D-Lactate - compartment: e - charge: -1 - formula: C3H5O3 - - annotation: !!omap - - bigg.metabolite: lac__D - - biocyc: META:D-LACTATE - - chebi: - - CHEBI:11001 - - CHEBI:16004 - - CHEBI:18684 - - CHEBI:341 - - CHEBI:42105 - - CHEBI:42111 - - CHEBI:43701 - - hmdb: - - HMDB00171 - - HMDB01311 - - kegg.compound: C00256 - - metanetx.chemical: MNXM285 - - seed.compound: cpd00221 - - !!omap - - id: nad_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/lac__D + - http://identifiers.org/biocyc/META:D-LACTATE + - http://identifiers.org/chebi/CHEBI:11001 + - http://identifiers.org/chebi/CHEBI:16004 + - http://identifiers.org/chebi/CHEBI:18684 + - http://identifiers.org/chebi/CHEBI:341 + - http://identifiers.org/chebi/CHEBI:42105 + - http://identifiers.org/chebi/CHEBI:42111 + - http://identifiers.org/chebi/CHEBI:43701 + - http://identifiers.org/hmdb/HMDB00171 + - http://identifiers.org/hmdb/HMDB01311 + - http://identifiers.org/kegg.compound/C00256 + - http://identifiers.org/metanetx.chemical/MNXM285 + - http://identifiers.org/seed.compound/cpd00221 + - !!omap + - id: M_nad_c - name: Nicotinamide adenine dinucleotide - compartment: c - charge: -1 - formula: C21H26N7O14P2 - - annotation: !!omap - - bigg.metabolite: nad - - biocyc: NAD - - cas: - - 53-84-9 - - chebi: - - CHEBI:21901 - - CHEBI:7422 - - CHEBI:44214 - - CHEBI:15846 - - CHEBI:13394 - - CHEBI:13393 - - CHEBI:44215 - - CHEBI:13389 - - CHEBI:57540 - - CHEBI:44281 - - hmdb: HMDB00902 - - kegg.compound: C00003 - - kegg.drug: D00002 - - pubchem.substance: '3305' - - reactome: - - REACT_192307 - - REACT_29360 - - REACT_427523 - - REACT_194653 - - REACT_113526 - - seed.compound: cpd00003 - - unipathway.compound: UPC00003 - - !!omap - - id: nadh_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/nad + - http://identifiers.org/biocyc/NAD + - http://identifiers.org/cas/53-84-9 + - http://identifiers.org/cas/53-84-9 + - http://identifiers.org/chebi/CHEBI:21901 + - http://identifiers.org/chebi/CHEBI:7422 + - http://identifiers.org/chebi/CHEBI:44214 + - http://identifiers.org/chebi/CHEBI:15846 + - http://identifiers.org/chebi/CHEBI:13394 + - http://identifiers.org/chebi/CHEBI:13393 + - http://identifiers.org/chebi/CHEBI:44215 + - http://identifiers.org/chebi/CHEBI:13389 + - http://identifiers.org/chebi/CHEBI:57540 + - http://identifiers.org/chebi/CHEBI:44281 + - http://identifiers.org/hmdb/HMDB00902 + - http://identifiers.org/kegg.compound/C00003 + - http://identifiers.org/kegg.drug/D00002 + - http://identifiers.org/pubchem.substance/3305 + - http://identifiers.org/reactome/REACT_192307 + - http://identifiers.org/reactome/REACT_29360 + - http://identifiers.org/reactome/REACT_427523 + - http://identifiers.org/reactome/REACT_194653 + - http://identifiers.org/reactome/REACT_113526 + - http://identifiers.org/seed.compound/cpd00003 + - http://identifiers.org/unipathway.compound/UPC00003 + - !!omap + - id: M_nadh_c - name: Nicotinamide adenine dinucleotide - reduced - compartment: c - charge: -2 - formula: C21H27N7O14P2 - - annotation: !!omap - - bigg.metabolite: nadh - - biocyc: NADH - - cas: - - 58-68-4 - - chebi: - - CHEBI:13395 - - CHEBI:21902 - - CHEBI:16908 - - CHEBI:7423 - - CHEBI:44216 - - CHEBI:57945 - - CHEBI:13396 - - hmdb: HMDB01487 - - kegg.compound: C00004 - - pubchem.substance: '3306' - - reactome: - - REACT_192305 - - REACT_73473 - - REACT_194697 - - REACT_29362 - - seed.compound: cpd00004 - - unipathway.compound: UPC00004 - - !!omap - - id: pep_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/nadh + - http://identifiers.org/biocyc/NADH + - http://identifiers.org/cas/58-68-4 + - http://identifiers.org/cas/58-68-4 + - http://identifiers.org/chebi/CHEBI:13395 + - http://identifiers.org/chebi/CHEBI:21902 + - http://identifiers.org/chebi/CHEBI:16908 + - http://identifiers.org/chebi/CHEBI:7423 + - http://identifiers.org/chebi/CHEBI:44216 + - http://identifiers.org/chebi/CHEBI:57945 + - http://identifiers.org/chebi/CHEBI:13396 + - http://identifiers.org/hmdb/HMDB01487 + - http://identifiers.org/kegg.compound/C00004 + - http://identifiers.org/pubchem.substance/3306 + - http://identifiers.org/reactome/REACT_192305 + - http://identifiers.org/reactome/REACT_73473 + - http://identifiers.org/reactome/REACT_194697 + - http://identifiers.org/reactome/REACT_29362 + - http://identifiers.org/seed.compound/cpd00004 + - http://identifiers.org/unipathway.compound/UPC00004 + - !!omap + - id: M_pep_c - name: Phosphoenolpyruvate - compartment: c - charge: -3 - formula: C3H2O6P - - annotation: !!omap - - bigg.metabolite: pep - - biocyc: PHOSPHO-ENOL-PYRUVATE - - cas: - - 138-08-9 - - chebi: - - CHEBI:44897 - - CHEBI:44894 - - CHEBI:14812 - - CHEBI:8147 - - CHEBI:26055 - - CHEBI:26054 - - CHEBI:58702 - - CHEBI:18021 - - hmdb: HMDB00263 - - kegg.compound: C00074 - - pubchem.substance: '3374' - - reactome: - - REACT_29492 - - REACT_372364 - - seed.compound: cpd00061 - - unipathway.compound: UPC00074 - - !!omap - - id: pi_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/pep + - http://identifiers.org/biocyc/PHOSPHO-ENOL-PYRUVATE + - http://identifiers.org/cas/138-08-9 + - http://identifiers.org/cas/138-08-9 + - http://identifiers.org/chebi/CHEBI:44897 + - http://identifiers.org/chebi/CHEBI:44894 + - http://identifiers.org/chebi/CHEBI:14812 + - http://identifiers.org/chebi/CHEBI:8147 + - http://identifiers.org/chebi/CHEBI:26055 + - http://identifiers.org/chebi/CHEBI:26054 + - http://identifiers.org/chebi/CHEBI:58702 + - http://identifiers.org/chebi/CHEBI:18021 + - http://identifiers.org/hmdb/HMDB00263 + - http://identifiers.org/kegg.compound/C00074 + - http://identifiers.org/pubchem.substance/3374 + - http://identifiers.org/reactome/REACT_29492 + - http://identifiers.org/reactome/REACT_372364 + - http://identifiers.org/seed.compound/cpd00061 + - http://identifiers.org/unipathway.compound/UPC00074 + - !!omap + - id: M_pi_c - name: Phosphate - compartment: c - charge: -2 - formula: HO4P - - annotation: !!omap - - bigg.metabolite: pi - - biocyc: - - Pi - - PHOSPHATE-GROUP - - CPD0-1421 - - cas: - - 14265-44-2 - - chebi: - - CHEBI:37583 - - CHEBI:7793 - - CHEBI:37585 - - CHEBI:34683 - - CHEBI:14791 - - CHEBI:34855 - - CHEBI:29137 - - CHEBI:29139 - - CHEBI:63036 - - CHEBI:26020 - - CHEBI:39739 - - CHEBI:32597 - - CHEBI:32596 - - CHEBI:43474 - - CHEBI:63051 - - CHEBI:43470 - - CHEBI:9679 - - CHEBI:35433 - - CHEBI:4496 - - CHEBI:45024 - - CHEBI:18367 - - CHEBI:26078 - - CHEBI:39745 - - CHEBI:24838 - - hmdb: HMDB02142 - - kegg.compound: - - C13556 - - C13558 - - C00009 - - kegg.drug: D05467 - - pubchem.substance: '3311' - - reactome: - - REACT_947590 - - REACT_109277 - - REACT_113548 - - REACT_2255331 - - REACT_29372 - - REACT_113550 - - REACT_113551 - - seed.compound: - - cpd09464 - - cpd09463 - - cpd00009 - - unipathway.compound: UPC00009 - - !!omap - - id: pi_e + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/pi + - http://identifiers.org/biocyc/Pi + - http://identifiers.org/biocyc/PHOSPHATE-GROUP + - http://identifiers.org/biocyc/CPD0-1421 + - http://identifiers.org/cas/14265-44-2 + - http://identifiers.org/cas/14265-44-2 + - http://identifiers.org/chebi/CHEBI:37583 + - http://identifiers.org/chebi/CHEBI:7793 + - http://identifiers.org/chebi/CHEBI:37585 + - http://identifiers.org/chebi/CHEBI:34683 + - http://identifiers.org/chebi/CHEBI:14791 + - http://identifiers.org/chebi/CHEBI:34855 + - http://identifiers.org/chebi/CHEBI:29137 + - http://identifiers.org/chebi/CHEBI:29139 + - http://identifiers.org/chebi/CHEBI:63036 + - http://identifiers.org/chebi/CHEBI:26020 + - http://identifiers.org/chebi/CHEBI:39739 + - http://identifiers.org/chebi/CHEBI:32597 + - http://identifiers.org/chebi/CHEBI:32596 + - http://identifiers.org/chebi/CHEBI:43474 + - http://identifiers.org/chebi/CHEBI:63051 + - http://identifiers.org/chebi/CHEBI:43470 + - http://identifiers.org/chebi/CHEBI:9679 + - http://identifiers.org/chebi/CHEBI:35433 + - http://identifiers.org/chebi/CHEBI:4496 + - http://identifiers.org/chebi/CHEBI:45024 + - http://identifiers.org/chebi/CHEBI:18367 + - http://identifiers.org/chebi/CHEBI:26078 + - http://identifiers.org/chebi/CHEBI:39745 + - http://identifiers.org/chebi/CHEBI:24838 + - http://identifiers.org/hmdb/HMDB02142 + - http://identifiers.org/kegg.compound/C13556 + - http://identifiers.org/kegg.compound/C13558 + - http://identifiers.org/kegg.compound/C00009 + - http://identifiers.org/kegg.drug/D05467 + - http://identifiers.org/pubchem.substance/3311 + - http://identifiers.org/reactome/REACT_947590 + - http://identifiers.org/reactome/REACT_109277 + - http://identifiers.org/reactome/REACT_113548 + - http://identifiers.org/reactome/REACT_2255331 + - http://identifiers.org/reactome/REACT_29372 + - http://identifiers.org/reactome/REACT_113550 + - http://identifiers.org/reactome/REACT_113551 + - http://identifiers.org/seed.compound/cpd09464 + - http://identifiers.org/seed.compound/cpd09463 + - http://identifiers.org/seed.compound/cpd00009 + - http://identifiers.org/unipathway.compound/UPC00009 + - !!omap + - id: M_pi_e - name: Phosphate - compartment: e - charge: -2 - formula: HO4P - - annotation: !!omap - - bigg.metabolite: pi - - biocyc: - - Pi - - PHOSPHATE-GROUP - - CPD0-1421 - - cas: - - 14265-44-2 - - chebi: - - CHEBI:37583 - - CHEBI:7793 - - CHEBI:37585 - - CHEBI:34683 - - CHEBI:14791 - - CHEBI:34855 - - CHEBI:29137 - - CHEBI:29139 - - CHEBI:63036 - - CHEBI:26020 - - CHEBI:39739 - - CHEBI:32597 - - CHEBI:32596 - - CHEBI:43474 - - CHEBI:63051 - - CHEBI:43470 - - CHEBI:9679 - - CHEBI:35433 - - CHEBI:4496 - - CHEBI:45024 - - CHEBI:18367 - - CHEBI:26078 - - CHEBI:39745 - - CHEBI:24838 - - hmdb: HMDB02142 - - kegg.compound: - - C13556 - - C13558 - - C00009 - - kegg.drug: D05467 - - pubchem.substance: '3311' - - reactome: - - REACT_947590 - - REACT_109277 - - REACT_113548 - - REACT_2255331 - - REACT_29372 - - REACT_113550 - - REACT_113551 - - seed.compound: - - cpd09464 - - cpd09463 - - cpd00009 - - unipathway.compound: UPC00009 - - !!omap - - id: pyr_c + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/pi + - http://identifiers.org/biocyc/Pi + - http://identifiers.org/biocyc/PHOSPHATE-GROUP + - http://identifiers.org/biocyc/CPD0-1421 + - http://identifiers.org/cas/14265-44-2 + - http://identifiers.org/cas/14265-44-2 + - http://identifiers.org/chebi/CHEBI:37583 + - http://identifiers.org/chebi/CHEBI:7793 + - http://identifiers.org/chebi/CHEBI:37585 + - http://identifiers.org/chebi/CHEBI:34683 + - http://identifiers.org/chebi/CHEBI:14791 + - http://identifiers.org/chebi/CHEBI:34855 + - http://identifiers.org/chebi/CHEBI:29137 + - http://identifiers.org/chebi/CHEBI:29139 + - http://identifiers.org/chebi/CHEBI:63036 + - http://identifiers.org/chebi/CHEBI:26020 + - http://identifiers.org/chebi/CHEBI:39739 + - http://identifiers.org/chebi/CHEBI:32597 + - http://identifiers.org/chebi/CHEBI:32596 + - http://identifiers.org/chebi/CHEBI:43474 + - http://identifiers.org/chebi/CHEBI:63051 + - http://identifiers.org/chebi/CHEBI:43470 + - http://identifiers.org/chebi/CHEBI:9679 + - http://identifiers.org/chebi/CHEBI:35433 + - http://identifiers.org/chebi/CHEBI:4496 + - http://identifiers.org/chebi/CHEBI:45024 + - http://identifiers.org/chebi/CHEBI:18367 + - http://identifiers.org/chebi/CHEBI:26078 + - http://identifiers.org/chebi/CHEBI:39745 + - http://identifiers.org/chebi/CHEBI:24838 + - http://identifiers.org/hmdb/HMDB02142 + - http://identifiers.org/kegg.compound/C13556 + - http://identifiers.org/kegg.compound/C13558 + - http://identifiers.org/kegg.compound/C00009 + - http://identifiers.org/kegg.drug/D05467 + - http://identifiers.org/pubchem.substance/3311 + - http://identifiers.org/reactome/REACT_947590 + - http://identifiers.org/reactome/REACT_109277 + - http://identifiers.org/reactome/REACT_113548 + - http://identifiers.org/reactome/REACT_2255331 + - http://identifiers.org/reactome/REACT_29372 + - http://identifiers.org/reactome/REACT_113550 + - http://identifiers.org/reactome/REACT_113551 + - http://identifiers.org/seed.compound/cpd09464 + - http://identifiers.org/seed.compound/cpd09463 + - http://identifiers.org/seed.compound/cpd00009 + - http://identifiers.org/unipathway.compound/UPC00009 + - !!omap + - id: M_pyr_c - name: Pyruvate - compartment: c - charge: -1 - formula: C3H3O3 - - annotation: !!omap - - bigg.metabolite: pyr - - biocyc: PYRUVATE - - cas: - - 127-17-3 - - chebi: - - CHEBI:15361 - - CHEBI:14987 - - CHEBI:8685 - - CHEBI:32816 - - CHEBI:45253 - - CHEBI:26466 - - CHEBI:26462 - - hmdb: HMDB00243 - - kegg.compound: C00022 - - lipidmaps: LMFA01060077 - - pubchem.substance: '3324' - - reactome: - - REACT_113557 - - REACT_389680 - - REACT_29398 - - seed.compound: cpd00020 - - unipathway.compound: UPC00022 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.metabolite/pyr + - http://identifiers.org/biocyc/PYRUVATE + - http://identifiers.org/cas/127-17-3 + - http://identifiers.org/cas/127-17-3 + - http://identifiers.org/chebi/CHEBI:15361 + - http://identifiers.org/chebi/CHEBI:14987 + - http://identifiers.org/chebi/CHEBI:8685 + - http://identifiers.org/chebi/CHEBI:32816 + - http://identifiers.org/chebi/CHEBI:45253 + - http://identifiers.org/chebi/CHEBI:26466 + - http://identifiers.org/chebi/CHEBI:26462 + - http://identifiers.org/hmdb/HMDB00243 + - http://identifiers.org/kegg.compound/C00022 + - http://identifiers.org/lipidmaps/LMFA01060077 + - http://identifiers.org/pubchem.substance/3324 + - http://identifiers.org/reactome/REACT_113557 + - http://identifiers.org/reactome/REACT_389680 + - http://identifiers.org/reactome/REACT_29398 + - http://identifiers.org/seed.compound/cpd00020 + - http://identifiers.org/unipathway.compound/UPC00022 - reactions: - !!omap - - id: ATPM + - id: R_ATPM - name: ATP maintenance requirement - - metabolites: !!omap - - adp_c: 1.0 - - atp_c: -1.0 - - h2o_c: -1.0 - - h_c: 1.0 - - pi_c: 1.0 - lower_bound: 8.39 - upper_bound: 1000.0 - gene_reaction_rule: '' + - metabolites: !!omap + - M_atp_c: -1.0 + - M_h2o_c: -1.0 + - M_adp_c: 1.0 + - M_h_c: 1.0 + - M_pi_c: 1.0 - objective_coefficient: 1.0 - - annotation: !!omap - - bigg.reaction: ATPM + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/ATPM - !!omap - - id: D_LACt2 + - id: R_D_LACt2 - name: '' - - metabolites: !!omap [] - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: '' + - metabolites: !!omap [] - !!omap - - id: ENO + - id: R_ENO - name: enolase - - metabolites: !!omap - - 2pg_c: -1.0 - - h2o_c: 1.0 - - pep_c: 1.0 - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b2779 - - annotation: !!omap - - bigg.reaction: ENO - - !!omap - - id: EX_glc__D_e - - name: D-Glucose exchange - metabolites: !!omap - - glc__D_e: -1.0 + - M_2pg_c: -1.0 + - M_pep_c: 1.0 + - M_h2o_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/ENO + - !!omap + - id: R_EX_glc__D_e + - name: D-Glucose exchange - lower_bound: -10.0 - upper_bound: 1000.0 - gene_reaction_rule: '' - - annotation: !!omap - - bigg.reaction: glc + - metabolites: !!omap + - M_glc__D_e: -1.0 + - metadata: !!omap - sbo: SBO:0000627 + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/glc - !!omap - - id: EX_h_e + - id: R_EX_h_e - name: H+ exchange - - metabolites: !!omap - - h_e: -1.0 - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: '' - - annotation: !!omap - - bigg.reaction: h + - metabolites: !!omap + - M_h_e: -1.0 + - metadata: !!omap - sbo: SBO:0000627 + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/h - !!omap - - id: EX_lac__D_e + - id: R_EX_lac__D_e - name: D-lactate exchange - - metabolites: !!omap - - lac__D_e: -1.0 - lower_bound: 0.0 - upper_bound: 1000.0 - gene_reaction_rule: '' - - annotation: !!omap - - bigg.reaction: lac__D + - metabolites: !!omap + - M_lac__D_e: -1.0 + - metadata: !!omap - sbo: SBO:0000627 + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/lac__D - !!omap - - id: FBA + - id: R_FBA - name: fructose-bisphosphate aldolase - - metabolites: !!omap - - dhap_c: 1.0 - - fdp_c: -1.0 - - g3p_c: 1.0 - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b1773 or b2097 or b2925 - - annotation: !!omap - - bigg.reaction: FBA - - !!omap - - id: GAPD - - name: glyceraldehyde-3-phosphate dehydrogenase - metabolites: !!omap - - 13dpg_c: 1.0 - - g3p_c: -1.0 - - h_c: 1.0 - - nad_c: -1.0 - - nadh_c: 1.0 - - pi_c: -1.0 + - M_fdp_c: -1.0 + - M_dhap_c: 1.0 + - M_g3p_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/FBA + - !!omap + - id: R_GAPD + - name: glyceraldehyde-3-phosphate dehydrogenase - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b1779 - - annotation: !!omap - - bigg.reaction: GAPD - - !!omap - - id: GLCpts - - name: D-glucose transport via PEP:Pyr PTS - metabolites: !!omap - - g6p_c: 1.0 - - glc__D_e: -1.0 - - pep_c: -1.0 - - pyr_c: 1.0 + - M_nad_c: -1.0 + - M_13dpg_c: 1.0 + - M_nadh_c: 1.0 + - M_g3p_c: -1.0 + - M_pi_c: -1.0 + - M_h_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/GAPD + - !!omap + - id: R_GLCpts + - name: D-glucose transport via PEP:Pyr PTS - lower_bound: 0.0 - upper_bound: 1000.0 - gene_reaction_rule: (b2415 and b2417 and b1101 and b2416) or (b2415 and b2417 and b1621 and b2416) or (b2415 and b1818 and b1817 and b1819 and b2416) - - annotation: !!omap - - bigg.reaction: GLCpts - - !!omap - - id: H2Ot - - name: R H2O transport via - diffusion - metabolites: !!omap - - h2o_c: 1.0 - - h2o_e: -1.0 + - M_g6p_c: 1.0 + - M_pyr_c: 1.0 + - M_glc__D_e: -1.0 + - M_pep_c: -1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/GLCpts + - !!omap + - id: R_H2Ot + - name: R H2O transport via - diffusion - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b0875 or s0001 - - annotation: !!omap - - bigg.reaction: H2Ot - - !!omap - - id: LDH_D - - name: D-lactate dehydrogenase - metabolites: !!omap - - h_c: 1.0 - - lac__D_c: -1.0 - - nad_c: -1.0 - - nadh_c: 1.0 - - pyr_c: 1.0 + - M_h2o_e: -1.0 + - M_h2o_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/H2Ot + - !!omap + - id: R_LDH_D + - name: D-lactate dehydrogenase - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b2133 or b1380 + - metabolites: !!omap + - M_lac__D_c: -1.0 + - M_nad_c: -1.0 + - M_h_c: 1.0 + - M_nadh_c: 1.0 + - M_pyr_c: 1.0 - subsystem: Pyruvate Metabolism - - annotation: !!omap - - bigg.reaction: LDH_D - - biocyc: META:DLACTDEHYDROGNAD-RXN - - ec-code: 1.1.1.28 - - kegg.reaction: R00704 - - metanetx.reaction: MNXR101037 - - rhea: - - '16369' - - '16370' - - '16371' - - '16372' + - metadata: !!omap - sbo: SBO:0000375 - - !!omap - - id: PFK + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/LDH_D + - http://identifiers.org/biocyc/META:DLACTDEHYDROGNAD-RXN + - http://identifiers.org/ec-code/1.1.1.28 + - http://identifiers.org/kegg.reaction/R00704 + - http://identifiers.org/metanetx.reaction/MNXR101037 + - http://identifiers.org/rhea/16369 + - http://identifiers.org/rhea/16370 + - http://identifiers.org/rhea/16371 + - http://identifiers.org/rhea/16372 + - !!omap + - id: R_PFK - name: phosphofructokinase - - metabolites: !!omap - - adp_c: 1.0 - - atp_c: -1.0 - - f6p_c: -1.0 - - fdp_c: 1.0 - - h_c: 1.0 - lower_bound: 0.0 - upper_bound: 1000.0 - gene_reaction_rule: b3916 or b1723 + - metabolites: !!omap + - M_f6p_c: -1.0 + - M_atp_c: -1.0 + - M_adp_c: 1.0 + - M_fdp_c: 1.0 + - M_h_c: 1.0 - objective_coefficient: 1.0 - - annotation: !!omap - - bigg.reaction: PFK + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/PFK - !!omap - - id: PGI + - id: R_PGI - name: glucose-6-phosphate isomerase - - metabolites: !!omap - - f6p_c: 1.0 - - g6p_c: -1.0 - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b4025 - - annotation: !!omap - - bigg.reaction: PGI - - !!omap - - id: PGK - - name: phosphoglycerate kinase - metabolites: !!omap - - 13dpg_c: 1.0 - - 3pg_c: -1.0 - - adp_c: 1.0 - - atp_c: -1.0 + - M_g6p_c: -1.0 + - M_f6p_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/PGI + - !!omap + - id: R_PGK + - name: phosphoglycerate kinase - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b2926 - - annotation: !!omap - - bigg.reaction: PGK - - !!omap - - id: PGM - - name: phosphoglycerate mutase - metabolites: !!omap - - 2pg_c: -1.0 - - 3pg_c: 1.0 + - M_3pg_c: -1.0 + - M_atp_c: -1.0 + - M_13dpg_c: 1.0 + - M_adp_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/PGK + - !!omap + - id: R_PGM + - name: phosphoglycerate mutase - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b4395 or b3612 or b0755 - - annotation: !!omap - - bigg.reaction: PGM - - !!omap - - id: PIt2r - - name: R phosphate reversible transport via - symport - metabolites: !!omap - - h_c: 1.0 - - h_e: -1.0 - - pi_c: 1.0 - - pi_e: -1.0 + - M_2pg_c: -1.0 + - M_3pg_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/PGM + - !!omap + - id: R_PIt2r + - name: R phosphate reversible transport via - symport - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b2987 or b3493 - - annotation: !!omap - - bigg.reaction: PIt2r - - !!omap - - id: PYK - - name: pyruvate kinase - metabolites: !!omap - - adp_c: -1.0 - - atp_c: 1.0 - - h_c: -1.0 - - pep_c: -1.0 - - pyr_c: 1.0 + - M_pi_e: -1.0 + - M_h_e: -1.0 + - M_h_c: 1.0 + - M_pi_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/PIt2r + - !!omap + - id: R_PYK + - name: pyruvate kinase - lower_bound: 0.0 - upper_bound: 1000.0 - gene_reaction_rule: b1854 or b1676 - - annotation: !!omap - - bigg.reaction: PYK - - !!omap - - id: TPI - - name: triose-phosphate isomerase - metabolites: !!omap - - dhap_c: -1.0 - - g3p_c: 1.0 + - M_adp_c: -1.0 + - M_h_c: -1.0 + - M_pep_c: -1.0 + - M_atp_c: 1.0 + - M_pyr_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/PYK + - !!omap + - id: R_TPI + - name: triose-phosphate isomerase - lower_bound: -1000.0 - upper_bound: 1000.0 - gene_reaction_rule: b3919 - - annotation: !!omap - - bigg.reaction: TPI + - metabolites: !!omap + - M_dhap_c: -1.0 + - M_g3p_c: 1.0 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - http://identifiers.org/bigg.reaction/TPI - genes: - !!omap - - id: b0755 + - id: G_b0755 - name: gpmA - !!omap - - id: b0875 + - id: G_b0875 - name: aqpZ - !!omap - - id: b1101 + - id: G_b1101 - name: ptsG - !!omap - - id: b1380 + - id: G_b1380 - name: ldhA - !!omap - - id: b1621 + - id: G_b1621 - name: malX - !!omap - - id: b1676 + - id: G_b1676 - name: pykF - - annotation: !!omap - - ncbiprotein: - - '1208453' - - '1652654' - - !!omap - - id: b1723 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - https://identifiers.org/ncbiprotein:1208453 + - https://identifiers.org/ncbiprotein:1652654 + - !!omap + - id: G_b1723 - name: pfkB - !!omap - - id: b1773 + - id: G_b1773 - name: ydjI - !!omap - - id: b1779 + - id: G_b1779 - name: gapA - !!omap - - id: b1817 + - id: G_b1817 - name: manX - !!omap - - id: b1818 + - id: G_b1818 - name: manY - !!omap - - id: b1819 + - id: G_b1819 - name: manZ - !!omap - - id: b1854 + - id: G_b1854 - name: pykA - !!omap - - id: b2097 + - id: G_b2097 - name: fbaB - !!omap - - id: b2133 + - id: G_b2133 - name: dld - !!omap - - id: b2415 + - id: G_b2415 - name: ptsH - !!omap - - id: b2416 + - id: G_b2416 - name: ptsI - !!omap - - id: b2417 + - id: G_b2417 - name: crr - !!omap - - id: b2779 + - id: G_b2779 - name: eno - - annotation: !!omap - - ncbiprotein: '1653839' + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - https://identifiers.org/ncbiprotein:1653839 - !!omap - - id: b2925 + - id: G_b2925 - name: fbaA - !!omap - - id: b2926 + - id: G_b2926 - name: pgk - - annotation: !!omap - - ncbiprotein: '1653609' + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - https://identifiers.org/ncbiprotein:1653609 - !!omap - - id: b2987 + - id: G_b2987 - name: pitB - !!omap - - id: b3493 + - id: G_b3493 - name: pitA - !!omap - - id: b3612 + - id: G_b3612 - name: gpmM - !!omap - - id: b3916 + - id: G_b3916 - name: pfkA - - annotation: !!omap - - ncbiprotein: - - '1006614' - - '1651919' - - !!omap - - id: b3919 + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - https://identifiers.org/ncbiprotein:1006614 + - https://identifiers.org/ncbiprotein:1651919 + - !!omap + - id: G_b3919 - name: tpiA - !!omap - - id: b4025 + - id: G_b4025 - name: pgi - - annotation: !!omap - - ncbiprotein: '1653253' + - metadata: !!omap + - standardized: + - qualifier: bqb_is + resources: + - https://identifiers.org/ncbiprotein:1653253 - !!omap - - id: b4395 + - id: G_b4395 - name: ytjC - !!omap - - id: s0001 + - id: G_s0001 - name: G_s0001 +- groups: [] - id: mini_textbook - compartments: !!omap - c: cytosol diff --git a/src/cobra/data/mini_cobra.xml b/src/cobra/data/mini_cobra.xml index bc0d31f38..0cbf9dfed 100644 --- a/src/cobra/data/mini_cobra.xml +++ b/src/cobra/data/mini_cobra.xml @@ -1,5 +1,5 @@ - + @@ -21,19 +21,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -46,23 +46,23 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -75,29 +75,29 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -110,33 +110,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -149,32 +150,33 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -187,25 +189,26 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -218,25 +221,26 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -249,26 +253,27 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -281,19 +286,20 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -306,28 +312,29 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -340,10 +347,11 @@ - - - - + + + + + @@ -356,64 +364,65 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -426,64 +435,65 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -496,37 +506,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -539,37 +550,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -582,20 +594,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -608,20 +620,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -634,30 +646,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -670,25 +683,26 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -701,24 +715,25 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -731,52 +746,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -789,52 +805,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -847,25 +864,26 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -883,13 +901,13 @@ - + - + @@ -905,14 +923,14 @@ - - + + - + @@ -929,13 +947,13 @@ - + - + @@ -945,13 +963,13 @@ - + - + @@ -961,13 +979,13 @@ - + - + @@ -977,13 +995,13 @@ - + - + @@ -1004,13 +1022,13 @@ - + - + @@ -1030,13 +1048,13 @@ - + - + @@ -1074,13 +1092,13 @@ - + - + @@ -1099,21 +1117,21 @@ - + - - - - - - - - - + + + + + + + + + @@ -1135,13 +1153,13 @@ - + - + @@ -1163,13 +1181,13 @@ - + - + @@ -1185,13 +1203,13 @@ - + - + @@ -1209,13 +1227,13 @@ - + - + @@ -1235,13 +1253,13 @@ - + - + @@ -1262,13 +1280,13 @@ - + - + @@ -1290,13 +1308,13 @@ - + - + @@ -1322,97 +1340,97 @@ - - - - - + + + + + - - + + - - - - - - - - - - - - + + + + + + + + + + + + - + - + - + - - - + + + - - + + - + - + - - + + diff --git a/src/cobra/flux_analysis/reaction.py b/src/cobra/flux_analysis/reaction.py index d3f146d4a..ebc8a1e9a 100644 --- a/src/cobra/flux_analysis/reaction.py +++ b/src/cobra/flux_analysis/reaction.py @@ -58,13 +58,14 @@ def assess( if m.slim_optimize(error_value=0.0) >= flux_coefficient_cutoff: return True else: - results = {} - results["precursors"] = assess_component( - model, reaction, "reactants", flux_coefficient_cutoff - ) - results["products"] = assess_component( - model, reaction, "products", flux_coefficient_cutoff - ) + results = { + "precursors": assess_component( + model, reaction, "reactants", flux_coefficient_cutoff + ), + "products": assess_component( + model, reaction, "products", flux_coefficient_cutoff + ), + } return results diff --git a/src/cobra/io/__init__.py b/src/cobra/io/__init__.py index f81680c1c..db169903a 100644 --- a/src/cobra/io/__init__.py +++ b/src/cobra/io/__init__.py @@ -1,8 +1,14 @@ """Provide functions for loading and saving metabolic models.""" from cobra.io.dict import model_from_dict, model_to_dict -from cobra.io.json import from_json, load_json_model, save_json_model, to_json -from cobra.io.mat import load_matlab_model, save_matlab_model +from cobra.io.json import ( + from_json, + load_json_model, + save_json_model, + to_json, + validate_json_model, +) +from cobra.io.mat import load_matlab_model, save_matlab_model, create_mat_dict from cobra.io.sbml import read_sbml_model, write_sbml_model, validate_sbml_model from cobra.io.yaml import from_yaml, load_yaml_model, save_yaml_model, to_yaml from cobra.io.web import AbstractModelRepository, BiGGModels, BioModels, load_model diff --git a/src/cobra/io/dict.py b/src/cobra/io/dict.py index 362471a91..a1b013186 100644 --- a/src/cobra/io/dict.py +++ b/src/cobra/io/dict.py @@ -1,12 +1,25 @@ """Provide functions for cobrapy objects to generic Python objects and vice-versa.""" -from collections import OrderedDict -from operator import attrgetter, itemgetter -from typing import TYPE_CHECKING, Dict, List, Sequence, Set, Union +import itertools +from collections import OrderedDict, defaultdict +from typing import TYPE_CHECKING, Dict, List, Sequence, Set, Tuple, Union import numpy as np -from ..core import Gene, Metabolite, Model, Reaction +from ..core import Gene, Group, Metabolite, Model, Reaction +from ..core.metadata import Metadata +from ..core.metadata.resource import parse_identifiers_uri +from ..io.sbml import ( + F_GENE, + F_GENE_REV, + F_GROUP, + F_GROUP_REV, + F_REACTION, + F_REACTION_REV, + F_REPLACE, + F_SPECIE, + F_SPECIE_REV, +) from ..util.solver import set_objective @@ -16,7 +29,6 @@ _REQUIRED_REACTION_ATTRIBUTES = [ "id", "name", - "metabolites", "lower_bound", "upper_bound", "gene_reaction_rule", @@ -25,13 +37,15 @@ "objective_coefficient", "subsystem", "notes", - "annotation", + # "annotation", + "metadata", ] _OPTIONAL_REACTION_ATTRIBUTES = { "objective_coefficient": 0, "subsystem": "", "notes": {}, - "annotation": {}, + # "annotation": {}, + "metadata": {}, } _REQUIRED_METABOLITE_ATTRIBUTES = ["id", "name", "compartment"] @@ -40,33 +54,68 @@ "formula", "_bound", "notes", - "annotation", + # "annotation", + "metadata", ] _OPTIONAL_METABOLITE_ATTRIBUTES = { "charge": None, "formula": None, "_bound": 0, "notes": {}, - "annotation": {}, + # "annotation": {}, + "metadata": {}, } _REQUIRED_GENE_ATTRIBUTES = ["id", "name"] -_ORDERED_OPTIONAL_GENE_KEYS = ["notes", "annotation"] +_ORDERED_OPTIONAL_GENE_KEYS = ["notes", "metadata"] _OPTIONAL_GENE_ATTRIBUTES = { "notes": {}, - "annotation": {}, + # "annotation": {}, + "metadata": {}, } -_ORDERED_OPTIONAL_MODEL_KEYS = ["name", "compartments", "notes", "annotation"] +_REQUIRED_GROUP_ATTRIBUTES = ["id", "kind", "members"] +_ORDERED_OPTIONAL_GROUP_KEYS = ["name", "notes", "metadata"] +_OPTIONAL_GROUP_ATTRIBUTES = { + "name": "", + "notes": {}, + # "annotation": {}, + "metadata": {}, +} + +_ORDERED_OPTIONAL_MODEL_KEYS = [ + "name", + "compartments", + "notes", + # "annotation", + "metadata", +] _OPTIONAL_MODEL_ATTRIBUTES = { "name": None, # "description": None, should not actually be included "compartments": [], "notes": {}, - "annotation": {}, + # "annotation": {}, + "metadata": {}, } +def flatten(list_of_lists: Union[List, Tuple]) -> List: + """Flatten lists of lists. + + Parameters + ---------- + list_of_lists: List or Tuple + List or Tuple of lists or tuples to flatten. + + Returns + ------- + list: flattened list + + """ + return list(itertools.chain.from_iterable(list_of_lists)) + + def _fix_type( value: Union[str, float, bool, Set, Dict], ) -> Union[str, float, bool, List, OrderedDict]: @@ -94,6 +143,8 @@ def _fix_type( return list(value) if isinstance(value, dict): return OrderedDict((key, value[key]) for key in sorted(value)) + if isinstance(value, Metadata): + return OrderedDict(value.to_dict()) # handle legacy Formula type if value.__class__.__name__ == "Formula": return str(value) @@ -131,19 +182,85 @@ def _update_optional( """ for key in ordered_keys: default = optional_attribute_dict[key] - value = getattr(cobra_object, key) + value = getattr(cobra_object, key, None) if value is None or value == default: continue new_dict[key] = _fix_type(value) -def _metabolite_to_dict(metabolite: Metabolite) -> OrderedDict: +def _fix_id_from_dict( + _id_to_fix: str, + _class_to_fix_to: str, + f_replace: dict = F_REPLACE, # noqa: W0102 +): + if f_replace is None: + f_replace = {} + if not f_replace: + return _id_to_fix + if _class_to_fix_to == "Metabolite": + return F_REPLACE[F_SPECIE](_id_to_fix) + elif _class_to_fix_to == "Reaction": + return F_REPLACE[F_REACTION](_id_to_fix) + elif _class_to_fix_to == "Gene": + return F_REPLACE[F_GENE](_id_to_fix) + elif _class_to_fix_to == "Group": + return F_REPLACE[F_GROUP](_id_to_fix) + + +def _fix_value_from_dict(_key: str, _value_to_fix: Union[Dict, List, str]): + if _key == "metadata": + # New style annotations for json v2. + _value_to_fix = Metadata.from_dict(_value_to_fix) + elif _key == "annotation": + # Old style annotations for json v1. + # if annotation is in the form of list of list, modify the format + # https://github.com/opencobra/cobrapy/issues/736 + if isinstance(_value_to_fix, list) and isinstance(_value_to_fix[0], list): + _value_to_fix = flatten(_value_to_fix) + anno_dict = defaultdict(list) + if isinstance(_value_to_fix, list): + for item in _value_to_fix: + if (identifier_match := parse_identifiers_uri(item)) is not None: + provider, identifier, _provider, _uri = identifier_match + anno_dict[provider].append(identifier) + _value_to_fix = anno_dict + # metadata = Metadata() + # old_style_interface = SimplifiedAnnotationInterface(metadata) + # old_style_interface.add(_value_to_fix) + # _value_to_fix = metadata + elif _key == "lower_bound" or _key == "upper_bound": + _value_to_fix = float(_value_to_fix) + + return _value_to_fix + + +def _get_by_id( + _id: str, _object_to_get: str, model: Model +) -> Union[Gene, Metabolite, Group, Reaction]: + if _object_to_get == "Reaction": + return model.reactions.get_by_id(_id) + elif _object_to_get == "Metabolite": + return model.metabolites.get_by_id(_id) + elif _object_to_get == "Group": + return model.groups.get_by_id(_id) + elif _object_to_get == "Gene": + return model.genes.get_by_id(_id) + + +def _metabolite_to_dict( + metabolite: Metabolite, f_replace: dict = F_REPLACE # noqa: W0102 +) -> OrderedDict: """Convert a cobra Metabolite object to dictionary. Parameters ---------- metabolite : cobra.Metabolite The cobra.Metabolite to convert to dictionary. + f_replace : dict of replacement functions for id replacement + Dictionary of replacement functions for gene, specie, and reaction. + By default, the following id changes are performed on import: + clip G_ from genes, clip M_ from species, clip R_ from reactions + If no replacements should be performed, set f_replace={} or None Returns ------- @@ -155,9 +272,15 @@ def _metabolite_to_dict(metabolite: Metabolite) -> OrderedDict: _metabolite_from_dict : Convert a dictionary to cobra Metabolite object. """ + if f_replace is None: + f_replace = {} + new_metabolite = OrderedDict() for key in _REQUIRED_METABOLITE_ATTRIBUTES: - new_metabolite[key] = _fix_type(getattr(metabolite, key)) + if key == "id" and f_replace and F_SPECIE_REV in f_replace: + new_metabolite[key] = _fix_type(f_replace[F_SPECIE_REV](metabolite.id)) + else: + new_metabolite[key] = _fix_type(getattr(metabolite, key)) _update_optional( metabolite, new_metabolite, @@ -167,7 +290,9 @@ def _metabolite_to_dict(metabolite: Metabolite) -> OrderedDict: return new_metabolite -def _metabolite_from_dict(metabolite: Dict) -> Metabolite: +def _metabolite_from_dict( + metabolite: Dict, f_replace: dict = F_REPLACE # noqa: W0102 +) -> Metabolite: """Convert a dictionary to cobra Metabolite object. Parameters @@ -184,9 +309,17 @@ def _metabolite_from_dict(metabolite: Dict) -> Metabolite: _metabolite_to_dict : Convert a cobra Metabolite object to dictionary. """ - new_metabolite = Metabolite() - for k, v in metabolite.items(): - setattr(new_metabolite, k, v) + if f_replace is None: + f_replace = {} + + new_metabolite = Metabolite( + _fix_id_from_dict(metabolite["id"], "Metabolite", f_replace) + ) + [ + setattr(new_metabolite, k, _fix_value_from_dict(k, v)) + for k, v in metabolite.items() + if k != "id" + ] return new_metabolite @@ -210,14 +343,17 @@ def _gene_to_dict(gene: Gene) -> OrderedDict: """ new_gene = OrderedDict() for key in _REQUIRED_GENE_ATTRIBUTES: - new_gene[key] = _fix_type(getattr(gene, key)) + if key == "id": + new_gene[key] = _fix_type(F_REPLACE["F_GENE_REV"](gene.id)) + else: + new_gene[key] = _fix_type(getattr(gene, key)) _update_optional( gene, new_gene, _OPTIONAL_GENE_ATTRIBUTES, _ORDERED_OPTIONAL_GENE_KEYS ) return new_gene -def gene_from_dict(gene: Dict) -> Gene: +def gene_from_dict(gene: Dict, f_replace: dict = F_REPLACE) -> Gene: # noqa: W0102 """Convert a dictionary to cobra Gene object. Parameters @@ -235,9 +371,15 @@ def gene_from_dict(gene: Dict) -> Gene: _gene_to_dict : Convert a cobra Gene object to a dictionary. """ - new_gene = Gene(gene["id"]) - for k, v in gene.items(): - setattr(new_gene, k, v) + if f_replace is None: + f_replace = {} + + new_gene = Gene(_fix_id_from_dict(gene["id"], "Gene", f_replace)) + [ + setattr(new_gene, k, _fix_value_from_dict(k, v)) + for k, v in gene.items() + if k != "id" + ] return new_gene @@ -261,22 +403,22 @@ def _reaction_to_dict(reaction: Reaction) -> OrderedDict: """ new_reaction = OrderedDict() for key in _REQUIRED_REACTION_ATTRIBUTES: - if key != "metabolites": - if key == "lower_bound" and ( - np.isnan(reaction.lower_bound) or np.isinf(reaction.lower_bound) - ): - new_reaction[key] = str(_fix_type(getattr(reaction, key))) - elif key == "upper_bound" and ( - np.isnan(reaction.upper_bound) or np.isinf(reaction.upper_bound) - ): - new_reaction[key] = str(_fix_type(getattr(reaction, key))) - else: - new_reaction[key] = _fix_type(getattr(reaction, key)) - continue - mets = OrderedDict() - for met in sorted(reaction.metabolites, key=attrgetter("id")): - mets[str(met)] = reaction.metabolites[met] - new_reaction["metabolites"] = mets + if key == "id": + new_reaction[key] = _fix_type(F_REPLACE[F_REACTION_REV](reaction.id)) + elif (key == "lower_bound" or key == "upper_bound") and not np.isfinite( + getattr(reaction, key) + ): + new_reaction[key] = str(_fix_type(getattr(reaction, key))) + else: + new_reaction[key] = _fix_type(getattr(reaction, key)) + if F_REPLACE and F_SPECIE_REV in F_REPLACE: + mets = { + F_REPLACE[F_SPECIE_REV](met.id): stoic + for met, stoic in reaction.metabolites.items() + } + else: + mets = {met.id: stoic for met, stoic in reaction.metabolites.items()} + new_reaction["metabolites"] = OrderedDict(mets) _update_optional( reaction, new_reaction, @@ -286,7 +428,9 @@ def _reaction_to_dict(reaction: Reaction) -> OrderedDict: return new_reaction -def _reaction_from_dict(reaction: Dict, model: Model) -> Reaction: +def _reaction_from_dict( + reaction: Dict, model: Model, f_replace: Dict = F_REPLACE # noqa: W0102 +) -> Reaction: """Convert a dictionary to a cobra Reaction object. Parameters @@ -306,26 +450,131 @@ def _reaction_from_dict(reaction: Dict, model: Model) -> Reaction: _reaction_to_dict : Convert a cobra Reaction object to a dictionary. """ - new_reaction = Reaction() - for k, v in reaction.items(): - if k in {"objective_coefficient", "reversibility", "reaction"}: - continue - elif k == "metabolites": - new_reaction.add_metabolites( - OrderedDict( - (model.metabolites.get_by_id(str(met)), coeff) - for met, coeff in v.items() - ) + if f_replace is None: + f_replace = {} + + new_reaction = Reaction(_fix_id_from_dict(reaction["id"], "Reaction", f_replace)) + [ + setattr(new_reaction, k, _fix_value_from_dict(k, v)) + for k, v in reaction.items() + if k + not in { + "id", + "objective_coefficient", + "reversibility", + "reaction", + "metabolites", + } + ] + + new_reaction.add_metabolites( + OrderedDict( + ( + model.metabolites.get_by_id( + _fix_id_from_dict(str(met), "Metabolite", f_replace) + ), + coeff, ) - else: - if k == "lower_bound" or k == "upper_bound": - setattr(new_reaction, k, float(v)) - else: - setattr(new_reaction, k, v) + for met, coeff in reaction.get("metabolites", {}).items() + ) + ) return new_reaction -def model_to_dict(model: Model, sort: bool = False) -> OrderedDict: +def _group_to_dict(group: "Group") -> Dict: + """Convert a cobra Group object to a dictionary. + + Parameters + ---------- + group : cobra.Group + The cobra.Group to convert to a dictionary. + + Returns + ------- + dict + A dictionary representing the cobra.Group object. + + See Also + -------- + _group_from_dict : Convert a dictionary to a cobra Group object. + + """ + + new_group = OrderedDict() + for key in _REQUIRED_GROUP_ATTRIBUTES: + if key != "members": + if key == "id": + new_group[key] = _fix_type(F_REPLACE[F_GROUP_REV](group.id)) + else: + new_group[key] = _fix_type(getattr(group, key)) + continue + members = [] + for member in group.members: + idRef = member.id + if isinstance(member, Reaction): + idRef = F_REPLACE[F_REACTION_REV](member.id) + elif isinstance(member, Gene): + idRef = F_REPLACE[F_GENE_REV](member.id) + elif isinstance(member, Metabolite): + idRef = F_REPLACE[F_SPECIE_REV](member.id) + elif isinstance(member, Group): + idRef = F_REPLACE[F_GROUP_REV](member.id) + json_member = {"idRef": idRef, "type": type(member).__name__} + members.append(json_member) + new_group["members"] = members + _update_optional( + group, new_group, _OPTIONAL_GROUP_ATTRIBUTES, _ORDERED_OPTIONAL_GROUP_KEYS + ) + return new_group + + +def _group_from_dict( + group: Dict, model: Model, f_replace=F_REPLACE # noqa: W0102 +) -> Group: + """Convert a dictionary to a cobra Group object. + + Parameters + ---------- + group : dict + The dictionary to convert to cobra.Group . + model : cobra.Model + The model to which the group should associate with. + + Returns + ------- + cobra.Group + The converted cobra.Group object. + + See Also + -------- + _group_to_dict : Convert a cobra Group object to a dictionary. + + """ + + if f_replace is None: + f_replace = {} + + new_group = Group(_fix_id_from_dict(group["id"], "Group")) + [ + setattr(new_group, k, _fix_value_from_dict(k, v)) + for k, v in group.items() + if k not in {"id", "members"} + ] + cobra_members = [ + _get_by_id( + _fix_id_from_dict(member["idRef"], member["type"], f_replace), + member["type"], + model, + ) + for member in group["members"] + ] + new_group.add_members(cobra_members) + return new_group + + +def model_to_dict( + model: Model, sort: bool = False, f_replace: dict = F_REPLACE # noqa: W0102 +) -> OrderedDict: """Convert a cobra Model to a dictionary. Parameters @@ -335,6 +584,11 @@ def model_to_dict(model: Model, sort: bool = False) -> OrderedDict: sort : bool, optional Whether to sort the metabolites, reactions, and genes or maintain the order defined in the model (default False). + f_replace : dict of replacement functions for id replacement + Dictionary of replacement functions for gene, specie, and reaction. + By default, the following id changes are performed on import: + clip G_ from genes, clip M_ from species, clip R_ from reactions + If no replacements should be performed, set f_replace={} or None Returns ------- @@ -349,19 +603,29 @@ def model_to_dict(model: Model, sort: bool = False) -> OrderedDict: model_from_dict : Convert a dictionary to a cobra Model. """ + if f_replace is None: + f_replace = {} + obj = OrderedDict() obj["metabolites"] = list(map(_metabolite_to_dict, model.metabolites)) obj["reactions"] = list(map(_reaction_to_dict, model.reactions)) obj["genes"] = list(map(_gene_to_dict, model.genes)) + obj["groups"] = list(map(_group_to_dict, model.groups)) + + # sbml meta info + if hasattr(model, "_sbml"): + obj["sbml_info"] = OrderedDict( + {key: _fix_type(value) for key, value in model._sbml.items()} + ) obj["id"] = model.id _update_optional( model, obj, _OPTIONAL_MODEL_ATTRIBUTES, _ORDERED_OPTIONAL_MODEL_KEYS ) if sort: - get_id = itemgetter("id") - obj["metabolites"].sort(key=get_id) - obj["reactions"].sort(key=get_id) - obj["genes"].sort(key=get_id) + obj["metabolites"].sort(key=lambda x: x["id"]) + obj["reactions"].sort(key=lambda x: x["id"]) + obj["genes"].sort(key=lambda x: x["id"]) + obj["groups"].sort(key=lambda x: x["id"]) return obj @@ -408,11 +672,24 @@ def model_from_dict(obj: Dict) -> Model: rxn for rxn in obj["reactions"] if rxn.get("objective_coefficient", 0) != 0 ] coefficients = { - model.reactions.get_by_id(rxn["id"]): rxn["objective_coefficient"] + model.reactions.get_by_id(F_REPLACE["F_REACTION"](rxn["id"])): rxn[ + "objective_coefficient" + ] for rxn in objective_reactions } + if "groups" in obj: + model.add_groups([_group_from_dict(group, model) for group in obj["groups"]]) set_objective(model, coefficients) - for k, v in obj.items(): - if k in {"id", "name", "notes", "compartments", "annotation"}: - setattr(model, k, v) + + # sbml meta info + if "sbml_info" in obj: + meta = {k: _fix_value_from_dict(k, v) for k, v in obj["sbml_info"].items()} + model._sbml = meta + + [ + setattr(model, k, _fix_value_from_dict(k, v)) + for k, v in obj.items() + if k in {"id", "name", "compartments", "metadata", "notes"} + ] + return model diff --git a/src/cobra/io/json.py b/src/cobra/io/json.py index 83347219b..5a3978fff 100644 --- a/src/cobra/io/json.py +++ b/src/cobra/io/json.py @@ -2,7 +2,12 @@ import json from pathlib import Path -from typing import IO, TYPE_CHECKING, Any, Union +from typing import IO, TYPE_CHECKING, Any, Iterable, TextIO, Union + +import jsonschema +from importlib_resources import files + +from cobra import io as cio from .dict import model_from_dict, model_to_dict @@ -14,6 +19,25 @@ JSON_SPEC = "1" +def _validator_for_json_schema(schema_version): + if schema_version == 1: + schema_filename = "schema_v1.json" + elif schema_version == 2: + schema_filename = "schema_v2.json" + else: + raise ValueError( + f"Only v1 and v2 of JSON schema are available. JSON " + f"schema v{schema_version} is not supported." + ) + with files(cio).joinpath(schema_filename).open("r") as handle: + schema = json.load(handle) + + # TODO: Should the validator be picked by schema? + # Something like validators.validator_for + validator = jsonschema.Draft7Validator(schema) + return validator + + def to_json(model: "Model", sort: bool = False, **kwargs: Any) -> str: """Return the model as a JSON string. @@ -77,7 +101,7 @@ def save_json_model( ---------- model : cobra.Model The cobra model to represent. - filename : str or file-like + filename : str or file-like or Path File path or descriptor that the JSON representation should be written to. sort : bool, optional @@ -127,7 +151,7 @@ def load_json_model(filename: Union[str, Path, IO]) -> "Model": Parameters ---------- - filename : str or file-like + filename : str or file-like or Path File path or descriptor that contains the JSON document describing the cobra model. @@ -146,3 +170,35 @@ def load_json_model(filename: Union[str, Path, IO]) -> "Model": return model_from_dict(json.load(file_handle)) else: return model_from_dict(json.load(filename)) + + +def validate_json_model( + filename: Union[str, Path, bytes, TextIO], json_schema_version: int = 1 +) -> Iterable[Any]: + """ + Validate a model in json format against the schema with given version. + + Parameters + ---------- + filename : str or file-like + File path or descriptor that contains the JSON document describing the + cobra model. + json_schema_version : int {1, 2} + the version of schema to be used for validation. + Currently we have v1 and v2 only and v2 is under development + Returns + ------- + errors : Iterable + The iterable of errors encountered while validating + """ + validator = _validator_for_json_schema(schema_version=json_schema_version) + try: + if isinstance(filename, (str, Path)): + with open(filename, "r") as file_handle: + errors = validator.iter_errors(json.load(file_handle)) + else: + errors = validator.iter_errors(json.load(filename)) + except OSError: + errors = validator.iter_errors(json.loads(filename)) + + return list(errors) diff --git a/src/cobra/io/mat.py b/src/cobra/io/mat.py index 2a67d5ec8..23b71434b 100644 --- a/src/cobra/io/mat.py +++ b/src/cobra/io/mat.py @@ -924,7 +924,7 @@ def from_mat_struct( new_group = Group( id=g_name, name=g_name, members=group_members, kind="partonomy" ) - new_group.annotation["sbo"] = "SBO:0000633" + new_group.annotation["sbo"] = ["SBO:0000633"] new_groups.append(new_group) model.add_groups(new_groups) diff --git a/src/cobra/io/sbml.py b/src/cobra/io/sbml.py index 2447816e8..cc7bacaae 100644 --- a/src/cobra/io/sbml.py +++ b/src/cobra/io/sbml.py @@ -9,6 +9,8 @@ Parsing of fbc models was implemented as efficient as possible, whereas (discouraged) fallback solutions are not optimized for efficiency. +#TODO - fix the following paragraph, which is incorrect. + Load up keyvalue pairs from notes?? Notes are only supported in a minimal way relevant for constraint-based models. I.e., structured information from notes in the form

key: value

@@ -19,10 +21,8 @@ Annotations are read in the Object.annotation fields. Some SBML related issues are still open, please refer to the respective issue: -- update annotation format and support qualifiers (depends on decision - for new annotation format; https://github.com/opencobra/cobrapy/issues/684) - write compartment annotations and notes (depends on updated first-class - compartments; see https://github.com/opencobra/cobrapy/issues/760) + compartments; see https://github.com/opencobra/cobrapy/issues/760interface - support compression on file handles (depends on solution for https://github.com/opencobra/cobrapy/issues/812) """ @@ -32,17 +32,30 @@ import re from ast import And, BoolOp, Module, Name, Or from collections import defaultdict, namedtuple -from copy import deepcopy from io import StringIO from pathlib import Path from sys import platform -from typing import IO, Match, Optional, Pattern, Tuple, Type, Union +from typing import IO, List, Match, Optional, Pattern, Tuple, Type, Union import libsbml import cobra - -from ..core import GPR, Gene, Group, Metabolite, Model, Reaction +from cobra.core.metadata.custom import CustomAnnotation, CustomAnnotationStore + +from ..core import ( + GPR, + Creator, + Gene, + Group, + Metabolite, + Metadata, + Model, + Reaction, + Resource, + StandardizedAnnotation, +) +from ..core.metadata.history import STRTIME_FORMAT +from ..core.metadata.standardized import StandardizedAnnotationStore from ..manipulation.validate import check_metabolite_compartment_formula from ..util.solver import linear_reaction_coefficients, set_objective @@ -584,6 +597,7 @@ def _sbml_to_model( result = doc.convert(conversion_properties) if result != libsbml.LIBSBML_OPERATION_SUCCESS: raise Exception("Conversion of SBML fbc v1 to fbc v2 failed") + # TODO: Convert v2 to v3 if necessary # Model model_id = model.getIdAttribute() @@ -597,7 +611,6 @@ def _sbml_to_model( "model.id": model_id, "level": model.getLevel(), "version": model.getVersion(), - "packages": [], } # History creators = [] @@ -610,21 +623,25 @@ def _sbml_to_model( c: "libsbml.ModelCreator" for c in history.getListCreators(): - creators.append( - { - "familyName": c.getFamilyName() if c.isSetFamilyName() else None, - "givenName": c.getGivenName() if c.isSetGivenName() else None, - "organisation": ( - c.getOrganisation() if c.isSetOrganisation() else None - ), - "email": c.getEmail() if c.isSetEmail() else None, - } - ) + creator_data = { + "organisation": ( + c.getOrganisation() if c.isSetOrganisation() else None + ), + "email": c.getEmail() if c.isSetEmail() else None, + } + if c.isSetName(): + creator_data["name"] = c.getName() + else: + name = c.getGivenName() if c.isSetGivenName() else "" + if c.isSetFamilyName(): + name = f"{name} {c.getFamilyName()}" + creator_data["name"] = name.strip() + creators.append(creator_data) meta["creators"] = creators meta["created"] = created meta["notes"] = _parse_notes_dict(doc) - meta["annotation"] = _parse_annotations(doc) + meta["metadata"] = _parse_annotations(doc) info = f"<{model_id}> SBML L{model.getLevel()}V{model.getVersion()}" packages = {} @@ -638,20 +655,21 @@ def _sbml_to_model( f"SBML package '{key}' not supported by cobrapy, " f"information is not parsed" ) - meta["info"] = info + meta["packages"] = packages + meta["info"] = info + cobra_model._sbml = meta # notes and annotations cobra_model.notes = _parse_notes_dict(model) - cobra_model.annotation = _parse_annotations(model) + cobra_model.metadata = _parse_annotations(model) # Compartments # FIXME: update with new compartments compartments = {} - for ( - compartment - ) in model.getListOfCompartments(): # noqa: E501 type: libsbml.Compartment + compartment: libsbml.Compartment + for compartment in model.getListOfCompartments(): cid = _check_required(compartment, compartment.getIdAttribute(), "id") compartments[cid] = compartment.getName() cobra_model.compartments = compartments @@ -671,12 +689,22 @@ def _sbml_to_model( met = Metabolite(sid) met.name = specie.getName() met.notes = _parse_notes_dict(specie) - met.annotation = _parse_annotations(specie) + met.metadata = _parse_annotations(specie) met.compartment = specie.getCompartment() specie_fbc: "libsbml.FbcSpeciesPlugin" = specie.getPlugin("fbc") if specie_fbc: - met.charge = specie_fbc.getCharge() + if specie_fbc.isSetCharge(): + if specie_fbc.getPackageVersion() >= 3: + met.charge = specie_fbc.getChargeAsDouble() + else: + met.charge = specie_fbc.getCharge() + else: + LOGGER.warning( + "The fbc:charge attribute was not set, setting " + f"charge to 0: {specie_fbc}" + ) + met.charge = 0.0 met.formula = specie_fbc.getChemicalFormula() or None else: if specie.isSetCharge(): @@ -685,17 +713,16 @@ def _sbml_to_model( f"discouraged, use fbc:charge instead: {specie}" ) met.charge = specie.getCharge() - else: - if "CHARGE" in met.notes: - LOGGER.warning( - f"Use of CHARGE in the notes element is " - f"discouraged, use fbc:charge instead: {specie}" - ) - try: - met.charge = int(met.notes["CHARGE"]) - except ValueError: - # handle nan, na, NA, ... - pass + elif "CHARGE" in met.notes: + LOGGER.warning( + f"Use of CHARGE in the notes element is " + f"discouraged, use fbc:charge instead: {specie}" + ) + try: + met.charge = int(met.notes["CHARGE"]) + except ValueError: + # handle nan, na, NA, ... + pass if "FORMULA" in met.notes: LOGGER.warning( @@ -718,7 +745,7 @@ def _sbml_to_model( ex_rid = f"EX_{met.id}" ex_reaction = Reaction(ex_rid) ex_reaction.name = ex_rid - ex_reaction.annotation = {"sbo": SBO_EXCHANGE_REACTION} + ex_reaction.metadata.sbo = [SBO_EXCHANGE_REACTION] ex_reaction.lower_bound = config.lower_bound ex_reaction.upper_bound = config.upper_bound LOGGER.warning( @@ -732,9 +759,8 @@ def _sbml_to_model( # Genes if model_fbc: - for ( - gp - ) in model_fbc.getListOfGeneProducts(): # noqa: E501 type: libsbml.GeneProduct + gp: "libsbml.GeneProduct" + for gp in model_fbc.getListOfGeneProducts(): gid = _check_required(gp, gp.getIdAttribute(), "id") if f_replace and F_GENE in f_replace: gid = f_replace[F_GENE](gid) @@ -742,23 +768,16 @@ def _sbml_to_model( cobra_gene.name = gp.getName() if cobra_gene.name is None: cobra_gene.name = gid - cobra_gene.annotation = _parse_annotations(gp) + cobra_gene.metadata = _parse_annotations(gp) cobra_gene.notes = _parse_notes_dict(gp) cobra_model.genes.append(cobra_gene) else: - for ( - cobra_reaction - ) in model.getListOfReactions(): # noqa: E501 type: libsbml.Reaction + cobra_reaction: "libsbml.Reaction" + for cobra_reaction in model.getListOfReactions(): # fallback to notes information notes = _parse_notes_dict(cobra_reaction) - if "GENE ASSOCIATION" in notes: - gpr = notes["GENE ASSOCIATION"] - elif "GENE_ASSOCIATION" in notes: - gpr = notes["GENE_ASSOCIATION"] - else: - gpr = "" - + gpr = notes.get("GENE ASSOCIATION", "") or notes.get("GENE_ASSOCIATION", "") if len(gpr) > 0: gpr = gpr.replace("(", ";") gpr = gpr.replace(")", ";") @@ -822,7 +841,7 @@ def process_association(ass: "libsbml.FbcAssociation") -> Union[BoolOp, Name]: rid = f_replace[F_REACTION](rid) cobra_reaction = Reaction(rid) cobra_reaction.name = reaction.getName().strip() - cobra_reaction.annotation = _parse_annotations(reaction) + cobra_reaction.metadata = _parse_annotations(reaction) cobra_reaction.notes = _parse_notes_dict(reaction) # set bounds @@ -853,14 +872,10 @@ def process_association(ass: "libsbml.FbcAssociation") -> Union[BoolOp, Name]: elif reaction.isSetKineticLaw(): # some legacy models encode bounds in kinetic laws klaw: "libsbml.KineticLaw" = reaction.getKineticLaw() - p_lb = klaw.getParameter( - "LOWER_BOUND" - ) # noqa: E501 type: libsbml.LocalParameter + p_lb: "libsbml.LocalParameter" = klaw.getParameter("LOWER_BOUND") if p_lb: cobra_reaction.lower_bound = p_lb.getValue() - p_ub = klaw.getParameter( - "UPPER_BOUND" - ) # noqa: E501 type: libsbml.LocalParameter + p_ub: "libsbml.LocalParameter" = klaw.getParameter("UPPER_BOUND") if p_ub: cobra_reaction.upper_bound = p_ub.getValue() @@ -894,9 +909,8 @@ def process_association(ass: "libsbml.FbcAssociation") -> Union[BoolOp, Name]: # parse equation stoichiometry = defaultdict(lambda: 0) - for ( - sref - ) in reaction.getListOfReactants(): # noqa: E501 type: libsbml.SpeciesReference + sref: "libsbml.SpeciesReference" + for sref in reaction.getListOfReactants(): sid = _check_required(sref, sref.getSpecies(), "species") if f_replace and F_SPECIE in f_replace: @@ -905,9 +919,7 @@ def process_association(ass: "libsbml.FbcAssociation") -> Union[BoolOp, Name]: _check_required(sref, sref.getStoichiometry(), "stoichiometry") ) - for ( - sref - ) in reaction.getListOfProducts(): # noqa: E501 type: libsbml.SpeciesReference + for sref in reaction.getListOfProducts(): sid = _check_required(sref, sref.getSpecies(), "species") if f_replace and F_SPECIE in f_replace: @@ -926,24 +938,15 @@ def process_association(ass: "libsbml.FbcAssociation") -> Union[BoolOp, Name]: # GPR if r_fbc: gpr = None - gpa = ( - r_fbc.getGeneProductAssociation() - ) # noqa: E501 type: libsbml.GeneProductAssociation + gpa: libsbml.GeneProductAssociation = r_fbc.getGeneProductAssociation() if gpa is not None: - association = ( - gpa.getAssociation() - ) # noqa: E501 type: libsbml.FbcAssociation + association: libsbml.FbcAssociation = gpa.getAssociation() gpr = Module(process_association(association)) cobra_reaction.gpr = GPR(gpr_from=gpr) else: # fallback to notes information notes = cobra_reaction.notes - if "GENE ASSOCIATION" in notes: - gpr = notes["GENE ASSOCIATION"] - elif "GENE_ASSOCIATION" in notes: - gpr = notes["GENE_ASSOCIATION"] - else: - gpr = "" + gpr = notes.get("GENE ASSOCIATION", "") or notes.get("GENE_ASSOCIATION", "") if len(gpr) > 0: LOGGER.warning( @@ -961,9 +964,7 @@ def process_association(ass: "libsbml.FbcAssociation") -> Union[BoolOp, Name]: obj_direction = "max" coefficients = {} if model_fbc: - obj_list = ( - model_fbc.getListOfObjectives() - ) # noqa: E501 type: libsbml.ListOfObjectives + obj_list: "libsbml.ListOfObjectives" = model_fbc.getListOfObjectives() if obj_list is None: LOGGER.warning("listOfObjectives element not found") elif obj_list.size() == 0: @@ -975,11 +976,8 @@ def process_association(ass: "libsbml.FbcAssociation") -> Union[BoolOp, Name]: obj: "libsbml.Objective" = model_fbc.getObjective(obj_id) obj_direction = LONG_SHORT_DIRECTION[obj.getType()] - for ( - flux_obj - ) in ( - obj.getListOfFluxObjectives() - ): # noqa: E501 type: libsbml.FluxObjective + flux_obj: "libsbml.FluxObjective" + for flux_obj in obj.getListOfFluxObjectives(): rid = flux_obj.getReaction() if f_replace and F_REACTION in f_replace: rid = f_replace[F_REACTION](rid) @@ -1055,7 +1053,7 @@ def process_association(ass: "libsbml.FbcAssociation") -> Union[BoolOp, Name]: cobra_group.name = group.getName() if group.isSetKind(): cobra_group.kind = group.getKindAsString() - cobra_group.annotation = _parse_annotations(group) + cobra_group.metadata = _parse_annotations(group) cobra_group.notes = _parse_notes_dict(group) cobra_members = [] @@ -1112,7 +1110,7 @@ def process_association(ass: "libsbml.FbcAssociation") -> Union[BoolOp, Name]: if f_replace and F_GROUP in f_replace: gid = f_replace[F_GROUP](gid) cobra_group = Group(gid, name=gid, kind="partonomy") - cobra_group.annotation["sbo"] = "SBO:0000633" + cobra_group.metadata.sbo = ["SBO:0000633"] cobra_group.add_members(cobra_members) groups.append(cobra_group) @@ -1141,7 +1139,7 @@ def write_sbml_model( ) -> None: """Write cobra model to filename. - The created model is SBML level 3 version 1 (L1V3) with + The created model is SBML level 3 version 2 (L2V3) with fbc package v2 (fbc-v2). If the given filename ends with the suffix ".gz" (for example, @@ -1202,8 +1200,8 @@ def _model_to_sbml( if f_replace is None: f_replace = {} - sbml_ns = libsbml.SBMLNamespaces(3, 1) # SBML L3V1 - sbml_ns.addPackageNamespace("fbc", 2) # fbc-v2 + sbml_ns = libsbml.SBMLNamespaces(3, 2) # SBML L3V1 + sbml_ns.addPackageNamespace("fbc", 3) # fbc-v2 doc: "libsbml.SBMLDocument" = libsbml.SBMLDocument(sbml_ns) doc.setPackageRequired("fbc", False) @@ -1221,16 +1219,17 @@ def _model_to_sbml( if cobra_model.name is not None: model.setName(cobra_model.name) - # for parsing annotation corresponding to the model - _sbase_annotations(model, cobra_model.annotation) + # for parsing annotation corresponding to the model, including model history + _sbase_annotations(model, cobra_model.metadata) # for parsing notes corresponding to the model _sbase_notes_dict(model, cobra_model.notes) # Meta information (ModelHistory) related to SBMLDocument - if hasattr(cobra_model, "_sbml"): - meta = cobra_model._sbml - if "annotation" in meta: - _sbase_annotations(doc, meta["annotation"]) + meta = getattr(cobra_model, "_sbml", None) + if meta: + if "metadata" in meta: + _sbase_annotations(doc, meta["metadata"]) + if "notes" in meta: _sbase_notes_dict(doc, meta["notes"]) @@ -1249,10 +1248,8 @@ def _model_to_sbml( "creators" ]: # noqa: E501 type: libsbml.ModelCreator creator = libsbml.ModelCreator() - if cobra_creator.get("familyName", None): - creator.setFamilyName(cobra_creator["familyName"]) - if cobra_creator.get("givenName", None): - creator.setGivenName(cobra_creator["givenName"]) + if cobra_creator.get("name", None): + creator.setName(cobra_creator["name"]) if cobra_creator.get("organisation", None): creator.setOrganisation(cobra_creator["organisation"]) if cobra_creator.get("email", None): @@ -1320,11 +1317,11 @@ def _model_to_sbml( specie.setCompartment(metabolite.compartment) s_fbc: "libsbml.FbcSpeciesPlugin" = specie.getPlugin("fbc") if metabolite.charge is not None: - s_fbc.setCharge(metabolite.charge) + s_fbc.setCharge(float(metabolite.charge)) if metabolite.formula is not None: s_fbc.setChemicalFormula(metabolite.formula) - _sbase_annotations(specie, metabolite.annotation) + _sbase_annotations(specie, metabolite.metadata) _sbase_notes_dict(specie, metabolite.notes) # Genes @@ -1340,7 +1337,7 @@ def _model_to_sbml( gp.setName(gname) gp.setLabel(gid) - _sbase_annotations(gp, cobra_gene.annotation) + _sbase_annotations(gp, cobra_gene.metadata) _sbase_notes_dict(gp, cobra_gene.notes) # Objective @@ -1360,7 +1357,7 @@ def _model_to_sbml( reaction.setName(cobra_reaction.name) reaction.setFast(False) reaction.setReversible((cobra_reaction.lower_bound < 0)) - _sbase_annotations(reaction, cobra_reaction.annotation) + _sbase_annotations(reaction, cobra_reaction.metadata) _sbase_notes_dict(reaction, cobra_reaction.notes) # stoichiometry @@ -1369,16 +1366,12 @@ def _model_to_sbml( if f_replace and F_SPECIE_REV in f_replace: sid = f_replace[F_SPECIE_REV](sid) if stoichiometry < 0: - sref = ( - reaction.createReactant() - ) # noqa: E501 type: libsbml.SpeciesReference + sref: libsbml.SpeciesReference = reaction.createReactant() sref.setSpecies(sid) sref.setStoichiometry(-stoichiometry) sref.setConstant(True) else: - sref = ( - reaction.createProduct() - ) # noqa: E501 type: libsbml.SpeciesReference + sref: libsbml.SpeciesReference = reaction.createProduct() sref.setSpecies(sid) sref.setStoichiometry(stoichiometry) sref.setConstant(True) @@ -1416,18 +1409,14 @@ def _model_to_sbml( else: gpr_new = gpr.to_string() - gpa = ( - r_fbc.createGeneProductAssociation() - ) # noqa: E501 type: libsbml.GeneProductAssociation + gpa: libsbml.GeneProductAssociation = r_fbc.createGeneProductAssociation() # uses ids to identify GeneProducts (True), # does not create GeneProducts (False) _check(gpa.setAssociation(gpr_new, True, False), "set gpr: " + gpr_new) # objective coefficients if reaction_coefficients.get(cobra_reaction, 0) != 0: - flux_obj = ( - objective.createFluxObjective() - ) # noqa: E501 type: libsbml.FluxObjective + flux_obj: libsbml.FluxObjective = objective.createFluxObjective() flux_obj.setReaction(rid) flux_obj.setCoefficient(cobra_reaction.objective_coefficient) @@ -1437,9 +1426,7 @@ def _model_to_sbml( "http://www.sbml.org/sbml/level3/version1/groups/version1", "groups", True ) doc.setPackageRequired("groups", False) - model_group = model.getPlugin( - "groups" - ) # noqa: E501 type: libsbml.GroupsModelPlugin + model_group: libsbml.GroupsModelPlugin = model.getPlugin("groups") for cobra_group in cobra_model.groups: group: "libsbml.Group" = model_group.createGroup() if f_replace and F_GROUP_REV in f_replace: @@ -1451,7 +1438,7 @@ def _model_to_sbml( group.setKind(cobra_group.kind) _sbase_notes_dict(group, cobra_group.notes) - _sbase_annotations(group, cobra_group.annotation) + _sbase_annotations(group, cobra_group.metadata) for cobra_member in cobra_group.members: member: "libsbml.Member" = group.createMember() @@ -1459,15 +1446,12 @@ def _model_to_sbml( m_type = str(type(cobra_member)) # id replacements - if "Reaction" in m_type: - if f_replace and F_REACTION_REV in f_replace: - mid = f_replace[F_REACTION_REV](mid) - if "Metabolite" in m_type: - if f_replace and F_SPECIE_REV in f_replace: - mid = f_replace[F_SPECIE_REV](mid) - if "Gene" in m_type: - if f_replace and F_GENE_REV in f_replace: - mid = f_replace[F_GENE_REV](mid) + if "Reaction" in m_type and f_replace and F_REACTION_REV in f_replace: + mid = f_replace[F_REACTION_REV](mid) + if "Metabolite" in m_type and f_replace and F_SPECIE_REV in f_replace: + mid = f_replace[F_SPECIE_REV](mid) + if "Gene" in m_type and f_replace and F_GENE_REV in f_replace: + mid = f_replace[F_GENE_REV](mid) member.setIdRef(mid) if cobra_member.name and len(cobra_member.name) > 0: @@ -1702,6 +1686,7 @@ def _sbase_notes_dict(sbase: libsbml.SBase, notes: dict) -> None: # ----------------------------------------------------------------------------- # Annotations # ----------------------------------------------------------------------------- +# TODO: FIX """ cobra annotations will be dictionaries of the form: object.annotation = { @@ -1720,24 +1705,21 @@ def _sbase_notes_dict(sbase: libsbml.SBase, notes: dict) -> None: In the current stage the new annotation format is not completely supported yet. """ -URL_IDENTIFIERS_PATTERN = re.compile(r"^https?://identifiers.org/(.+?)[:/](.+)") - -URL_IDENTIFIERS_PREFIX = "https://identifiers.org" -QUALIFIER_TYPES = { - "is": libsbml.BQB_IS, - "hasPart": libsbml.BQB_HAS_PART, - "isPartOf": libsbml.BQB_IS_PART_OF, - "isVersionOf": libsbml.BQB_IS_VERSION_OF, - "hasVersion": libsbml.BQB_HAS_VERSION, - "isHomologTo": libsbml.BQB_IS_HOMOLOG_TO, - "isDescribedBy": libsbml.BQB_IS_DESCRIBED_BY, - "isEncodedBy": libsbml.BQB_IS_ENCODED_BY, - "encodes": libsbml.BQB_ENCODES, - "occursIn": libsbml.BQB_OCCURS_IN, - "hasProperty": libsbml.BQB_HAS_PROPERTY, - "isPropertyOf": libsbml.BQB_IS_PROPERTY_OF, - "hasTaxon": libsbml.BQB_HAS_TAXON, - "unknown": libsbml.BQB_UNKNOWN, +QUALIFIER_TYPES_COBRA_SBML_DICT = { + "bqb_is": libsbml.BQB_IS, + "bqb_hasPart": libsbml.BQB_HAS_PART, + "bqb_isPartOf": libsbml.BQB_IS_PART_OF, + "bqb_isVersionOf": libsbml.BQB_IS_VERSION_OF, + "bqb_hasVersion": libsbml.BQB_HAS_VERSION, + "bqb_isHomologTo": libsbml.BQB_IS_HOMOLOG_TO, + "bqb_isDescribedBy": libsbml.BQB_IS_DESCRIBED_BY, + "bqb_isEncodedBy": libsbml.BQB_IS_ENCODED_BY, + "bqb_encodes": libsbml.BQB_ENCODES, + "bqb_occursIn": libsbml.BQB_OCCURS_IN, + "bqb_hasProperty": libsbml.BQB_HAS_PROPERTY, + "bqb_isPropertyOf": libsbml.BQB_IS_PROPERTY_OF, + "bqb_hasTaxon": libsbml.BQB_HAS_TAXON, + "bqb_unknown": libsbml.BQB_UNKNOWN, "bqm_is": libsbml.BQM_IS, "bqm_isDescribedBy": libsbml.BQM_IS_DESCRIBED_BY, "bqm_isDerivedFrom": libsbml.BQM_IS_DERIVED_FROM, @@ -1745,12 +1727,33 @@ def _sbase_notes_dict(sbase: libsbml.SBase, notes: dict) -> None: "bqm_hasInstance": libsbml.BQM_HAS_INSTANCE, "bqm_unknown": libsbml.BQM_UNKNOWN, } +BIOLOGY_QUALIFIER_TYPES_TO_COBRA_DICT = { + value: key + for key, value in QUALIFIER_TYPES_COBRA_SBML_DICT.items() + if re.match("bqb", key) +} +MODEL_QUALIFIER_TYPES_TO_COBRA_DICT = { + value: key + for key, value in QUALIFIER_TYPES_COBRA_SBML_DICT.items() + if re.match("bqm", key) +} -def _parse_annotations(sbase: libsbml.SBase) -> dict: +def _parse_annotations(sbase: libsbml.SBase) -> Metadata: """Parse cobra annotations from a given SBase object. - Annotations are dictionaries with the providers as keys. + The annotation format has been changed. We no longer have + simple dictionaries for storing annotation data. Dedicated + classes for storing CVTerm data, History data and key-value + pair data corresponding to an SBase object have been made. + The metadata classes inside cobra.core directory contains + of them. All the existing issues in old annotation format have + been solved. The new format annotation is completely backward + compatible. It can read models with old annotation format, + can convert old format annotation to new format annotation, + and writes annotation in new format only (for JSON and other + formats). The JSON schema v2 specifies the new format annotation + whereas JSON schema v1 have annotation data defined in old format. Parameters ---------- @@ -1759,155 +1762,308 @@ def _parse_annotations(sbase: libsbml.SBase) -> dict: Returns ------- - dict (annotation dictionary) + Metadata + a metadata object storing COBRA annotation """ - # FIXME: annotation format must be updated (this is a big collection of - # fixes) - see: https://github.com/opencobra/cobrapy/issues/684) - annotation = {} + annotations = Metadata() # SBO term if sbase.isSetSBOTerm(): - # FIXME: correct handling of annotations - annotation["sbo"] = sbase.getSBOTermID() + annotations.sbo = sbase.getSBOTermID() + + def _kvpair_to_cobra(_kvpair: "libsbml.KeyValuePair") -> Optional[CustomAnnotation]: + """Parse the libsbml.KeyValuePair object to a cobra CustomAnnotation. + + Parameters + ---------- + _kvpair : libsbml.KeyValuePair + The libsbml.KeyValuePair object from which data is to be parsed. + + Returns + ------- + CustomAnnotation or None + The parsed data of the given libsbml.KeyValuePair object as + CustomAnnotation. If no key is set in the key-value pair, this function will + return None. + """ + if not _kvpair.isSetKey(): + return None + ca = CustomAnnotation( + key=_kvpair.getKey(), + value=(_kvpair.getValue() if _kvpair.isSetValue() else None), + uri=(_kvpair.getUri() if _kvpair.isSetUri() else None), + ) + if _kvpair.isSetName(): + ca.name = _kvpair.getName() + if _kvpair.isSetId(): + ca.id = _kvpair.getId() + + ca.metadata = _parse_annotations(_kvpair) + return ca + + # Custom key-value pair annotations. + if not isinstance(sbase, libsbml.SBMLDocument): + sbase_fbc: "libsbml.FbcSBasePlugin" = sbase.getPlugin("fbc") + if sbase_fbc: + # We should probably do a FBC version check. But right now the version seems + # stuck at 2, even though it is defined as 3 in a SBML file. + if sbase_fbc.getNumKeyValuePairs() > 0: + for kvp in sbase_fbc.getListOfKeyValuePairs(): + if (ca := _kvpair_to_cobra(kvp)) is not None: + annotations.custom.add(ca) + + def _cvterm_to_cobra(_cvterm: "libsbml.CVTerm") -> Optional[StandardizedAnnotation]: + """Parse the libsbml.CVTerm object to cobra StandardizedAnnotation. + + Parameters + ---------- + _cvterm : libsbml.CVTerm + The libsbml.CVTerm object from which data is to be parsed. + + Returns + ------- + StandardizedAnnotation or None + The parsed data of the given libsbml.CVTerm object as + StandardizedAnnotation. If the qualifier is unknown, this function will + return None. + """ + qualifier_type = _cvterm.getQualifierType() + if qualifier_type == libsbml.BIOLOGICAL_QUALIFIER: + qualifier = BIOLOGY_QUALIFIER_TYPES_TO_COBRA_DICT[ + _cvterm.getBiologicalQualifierType() + ] + elif qualifier_type == libsbml.MODEL_QUALIFIER: + qualifier = MODEL_QUALIFIER_TYPES_TO_COBRA_DICT[ + _cvterm.getModelQualifierType() + ] + else: + LOGGER.warning(f"The cvterm {_cvterm} has an unkown qualifier. Ignoring it") + return None + resources = [ + # Prefer loading models over having strictly correct annotations + Resource(_cvterm.getResourceURI(k), strict=False) + for k in range(_cvterm.getNumResources()) + ] + + nested_cv_terms = [ + _cvterm.getNestedCVTerm(index) + for index in range(_cvterm.getNumNestedCVTerms()) + ] + # This kludge is necessary since _cvterm.getListNestedCVTerms() doesn't give a + # python list, but a Swig List_t * and then SwigPyObject is not iterable + nested_data = [ + cobra_cvterm + for _nested_cvterm in nested_cv_terms + if _nested_cvterm is not None + and (cobra_cvterm := _cvterm_to_cobra(_nested_cvterm)) is not None + ] + return StandardizedAnnotation( + resources=resources, qualifier=qualifier, annotations=nested_data + ) # RDF annotation cvterms = sbase.getCVTerms() - if cvterms is None: - return annotation + if cvterms is not None: + annotations.add_standardized( + [ + cobra_cvterm + for cvterm in cvterms + if cvterm is not None + and (cobra_cvterm := _cvterm_to_cobra(cvterm)) is not None + ] + ) - cvterm: "libsbml.CVTerm" - for cvterm in cvterms: - for k in range(cvterm.getNumResources()): - # FIXME: read and store the qualifier + # history of the component + # TODO: Should we maybe keep track of the creators and reference the same object + # when there is a match? This would reduce the number of objects created and + # facilitate fixing a mistake. + if sbase.isSetModelHistory(): + model_history: "libsbml.ModelHistory" = sbase.getModelHistory() + annotations.history.creators = [ + ( + Creator( + name=creator.getName() or None, + email=creator.getEmail() or None, + organisation=creator.getOrganisation() or None, + ) + if creator.isSetName() + else Creator( + given_name=creator.getGivenName() or None, + family_name=creator.getFamilyName() or None, + email=creator.getEmail() or None, + organisation=creator.getOrganisation() or None, + ) + ) + for creator in model_history.getListCreators() + ] - uri = cvterm.getResourceURI(k) - data = _parse_annotation_info(uri) - if data is None: - continue - else: - provider, identifier = data - - if provider in annotation: - if isinstance(annotation[provider], str): - annotation[provider] = [annotation[provider]] - # FIXME: use a list - if identifier not in annotation[provider]: - annotation[provider].append(identifier) - else: - # FIXME: always in list - annotation[provider] = identifier + if model_history.isSetCreatedDate(): + date: libsbml.Date = model_history.getCreatedDate() + annotations.history.created_date = date.getDateAsString() - return annotation + annotations.history.modified_dates = [ + _date.getDateAsString() for _date in model_history.getListModifiedDates() + ] + return annotations -def _parse_annotation_info(uri: str) -> Union[None, Tuple[str, str]]: - """Parse provider and term from given identifiers annotation uri. + +def _add_custom_annotations_to_sbase_fbc( + sbase_fbc: "libsbml.FbcSBasePlugin", + custom_ann: CustomAnnotationStore, +) -> None: + """Convert cobra CustomAnnotations to libsbml.KeyValuePair and add to SBase object. Parameters ---------- - uri : str - uri (identifiers.org url) + sbase_fbc: libsbml.FbcSBasePlugin + custom_ann: CustomAnnotationStore + cobra CustomAnnotationStore object + """ + for ca in custom_ann.values(): + kvp: "libsbml.KeyValuePair" = sbase_fbc.createKeyValuePair() + kvp.setKey(ca.key) + if ca.value is not None: + kvp.setValue(ca.value) + if ca.uri is not None: + kvp.setUri(ca.uri) + if ca.id is not None: + kvp.setId(ca.id) + if ca.name is not None: + kvp.setName(ca.name) + _sbase_annotations(kvp, ca.metadata) + # FIX: This is currently not written to the file, since libsbml has not + # implemented that yet. + + +def _cvterms_to_sbml(cvterms: StandardizedAnnotationStore) -> List["libsbml.CVTerm"]: + """Convert cobra StandardizedAnnotationStore to libsbml.CVTerm list. + + Parameters + ---------- + cvterms: StandardizedAnnotationStore + cobra StandardizedAnnotationStore object Returns ------- - (provider, identifier) if resolvable, None otherwise + list + List of libsbml.CVTerm """ - match = URL_IDENTIFIERS_PATTERN.match(uri) - if match: - provider, identifier = match.group(1), match.group(2) - if provider.isupper(): - identifier = f"{provider}:{identifier}" - provider = provider.lower() - else: - LOGGER.warning( - f"{uri} does not conform to " - f"'http(s)://identifiers.org/collection/id' or" - f"'http(s)://identifiers.org/COLLECTION:id" - ) - return None + cv_list = [] + for cvterm in cvterms: + qualifier = cvterm.qualifier + if qualifier.value.startswith("bqb"): + qualifier_type = libsbml.BIOLOGICAL_QUALIFIER + elif qualifier.value.startswith("bqm"): + qualifier_type = libsbml.MODEL_QUALIFIER + else: + raise CobraSBMLError(f"Unsupported qualifier: {qualifier}") + + cv: "libsbml.CVTerm" = libsbml.CVTerm() + cv.setQualifierType(qualifier_type) + if qualifier_type == libsbml.BIOLOGICAL_QUALIFIER: + cv.setBiologicalQualifierType( + QUALIFIER_TYPES_COBRA_SBML_DICT[qualifier.value] + ) + elif qualifier_type == libsbml.MODEL_QUALIFIER: + cv.setModelQualifierType(QUALIFIER_TYPES_COBRA_SBML_DICT[qualifier.value]) + else: + raise CobraSBMLError(f"Unsupported qualifier: {qualifier}") + for uri in sorted(x.uri for x in cvterm.resources): + cv.addResource(uri) + + for _cv in _cvterms_to_sbml(cvterm.annotations): + _check(cv.addNestedCVTerm(_cv), f"Adding nested cvterm: {_cv}") + + cv_list.append(cv) - return provider, identifier + return cv_list -def _sbase_annotations(sbase: libsbml.SBase, annotation: dict) -> None: +def _sbase_annotations(sbase: libsbml.SBase, annotations: Metadata) -> None: """Set SBase annotations based on cobra annotations. Parameters ---------- sbase : libsbml.SBase SBML object to annotate - annotation : dict, cobra annotation structure + annotations : dict, cobra annotation structure cobra object with annotation information Raises ------ CobraSBMLError for unsupported qualifier """ - # FIXME: annotation format must be updated - # (https://github.com/opencobra/cobrapy/issues/684) - if not annotation or len(annotation) == 0: - return - - # standardize annotations - annotation_data = deepcopy(annotation) - for key, value in annotation_data.items(): - # handling of non-string annotations (e.g. integers) - if isinstance(value, (float, int)): - value = str(value) - if isinstance(value, str): - annotation_data[key] = [("is", value)] + if not isinstance(annotations, Metadata): + raise TypeError( + f"The annotations object must be of type 'Metadata': {annotations}" + ) - for _key, value in annotation_data.items(): - for idx, item in enumerate(value): - if isinstance(item, str): - value[idx] = ("is", item) + if (sbo_term := getattr(annotations, "sbo", None)) is not None and sbo_term != "": + if isinstance(sbo_term, list): + sbo_term = sbo_term[0] + _check(sbase.setSBOTerm(sbo_term), f"Setting SBOTerm: {sbo_term}") # set metaId + # TODO: Set Id + MetaID when none was set (KeyValuePair) meta_id = f"meta_{sbase.getId()}" sbase.setMetaId(meta_id) - # rdf_items = [] - for provider, data in annotation_data.items(): - # set SBOTerm - if provider in ["SBO", "sbo"]: - if provider == "SBO": - LOGGER.warning( - "'SBO' provider is deprecated, use 'sbo' provider instead" - ) - sbo_term = data[0][1] - _check(sbase.setSBOTerm(sbo_term), f"Setting SBOTerm: {sbo_term}") - - # FIXME: sbo should also be written as CVTerm - continue - - for item in data: - qualifier_str, entity = item[0], item[1] - qualifier = QUALIFIER_TYPES.get(qualifier_str, None) - if qualifier is None: - qualifier = libsbml.BQB_IS - LOGGER.error( - f"Qualifier type is not supported on annotation: '{qualifier_str}'" - ) + # Custom key-value pair annotations. + if annotations.custom: + if not isinstance(sbase, libsbml.SBMLDocument): + sbase_fbc: "libsbml.FbcSBasePlugin" = sbase.getPlugin("fbc") + if sbase_fbc: + _add_custom_annotations_to_sbase_fbc(sbase_fbc, annotations.custom) + + # set standardized + # Question for @matthiaskoenig - should I be using createCVTerms? + for cv in _cvterms_to_sbml(annotations.standardized): + _check(sbase.addCVTerm(cv, newBag=True), f"Setting cvterm: {cv}") + + # set history + if not annotations.history.is_empty(): + comp_history = libsbml.ModelHistory() + + for creator in annotations.history.creators: + comp_creator = libsbml.ModelCreator() + if creator.name: + comp_creator.setName(creator.name) + if creator.email: + comp_creator.setEmail(creator.email) + if creator.organisation: + comp_creator.setOrganisation(creator.organisation) + _check( + comp_history.addCreator(comp_creator), + f"adding creator to {sbase.getId}.", + ) - qualifier_type = libsbml.BIOLOGICAL_QUALIFIER - if qualifier_str.startswith("bqm_"): - qualifier_type = libsbml.MODEL_QUALIFIER - - cv: "libsbml.CVTerm" = libsbml.CVTerm() - cv.setQualifierType(qualifier_type) - if qualifier_type == libsbml.BIOLOGICAL_QUALIFIER: - cv.setBiologicalQualifierType(qualifier) - elif qualifier_type == libsbml.MODEL_QUALIFIER: - cv.setModelQualifierType(qualifier) - else: - raise CobraSBMLError(f"Unsupported qualifier: {qualifier}") - resource = f"{URL_IDENTIFIERS_PREFIX}/{provider}/{entity}" - cv.addResource(resource) + if annotations.history.created_date: + date = libsbml.Date( + annotations.history.created_date.strftime(STRTIME_FORMAT) + ) _check( - sbase.addCVTerm(cv), - f"Setting cvterm: {cv}, resource: {resource}", + comp_history.setCreatedDate(date), f"set creation date for {sbase.id}" ) + elif isinstance(sbase, libsbml.SBMLDocument): + time = datetime.datetime.now() + timestr = time.strftime(STRTIME_FORMAT) + date = libsbml.Date(timestr) + _check(comp_history.setCreatedDate(date), "set creation date for document") + + for modified_date in annotations.history.modified_dates: + date = libsbml.Date(modified_date.strftime(STRTIME_FORMAT)) + _check( + comp_history.addModifiedDate(date), + f"add modification date for {sbase.id}", + ) + + # finally add the compo_history + _check( + sbase.setModelHistory(comp_history), + f"Setting ModelHistory: {comp_history}", + ) # ----------------------------------------------------------------------------- @@ -1954,17 +2110,30 @@ def validate_sbml_model( from the libsbml validator. COBRA_* types are from the cobrapy SBML parser. """ - keys = ( - "SBML_FATAL", - "SBML_ERROR", - "SBML_SCHEMA_ERROR", - "SBML_WARNING", - "COBRA_FATAL", - "COBRA_ERROR", - "COBRA_WARNING", - "COBRA_CHECK", - ) - errors = {key: [] for key in keys} + cobra_sbml_error_dict = { + "SBML_FATAL": libsbml.LIBSBML_SEV_FATAL, + "SBML_ERROR": libsbml.LIBSBML_SEV_ERROR, + "SBML_SCHEMA_ERROR": libsbml.LIBSBML_SEV_SCHEMA_ERROR, + "SBML_WARNING": libsbml.LIBSBML_SEV_WARNING, + "COBRA_FATAL": None, + "COBRA_ERROR": None, + "COBRA_WARNING": None, + "COBRA_CHECK": None, + } + sbml_severity_dict = { + value: key for key, value in cobra_sbml_error_dict.items() if value + } + errors = {key: [] for key in cobra_sbml_error_dict.keys()} + sbml_log_dict = { + "SBML_FATAL": "SBML errors", + "SBML_ERROR": "SBML errors", + "SBML_SCHEMA_ERROR": "SBML errors", + "SBML_WARNING": "SBML warnings", + "COBRA_FATAL": "COBRA errors", + "COBRA_ERROR": "COBRA errors", + "COBRA_WARNING": "COBRA warnings", + "COBRA_CHECK": "COBRA warnings", + } # [1] libsbml validation doc: "libsbml.SBMLDocument" = _get_doc_from_filename(filename) @@ -1986,14 +2155,7 @@ def validate_sbml_model( e: "libsbml.SBMLError" = doc.getError(k) msg = _error_string(e, k=k) sev = e.getSeverity() - if sev == libsbml.LIBSBML_SEV_FATAL: - errors["SBML_FATAL"].append(msg) - elif sev == libsbml.LIBSBML_SEV_ERROR: - errors["SBML_ERROR"].append(msg) - elif sev == libsbml.LIBSBML_SEV_SCHEMA_ERROR: - errors["SBML_SCHEMA_ERROR"].append(msg) - elif sev == libsbml.LIBSBML_SEV_WARNING: - errors["SBML_WARNING"].append(msg) + errors[sbml_severity_dict[sev]].append(msg) # [2] cobrapy validation (check that SBML can be read into model) # all warnings generated while loading will be logged as errors @@ -2010,10 +2172,10 @@ def validate_sbml_model( model = _sbml_to_model(doc, **kwargs) except CobraSBMLError as e: errors["COBRA_ERROR"].append(str(e)) - return None, errors + model = None # If we return, we won't get to the errors["COBRA_ERROR"] except Exception as e: errors["COBRA_FATAL"].append(str(e)) - return None, errors + model = None cobra_errors = log_stream.getvalue().split("\n") for cobra_error in cobra_errors: @@ -2034,21 +2196,11 @@ def validate_sbml_model( if check_model: errors["COBRA_CHECK"].extend(check_metabolite_compartment_formula(model)) - for key in ["SBML_FATAL", "SBML_ERROR", "SBML_SCHEMA_ERROR"]: - if len(errors[key]) > 0: - LOGGER.error("SBML errors in validation, check error log for details.") - break - for key in ["SBML_WARNING"]: + for key in sbml_log_dict.keys(): if len(errors[key]) > 0: - LOGGER.error("SBML warnings in validation, check error log for details.") - break - for key in ["COBRA_FATAL", "COBRA_ERROR"]: - if len(errors[key]) > 0: - LOGGER.error("COBRA errors in validation, check error log for details.") - break - for key in ["COBRA_WARNING", "COBRA_CHECK"]: - if len(errors[key]) > 0: - LOGGER.error("COBRA warnings in validation, check error log for details.") + LOGGER.error( + f"{sbml_log_dict[key]} in validation, check error log for details." + ) break return model, errors diff --git a/src/cobra/io/schema_v1.json b/src/cobra/io/schema_v1.json index edc9756fb..8fd7cb0a4 100644 --- a/src/cobra/io/schema_v1.json +++ b/src/cobra/io/schema_v1.json @@ -153,5 +153,5 @@ "metabolites", "genes" ], - "additionalProperties": false + "additionalProperties": true } diff --git a/src/cobra/io/schema_v2.json b/src/cobra/io/schema_v2.json new file mode 100644 index 000000000..96779f464 --- /dev/null +++ b/src/cobra/io/schema_v2.json @@ -0,0 +1,349 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "COBRA", + "description": "JSON representation of COBRA model", + "definitions": { + "metadata": { + "type": "object", + "properties": { + "sbo": { + "type": "string" + }, + "standardized": { + "type": "array", + "items": { + "type": "object", + "properties": { + "qualifiers": { + "type": "string" + }, + "resources": { + "type": "array", + "items": { + "type": "string" + } + }, + "annotations": { + "$ref": "#/definitions/metadata/standardized" + } + } + } + }, + "history": { + "type": "object", + "properties": { + "creators": { + "type": "array", + "items": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organisation": { + "type": "string" + } + }, + "required": ["name"], + "additionalProperties": false + } + }, + "created_date": { + "type": "string", + "format": "date-time" + }, + "modified_dates": { + "type": "array", + "items": { + "type": "string", + "format": "date-time" + } + } + }, + "required": ["creators", "created_date", "modified_dates"], + "additionalProperties": false + }, + "custom": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[a-zA-Z|_][a-zA-Z0-9_]*$" + }, + "name": { + "type": "string" + }, + "key": { + "type": "string" + }, + "value": { + "type": "string" + }, + "uri": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/metadata" + } + }, + "required": ["key"], + "additionalProperties": false + } + } + } + } + }, + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[a-zA-Z|_][a-zA-Z0-9_]*$" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string", + "default": "1" + }, + "reactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[a-zA-Z|_][a-zA-Z0-9_]*$" + }, + "name": { + "type": "string" + }, + "metabolites": { + "type": "object", + "patternProperties": { + ".*": { + "type": "number" + } + } + }, + "gene_reaction_rule": { + "type": "string" + }, + "lower_bound": { + "type": "number" + }, + "upper_bound": { + "type": "number" + }, + "objective_coefficient": { + "type": "number", + "default": 0 + }, + "subsystem": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/metadata" + } + }, + "required": [ + "id", + "name", + "metabolites", + "lower_bound", + "upper_bound", + "gene_reaction_rule" + ], + "additionalProperties": false + } + }, + "metabolites": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[a-zA-Z|_][a-zA-Z0-9_]*$" + }, + "name": { + "type": "string" + }, + "compartment": { + "type": "string", + "pattern": "[a-z]{1,2}" + }, + "charge": { + "type": "number" + }, + "formula": { + "type": "string" + }, + "_bound": { + "type": "number", + "default": 0 + }, + "notes": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/metadata" + } + }, + "required": ["id", "name", "compartment"], + "additionalProperties": false + } + }, + "genes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[a-zA-Z|_][a-zA-Z0-9_]*$" + }, + "name": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/metadata" + } + }, + "required": ["id", "name"], + "additionalProperties": false + } + }, + "compartments": { + "type": "object", + "patternProperties": { + "[a-z]{1,2}": { + "type": "string" + } + } + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[a-zA-Z|_][a-zA-Z0-9_]*$" + }, + "name": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/metadata" + }, + "kind": { + "type": "string", + "enum": ["collection", "classification", "partonomy"] + }, + "members": { + "type": "array", + "items": { + "type": "object", + "properties": { + "idRef": { + "type": "string", + "pattern": "^[a-zA-Z|_][a-zA-Z0-9_]*$" + }, + "type": { + "type": "string" + } + }, + "required": ["idRef", "type"] + } + } + }, + "required": ["kind", "members"] + } + }, + "user_defined_constraints": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[a-zA-Z|_][a-zA-Z0-9_]*$" + }, + "name": { + "type": "string" + }, + "lower_bound": { + "type": "number" + }, + "upper_bound": { + "type": "number" + }, + "constraint_comps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[a-zA-Z|_][a-zA-Z0-9_]*$" + }, + "name": { + "type": "string" + }, + "coefficient": { + "type": "number" + }, + "variable": { + "type": "string" + }, + "variable_type": { + "type": "string", + "enum": ["linear", "quadratic"] + }, + "notes": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/metadata" + } + }, + "required": ["variable"], + "additionalProperties": false + } + }, + "notes": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/metadata" + } + }, + "required": ["lower_bound", "upper_bound", "constraint_comps"], + "additionalProperties": false + } + }, + "notes": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/metadata" + } + }, + "required": ["id", "reactions", "metabolites", "genes"], + "additionalProperties": true +} diff --git a/src/cobra/manipulation/annotate.py b/src/cobra/manipulation/annotate.py index 6f989dd2a..9bad70d41 100644 --- a/src/cobra/manipulation/annotate.py +++ b/src/cobra/manipulation/annotate.py @@ -22,15 +22,18 @@ def add_SBO(model: "Model") -> None: The model whose demand and exchange reactions need to be annotated. """ + # ??? Should this be done with boundary? for r in model.reactions: # don't annotate already annotated reactions - if r.annotation.get("sbo"): + if len(r.annotation.get("sbo")) != 0 and r.annotation.sbo: continue # only doing exchanges if len(r.metabolites) != 1: continue met_id = list(r._metabolites)[0].id if r.id.startswith("EX_") and r.id == "EX_" + met_id: - r.annotation["sbo"] = "SBO:0000627" + r.annotation["sbo"] = ["SBO:0000627"] elif r.id.startswith("DM_") and r.id == "DM_" + met_id: - r.annotation["sbo"] = "SBO:0000628" + r.annotation["sbo"] = ["SBO:0000628"] + elif r.id.startswith("SK_") and r.id == "SK_" + met_id: + r.annotation["sbo"] = ["SBO:0000632"] diff --git a/src/cobra/manipulation/validate.py b/src/cobra/manipulation/validate.py index 344a05437..34c821690 100644 --- a/src/cobra/manipulation/validate.py +++ b/src/cobra/manipulation/validate.py @@ -33,7 +33,7 @@ def check_mass_balance(model: "Model") -> Dict["Reaction", Dict["Metabolite", fl """ unbalanced = {} for reaction in model.reactions: - if reaction.annotation.get("sbo") not in _NOT_MASS_BALANCED_TERMS: + if set(reaction.annotation.get("sbo", [])).isdisjoint(_NOT_MASS_BALANCED_TERMS): balance = reaction.check_mass_balance() if balance: unbalanced[reaction] = balance diff --git a/src/cobra/medium/boundary_types.py b/src/cobra/medium/boundary_types.py index 971480f57..6a6811224 100644 --- a/src/cobra/medium/boundary_types.py +++ b/src/cobra/medium/boundary_types.py @@ -128,9 +128,9 @@ def is_boundary_type( """ # Check if the reaction has an annotation. Annotations dominate everything. sbo_term = reaction.annotation.get("sbo", "") - if isinstance(sbo_term, list): + if isinstance(sbo_term, list) and len(sbo_term) != 0: sbo_term = sbo_term[0] - sbo_term = sbo_term.upper() + sbo_term = sbo_term.upper() if sbo_term == sbo_terms[boundary_type]: return True diff --git a/tests/conftest.py b/tests/conftest.py index 6c63f84f5..31a062e8e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -23,7 +23,7 @@ def create_test_model(model_name: str = "salmonella") -> Model: Parameters ---------- model_name: str - One of 'ecoli', 'textbook', or 'salmonella', or the + One of 'ecoli', 'textbook', or 'salmonella', 'ecoli_annotation' or the path to a pickled cobra.Model . Returns @@ -46,6 +46,14 @@ def create_test_model(model_name: str = "salmonella") -> Model: elif model_name == "mini": mini_sbml = str((data_dir / "mini_fbc2.xml").resolve()) return read_sbml_model(mini_sbml) + elif model_name == "ecoli_annotation": + ecoli_annotation_sbml = str( + (data_dir / "e_coli_core_for_annotation.xml").resolve() + ) + return read_sbml_model(ecoli_annotation_sbml) + elif model_name == "complex_annotation": + complex_annotation_sbml = str((data_dir / "annotation_complex.xml").resolve()) + return read_sbml_model(complex_annotation_sbml) elif model_name == "salmonella": salmonella_pickle = str((data_dir / "salmonella.pickle").resolve()) model_name = salmonella_pickle @@ -113,6 +121,30 @@ def salmonella(medium_model: Model) -> Model: return medium_model.copy() +@pytest.fixture(scope="session") +def ecoli_annotation_model() -> Model: + """Provide session-level fixture for ecoli_annotation model.""" + return create_test_model("ecoli_annotation") + + +@pytest.fixture(scope="function") +def annotation_model(ecoli_annotation_model: Model) -> Model: + """Provide function-level fixture for ecoli_annotation model.""" + return ecoli_annotation_model.copy() + + +@pytest.fixture(scope="session") +def complex_annotation_model() -> Model: + """Provide session-level fixture for complex_annotation model.""" + return create_test_model("complex_annotation") + + +@pytest.fixture(scope="function") +def complex_model(complex_annotation_model: Model) -> Model: + """Provide function-level fixture for complex_annotation model.""" + return complex_annotation_model.copy() + + @pytest.fixture(scope="function") def solved_model(data_directory: Path) -> Tuple[Solution, Model]: """Provide function-level fixture for solved textbook model.""" diff --git a/tests/data/annotation_complex.xml b/tests/data/annotation_complex.xml new file mode 100644 index 000000000..fb1a2f54a --- /dev/null +++ b/tests/data/annotation_complex.xml @@ -0,0 +1,1477 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/cvterms_nested.json b/tests/data/cvterms_nested.json new file mode 100644 index 000000000..87c2c9315 --- /dev/null +++ b/tests/data/cvterms_nested.json @@ -0,0 +1,27 @@ +[ + { + "resources": [ + "https://identifiers.org/uniprot/P69905", + "https://identifiers.org/uniprot/P68871", + "https://identifiers.org/kegg.compound/C00032" + ], + "qualifier": "bqb_hasPart" + }, + { + "qualifier": "bqb_hasPart", + "resources": [ + "https://identifiers.org/uniprot/P69905", + "https://www.uniprot.org/uniprot/P68871", + "https://identifiers.org/chebi/CHEBI:17627" + ], + "annotations": [ + { + "qualifier": "bqb_isDescribedBy", + "resources": [ + "https://identifiers.org/pubmed/1111111", + "https://identifiers.org/eco/000000" + ] + } + ] + } +] diff --git a/tests/data/e_coli_core.json b/tests/data/e_coli_core.json new file mode 100644 index 000000000..39db77321 --- /dev/null +++ b/tests/data/e_coli_core.json @@ -0,0 +1,14786 @@ +{ +"metabolites":[ +{ +"id":"glc__D_e", +"name":"D-Glucose", +"compartment":"e", +"charge":0, +"formula":"C6H12O6", +"notes":{ +"original_bigg_ids":[ +"glc_D_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"glc__D" +], +"biocyc":[ +"META:Glucopyranose" +], +"chebi":[ +"CHEBI:12965", +"CHEBI:20999", +"CHEBI:4167", +"CHEBI:17634" +], +"hmdb":[ +"HMDB00122", +"HMDB06564" +], +"inchi_key":[ +"WQZGKKKJIJFFOK-GASJEMHNSA-N" +], +"kegg.compound":[ +"C00031" +], +"kegg.drug":[ +"D00009" +], +"metanetx.chemical":[ +"MNXM41" +], +"sabiork":[ +"1406", +"1407" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd26821", +"cpd00027" +] +} +}, +{ +"id":"gln__L_c", +"name":"L-Glutamine", +"compartment":"c", +"charge":0, +"formula":"C5H10N2O3", +"notes":{ +"original_bigg_ids":[ +"gln_L_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"gln__L" +], +"biocyc":[ +"META:GLN" +], +"chebi":[ +"CHEBI:42943", +"CHEBI:42899", +"CHEBI:32679", +"CHEBI:32678", +"CHEBI:58359", +"CHEBI:28300", +"CHEBI:42812", +"CHEBI:13110", +"CHEBI:18050", +"CHEBI:32666", +"CHEBI:6227", +"CHEBI:32665", +"CHEBI:21308", +"CHEBI:42814", +"CHEBI:5432", +"CHEBI:24316" +], +"hmdb":[ +"HMDB00641" +], +"inchi_key":[ +"ZDXPYRJPNDTMRX-VKHMYHEASA-N" +], +"kegg.compound":[ +"C00064", +"C00303" +], +"kegg.drug":[ +"D00015" +], +"metanetx.chemical":[ +"MNXM37" +], +"reactome.compound":[ +"113522", +"212615", +"29472" +], +"sabiork":[ +"2011", +"74" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00253", +"cpd00053" +] +} +}, +{ +"id":"gln__L_e", +"name":"L-Glutamine", +"compartment":"e", +"charge":0, +"formula":"C5H10N2O3", +"notes":{ +"original_bigg_ids":[ +"gln_L_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"gln__L" +], +"biocyc":[ +"META:GLN" +], +"chebi":[ +"CHEBI:42943", +"CHEBI:42899", +"CHEBI:32679", +"CHEBI:32678", +"CHEBI:58359", +"CHEBI:28300", +"CHEBI:42812", +"CHEBI:13110", +"CHEBI:18050", +"CHEBI:32666", +"CHEBI:6227", +"CHEBI:32665", +"CHEBI:21308", +"CHEBI:42814", +"CHEBI:5432", +"CHEBI:24316" +], +"hmdb":[ +"HMDB00641" +], +"inchi_key":[ +"ZDXPYRJPNDTMRX-VKHMYHEASA-N" +], +"kegg.compound":[ +"C00064", +"C00303" +], +"kegg.drug":[ +"D00015" +], +"metanetx.chemical":[ +"MNXM37" +], +"reactome.compound":[ +"113522", +"212615", +"29472" +], +"sabiork":[ +"2011", +"74" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00253", +"cpd00053" +] +} +}, +{ +"id":"glu__L_c", +"name":"L-Glutamate", +"compartment":"c", +"charge":-1, +"formula":"C5H8NO4", +"notes":{ +"original_bigg_ids":[ +"glu_L_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"glu__L" +], +"biocyc":[ +"META:Glutamates", +"META:GLT" +], +"chebi":[ +"CHEBI:76051", +"CHEBI:21301", +"CHEBI:29985", +"CHEBI:42825", +"CHEBI:29987", +"CHEBI:18237", +"CHEBI:24314", +"CHEBI:16015", +"CHEBI:13107", +"CHEBI:5431", +"CHEBI:21304", +"CHEBI:6224", +"CHEBI:14321", +"CHEBI:29988" +], +"hmdb":[ +"HMDB00148", +"HMDB60475" +], +"inchi_key":[ +"WHUUTDBJXJRKMK-VKHMYHEASA-M" +], +"kegg.compound":[ +"C00025", +"C00302" +], +"kegg.drug":[ +"D00007", +"D04341" +], +"metanetx.chemical":[ +"MNXM89557" +], +"reactome.compound":[ +"428614", +"29404", +"113552", +"210382" +], +"sabiork":[ +"73", +"2010" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd27177", +"cpd00023", +"cpd19002" +] +} +}, +{ +"id":"glu__L_e", +"name":"L-Glutamate", +"compartment":"e", +"charge":-1, +"formula":"C5H8NO4", +"notes":{ +"original_bigg_ids":[ +"glu_L_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"glu__L" +], +"biocyc":[ +"META:Glutamates", +"META:GLT" +], +"chebi":[ +"CHEBI:76051", +"CHEBI:21301", +"CHEBI:29985", +"CHEBI:42825", +"CHEBI:29987", +"CHEBI:18237", +"CHEBI:24314", +"CHEBI:16015", +"CHEBI:13107", +"CHEBI:5431", +"CHEBI:21304", +"CHEBI:6224", +"CHEBI:14321", +"CHEBI:29988" +], +"hmdb":[ +"HMDB00148", +"HMDB60475" +], +"inchi_key":[ +"WHUUTDBJXJRKMK-VKHMYHEASA-M" +], +"kegg.compound":[ +"C00025", +"C00302" +], +"kegg.drug":[ +"D00007", +"D04341" +], +"metanetx.chemical":[ +"MNXM89557" +], +"reactome.compound":[ +"428614", +"29404", +"113552", +"210382" +], +"sabiork":[ +"73", +"2010" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd27177", +"cpd00023", +"cpd19002" +] +} +}, +{ +"id":"glx_c", +"name":"Glyoxylate", +"compartment":"c", +"charge":-1, +"formula":"C2H1O3", +"notes":{ +"original_bigg_ids":[ +"glx_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"glx" +], +"biocyc":[ +"META:GLYOX" +], +"chebi":[ +"CHEBI:24420", +"CHEBI:36655", +"CHEBI:14368", +"CHEBI:24421", +"CHEBI:42767", +"CHEBI:16891", +"CHEBI:35977", +"CHEBI:5509" +], +"envipath":[ +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/cdffdb1a-3322-4cc1-9171-d857bfaa198a", +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/aecbda66-6e98-4c11-aeaf-6a072f4f963c", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/9dc0aa3b-447a-4b5d-8157-501b036f9626", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/43b74f4f-bc8a-4b8b-b587-c97d8e9eed48" +], +"hmdb":[ +"HMDB00119" +], +"inchi_key":[ +"HHLFWLYXYJOTON-UHFFFAOYSA-M" +], +"kegg.compound":[ +"C00048" +], +"metanetx.chemical":[ +"MNXM69" +], +"reactome.compound":[ +"904849", +"389678" +], +"sabiork":[ +"1838" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00040" +] +} +}, +{ +"id":"h2o_c", +"name":"H2O H2O", +"compartment":"c", +"charge":0, +"formula":"H2O", +"notes":{ +"original_bigg_ids":[ +"h2o_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"h2o" +], +"biocyc":[ +"META:CPD-15815", +"META:OXONIUM", +"META:HYDROXYL-GROUP", +"META:WATER", +"META:OH" +], +"chebi":[ +"CHEBI:13352", +"CHEBI:30490", +"CHEBI:43228", +"CHEBI:33813", +"CHEBI:44292", +"CHEBI:44641", +"CHEBI:27313", +"CHEBI:42043", +"CHEBI:44819", +"CHEBI:29356", +"CHEBI:5594", +"CHEBI:10743", +"CHEBI:15377", +"CHEBI:42857", +"CHEBI:13365", +"CHEBI:29412", +"CHEBI:16234", +"CHEBI:13419", +"CHEBI:5585", +"CHEBI:44701" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/799908db-b8c9-4982-86cb-1f225e2ad08c", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/e7f34a8e-cded-4793-b6d5-792335b38636", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/969d0227-3069-4e44-9525-7ae7bad84170" +], +"hmdb":[ +"HMDB02111", +"HMDB01039" +], +"inchi_key":[ +"XLYOFNOQVPJJNP-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00001", +"C01328" +], +"kegg.drug":[ +"D00001", +"D06322" +], +"metanetx.chemical":[ +"MNXM2" +], +"reactome.compound":[ +"113521", +"141343", +"2022884", +"5278291", +"29356", +"189422", +"5668574", +"5693747", +"109276", +"113519", +"1605715", +"8851517", +"113518", +"351603" +], +"sabiork":[ +"40" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd27222", +"cpd00001", +"cpd15275" +] +} +}, +{ +"id":"h2o_e", +"name":"H2O H2O", +"compartment":"e", +"charge":0, +"formula":"H2O", +"notes":{ +"original_bigg_ids":[ +"h2o_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"h2o" +], +"biocyc":[ +"META:CPD-15815", +"META:OXONIUM", +"META:HYDROXYL-GROUP", +"META:WATER", +"META:OH" +], +"chebi":[ +"CHEBI:13352", +"CHEBI:30490", +"CHEBI:43228", +"CHEBI:33813", +"CHEBI:44292", +"CHEBI:44641", +"CHEBI:27313", +"CHEBI:42043", +"CHEBI:44819", +"CHEBI:29356", +"CHEBI:5594", +"CHEBI:10743", +"CHEBI:15377", +"CHEBI:42857", +"CHEBI:13365", +"CHEBI:29412", +"CHEBI:16234", +"CHEBI:13419", +"CHEBI:5585", +"CHEBI:44701" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/799908db-b8c9-4982-86cb-1f225e2ad08c", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/e7f34a8e-cded-4793-b6d5-792335b38636", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/969d0227-3069-4e44-9525-7ae7bad84170" +], +"hmdb":[ +"HMDB02111", +"HMDB01039" +], +"inchi_key":[ +"XLYOFNOQVPJJNP-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00001", +"C01328" +], +"kegg.drug":[ +"D00001", +"D06322" +], +"metanetx.chemical":[ +"MNXM2" +], +"reactome.compound":[ +"113521", +"141343", +"2022884", +"5278291", +"29356", +"189422", +"5668574", +"5693747", +"109276", +"113519", +"1605715", +"8851517", +"113518", +"351603" +], +"sabiork":[ +"40" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd27222", +"cpd00001", +"cpd15275" +] +} +}, +{ +"id":"h_c", +"name":"H+", +"compartment":"c", +"charge":1, +"formula":"H", +"notes":{ +"original_bigg_ids":[ +"h_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"h" +], +"biocyc":[ +"META:PROTON" +], +"chebi":[ +"CHEBI:5584", +"CHEBI:13357", +"CHEBI:15378", +"CHEBI:10744" +], +"hmdb":[ +"HMDB59597" +], +"inchi_key":[ +"GPRLSGONYQIRFK-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00080" +], +"metanetx.chemical":[ +"MNXM1" +], +"reactome.compound":[ +"2000349", +"425978", +"74722", +"428040", +"427899", +"428548", +"156540", +"70106", +"425969", +"1132304", +"5668577", +"1470067", +"163953", +"193465", +"113529", +"351626", +"425999", +"194688", +"374900", +"2872447", +"372511" +], +"sabiork":[ +"39" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00067" +] +} +}, +{ +"id":"h_e", +"name":"H+", +"compartment":"e", +"charge":1, +"formula":"H", +"notes":{ +"original_bigg_ids":[ +"h_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"h" +], +"biocyc":[ +"META:PROTON" +], +"chebi":[ +"CHEBI:5584", +"CHEBI:13357", +"CHEBI:15378", +"CHEBI:10744" +], +"hmdb":[ +"HMDB59597" +], +"inchi_key":[ +"GPRLSGONYQIRFK-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00080" +], +"metanetx.chemical":[ +"MNXM1" +], +"reactome.compound":[ +"2000349", +"425978", +"74722", +"428040", +"427899", +"428548", +"156540", +"70106", +"425969", +"1132304", +"5668577", +"1470067", +"163953", +"193465", +"113529", +"351626", +"425999", +"194688", +"374900", +"2872447", +"372511" +], +"sabiork":[ +"39" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00067" +] +} +}, +{ +"id":"icit_c", +"name":"Isocitrate", +"compartment":"c", +"charge":-3, +"formula":"C6H5O7", +"notes":{ +"original_bigg_ids":[ +"icit_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"icit" +], +"chebi":[ +"CHEBI:16087", +"CHEBI:36454", +"CHEBI:5998", +"CHEBI:24886", +"CHEBI:36453", +"CHEBI:14465", +"CHEBI:30887", +"CHEBI:24884" +], +"hmdb":[ +"HMDB00193" +], +"inchi_key":[ +"ODBLHEXUDAPZAU-UHFFFAOYSA-K" +], +"kegg.compound":[ +"C00311" +], +"metanetx.chemical":[ +"MNXM89661" +], +"sabiork":[ +"2013" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00260" +] +} +}, +{ +"id":"lac__D_c", +"name":"D-Lactate", +"compartment":"c", +"charge":-1, +"formula":"C3H5O3", +"notes":{ +"original_bigg_ids":[ +"lac_D_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"lac__D" +], +"biocyc":[ +"META:D-LACTATE" +], +"chebi":[ +"CHEBI:16004", +"CHEBI:341", +"CHEBI:18684", +"CHEBI:43701", +"CHEBI:11001", +"CHEBI:42111", +"CHEBI:42105" +], +"hmdb":[ +"HMDB01311", +"HMDB00171" +], +"inchi_key":[ +"JVTAAEKCZFNVCJ-UWTATZPHSA-M" +], +"kegg.compound":[ +"C00256" +], +"metanetx.chemical":[ +"MNXM285" +], +"sabiork":[ +"1997", +"2284" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00221" +] +} +}, +{ +"id":"lac__D_e", +"name":"D-Lactate", +"compartment":"e", +"charge":-1, +"formula":"C3H5O3", +"notes":{ +"original_bigg_ids":[ +"lac_D_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"lac__D" +], +"biocyc":[ +"META:D-LACTATE" +], +"chebi":[ +"CHEBI:16004", +"CHEBI:341", +"CHEBI:18684", +"CHEBI:43701", +"CHEBI:11001", +"CHEBI:42111", +"CHEBI:42105" +], +"hmdb":[ +"HMDB01311", +"HMDB00171" +], +"inchi_key":[ +"JVTAAEKCZFNVCJ-UWTATZPHSA-M" +], +"kegg.compound":[ +"C00256" +], +"metanetx.chemical":[ +"MNXM285" +], +"sabiork":[ +"1997", +"2284" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00221" +] +} +}, +{ +"id":"mal__L_c", +"name":"L-Malate", +"compartment":"c", +"charge":-2, +"formula":"C4H4O5", +"notes":{ +"original_bigg_ids":[ +"mal_L_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"mal__L" +], +"biocyc":[ +"META:MAL" +], +"chebi":[ +"CHEBI:15589", +"CHEBI:30797", +"CHEBI:423", +"CHEBI:18784", +"CHEBI:18785", +"CHEBI:13140", +"CHEBI:11066" +], +"hmdb":[ +"HMDB00156" +], +"inchi_key":[ +"BJEPYKJPYRNKOW-REOHCLBHSA-L" +], +"kegg.compound":[ +"C00149" +], +"metanetx.chemical":[ +"MNXM98" +], +"reactome.compound":[ +"198498", +"113544" +], +"sabiork":[ +"1918" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00130" +] +} +}, +{ +"id":"mal__L_e", +"name":"L-Malate", +"compartment":"e", +"charge":-2, +"formula":"C4H4O5", +"notes":{ +"original_bigg_ids":[ +"mal_L_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"mal__L" +], +"biocyc":[ +"META:MAL" +], +"chebi":[ +"CHEBI:15589", +"CHEBI:30797", +"CHEBI:423", +"CHEBI:18784", +"CHEBI:18785", +"CHEBI:13140", +"CHEBI:11066" +], +"hmdb":[ +"HMDB00156" +], +"inchi_key":[ +"BJEPYKJPYRNKOW-REOHCLBHSA-L" +], +"kegg.compound":[ +"C00149" +], +"metanetx.chemical":[ +"MNXM98" +], +"reactome.compound":[ +"198498", +"113544" +], +"sabiork":[ +"1918" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00130" +] +} +}, +{ +"id":"nad_c", +"name":"Nicotinamide adenine dinucleotide", +"compartment":"c", +"charge":-1, +"formula":"C21H26N7O14P2", +"notes":{ +"original_bigg_ids":[ +"nad_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"nad" +], +"biocyc":[ +"META:NAD" +], +"chebi":[ +"CHEBI:7422", +"CHEBI:44215", +"CHEBI:13394", +"CHEBI:21901", +"CHEBI:57540", +"CHEBI:15846", +"CHEBI:44281", +"CHEBI:44214", +"CHEBI:13393", +"CHEBI:29867" +], +"hmdb":[ +"HMDB00902" +], +"inchi_key":[ +"BAWFJGJZGIEFAR-NNYOXOHSSA-M" +], +"kegg.compound":[ +"C00003" +], +"kegg.drug":[ +"D00002" +], +"metanetx.chemical":[ +"MNXM8" +], +"reactome.compound":[ +"352330", +"192307", +"194653", +"113526", +"29360" +], +"sabiork":[ +"37" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00003" +] +} +}, +{ +"id":"nadh_c", +"name":"Nicotinamide adenine dinucleotide - reduced", +"compartment":"c", +"charge":-2, +"formula":"C21H27N7O14P2", +"notes":{ +"original_bigg_ids":[ +"nadh_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"nadh" +], +"biocyc":[ +"META:NADH" +], +"chebi":[ +"CHEBI:13395", +"CHEBI:21902", +"CHEBI:7423", +"CHEBI:44216", +"CHEBI:57945", +"CHEBI:16908", +"CHEBI:13396" +], +"hmdb":[ +"HMDB01487" +], +"inchi_key":[ +"BOPGDPNILDQYTO-NNYOXOHSSA-L" +], +"kegg.compound":[ +"C00004" +], +"metanetx.chemical":[ +"MNXM10" +], +"reactome.compound":[ +"192305", +"73473", +"29362", +"194697" +], +"sabiork":[ +"38" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00004" +] +} +}, +{ +"id":"nadp_c", +"name":"Nicotinamide adenine dinucleotide phosphate", +"compartment":"c", +"charge":-3, +"formula":"C21H25N7O17P3", +"notes":{ +"original_bigg_ids":[ +"nadp_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"nadp" +], +"biocyc":[ +"META:NADP" +], +"chebi":[ +"CHEBI:29868", +"CHEBI:44405", +"CHEBI:25523", +"CHEBI:13397", +"CHEBI:18009", +"CHEBI:7424", +"CHEBI:13398", +"CHEBI:21903", +"CHEBI:58349", +"CHEBI:44409" +], +"hmdb":[ +"HMDB00217" +], +"inchi_key":[ +"XJLXINKUBYWONI-NNYOXOHSSA-K" +], +"kegg.compound":[ +"C00006" +], +"metanetx.chemical":[ +"MNXM5" +], +"reactome.compound":[ +"194668", +"113563", +"6790191", +"5623650", +"2000348", +"389556", +"29366", +"351628", +"113564" +], +"sabiork":[ +"1263" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00006" +] +} +}, +{ +"id":"nadph_c", +"name":"Nicotinamide adenine dinucleotide phosphate - reduced", +"compartment":"c", +"charge":-4, +"formula":"C21H26N7O17P3", +"notes":{ +"original_bigg_ids":[ +"nadph_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"nadph" +], +"biocyc":[ +"META:NADPH" +], +"chebi":[ +"CHEBI:16474", +"CHEBI:7425", +"CHEBI:57783", +"CHEBI:21904", +"CHEBI:13399", +"CHEBI:13400", +"CHEBI:44286" +], +"hmdb":[ +"HMDB06341", +"HMDB00221", +"HMDB00799" +], +"inchi_key":[ +"ACFIXJIJDZMPPO-NNYOXOHSSA-J" +], +"kegg.compound":[ +"C00005" +], +"metanetx.chemical":[ +"MNXM6" +], +"reactome.compound":[ +"113600", +"6790135", +"113602", +"113601", +"2000347", +"351627", +"29364", +"5623644", +"194725" +], +"sabiork":[ +"1262" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00005" +] +} +}, +{ +"id":"nh4_c", +"name":"Ammonium", +"compartment":"c", +"charge":1, +"formula":"H4N", +"notes":{ +"original_bigg_ids":[ +"nh4_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"nh4" +], +"biocyc":[ +"META:AMMONIUM", +"META:AMMONIA" +], +"chebi":[ +"CHEBI:44284", +"CHEBI:135980", +"CHEBI:22533", +"CHEBI:13406", +"CHEBI:29337", +"CHEBI:29340", +"CHEBI:13771", +"CHEBI:16134", +"CHEBI:28938", +"CHEBI:22534", +"CHEBI:13405", +"CHEBI:49783", +"CHEBI:7434", +"CHEBI:7435", +"CHEBI:44269", +"CHEBI:44404", +"CHEBI:13407" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/96667bd9-aeae-4e8f-89d3-100d0396af05", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/41e4c903-407f-49f7-bf6b-0a94d39fa3a7", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/27a89bdf-42f7-478f-91d8-e39881581096" +], +"hmdb":[ +"HMDB00051", +"HMDB41827" +], +"inchi_key":[ +"QGZKDVFQNNGYKY-UHFFFAOYSA-O" +], +"kegg.compound":[ +"C00014", +"C01342" +], +"kegg.drug":[ +"D02916", +"D02915" +], +"metanetx.chemical":[ +"MNXM15" +], +"reactome.compound":[ +"5693978", +"1132163", +"29382", +"76230", +"140912", +"389843", +"2022135", +"31633", +"113561" +], +"sabiork":[ +"1268", +"43" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd19013", +"cpd00013" +] +} +}, +{ +"id":"13dpg_c", +"name":"3-Phospho-D-glyceroyl phosphate", +"compartment":"c", +"charge":-4, +"formula":"C3H4O10P2", +"notes":{ +"original_bigg_ids":[ +"13dpg_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"13dpg" +], +"biocyc":[ +"META:DPG" +], +"chebi":[ +"CHEBI:57604", +"CHEBI:20189", +"CHEBI:11881", +"CHEBI:16001", +"CHEBI:1658" +], +"hmdb":[ +"HMDB62758" +], +"inchi_key":[ +"LJQLQCAXBUHEAZ-UWTATZPHSA-J" +], +"kegg.compound":[ +"C00236" +], +"metanetx.chemical":[ +"MNXM261" +], +"reactome.compound":[ +"29800" +], +"sabiork":[ +"21215" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00203" +] +} +}, +{ +"id":"nh4_e", +"name":"Ammonium", +"compartment":"e", +"charge":1, +"formula":"H4N", +"notes":{ +"original_bigg_ids":[ +"nh4_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"nh4" +], +"biocyc":[ +"META:AMMONIUM", +"META:AMMONIA" +], +"chebi":[ +"CHEBI:44284", +"CHEBI:135980", +"CHEBI:22533", +"CHEBI:13406", +"CHEBI:29337", +"CHEBI:29340", +"CHEBI:13771", +"CHEBI:16134", +"CHEBI:28938", +"CHEBI:22534", +"CHEBI:13405", +"CHEBI:49783", +"CHEBI:7434", +"CHEBI:7435", +"CHEBI:44269", +"CHEBI:44404", +"CHEBI:13407" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/96667bd9-aeae-4e8f-89d3-100d0396af05", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/41e4c903-407f-49f7-bf6b-0a94d39fa3a7", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/27a89bdf-42f7-478f-91d8-e39881581096" +], +"hmdb":[ +"HMDB00051", +"HMDB41827" +], +"inchi_key":[ +"QGZKDVFQNNGYKY-UHFFFAOYSA-O" +], +"kegg.compound":[ +"C00014", +"C01342" +], +"kegg.drug":[ +"D02916", +"D02915" +], +"metanetx.chemical":[ +"MNXM15" +], +"reactome.compound":[ +"5693978", +"1132163", +"29382", +"76230", +"140912", +"389843", +"2022135", +"31633", +"113561" +], +"sabiork":[ +"1268", +"43" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd19013", +"cpd00013" +] +} +}, +{ +"id":"o2_c", +"name":"O2 O2", +"compartment":"c", +"charge":0, +"formula":"O2", +"notes":{ +"original_bigg_ids":[ +"o2_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"o2" +], +"biocyc":[ +"META:OXYGEN-MOLECULE" +], +"chebi":[ +"CHEBI:7860", +"CHEBI:26689", +"CHEBI:29097", +"CHEBI:15379", +"CHEBI:13416", +"CHEBI:27140", +"CHEBI:29793", +"CHEBI:30491", +"CHEBI:44742", +"CHEBI:23833", +"CHEBI:25366", +"CHEBI:10745" +], +"envipath":[ +"5882df9c-dae1-4d80-a40e-db4724271456/compound/d5d12248-82d3-4cf3-b7d0-2e3d096768b4" +], +"hmdb":[ +"HMDB01377" +], +"inchi_key":[ +"MYMOFIZGZYHOMD-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00007" +], +"kegg.drug":[ +"D00003" +], +"metanetx.chemical":[ +"MNXM4" +], +"reactome.compound":[ +"113534", +"113535", +"113685", +"5668566", +"189461", +"113533", +"1131511", +"352327", +"351593", +"29368", +"1236709" +], +"sabiork":[ +"1264" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00007" +] +} +}, +{ +"id":"2pg_c", +"name":"D-Glycerate 2-phosphate", +"compartment":"c", +"charge":-3, +"formula":"C3H4O7P", +"notes":{ +"original_bigg_ids":[ +"2pg_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"2pg" +], +"biocyc":[ +"META:2-PG" +], +"chebi":[ +"CHEBI:39868", +"CHEBI:21028", +"CHEBI:58289", +"CHEBI:24344", +"CHEBI:12986", +"CHEBI:17835", +"CHEBI:11651", +"CHEBI:1267", +"CHEBI:88350" +], +"hmdb":[ +"HMDB00362", +"HMDB62707", +"HMDB03391" +], +"inchi_key":[ +"GXIURPTVHJPJLF-UWTATZPHSA-K" +], +"kegg.compound":[ +"C00631" +], +"metanetx.chemical":[ +"MNXM275" +], +"reactome.compound":[ +"30485" +], +"sabiork":[ +"31" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00482" +] +} +}, +{ +"id":"o2_e", +"name":"O2 O2", +"compartment":"e", +"charge":0, +"formula":"O2", +"notes":{ +"original_bigg_ids":[ +"o2_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"o2" +], +"biocyc":[ +"META:OXYGEN-MOLECULE" +], +"chebi":[ +"CHEBI:7860", +"CHEBI:26689", +"CHEBI:29097", +"CHEBI:15379", +"CHEBI:13416", +"CHEBI:27140", +"CHEBI:29793", +"CHEBI:30491", +"CHEBI:44742", +"CHEBI:23833", +"CHEBI:25366", +"CHEBI:10745" +], +"envipath":[ +"5882df9c-dae1-4d80-a40e-db4724271456/compound/d5d12248-82d3-4cf3-b7d0-2e3d096768b4" +], +"hmdb":[ +"HMDB01377" +], +"inchi_key":[ +"MYMOFIZGZYHOMD-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00007" +], +"kegg.drug":[ +"D00003" +], +"metanetx.chemical":[ +"MNXM4" +], +"reactome.compound":[ +"113534", +"113535", +"113685", +"5668566", +"189461", +"113533", +"1131511", +"352327", +"351593", +"29368", +"1236709" +], +"sabiork":[ +"1264" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00007" +] +} +}, +{ +"id":"3pg_c", +"name":"3-Phospho-D-glycerate", +"compartment":"c", +"charge":-3, +"formula":"C3H4O7P", +"notes":{ +"original_bigg_ids":[ +"3pg_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"3pg" +], +"biocyc":[ +"META:G3P" +], +"chebi":[ +"CHEBI:11879", +"CHEBI:11880", +"CHEBI:17794", +"CHEBI:21029", +"CHEBI:1657", +"CHEBI:58272", +"CHEBI:12987" +], +"hmdb":[ +"HMDB60180" +], +"inchi_key":[ +"OSJPPGNTCRNQQC-UWTATZPHSA-K" +], +"kegg.compound":[ +"C00197" +], +"metanetx.chemical":[ +"MNXM126" +], +"reactome.compound":[ +"6799493", +"29728" +], +"sabiork":[ +"21216" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00169" +] +} +}, +{ +"id":"oaa_c", +"name":"Oxaloacetate", +"compartment":"c", +"charge":-2, +"formula":"C4H2O5", +"notes":{ +"original_bigg_ids":[ +"oaa_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"oaa" +], +"biocyc":[ +"META:OXALACETIC_ACID" +], +"chebi":[ +"CHEBI:25731", +"CHEBI:24959", +"CHEBI:12820", +"CHEBI:16452", +"CHEBI:30744", +"CHEBI:14703", +"CHEBI:24958", +"CHEBI:7812", +"CHEBI:25734", +"CHEBI:29049" +], +"envipath":[ +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/133a11f3-81b0-4384-837e-1ccdd0a2a645", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/40afaad4-431a-4e3c-b4c7-020dbe4bdd2a", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/be7c543c-40bd-4698-9821-22f2e65c38f3" +], +"hmdb":[ +"HMDB00223" +], +"inchi_key":[ +"KHPXUQMNIQBQEV-UHFFFAOYSA-L" +], +"kegg.compound":[ +"C00036" +], +"lipidmaps":[ +"LMFA01170120" +], +"metanetx.chemical":[ +"MNXM46" +], +"reactome.compound":[ +"6810070", +"113587", +"76213" +], +"sabiork":[ +"1915" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00032" +] +} +}, +{ +"id":"pep_c", +"name":"Phosphoenolpyruvate", +"compartment":"c", +"charge":-3, +"formula":"C3H2O6P", +"notes":{ +"original_bigg_ids":[ +"pep_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"pep" +], +"biocyc":[ +"META:PHOSPHO-ENOL-PYRUVATE" +], +"chebi":[ +"CHEBI:18021", +"CHEBI:44894", +"CHEBI:26054", +"CHEBI:14812", +"CHEBI:26055", +"CHEBI:8147", +"CHEBI:58702", +"CHEBI:44897" +], +"hmdb":[ +"HMDB00263" +], +"inchi_key":[ +"DTBNBXWJWCWCIK-UHFFFAOYSA-K" +], +"kegg.compound":[ +"C00074" +], +"metanetx.chemical":[ +"MNXM73" +], +"reactome.compound":[ +"372364", +"29492" +], +"sabiork":[ +"32" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00061" +] +} +}, +{ +"id":"6pgc_c", +"name":"6-Phospho-D-gluconate", +"compartment":"c", +"charge":-3, +"formula":"C6H10O10P", +"notes":{ +"original_bigg_ids":[ +"6pgc_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"6pgc" +], +"biocyc":[ +"META:CPD-2961" +], +"chebi":[ +"CHEBI:33851", +"CHEBI:2231", +"CHEBI:16863", +"CHEBI:40282", +"CHEBI:12232", +"CHEBI:48928", +"CHEBI:58759" +], +"hmdb":[ +"HMDB01316", +"HMDB62800" +], +"inchi_key":[ +"BIRSGZKFKXLSJQ-SQOUGZDYSA-K" +], +"kegg.compound":[ +"C00345" +], +"metanetx.chemical":[ +"MNXM325" +], +"reactome.compound":[ +"29996" +], +"sabiork":[ +"22801", +"2024" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00284" +] +} +}, +{ +"id":"pi_c", +"name":"Phosphate", +"compartment":"c", +"charge":-2, +"formula":"HO4P", +"notes":{ +"original_bigg_ids":[ +"pi_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"pi" +], +"biocyc":[ +"META:Pi", +"META:CPD-16459", +"META:PHOSPHATE-GROUP" +], +"chebi":[ +"CHEBI:26078", +"CHEBI:18367", +"CHEBI:29139", +"CHEBI:39739", +"CHEBI:43470", +"CHEBI:35780", +"CHEBI:43474", +"CHEBI:26020", +"CHEBI:45024", +"CHEBI:39745", +"CHEBI:29137", +"CHEBI:14791", +"CHEBI:7793" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/db5219ee-60cb-4370-b066-340c9faf069c", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/84684967-eade-48d4-b25d-c4aede0a0836", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/ad82c39b-2edb-4953-b971-79a2d2ea6e26", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/aac01fea-4223-49c1-8b12-cd50f11ebfc8", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/c581b2ce-6238-45de-abc0-60ca8d47ed04" +], +"hmdb":[ +"HMDB02105", +"HMDB00973", +"HMDB01429", +"HMDB02142", +"HMDB05947" +], +"inchi_key":[ +"NBIIXXVUZAFLBC-UHFFFAOYSA-L" +], +"kegg.compound":[ +"C00009" +], +"kegg.drug":[ +"D05467" +], +"metanetx.chemical":[ +"MNXM9" +], +"reactome.compound":[ +"5228339", +"113550", +"8851513", +"113551", +"109277", +"29372", +"8851226", +"113548" +], +"sabiork":[ +"36" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd27787", +"cpd00009" +] +} +}, +{ +"id":"6pgl_c", +"name":"6-phospho-D-glucono-1,5-lactone", +"compartment":"c", +"charge":-2, +"formula":"C6H9O9P", +"notes":{ +"original_bigg_ids":[ +"6pgl_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"6pgl" +], +"biocyc":[ +"META:D-6-P-GLUCONO-DELTA-LACTONE" +], +"chebi":[ +"CHEBI:12233", +"CHEBI:4160", +"CHEBI:57955", +"CHEBI:16938", +"CHEBI:20989", +"CHEBI:12958" +], +"hmdb":[ +"HMDB62628", +"HMDB01127" +], +"inchi_key":[ +"IJOJIVNDFQSGAB-SQOUGZDYSA-L" +], +"kegg.compound":[ +"C01236" +], +"metanetx.chemical":[ +"MNXM429" +], +"reactome.compound":[ +"31467" +], +"sabiork":[ +"1366" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00911" +] +} +}, +{ +"id":"pi_e", +"name":"Phosphate", +"compartment":"e", +"charge":-2, +"formula":"HO4P", +"notes":{ +"original_bigg_ids":[ +"pi_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"pi" +], +"biocyc":[ +"META:Pi", +"META:CPD-16459", +"META:PHOSPHATE-GROUP" +], +"chebi":[ +"CHEBI:26078", +"CHEBI:18367", +"CHEBI:29139", +"CHEBI:39739", +"CHEBI:43470", +"CHEBI:35780", +"CHEBI:43474", +"CHEBI:26020", +"CHEBI:45024", +"CHEBI:39745", +"CHEBI:29137", +"CHEBI:14791", +"CHEBI:7793" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/db5219ee-60cb-4370-b066-340c9faf069c", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/84684967-eade-48d4-b25d-c4aede0a0836", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/ad82c39b-2edb-4953-b971-79a2d2ea6e26", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/aac01fea-4223-49c1-8b12-cd50f11ebfc8", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/c581b2ce-6238-45de-abc0-60ca8d47ed04" +], +"hmdb":[ +"HMDB02105", +"HMDB00973", +"HMDB01429", +"HMDB02142", +"HMDB05947" +], +"inchi_key":[ +"NBIIXXVUZAFLBC-UHFFFAOYSA-L" +], +"kegg.compound":[ +"C00009" +], +"kegg.drug":[ +"D05467" +], +"metanetx.chemical":[ +"MNXM9" +], +"reactome.compound":[ +"5228339", +"113550", +"8851513", +"113551", +"109277", +"29372", +"8851226", +"113548" +], +"sabiork":[ +"36" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd27787", +"cpd00009" +] +} +}, +{ +"id":"ac_c", +"name":"Acetate", +"compartment":"c", +"charge":-1, +"formula":"C2H3O2", +"notes":{ +"original_bigg_ids":[ +"ac_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"ac" +], +"biocyc":[ +"META:ACET" +], +"chebi":[ +"CHEBI:13704", +"CHEBI:22165", +"CHEBI:22169", +"CHEBI:40480", +"CHEBI:15366", +"CHEBI:2387", +"CHEBI:30089", +"CHEBI:40486" +], +"envipath":[ +"5882df9c-dae1-4d80-a40e-db4724271456/compound/9e26dcbe-4db9-46a0-8614-9f03545032d2", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/5e4989fc-13d3-45d4-ad57-3be380a9d3c0", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/a8f0be58-24e8-441b-8d81-a516a0ead4b3", +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/d45256fe-61fa-4f5b-bb16-91a3d615e3d8", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/b545cabc-8c9e-4b20-8848-efa015b481ea", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/3e2d750f-df31-4445-9255-163c627e9b4a" +], +"hmdb":[ +"HMDB00042" +], +"inchi_key":[ +"QTBSBXVTEAMEQO-UHFFFAOYSA-M" +], +"kegg.compound":[ +"C00033" +], +"kegg.drug":[ +"D00010" +], +"lipidmaps":[ +"LMFA01010002" +], +"metanetx.chemical":[ +"MNXM26" +], +"reactome.compound":[ +"1524044", +"390305", +"113539", +"2022890", +"29416" +], +"sabiork":[ +"1278" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00029" +], +"slm":[ +"000000449" +] +} +}, +{ +"id":"pyr_c", +"name":"Pyruvate", +"compartment":"c", +"charge":-1, +"formula":"C3H3O3", +"notes":{ +"original_bigg_ids":[ +"pyr_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"pyr" +], +"biocyc":[ +"META:PYRUVATE" +], +"chebi":[ +"CHEBI:26462", +"CHEBI:26466", +"CHEBI:8685", +"CHEBI:32816", +"CHEBI:45253", +"CHEBI:14987", +"CHEBI:15361" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/ccc99777-54dc-42d4-a97e-009b780d3905", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/dc01020e-8c7e-4087-9f56-cf8c962b7437" +], +"hmdb":[ +"HMDB00243" +], +"inchi_key":[ +"LCTONWCANYUPML-UHFFFAOYSA-M" +], +"kegg.compound":[ +"C00022" +], +"lipidmaps":[ +"LMFA01060077" +], +"metanetx.chemical":[ +"MNXM23" +], +"reactome.compound":[ +"1130930", +"5357717", +"113557", +"29398", +"389680" +], +"sabiork":[ +"33" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00020" +] +} +}, +{ +"id":"pyr_e", +"name":"Pyruvate", +"compartment":"e", +"charge":-1, +"formula":"C3H3O3", +"notes":{ +"original_bigg_ids":[ +"pyr_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"pyr" +], +"biocyc":[ +"META:PYRUVATE" +], +"chebi":[ +"CHEBI:26462", +"CHEBI:26466", +"CHEBI:8685", +"CHEBI:32816", +"CHEBI:45253", +"CHEBI:14987", +"CHEBI:15361" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/ccc99777-54dc-42d4-a97e-009b780d3905", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/dc01020e-8c7e-4087-9f56-cf8c962b7437" +], +"hmdb":[ +"HMDB00243" +], +"inchi_key":[ +"LCTONWCANYUPML-UHFFFAOYSA-M" +], +"kegg.compound":[ +"C00022" +], +"lipidmaps":[ +"LMFA01060077" +], +"metanetx.chemical":[ +"MNXM23" +], +"reactome.compound":[ +"1130930", +"5357717", +"113557", +"29398", +"389680" +], +"sabiork":[ +"33" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00020" +] +} +}, +{ +"id":"q8_c", +"name":"Ubiquinone-8", +"compartment":"c", +"charge":0, +"formula":"C49H74O4", +"notes":{ +"original_bigg_ids":[ +"q8_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"q8" +], +"biocyc":[ +"META:UBIQUINONE-8" +], +"chebi":[ +"CHEBI:61683" +], +"inchi_key":[ +"ICFIZJQGJAJRSU-SGHXUWJISA-N" +], +"kegg.compound":[ +"C17569" +], +"lipidmaps":[ +"LMPR02010005" +], +"metanetx.chemical":[ +"MNXM232" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd15560" +] +} +}, +{ +"id":"q8h2_c", +"name":"Ubiquinol-8", +"compartment":"c", +"charge":0, +"formula":"C49H76O4", +"notes":{ +"original_bigg_ids":[ +"q8h2_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"q8h2" +], +"biocyc":[ +"META:CPD-9956" +], +"chebi":[ +"CHEBI:61682" +], +"hmdb":[ +"HMDB01060" +], +"inchi_key":[ +"LOJUQFSPYHMHEO-SGHXUWJISA-N" +], +"metanetx.chemical":[ +"MNXM191" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd29608", +"cpd15561" +] +} +}, +{ +"id":"r5p_c", +"name":"Alpha-D-Ribose 5-phosphate", +"compartment":"c", +"charge":-2, +"formula":"C5H9O8P", +"notes":{ +"original_bigg_ids":[ +"r5p_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"r5p" +], +"biocyc":[ +"META:CPD-15318" +], +"chebi":[ +"CHEBI:18189", +"CHEBI:22413", +"CHEBI:12331", +"CHEBI:10270" +], +"inchi_key":[ +"KTVPXOYAKDPRHY-AIHAYLRMSA-L" +], +"kegg.compound":[ +"C03736" +], +"metanetx.chemical":[ +"MNXM15900" +], +"sabiork":[ +"1473" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd19028" +] +} +}, +{ +"id":"ru5p__D_c", +"name":"D-Ribulose 5-phosphate", +"compartment":"c", +"charge":-2, +"formula":"C5H9O8P", +"notes":{ +"original_bigg_ids":[ +"ru5p_D_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"ru5p__D" +], +"biocyc":[ +"META:RIBULOSE-5P" +], +"chebi":[ +"CHEBI:40192", +"CHEBI:21088", +"CHEBI:17363", +"CHEBI:26572", +"CHEBI:13040", +"CHEBI:37455", +"CHEBI:58121", +"CHEBI:13018", +"CHEBI:4243" +], +"hmdb":[ +"HMDB02033", +"HMDB02694", +"HMDB00618" +], +"inchi_key":[ +"FNZLKVNUWIIPSJ-UHNVWZDZSA-L" +], +"kegg.compound":[ +"C00199" +], +"metanetx.chemical":[ +"MNXM145" +], +"reactome.compound":[ +"29732" +], +"sabiork":[ +"22814", +"1313" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00171" +] +} +}, +{ +"id":"ac_e", +"name":"Acetate", +"compartment":"e", +"charge":-1, +"formula":"C2H3O2", +"notes":{ +"original_bigg_ids":[ +"ac_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"ac" +], +"biocyc":[ +"META:ACET" +], +"chebi":[ +"CHEBI:13704", +"CHEBI:22165", +"CHEBI:22169", +"CHEBI:40480", +"CHEBI:15366", +"CHEBI:2387", +"CHEBI:30089", +"CHEBI:40486" +], +"envipath":[ +"5882df9c-dae1-4d80-a40e-db4724271456/compound/9e26dcbe-4db9-46a0-8614-9f03545032d2", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/5e4989fc-13d3-45d4-ad57-3be380a9d3c0", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/a8f0be58-24e8-441b-8d81-a516a0ead4b3", +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/d45256fe-61fa-4f5b-bb16-91a3d615e3d8", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/b545cabc-8c9e-4b20-8848-efa015b481ea", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/3e2d750f-df31-4445-9255-163c627e9b4a" +], +"hmdb":[ +"HMDB00042" +], +"inchi_key":[ +"QTBSBXVTEAMEQO-UHFFFAOYSA-M" +], +"kegg.compound":[ +"C00033" +], +"kegg.drug":[ +"D00010" +], +"lipidmaps":[ +"LMFA01010002" +], +"metanetx.chemical":[ +"MNXM26" +], +"reactome.compound":[ +"1524044", +"390305", +"113539", +"2022890", +"29416" +], +"sabiork":[ +"1278" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00029" +], +"slm":[ +"000000449" +] +} +}, +{ +"id":"acald_c", +"name":"Acetaldehyde", +"compartment":"c", +"charge":0, +"formula":"C2H4O", +"notes":{ +"original_bigg_ids":[ +"acald_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"acald" +], +"biocyc":[ +"META:ACETALD" +], +"chebi":[ +"CHEBI:40533", +"CHEBI:13703", +"CHEBI:2383", +"CHEBI:22158", +"CHEBI:15343" +], +"envipath":[ +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/9c8865b2-a99d-42e4-a042-c88504f04b51", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/47aa8e53-36ae-4be3-987c-c1cfab66af78", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/ee2c714d-ff9d-4df8-b343-48c1ec76ef0e", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/78f3645f-408e-4001-9dda-a52ea62a15d4" +], +"hmdb":[ +"HMDB00990" +], +"inchi_key":[ +"IKHGUXGNUITLKF-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00084" +], +"metanetx.chemical":[ +"MNXM75" +], +"reactome.compound":[ +"113532", +"29510", +"113681", +"113745" +], +"sabiork":[ +"1292" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00071" +] +} +}, +{ +"id":"s7p_c", +"name":"Sedoheptulose 7-phosphate", +"compartment":"c", +"charge":-2, +"formula":"C7H13O10P", +"notes":{ +"original_bigg_ids":[ +"s7p_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"s7p" +], +"biocyc":[ +"META:D-SEDOHEPTULOSE-7-P" +], +"chebi":[ +"CHEBI:4244", +"CHEBI:15073", +"CHEBI:15721", +"CHEBI:26621", +"CHEBI:9083", +"CHEBI:15074", +"CHEBI:57483" +], +"hmdb":[ +"HMDB01068", +"HMDB62754" +], +"inchi_key":[ +"JDTUMPKOJBQPKX-GBNDHIKLSA-L" +], +"kegg.compound":[ +"C05382" +], +"metanetx.chemical":[ +"MNXM271" +], +"reactome.compound":[ +"29882" +], +"sabiork":[ +"1618", +"1325" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00238" +] +} +}, +{ +"id":"acald_e", +"name":"Acetaldehyde", +"compartment":"e", +"charge":0, +"formula":"C2H4O", +"notes":{ +"original_bigg_ids":[ +"acald_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"acald" +], +"biocyc":[ +"META:ACETALD" +], +"chebi":[ +"CHEBI:40533", +"CHEBI:13703", +"CHEBI:2383", +"CHEBI:22158", +"CHEBI:15343" +], +"envipath":[ +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/9c8865b2-a99d-42e4-a042-c88504f04b51", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/47aa8e53-36ae-4be3-987c-c1cfab66af78", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/ee2c714d-ff9d-4df8-b343-48c1ec76ef0e", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/78f3645f-408e-4001-9dda-a52ea62a15d4" +], +"hmdb":[ +"HMDB00990" +], +"inchi_key":[ +"IKHGUXGNUITLKF-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00084" +], +"metanetx.chemical":[ +"MNXM75" +], +"reactome.compound":[ +"113532", +"29510", +"113681", +"113745" +], +"sabiork":[ +"1292" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00071" +] +} +}, +{ +"id":"accoa_c", +"name":"Acetyl-CoA", +"compartment":"c", +"charge":-4, +"formula":"C23H34N7O17P3S", +"notes":{ +"original_bigg_ids":[ +"accoa_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"accoa" +], +"biocyc":[ +"META:ACETYL-COA" +], +"chebi":[ +"CHEBI:57288", +"CHEBI:22192", +"CHEBI:15351", +"CHEBI:13712", +"CHEBI:2408", +"CHEBI:40470" +], +"envipath":[ +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/57bd5e24-9d14-4b91-bc60-64c8ea6c2d11" +], +"hmdb":[ +"HMDB01206" +], +"inchi_key":[ +"ZSLZBFCDCINBPY-ZSJPKINUSA-J" +], +"kegg.compound":[ +"C00024" +], +"lipidmaps":[ +"LMFA07050029", +"LMFA07050281" +], +"metanetx.chemical":[ +"MNXM21" +], +"reactome.compound":[ +"727753", +"76183", +"113560", +"353123", +"113559" +], +"sabiork":[ +"1276" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00022" +], +"slm":[ +"000000297" +] +} +}, +{ +"id":"succ_c", +"name":"Succinate", +"compartment":"c", +"charge":-2, +"formula":"C4H4O4", +"notes":{ +"original_bigg_ids":[ +"succ_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"succ" +], +"biocyc":[ +"META:SUC" +], +"chebi":[ +"CHEBI:22941", +"CHEBI:26803", +"CHEBI:15741", +"CHEBI:132287", +"CHEBI:45639", +"CHEBI:30779", +"CHEBI:15125", +"CHEBI:22943", +"CHEBI:26807", +"CHEBI:9304", +"CHEBI:90372", +"CHEBI:30031" +], +"envipath":[ +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/cc98aff0-7f64-4db4-9d59-de961c228496", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/6377658b-03f6-4fed-a5bf-ff0f2389b693", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/600b74d3-8fe5-426d-bedf-291175bd23e4", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/8fdfd425-4343-4bf2-8427-b2ffa57fdbd7" +], +"hmdb":[ +"HMDB00254" +], +"inchi_key":[ +"KDYFGRWQOYBRFD-UHFFFAOYSA-L" +], +"kegg.compound":[ +"C00042" +], +"lipidmaps":[ +"LMFA01170043" +], +"metanetx.chemical":[ +"MNXM25" +], +"reactome.compound":[ +"389583", +"5278787", +"159939", +"433123", +"29434", +"113536" +], +"sabiork":[ +"1924" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00036" +] +} +}, +{ +"id":"succ_e", +"name":"Succinate", +"compartment":"e", +"charge":-2, +"formula":"C4H4O4", +"notes":{ +"original_bigg_ids":[ +"succ_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"succ" +], +"biocyc":[ +"META:SUC" +], +"chebi":[ +"CHEBI:22941", +"CHEBI:26803", +"CHEBI:15741", +"CHEBI:132287", +"CHEBI:45639", +"CHEBI:30779", +"CHEBI:15125", +"CHEBI:22943", +"CHEBI:26807", +"CHEBI:9304", +"CHEBI:90372", +"CHEBI:30031" +], +"envipath":[ +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/cc98aff0-7f64-4db4-9d59-de961c228496", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/6377658b-03f6-4fed-a5bf-ff0f2389b693", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/600b74d3-8fe5-426d-bedf-291175bd23e4", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/8fdfd425-4343-4bf2-8427-b2ffa57fdbd7" +], +"hmdb":[ +"HMDB00254" +], +"inchi_key":[ +"KDYFGRWQOYBRFD-UHFFFAOYSA-L" +], +"kegg.compound":[ +"C00042" +], +"lipidmaps":[ +"LMFA01170043" +], +"metanetx.chemical":[ +"MNXM25" +], +"reactome.compound":[ +"389583", +"5278787", +"159939", +"433123", +"29434", +"113536" +], +"sabiork":[ +"1924" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00036" +] +} +}, +{ +"id":"succoa_c", +"name":"Succinyl-CoA", +"compartment":"c", +"charge":-5, +"formula":"C25H35N7O19P3S", +"notes":{ +"original_bigg_ids":[ +"succoa_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"succoa" +], +"biocyc":[ +"META:SUC-COA" +], +"chebi":[ +"CHEBI:57292", +"CHEBI:10746", +"CHEBI:15127", +"CHEBI:15380", +"CHEBI:9310", +"CHEBI:45541", +"CHEBI:26811" +], +"envipath":[ +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/359075fb-98d9-458d-ba82-db4020e753f3" +], +"hmdb":[ +"HMDB01022" +], +"inchi_key":[ +"VNOYUJKHFWYWIR-ITIYDSSPSA-I" +], +"kegg.compound":[ +"C00091" +], +"lipidmaps":[ +"LMFA07050370" +], +"metanetx.chemical":[ +"MNXM92" +], +"reactome.compound":[ +"70958" +], +"sabiork":[ +"1931" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00078" +] +} +}, +{ +"id":"acon_C_c", +"name":"Cis-Aconitate", +"compartment":"c", +"charge":-3, +"formula":"C6H3O6", +"notes":{ +"original_bigg_ids":[ +"acon_C_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"acon_C" +], +"biocyc":[ +"META:CIS-ACONITATE" +], +"chebi":[ +"CHEBI:23306", +"CHEBI:16383", +"CHEBI:12798", +"CHEBI:32805", +"CHEBI:23308", +"CHEBI:10482" +], +"envipath":[ +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/643481e5-a35b-477e-8665-70f4dca66baa" +], +"hmdb":[ +"HMDB00461", +"HMDB00072" +], +"inchi_key":[ +"GTZCVFVGUGFEME-IWQZZHSRSA-K" +], +"kegg.compound":[ +"C00417" +], +"metanetx.chemical":[ +"MNXM813" +], +"sabiork":[ +"2043" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00331" +] +} +}, +{ +"id":"xu5p__D_c", +"name":"D-Xylulose 5-phosphate", +"compartment":"c", +"charge":-2, +"formula":"C5H9O8P", +"notes":{ +"original_bigg_ids":[ +"xu5p_D_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"xu5p__D" +], +"biocyc":[ +"META:XYLULOSE-5-PHOSPHATE" +], +"chebi":[ +"CHEBI:13036", +"CHEBI:27354", +"CHEBI:4269", +"CHEBI:16332", +"CHEBI:57737", +"CHEBI:21121" +], +"hmdb":[ +"HMDB06212", +"HMDB00868" +], +"inchi_key":[ +"FNZLKVNUWIIPSJ-RFZPGFLSSA-L" +], +"kegg.compound":[ +"C00231" +], +"metanetx.chemical":[ +"MNXM186" +], +"reactome.compound":[ +"29790" +], +"sabiork":[ +"1317" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00198" +] +} +}, +{ +"id":"actp_c", +"name":"Acetyl phosphate", +"compartment":"c", +"charge":-2, +"formula":"C2H3O5P", +"notes":{ +"original_bigg_ids":[ +"actp_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"actp" +], +"biocyc":[ +"META:ACETYL-P" +], +"chebi":[ +"CHEBI:13711", +"CHEBI:46262", +"CHEBI:15350", +"CHEBI:22191", +"CHEBI:2407" +], +"hmdb":[ +"HMDB01494" +], +"inchi_key":[ +"LIPOUNRJVLNBCD-UHFFFAOYSA-L" +], +"kegg.compound":[ +"C00227" +], +"metanetx.chemical":[ +"MNXM280" +], +"sabiork":[ +"1316" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00196" +] +} +}, +{ +"id":"adp_c", +"name":"ADP C10H12N5O10P2", +"compartment":"c", +"charge":-3, +"formula":"C10H12N5O10P2", +"notes":{ +"original_bigg_ids":[ +"adp_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"adp" +], +"biocyc":[ +"META:ADP" +], +"chebi":[ +"CHEBI:2342", +"CHEBI:16761", +"CHEBI:456216", +"CHEBI:40553", +"CHEBI:22244", +"CHEBI:87518", +"CHEBI:13222" +], +"hmdb":[ +"HMDB01341" +], +"inchi_key":[ +"XTWYTFMLZFPYCI-KQYNXXCUSA-K" +], +"kegg.compound":[ +"C00008" +], +"kegg.glycan":[ +"G11113" +], +"metanetx.chemical":[ +"MNXM7" +], +"reactome.compound":[ +"114565", +"211606", +"114564", +"6798177", +"5632457", +"5696026", +"8869360", +"29370", +"113581", +"113582" +], +"sabiork":[ +"35" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00008" +] +} +}, +{ +"id":"akg_c", +"name":"2-Oxoglutarate", +"compartment":"c", +"charge":-2, +"formula":"C5H4O5", +"notes":{ +"original_bigg_ids":[ +"akg_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"akg" +], +"biocyc":[ +"META:2-KETOGLUTARATE" +], +"chebi":[ +"CHEBI:40661", +"CHEBI:16810", +"CHEBI:11638", +"CHEBI:30916", +"CHEBI:19749", +"CHEBI:1253", +"CHEBI:30915", +"CHEBI:19748" +], +"envipath":[ +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/5b0a94f6-d411-44fd-bcc1-fb79b4e697f5", +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/6557f3f2-0ab8-494b-a865-8ce0eae788a9" +], +"hmdb":[ +"HMDB00208", +"HMDB02812", +"HMDB62781" +], +"inchi_key":[ +"KPGXRSRHYNQIFN-UHFFFAOYSA-L" +], +"kegg.compound":[ +"C00026" +], +"metanetx.chemical":[ +"MNXM20" +], +"reactome.compound":[ +"113594", +"561075", +"5278317", +"113671", +"29406", +"389537" +], +"sabiork":[ +"1922" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00024" +] +} +}, +{ +"id":"akg_e", +"name":"2-Oxoglutarate", +"compartment":"e", +"charge":-2, +"formula":"C5H4O5", +"notes":{ +"original_bigg_ids":[ +"akg_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"akg" +], +"biocyc":[ +"META:2-KETOGLUTARATE" +], +"chebi":[ +"CHEBI:40661", +"CHEBI:16810", +"CHEBI:11638", +"CHEBI:30916", +"CHEBI:19749", +"CHEBI:1253", +"CHEBI:30915", +"CHEBI:19748" +], +"envipath":[ +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/5b0a94f6-d411-44fd-bcc1-fb79b4e697f5", +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/6557f3f2-0ab8-494b-a865-8ce0eae788a9" +], +"hmdb":[ +"HMDB00208", +"HMDB02812", +"HMDB62781" +], +"inchi_key":[ +"KPGXRSRHYNQIFN-UHFFFAOYSA-L" +], +"kegg.compound":[ +"C00026" +], +"metanetx.chemical":[ +"MNXM20" +], +"reactome.compound":[ +"113594", +"561075", +"5278317", +"113671", +"29406", +"389537" +], +"sabiork":[ +"1922" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00024" +] +} +}, +{ +"id":"amp_c", +"name":"AMP C10H12N5O7P", +"compartment":"c", +"charge":-2, +"formula":"C10H12N5O7P", +"notes":{ +"original_bigg_ids":[ +"amp_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"amp" +], +"biocyc":[ +"META:AMP-GROUP", +"META:AMP" +], +"chebi":[ +"CHEBI:13736", +"CHEBI:2356", +"CHEBI:13234", +"CHEBI:22242", +"CHEBI:40786", +"CHEBI:16027", +"CHEBI:40721", +"CHEBI:40510", +"CHEBI:456215", +"CHEBI:13235", +"CHEBI:22245", +"CHEBI:40726", +"CHEBI:47222", +"CHEBI:13740", +"CHEBI:40826", +"CHEBI:12056" +], +"hmdb":[ +"HMDB00045" +], +"inchi_key":[ +"UDMBCSSLTHHNCD-KQYNXXCUSA-L" +], +"kegg.compound":[ +"C00020" +], +"kegg.drug":[ +"D02769" +], +"metanetx.chemical":[ +"MNXM14" +], +"reactome.compound":[ +"389620", +"159448", +"76577", +"109275", +"164121" +], +"sabiork":[ +"1273" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd22272", +"cpd00018" +] +} +}, +{ +"id":"atp_c", +"name":"ATP C10H12N5O13P3", +"compartment":"c", +"charge":-4, +"formula":"C10H12N5O13P3", +"notes":{ +"original_bigg_ids":[ +"atp_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"atp" +], +"biocyc":[ +"META:ATP" +], +"chebi":[ +"CHEBI:15422", +"CHEBI:10789", +"CHEBI:10841", +"CHEBI:2359", +"CHEBI:22249", +"CHEBI:13236", +"CHEBI:237958", +"CHEBI:30616", +"CHEBI:57299", +"CHEBI:40938" +], +"hmdb":[ +"HMDB00538" +], +"inchi_key":[ +"ZKHQWZAMYRWXGA-KQYNXXCUSA-J" +], +"kegg.compound":[ +"C00002" +], +"kegg.drug":[ +"D08646" +], +"metanetx.chemical":[ +"MNXM3" +], +"reactome.compound":[ +"8878982", +"389573", +"8938081", +"211579", +"113593", +"113592", +"5632460", +"5696069", +"29358", +"8869363", +"6798184" +], +"sabiork":[ +"34" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00002" +] +} +}, +{ +"id":"cit_c", +"name":"Citrate", +"compartment":"c", +"charge":-3, +"formula":"C6H5O7", +"notes":{ +"original_bigg_ids":[ +"cit_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"cit" +], +"biocyc":[ +"META:CIT" +], +"chebi":[ +"CHEBI:35802", +"CHEBI:133748", +"CHEBI:35809", +"CHEBI:76049", +"CHEBI:41523", +"CHEBI:35810", +"CHEBI:30769", +"CHEBI:13999", +"CHEBI:23322", +"CHEBI:35808", +"CHEBI:42563", +"CHEBI:16947", +"CHEBI:132362", +"CHEBI:35804", +"CHEBI:23321", +"CHEBI:3727", +"CHEBI:35806" +], +"hmdb":[ +"HMDB00094" +], +"inchi_key":[ +"KRKNYBCHXYNGOX-UHFFFAOYSA-K" +], +"kegg.compound":[ +"C00158" +], +"kegg.drug":[ +"D00037" +], +"metanetx.chemical":[ +"MNXM131" +], +"reactome.compound":[ +"29654", +"433138", +"76190" +], +"sabiork":[ +"1952" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00137" +] +} +}, +{ +"id":"co2_c", +"name":"CO2 CO2", +"compartment":"c", +"charge":0, +"formula":"CO2", +"notes":{ +"original_bigg_ids":[ +"co2_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"co2" +], +"biocyc":[ +"META:CARBON-DIOXIDE" +], +"chebi":[ +"CHEBI:23011", +"CHEBI:3283", +"CHEBI:48829", +"CHEBI:16526", +"CHEBI:13283", +"CHEBI:13285", +"CHEBI:13284", +"CHEBI:13282" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/2ec3da94-5f50-4525-81b1-5607c5c7a3d3", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/05f60af4-0a3f-4ead-9a29-33bb0f123379" +], +"hmdb":[ +"HMDB01967" +], +"inchi_key":[ +"CURLTUGMZLYLDI-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00011" +], +"kegg.drug":[ +"D00004" +], +"metanetx.chemical":[ +"MNXM13" +], +"reactome.compound":[ +"29376", +"5668565", +"189480", +"1132345", +"113528", +"1237009", +"159751", +"389536", +"159942" +], +"sabiork":[ +"1266" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00011" +] +} +}, +{ +"id":"co2_e", +"name":"CO2 CO2", +"compartment":"e", +"charge":0, +"formula":"CO2", +"notes":{ +"original_bigg_ids":[ +"co2_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"co2" +], +"biocyc":[ +"META:CARBON-DIOXIDE" +], +"chebi":[ +"CHEBI:23011", +"CHEBI:3283", +"CHEBI:48829", +"CHEBI:16526", +"CHEBI:13283", +"CHEBI:13285", +"CHEBI:13284", +"CHEBI:13282" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/2ec3da94-5f50-4525-81b1-5607c5c7a3d3", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/05f60af4-0a3f-4ead-9a29-33bb0f123379" +], +"hmdb":[ +"HMDB01967" +], +"inchi_key":[ +"CURLTUGMZLYLDI-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00011" +], +"kegg.drug":[ +"D00004" +], +"metanetx.chemical":[ +"MNXM13" +], +"reactome.compound":[ +"29376", +"5668565", +"189480", +"1132345", +"113528", +"1237009", +"159751", +"389536", +"159942" +], +"sabiork":[ +"1266" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00011" +] +} +}, +{ +"id":"coa_c", +"name":"Coenzyme A", +"compartment":"c", +"charge":-4, +"formula":"C21H32N7O16P3S", +"notes":{ +"original_bigg_ids":[ +"coa_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"coa" +], +"biocyc":[ +"META:COA-GROUP", +"META:CO-A" +], +"chebi":[ +"CHEBI:41631", +"CHEBI:41597", +"CHEBI:741566", +"CHEBI:23355", +"CHEBI:13295", +"CHEBI:13298", +"CHEBI:57287", +"CHEBI:15346", +"CHEBI:3771", +"CHEBI:13294" +], +"envipath":[ +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/19310484-6aa5-4dcf-b1da-855a8c21ecfd" +], +"hmdb":[ +"HMDB01423", +"HMDB62184" +], +"inchi_key":[ +"RGJOEKWQDUBAIZ-IBOSZNHHSA-J" +], +"kegg.compound":[ +"C00010" +], +"metanetx.chemical":[ +"MNXM12" +], +"reactome.compound":[ +"193514", +"162743", +"2485002", +"1678675", +"29374", +"76194", +"8939024" +], +"sabiork":[ +"1265" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd22528", +"cpd00010" +] +} +}, +{ +"id":"dhap_c", +"name":"Dihydroxyacetone phosphate", +"compartment":"c", +"charge":-2, +"formula":"C3H5O6P", +"notes":{ +"original_bigg_ids":[ +"dhap_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"dhap" +], +"biocyc":[ +"META:DIHYDROXY-ACETONE-PHOSPHATE" +], +"chebi":[ +"CHEBI:14341", +"CHEBI:5454", +"CHEBI:16108", +"CHEBI:14342", +"CHEBI:24355", +"CHEBI:39571", +"CHEBI:57642" +], +"hmdb":[ +"HMDB11735", +"HMDB01473" +], +"inchi_key":[ +"GNGACRATGGDKBX-UHFFFAOYSA-L" +], +"kegg.compound":[ +"C00111" +], +"metanetx.chemical":[ +"MNXM77" +], +"reactome.compound":[ +"390404", +"75970", +"188451" +], +"sabiork":[ +"28" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00095" +] +} +}, +{ +"id":"e4p_c", +"name":"D-Erythrose 4-phosphate", +"compartment":"c", +"charge":-2, +"formula":"C4H7O7P", +"notes":{ +"original_bigg_ids":[ +"e4p_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"e4p" +], +"biocyc":[ +"META:ERYTHROSE-4P" +], +"chebi":[ +"CHEBI:4114", +"CHEBI:20927", +"CHEBI:12921", +"CHEBI:48153", +"CHEBI:16897", +"CHEBI:42349" +], +"hmdb":[ +"HMDB01321" +], +"inchi_key":[ +"NGHMDNPXVRFFGS-IUYQGCFVSA-L" +], +"kegg.compound":[ +"C00279" +], +"metanetx.chemical":[ +"MNXM258" +], +"reactome.compound":[ +"29878" +], +"sabiork":[ +"1324" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00236" +] +} +}, +{ +"id":"etoh_c", +"name":"Ethanol", +"compartment":"c", +"charge":0, +"formula":"C2H6O", +"notes":{ +"original_bigg_ids":[ +"etoh_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"etoh" +], +"biocyc":[ +"META:ETOH" +], +"chebi":[ +"CHEBI:42377", +"CHEBI:23978", +"CHEBI:30880", +"CHEBI:16236", +"CHEBI:52092", +"CHEBI:30878", +"CHEBI:4879", +"CHEBI:44594", +"CHEBI:14222" +], +"envipath":[ +"5882df9c-dae1-4d80-a40e-db4724271456/compound/a4a354fd-5003-4b7b-b11b-f54204aea384", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/f89efe7c-1a6a-4d21-b99c-e3e1070a8062", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/56e18a05-c059-433a-94f6-0e26c01b010f", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/9fb1fbdf-101b-4b82-a596-d2f52c870e4f" +], +"hmdb":[ +"HMDB00108" +], +"inchi_key":[ +"LFQSCWFLJHTTHZ-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00469" +], +"kegg.drug":[ +"D06542", +"D02798", +"D00068", +"D04855" +], +"metanetx.chemical":[ +"MNXM303" +], +"reactome.compound":[ +"113748", +"30203" +], +"sabiork":[ +"56" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00363" +] +} +}, +{ +"id":"etoh_e", +"name":"Ethanol", +"compartment":"e", +"charge":0, +"formula":"C2H6O", +"notes":{ +"original_bigg_ids":[ +"etoh_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"etoh" +], +"biocyc":[ +"META:ETOH" +], +"chebi":[ +"CHEBI:42377", +"CHEBI:23978", +"CHEBI:30880", +"CHEBI:16236", +"CHEBI:52092", +"CHEBI:30878", +"CHEBI:4879", +"CHEBI:44594", +"CHEBI:14222" +], +"envipath":[ +"5882df9c-dae1-4d80-a40e-db4724271456/compound/a4a354fd-5003-4b7b-b11b-f54204aea384", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/f89efe7c-1a6a-4d21-b99c-e3e1070a8062", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/56e18a05-c059-433a-94f6-0e26c01b010f", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/9fb1fbdf-101b-4b82-a596-d2f52c870e4f" +], +"hmdb":[ +"HMDB00108" +], +"inchi_key":[ +"LFQSCWFLJHTTHZ-UHFFFAOYSA-N" +], +"kegg.compound":[ +"C00469" +], +"kegg.drug":[ +"D06542", +"D02798", +"D00068", +"D04855" +], +"metanetx.chemical":[ +"MNXM303" +], +"reactome.compound":[ +"113748", +"30203" +], +"sabiork":[ +"56" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00363" +] +} +}, +{ +"id":"f6p_c", +"name":"D-Fructose 6-phosphate", +"compartment":"c", +"charge":-2, +"formula":"C6H11O9P", +"notes":{ +"original_bigg_ids":[ +"f6p_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"f6p" +], +"biocyc":[ +"META:FRUCTOSE-6P" +], +"chebi":[ +"CHEBI:16084", +"CHEBI:12352", +"CHEBI:57634", +"CHEBI:22768", +"CHEBI:10375", +"CHEBI:42378" +], +"hmdb":[ +"HMDB03971" +], +"inchi_key":[ +"BGWGXPAPYGQALX-ARQDHWQXSA-L" +], +"kegg.compound":[ +"C05345" +], +"metanetx.chemical":[ +"MNXM89621" +], +"sabiork":[ +"25" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd19035" +] +} +}, +{ +"id":"fdp_c", +"name":"D-Fructose 1,6-bisphosphate", +"compartment":"c", +"charge":-4, +"formula":"C6H10O12P2", +"notes":{ +"original_bigg_ids":[ +"fdp_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"fdp" +], +"chebi":[ +"CHEBI:37736", +"CHEBI:49299" +], +"inchi_key":[ +"RNBGYGVWRKECFJ-VRPWFDPXSA-J" +], +"kegg.compound":[ +"C00354" +], +"metanetx.chemical":[ +"MNXM417" +], +"sabiork":[ +"1465" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00290" +] +} +}, +{ +"id":"for_c", +"name":"Formate", +"compartment":"c", +"charge":-1, +"formula":"CH1O2", +"notes":{ +"original_bigg_ids":[ +"for_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"for" +], +"biocyc":[ +"META:CPD1G-1532", +"META:CPD1G-1535", +"META:FORMATE", +"META:CPD-9845", +"META:CPD1G-1534", +"META:CARBOXYL-GROUP", +"META:CPD1G-1533" +], +"chebi":[ +"CHEBI:24081", +"CHEBI:30751", +"CHEBI:15740", +"CHEBI:5145", +"CHEBI:42460", +"CHEBI:14276", +"CHEBI:24082" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/9a9d20ae-b6ec-40a9-93ca-1de20597b1ed", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/09c1ad08-016e-4477-8840-b97a031eae23", +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/bf16ab32-cb3c-4427-a65a-089ab754823e", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/34fe3cd9-9b0b-46b0-a1c5-8a66509f1919", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/1d077cf2-3f9f-4163-aa49-0fca1b2b3ab3" +], +"hmdb":[ +"HMDB00142" +], +"inchi_key":[ +"BDAGIHXWWSANSR-UHFFFAOYSA-M" +], +"kegg.compound":[ +"C00058" +], +"metanetx.chemical":[ +"MNXM39" +], +"reactome.compound":[ +"29460", +"194712", +"389585", +"6801451" +], +"sabiork":[ +"1285" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00047", +"cpd22511" +] +} +}, +{ +"id":"for_e", +"name":"Formate", +"compartment":"e", +"charge":-1, +"formula":"CH1O2", +"notes":{ +"original_bigg_ids":[ +"for_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"for" +], +"biocyc":[ +"META:CPD1G-1532", +"META:CPD1G-1535", +"META:FORMATE", +"META:CPD-9845", +"META:CPD1G-1534", +"META:CARBOXYL-GROUP", +"META:CPD1G-1533" +], +"chebi":[ +"CHEBI:24081", +"CHEBI:30751", +"CHEBI:15740", +"CHEBI:5145", +"CHEBI:42460", +"CHEBI:14276", +"CHEBI:24082" +], +"envipath":[ +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/9a9d20ae-b6ec-40a9-93ca-1de20597b1ed", +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/09c1ad08-016e-4477-8840-b97a031eae23", +"4fd7f3e0-dd25-43ac-9453-dda3e52396e4/compound/bf16ab32-cb3c-4427-a65a-089ab754823e", +"5882df9c-dae1-4d80-a40e-db4724271456/compound/34fe3cd9-9b0b-46b0-a1c5-8a66509f1919", +"650babc9-9d68-4b73-9332-11972ca26f7b/compound/1d077cf2-3f9f-4163-aa49-0fca1b2b3ab3" +], +"hmdb":[ +"HMDB00142" +], +"inchi_key":[ +"BDAGIHXWWSANSR-UHFFFAOYSA-M" +], +"kegg.compound":[ +"C00058" +], +"metanetx.chemical":[ +"MNXM39" +], +"reactome.compound":[ +"29460", +"194712", +"389585", +"6801451" +], +"sabiork":[ +"1285" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00047", +"cpd22511" +] +} +}, +{ +"id":"fru_e", +"name":"D-Fructose", +"compartment":"e", +"charge":0, +"formula":"C6H12O6", +"notes":{ +"original_bigg_ids":[ +"fru_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"fru" +], +"biocyc":[ +"META:D-Fructopyranose", +"META:Fructofuranose", +"META:CPD-15382", +"META:FRU" +], +"chebi":[ +"CHEBI:47424", +"CHEBI:28757", +"CHEBI:24110", +"CHEBI:20929", +"CHEBI:4119", +"CHEBI:15824", +"CHEBI:5172", +"CHEBI:24104", +"CHEBI:12923", +"CHEBI:4118", +"CHEBI:37714", +"CHEBI:37721", +"CHEBI:48095" +], +"hmdb":[ +"HMDB62538" +], +"inchi_key":[ +"RFSUNEUAIZKAJO-VRPWFDPXSA-N" +], +"kegg.compound":[ +"C01496", +"C05003", +"C00095", +"C10906" +], +"kegg.drug":[ +"D00114" +], +"metanetx.chemical":[ +"MNXM175" +], +"reactome.compound":[ +"189049", +"29532" +], +"sabiork":[ +"25055", +"1463", +"1464" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00082", +"cpd19015", +"cpd27040" +] +} +}, +{ +"id":"fum_c", +"name":"Fumarate", +"compartment":"c", +"charge":-2, +"formula":"C4H2O4", +"notes":{ +"original_bigg_ids":[ +"fum_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"fum" +], +"biocyc":[ +"META:FUM" +], +"chebi":[ +"CHEBI:36180", +"CHEBI:37155", +"CHEBI:42511", +"CHEBI:5190", +"CHEBI:18012", +"CHEBI:42743", +"CHEBI:22956", +"CHEBI:22957", +"CHEBI:24124", +"CHEBI:14284", +"CHEBI:37154", +"CHEBI:29806", +"CHEBI:22958", +"CHEBI:24122" +], +"envipath":[ +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/709035ec-4868-4de8-9095-06428f6be14b" +], +"hmdb":[ +"HMDB00134" +], +"inchi_key":[ +"VZCYOOQTPOCHFL-OWOJBTEDSA-L" +], +"kegg.compound":[ +"C00122" +], +"kegg.drug":[ +"D02308" +], +"metanetx.chemical":[ +"MNXM93" +], +"reactome.compound":[ +"113588", +"29586" +], +"sabiork":[ +"1910" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00106" +] +} +}, +{ +"id":"fum_e", +"name":"Fumarate", +"compartment":"e", +"charge":-2, +"formula":"C4H2O4", +"notes":{ +"original_bigg_ids":[ +"fum_e" +] +}, +"annotation":{ +"bigg.metabolite":[ +"fum" +], +"biocyc":[ +"META:FUM" +], +"chebi":[ +"CHEBI:36180", +"CHEBI:37155", +"CHEBI:42511", +"CHEBI:5190", +"CHEBI:18012", +"CHEBI:42743", +"CHEBI:22956", +"CHEBI:22957", +"CHEBI:24124", +"CHEBI:14284", +"CHEBI:37154", +"CHEBI:29806", +"CHEBI:22958", +"CHEBI:24122" +], +"envipath":[ +"32de3cf4-e3e6-4168-956e-32fa5ddb0ce1/compound/709035ec-4868-4de8-9095-06428f6be14b" +], +"hmdb":[ +"HMDB00134" +], +"inchi_key":[ +"VZCYOOQTPOCHFL-OWOJBTEDSA-L" +], +"kegg.compound":[ +"C00122" +], +"kegg.drug":[ +"D02308" +], +"metanetx.chemical":[ +"MNXM93" +], +"reactome.compound":[ +"113588", +"29586" +], +"sabiork":[ +"1910" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00106" +] +} +}, +{ +"id":"g3p_c", +"name":"Glyceraldehyde 3-phosphate", +"compartment":"c", +"charge":-2, +"formula":"C3H5O6P", +"notes":{ +"original_bigg_ids":[ +"g3p_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"g3p" +], +"biocyc":[ +"META:GAP" +], +"chebi":[ +"CHEBI:5446", +"CHEBI:14333", +"CHEBI:12984", +"CHEBI:181", +"CHEBI:17138", +"CHEBI:21026", +"CHEBI:12983", +"CHEBI:18324", +"CHEBI:58027", +"CHEBI:59776", +"CHEBI:29052" +], +"hmdb":[ +"HMDB01112" +], +"inchi_key":[ +"LXJXRIRHZLFYRP-VKHMYHEASA-L" +], +"kegg.compound":[ +"C00661", +"C00118" +], +"metanetx.chemical":[ +"MNXM74" +], +"reactome.compound":[ +"29578" +], +"sabiork":[ +"27", +"1687" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00102", +"cpd19005" +] +} +}, +{ +"id":"g6p_c", +"name":"D-Glucose 6-phosphate", +"compartment":"c", +"charge":-2, +"formula":"C6H11O9P", +"notes":{ +"original_bigg_ids":[ +"g6p_c" +] +}, +"annotation":{ +"bigg.metabolite":[ +"g6p" +], +"biocyc":[ +"META:D-glucopyranose-6-phosphate" +], +"chebi":[ +"CHEBI:61548", +"CHEBI:14314", +"CHEBI:4170" +], +"hmdb":[ +"HMDB01549", +"HMDB01401", +"HMDB06793" +], +"inchi_key":[ +"NBSCHQHZLSJFNQ-GASJEMHNSA-L" +], +"kegg.compound":[ +"C00092" +], +"metanetx.chemical":[ +"MNXM160" +], +"reactome.compound":[ +"1629756" +], +"sabiork":[ +"1404", +"1405" +], +"sbo":"SBO:0000247", +"seed.compound":[ +"cpd00079", +"cpd26836" +] +} +} +], +"reactions":[ +{ +"id":"PFK", +"name":"Phosphofructokinase", +"metabolites":{ +"adp_c":1.0, +"atp_c":-1.0, +"f6p_c":-1.0, +"fdp_c":1.0, +"h_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3916 or b1723", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"PFK" +] +}, +"annotation":{ +"bigg.reaction":[ +"PFK" +], +"ec-code":[ +"2.7.1.11" +], +"metanetx.reaction":[ +"MNXR102507" +], +"rhea":[ +"16111", +"16109", +"16110", +"16112" +], +"sbo":"SBO:0000176" +} +}, +{ +"id":"PFL", +"name":"Pyruvate formate lyase", +"metabolites":{ +"accoa_c":1.0, +"coa_c":-1.0, +"for_c":1.0, +"pyr_c":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"((b0902 and b0903) and b2579) or (b0902 and b0903) or (b0902 and b3114) or (b3951 and b3952)", +"subsystem":"Pyruvate Metabolism", +"notes":{ +"original_bigg_ids":[ +"PFL" +] +}, +"annotation":{ +"bigg.reaction":[ +"PFL" +], +"biocyc":[ +"META:PYRUVFORMLY-RXN" +], +"ec-code":[ +"2.3.1.54" +], +"kegg.reaction":[ +"R00212" +], +"metanetx.reaction":[ +"MNXR102514" +], +"rhea":[ +"11847", +"11845", +"11844", +"11846" +], +"sabiork":[ +"146" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00157" +] +} +}, +{ +"id":"PGI", +"name":"Glucose-6-phosphate isomerase", +"metabolites":{ +"f6p_c":1.0, +"g6p_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b4025", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"PGI" +] +}, +"annotation":{ +"bigg.reaction":[ +"PGI" +], +"biocyc":[ +"META:PGLUCISOM-RXN" +], +"ec-code":[ +"5.3.1.9" +], +"metanetx.reaction":[ +"MNXR102535" +], +"sbo":"SBO:0000176" +} +}, +{ +"id":"PGK", +"name":"Phosphoglycerate kinase", +"metabolites":{ +"13dpg_c":1.0, +"3pg_c":-1.0, +"adp_c":1.0, +"atp_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2926", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"PGK" +] +}, +"annotation":{ +"bigg.reaction":[ +"PGK" +], +"biocyc":[ +"META:PHOSGLYPHOS-RXN" +], +"ec-code":[ +"2.7.2.3" +], +"kegg.reaction":[ +"R01512" +], +"metanetx.reaction":[ +"MNXR102538" +], +"reactome.reaction":[ +"R-ATH-71850", +"R-DME-71850", +"R-GGA-71850", +"R-SPO-71850", +"R-OSA-71850", +"R-GGA-353039", +"R-GGA-353023", +"R-BTA-71850", +"R-CFA-70486", +"R-MMU-71850", +"R-DME-70486", +"R-PFA-71850", +"R-SPO-70486", +"R-SCE-70486", +"R-PFA-70486", +"R-SSC-70486", +"R-ATH-70486", +"R-DRE-70486", +"R-HSA-70486", +"R-OSA-70486", +"R-XTR-71850", +"R-MMU-70486", +"R-RNO-70486", +"R-TGU-70486", +"R-DRE-71850", +"R-SSC-71850", +"R-SCE-71850", +"R-CFA-71850", +"R-XTR-70486", +"R-DDI-70486", +"R-DDI-71850", +"R-RNO-71850", +"R-BTA-70486", +"R-CEL-70486", +"R-HSA-71850", +"R-CEL-71850", +"R-GGA-70486", +"R-TGU-71850" +], +"rhea":[ +"14801", +"14804", +"14802", +"14803" +], +"sabiork":[ +"7644" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn01100" +] +} +}, +{ +"id":"PGL", +"name":"6-phosphogluconolactonase", +"metabolites":{ +"6pgc_c":1.0, +"6pgl_c":-1.0, +"h2o_c":-1.0, +"h_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0767", +"subsystem":"Pentose Phosphate Pathway", +"notes":{ +"original_bigg_ids":[ +"PGL" +] +}, +"annotation":{ +"bigg.reaction":[ +"PGL" +], +"biocyc":[ +"META:6PGLUCONOLACT-RXN" +], +"ec-code":[ +"3.1.1.31" +], +"kegg.reaction":[ +"R02035" +], +"metanetx.reaction":[ +"MNXR102539" +], +"reactome.reaction":[ +"R-OSA-71296", +"R-CFA-71296", +"R-CEL-71296", +"R-GGA-71296", +"R-MMU-71296", +"R-SSC-71296", +"R-BTA-71296", +"R-ATH-71296", +"R-DME-71296", +"R-DRE-71296", +"R-SCE-71296", +"R-HSA-71296", +"R-XTR-71296", +"R-RNO-71296", +"R-DDI-71296", +"R-SPO-71296" +], +"rhea":[ +"12559", +"12556", +"12557", +"12558" +], +"sabiork":[ +"109" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn01476" +] +} +}, +{ +"id":"ACALD", +"name":"Acetaldehyde dehydrogenase (acetylating)", +"metabolites":{ +"acald_c":-1.0, +"accoa_c":1.0, +"coa_c":-1.0, +"h_c":1.0, +"nad_c":-1.0, +"nadh_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0351 or b1241", +"subsystem":"Pyruvate Metabolism", +"notes":{ +"original_bigg_ids":[ +"ACALD" +] +}, +"annotation":{ +"bigg.reaction":[ +"ACALD" +], +"biocyc":[ +"META:ACETALD-DEHYDROG-RXN" +], +"ec-code":[ +"1.2.1.10" +], +"kegg.reaction":[ +"R00228" +], +"metanetx.reaction":[ +"MNXR95210" +], +"rhea":[ +"23290", +"23291", +"23289", +"23288" +], +"sabiork":[ +"163" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00171" +] +} +}, +{ +"id":"AKGt2r", +"name":"2 oxoglutarate reversible transport via symport", +"metabolites":{ +"akg_c":1.0, +"akg_e":-1.0, +"h_c":1.0, +"h_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2587", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"AKGt2r" +] +}, +"annotation":{ +"bigg.reaction":[ +"AKGt2r" +], +"biocyc":[ +"META:TRANS-RXN-23" +], +"metanetx.reaction":[ +"MNXR95661" +], +"rhea":[ +"29011", +"29013", +"29012", +"29014" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn05493", +"rxn08095", +"rxn09827" +] +} +}, +{ +"id":"PGM", +"name":"Phosphoglycerate mutase", +"metabolites":{ +"2pg_c":-1.0, +"3pg_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3612 or b4395 or b0755", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"PGM" +] +}, +"annotation":{ +"bigg.reaction":[ +"PGM" +], +"biocyc":[ +"META:3PGAREARR-RXN", +"META:RXN-15513" +], +"ec-code":[ +"5.4.2.1", +"5.4.2.11", +"5.4.2.12" +], +"kegg.reaction":[ +"R01518" +], +"metanetx.reaction":[ +"MNXR102547" +], +"reactome.reaction":[ +"R-XTR-71654", +"R-SSC-71654", +"R-DME-71445", +"R-XTR-71445", +"R-RNO-71445", +"R-GGA-71654", +"R-SSC-71445", +"R-GGA-71445", +"R-DDI-71654", +"R-SPO-71654", +"R-MMU-71445", +"R-BTA-71445", +"R-CFA-71445", +"R-PFA-71445", +"R-GGA-352994", +"R-TGU-71654", +"R-SPO-71445", +"R-HSA-71445", +"R-ATH-71654", +"R-MMU-71654", +"R-BTA-71654", +"R-GGA-353014", +"R-DRE-71654", +"R-HSA-71654", +"R-CFA-71654", +"R-OSA-71654", +"R-DDI-71445", +"R-RNO-71654", +"R-DRE-71445", +"R-OSA-71445", +"R-PFA-71654", +"R-DME-71654", +"R-TGU-71445", +"R-SCE-71445", +"R-ATH-71445", +"R-SCE-71654" +], +"rhea":[ +"15902", +"15903", +"15901", +"15904" +], +"sabiork":[ +"7641" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn01106" +] +} +}, +{ +"id":"PIt2r", +"name":"Phosphate reversible transport via symport", +"metabolites":{ +"h_c":1.0, +"h_e":-1.0, +"pi_c":1.0, +"pi_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2987 or b3493", +"subsystem":"Inorganic Ion Transport and Metabolism", +"notes":{ +"original_bigg_ids":[ +"PIt2r" +] +}, +"annotation":{ +"bigg.reaction":[ +"PIt2r" +], +"biocyc":[ +"META:TRANS-RXN-114" +], +"metanetx.reaction":[ +"MNXR102872" +], +"rhea":[ +"29939", +"29941", +"29940", +"29942" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn05312", +"rxn09833", +"rxn09811", +"rxn09872", +"rxn09723", +"rxn09120" +] +} +}, +{ +"id":"ALCD2x", +"name":"Alcohol dehydrogenase (ethanol)", +"metabolites":{ +"acald_c":1.0, +"etoh_c":-1.0, +"h_c":1.0, +"nad_c":-1.0, +"nadh_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0356 or b1478 or b1241", +"subsystem":"Pyruvate Metabolism", +"notes":{ +"original_bigg_ids":[ +"ALCD2x" +] +}, +"annotation":{ +"bigg.reaction":[ +"ALCD2x" +], +"biocyc":[ +"META:ALCOHOL-DEHYDROG-RXN" +], +"ec-code":[ +"1.1.1.71", +"1.1.1.1" +], +"kegg.reaction":[ +"R00754" +], +"metanetx.reaction":[ +"MNXR95725" +], +"reactome.reaction":[ +"R-MMU-71707", +"R-XTR-71707", +"R-CFA-71707", +"R-OSA-71707", +"R-RNO-71707", +"R-HSA-71707", +"R-SSC-71707", +"R-GGA-71707", +"R-SPO-71707", +"R-DME-71707", +"R-DRE-71707", +"R-BTA-71707", +"R-ATH-71707", +"R-SCE-71707", +"R-TGU-71707", +"R-CEL-71707", +"R-DDI-71707" +], +"rhea":[ +"25292", +"25290", +"25291", +"25293" +], +"sabiork":[ +"597" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00543" +] +} +}, +{ +"id":"ACALDt", +"name":"Acetaldehyde reversible transport", +"metabolites":{ +"acald_c":1.0, +"acald_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"s0001", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"ACALDt" +] +}, +"annotation":{ +"bigg.reaction":[ +"ACALDt" +], +"metanetx.reaction":[ +"MNXR95212" +], +"reactome.reaction":[ +"R-HSA-449872" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn09700", +"rxn08033", +"rxn13212", +"rxn08032" +] +} +}, +{ +"id":"ACKr", +"name":"Acetate kinase", +"metabolites":{ +"ac_c":-1.0, +"actp_c":1.0, +"adp_c":1.0, +"atp_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3115 or b2296 or b1849", +"subsystem":"Pyruvate Metabolism", +"notes":{ +"original_bigg_ids":[ +"ACKr" +] +}, +"annotation":{ +"bigg.reaction":[ +"ACKr" +], +"biocyc":[ +"META:ACETATEKIN-RXN" +], +"ec-code":[ +"2.7.2.15", +"2.7.2.1" +], +"kegg.reaction":[ +"R00315" +], +"metanetx.reaction":[ +"MNXR95269" +], +"rhea":[ +"11354", +"11355", +"11353", +"11352" +], +"sabiork":[ +"71" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00225" +] +} +}, +{ +"id":"PPC", +"name":"Phosphoenolpyruvate carboxylase", +"metabolites":{ +"co2_c":-1.0, +"h2o_c":-1.0, +"h_c":1.0, +"oaa_c":1.0, +"pep_c":-1.0, +"pi_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3956", +"subsystem":"Anaplerotic reactions", +"notes":{ +"original_bigg_ids":[ +"PPC" +] +}, +"annotation":{ +"bigg.reaction":[ +"PPC" +], +"ec-code":[ +"4.1.1.31" +], +"kegg.reaction":[ +"R00345" +], +"metanetx.reaction":[ +"MNXR103096" +], +"rhea":[ +"23073", +"23072", +"23075", +"23074" +], +"sabiork":[ +"150" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00251" +] +} +}, +{ +"id":"ACONTa", +"name":"Aconitase (half-reaction A, Citrate hydro-lyase)", +"metabolites":{ +"acon_C_c":1.0, +"cit_c":-1.0, +"h2o_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0118 or b1276", +"subsystem":"Citric Acid Cycle", +"notes":{ +"original_bigg_ids":[ +"ACONTa" +] +}, +"annotation":{ +"bigg.reaction":[ +"ACONTa" +], +"biocyc":[ +"META:ACONITATEDEHYDR-RXN" +], +"ec-code":[ +"4.2.1.3" +], +"kegg.reaction":[ +"R01325" +], +"metanetx.reaction":[ +"MNXR95386" +], +"rhea":[ +"10230", +"10229", +"10231", +"10228" +], +"sabiork":[ +"268" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00974" +] +} +}, +{ +"id":"ACONTb", +"name":"Aconitase (half-reaction B, Isocitrate hydro-lyase)", +"metabolites":{ +"acon_C_c":-1.0, +"h2o_c":-1.0, +"icit_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0118 or b1276", +"subsystem":"Citric Acid Cycle", +"notes":{ +"original_bigg_ids":[ +"ACONTb" +] +}, +"annotation":{ +"bigg.reaction":[ +"ACONTb" +], +"ec-code":[ +"4.2.1.3" +], +"kegg.reaction":[ +"R01900" +], +"metanetx.reaction":[ +"MNXR95387" +], +"rhea":[ +"22145", +"22144", +"22146", +"22147" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn01388" +] +} +}, +{ +"id":"ATPM", +"name":"ATP maintenance requirement", +"metabolites":{ +"adp_c":1.0, +"atp_c":-1.0, +"h2o_c":-1.0, +"h_c":1.0, +"pi_c":1.0 +}, +"lower_bound":8.39, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Biomass and maintenance functions", +"notes":{ +"original_bigg_ids":[ +"ATPM" +] +}, +"annotation":{ +"bigg.reaction":[ +"ATPM" +], +"biocyc":[ +"META:ATPASE-RXN" +], +"ec-code":[ +"3.6.1.5", +"3.6.3.34", +"3.6.3.20", +"3.6.3.53", +"3.6.3.8", +"3.6.3.32", +"3.6.4.12", +"3.6.3.48", +"3.6.3.40", +"3.6.3.9", +"3.6.3.23", +"3.6.3.22", +"3.6.3.54", +"3.6.3.1", +"3.6.1.8", +"3.6.3.29", +"3.6.3.17", +"3.6.3.50", +"3.6.3.39", +"3.6.3.19", +"3.6.3.4", +"3.6.3.35", +"3.6.3.16", +"3.6.4.4", +"3.6.3.37", +"3.6.4.8", +"3.6.3.31", +"3.6.3.6", +"3.6.4.5", +"3.6.3.52", +"3.6.3.2", +"3.6.3.14", +"3.6.3.51", +"3.6.3.25", +"3.6.3.38", +"3.6.3.33", +"3.6.3.43", +"3.6.4.10", +"3.6.4.13", +"3.6.3.3", +"3.6.3.10", +"3.6.3.24", +"3.6.3.44", +"3.6.3.15", +"3.6.3.5", +"3.6.1.3", +"3.6.1.15", +"3.6.4.2", +"3.6.4.3", +"3.6.3.42", +"3.6.3.11", +"3.6.3.28", +"3.6.3.30", +"3.6.4.1", +"3.6.4.11", +"3.6.3.47", +"3.6.4.6", +"3.6.3.36", +"3.6.3.21", +"3.6.3.12", +"3.6.3.18", +"3.6.3.26", +"3.6.3.27", +"3.6.3.7", +"3.6.4.9", +"3.6.4.7", +"3.6.3.46", +"3.6.3.41", +"3.6.3.49" +], +"kegg.reaction":[ +"R00086" +], +"metanetx.reaction":[ +"MNXR96131" +], +"rhea":[ +"13066", +"13065", +"13068", +"13067" +], +"sabiork":[ +"75" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn11300", +"rxn09694", +"rxn00062" +] +} +}, +{ +"id":"PPCK", +"name":"Phosphoenolpyruvate carboxykinase", +"metabolites":{ +"adp_c":1.0, +"atp_c":-1.0, +"co2_c":1.0, +"oaa_c":-1.0, +"pep_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3403", +"subsystem":"Anaplerotic reactions", +"notes":{ +"original_bigg_ids":[ +"PPCK" +] +}, +"annotation":{ +"bigg.reaction":[ +"PPCK" +], +"biocyc":[ +"META:PEPCARBOXYKIN-RXN" +], +"ec-code":[ +"4.1.1.49" +], +"kegg.reaction":[ +"R00341" +], +"metanetx.reaction":[ +"MNXR103099" +], +"rhea":[ +"18620", +"18618", +"18617", +"18619" +], +"sabiork":[ +"151" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00247" +] +} +}, +{ +"id":"ACt2r", +"name":"Acetate reversible transport via proton symport", +"metabolites":{ +"ac_c":1.0, +"ac_e":-1.0, +"h_c":1.0, +"h_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"ACt2r" +] +}, +"annotation":{ +"bigg.reaction":[ +"ACt2r" +], +"biocyc":[ +"META:TRANS-RXN0-571" +], +"metanetx.reaction":[ +"MNXR95429" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn08061", +"rxn05488" +] +} +}, +{ +"id":"PPS", +"name":"Phosphoenolpyruvate synthase", +"metabolites":{ +"amp_c":1.0, +"atp_c":-1.0, +"h2o_c":-1.0, +"h_c":2.0, +"pep_c":1.0, +"pi_c":1.0, +"pyr_c":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1702", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"PPS" +] +}, +"annotation":{ +"bigg.reaction":[ +"PPS" +], +"biocyc":[ +"META:PEPSYNTH-RXN" +], +"ec-code":[ +"2.7.9.2" +], +"kegg.reaction":[ +"R00199" +], +"metanetx.reaction":[ +"MNXR103140" +], +"rhea":[ +"11364", +"11367", +"11366", +"11365" +], +"sabiork":[ +"148" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00147" +] +} +}, +{ +"id":"ADK1", +"name":"Adenylate kinase", +"metabolites":{ +"adp_c":2.0, +"amp_c":-1.0, +"atp_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0474", +"subsystem":"Oxidative Phosphorylation", +"notes":{ +"original_bigg_ids":[ +"ADK1" +] +}, +"annotation":{ +"bigg.reaction":[ +"ADK1" +], +"biocyc":[ +"META:ADENYL-KIN-RXN" +], +"ec-code":[ +"2.7.4.3" +], +"kegg.reaction":[ +"R00127" +], +"metanetx.reaction":[ +"MNXR95450" +], +"reactome.reaction":[ +"R-ATH-110145", +"R-SSC-110144", +"R-ATH-110144", +"R-SSC-110145", +"R-GGA-110145", +"R-PFA-110144", +"R-HSA-110145", +"R-RNO-110144", +"R-OSA-110145", +"R-SCE-110145", +"R-RNO-110145", +"R-XTR-110144", +"R-SCE-110144", +"R-PFA-110145", +"R-OSA-110144", +"R-HSA-110144", +"R-BTA-110144", +"R-DRE-110145", +"R-DRE-110144", +"R-SPO-110145", +"R-CEL-110144", +"R-CFA-110144", +"R-XTR-110145", +"R-MMU-110144", +"R-DME-110144", +"R-SPO-110144", +"R-DDI-110145", +"R-GGA-110144", +"R-TGU-110144", +"R-BTA-110145", +"R-CEL-110145", +"R-CFA-110145", +"R-DME-110145", +"R-TGU-110145", +"R-DDI-110144", +"R-MMU-110145" +], +"rhea":[ +"12975", +"12973", +"12976", +"12974" +], +"sabiork":[ +"82" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00097" +] +} +}, +{ +"id":"AKGDH", +"name":"2-Oxogluterate dehydrogenase", +"metabolites":{ +"akg_c":-1.0, +"co2_c":1.0, +"coa_c":-1.0, +"nad_c":-1.0, +"nadh_c":1.0, +"succoa_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0116 and b0726 and b0727", +"subsystem":"Citric Acid Cycle", +"notes":{ +"original_bigg_ids":[ +"AKGDH" +] +}, +"annotation":{ +"bigg.reaction":[ +"AKGDH" +], +"biocyc":[ +"META:2OXOGLUTARATEDEH-RXN" +], +"ec-code":[ +"1.2.1.52", +"2.3.1.61", +"1.8.1.4", +"1.2.4.2" +], +"kegg.reaction":[ +"R08549" +], +"metanetx.reaction":[ +"MNXR95655" +], +"reactome.reaction":[ +"R-PFA-71401", +"R-XTR-71401", +"R-SCE-71401", +"R-SSC-71401", +"R-TGU-71401", +"R-ATH-71401", +"R-OSA-71401", +"R-SPO-71401", +"R-CEL-71401", +"R-RNO-71401", +"R-DRE-71401", +"R-GGA-373042", +"R-DDI-71401", +"R-CFA-71401", +"R-HSA-71401", +"R-BTA-71401", +"R-DME-71401", +"R-MMU-71401", +"R-GGA-71401" +], +"rhea":[ +"27789", +"27788", +"27786", +"27787" +], +"sabiork":[ +"8163" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn08094" +] +} +}, +{ +"id":"ATPS4r", +"name":"ATP synthase (four protons for one ATP)", +"metabolites":{ +"adp_c":-1.0, +"atp_c":1.0, +"h2o_c":1.0, +"h_c":3.0, +"h_e":-4.0, +"pi_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"((b3736 and b3737 and b3738) and (b3731 and b3732 and b3733 and b3734 and b3735)) or ((b3736 and b3737 and b3738) and (b3731 and b3732 and b3733 and b3734 and b3735) and b3739)", +"subsystem":"Oxidative Phosphorylation", +"notes":{ +"original_bigg_ids":[ +"ATPS4r" +] +}, +"annotation":{ +"bigg.reaction":[ +"ATPS4r" +], +"biocyc":[ +"META:ATPSYN-RXN" +], +"ec-code":[ +"3.6.3.14" +], +"metanetx.reaction":[ +"MNXR96136" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn08173", +"rxn10042" +] +} +}, +{ +"id":"PTAr", +"name":"Phosphotransacetylase", +"metabolites":{ +"accoa_c":-1.0, +"actp_c":1.0, +"coa_c":1.0, +"pi_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2297 or b2458", +"subsystem":"Pyruvate Metabolism", +"notes":{ +"original_bigg_ids":[ +"PTAr" +] +}, +"annotation":{ +"bigg.reaction":[ +"PTAr" +], +"biocyc":[ +"META:PHOSACETYLTRANS-RXN" +], +"ec-code":[ +"2.3.1.8" +], +"kegg.reaction":[ +"R00230" +], +"metanetx.reaction":[ +"MNXR103319" +], +"rhea":[ +"19521", +"19523", +"19522", +"19524" +], +"sabiork":[ +"72" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00173" +] +} +}, +{ +"id":"PYK", +"name":"Pyruvate kinase", +"metabolites":{ +"adp_c":-1.0, +"atp_c":1.0, +"h_c":-1.0, +"pep_c":-1.0, +"pyr_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1854 or b1676", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"PYK" +] +}, +"annotation":{ +"bigg.reaction":[ +"PYK" +], +"biocyc":[ +"META:PEPDEPHOS-RXN" +], +"ec-code":[ +"2.7.1.40" +], +"kegg.reaction":[ +"R00200" +], +"metanetx.reaction":[ +"MNXR103371" +], +"reactome.reaction":[ +"R-SSC-71670", +"R-GGA-353056", +"R-DRE-71670", +"R-OSA-71670", +"R-SPO-71670", +"R-DDI-71670", +"R-SCE-71670", +"R-CEL-71670", +"R-PFA-71670", +"R-HSA-71670", +"R-TGU-71670", +"R-DME-71670", +"R-ATH-71670", +"R-BTA-71670", +"R-MMU-71670", +"R-RNO-71670", +"R-GGA-71670", +"R-CFA-71670", +"R-XTR-71670" +], +"rhea":[ +"18160", +"18159", +"18158", +"18157" +], +"sabiork":[ +"9" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00148" +] +} +}, +{ +"id":"BIOMASS_Ecoli_core_w_GAM", +"name":"Biomass Objective Function with GAM", +"metabolites":{ +"3pg_c":-1.496, +"accoa_c":-3.7478, +"adp_c":59.81, +"akg_c":4.1182, +"atp_c":-59.81, +"coa_c":3.7478, +"e4p_c":-0.361, +"f6p_c":-0.0709, +"g3p_c":-0.129, +"g6p_c":-0.205, +"gln__L_c":-0.2557, +"glu__L_c":-4.9414, +"h2o_c":-59.81, +"h_c":59.81, +"nad_c":-3.547, +"nadh_c":3.547, +"nadp_c":13.0279, +"nadph_c":-13.0279, +"oaa_c":-1.7867, +"pep_c":-0.5191, +"pi_c":59.81, +"pyr_c":-2.8328, +"r5p_c":-0.8977 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"objective_coefficient":1.0, +"subsystem":"Biomass and maintenance functions", +"notes":{ +"original_bigg_ids":[ +"Biomass_Ecoli_core_w_GAM" +] +}, +"annotation":{ +"bigg.reaction":[ +"BIOMASS_Ecoli_core_w_GAM" +], +"metanetx.reaction":[ +"MNXR96280" +], +"sbo":"SBO:0000629" +} +}, +{ +"id":"PYRt2", +"name":"Pyruvate transport in via proton symport", +"metabolites":{ +"h_c":1.0, +"h_e":-1.0, +"pyr_c":1.0, +"pyr_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"PYRt2r" +] +}, +"annotation":{ +"bigg.reaction":[ +"PYRt2" +], +"metanetx.reaction":[ +"MNXR103385" +], +"reactome.reaction":[ +"R-RNO-372347", +"R-HSA-372342", +"R-GGA-372359" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn05469", +"rxn09832", +"rxn09717", +"rxn09217" +] +} +}, +{ +"id":"CO2t", +"name":"CO2 transporter via diffusion", +"metabolites":{ +"co2_c":1.0, +"co2_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"s0001", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"CO2t" +] +}, +"annotation":{ +"bigg.reaction":[ +"CO2t" +], +"biocyc":[ +"META:TRANS-RXN0-545" +], +"metanetx.reaction":[ +"MNXR96810" +], +"reactome.reaction":[ +"R-DDI-1247645", +"R-CFA-1237069", +"R-TGU-1247649", +"R-CFA-1237042", +"R-CEL-1247645", +"R-XTR-1237069", +"R-HSA-1247645", +"R-OSA-1237042", +"R-GGA-1237042", +"R-BTA-1247645", +"R-GGA-1247649", +"R-RNO-1247645", +"R-XTR-1247645", +"R-TGU-1237042", +"R-SCE-1247649", +"R-MMU-1247649", +"R-CFA-1247649", +"R-GGA-1247645", +"R-SSC-1247645", +"R-BTA-1237069", +"R-RNO-1237069", +"R-SCE-1237042", +"R-DDI-1247649", +"R-SSC-1237042", +"R-DRE-1247649", +"R-DRE-1237042", +"R-DDI-1237042", +"R-DME-1237042", +"R-MMU-1237042", +"R-SSC-1247649", +"R-TGU-1237069", +"R-BTA-1247649", +"R-CFA-1247645", +"R-RNO-1247649", +"R-HSA-1237069", +"R-CEL-1237069", +"R-DDI-1237069", +"R-MMU-1237069", +"R-DME-1247645", +"R-ATH-1237042", +"R-OSA-1247649", +"R-HSA-1237042", +"R-DRE-1247645", +"R-HSA-1247649", +"R-MMU-1247645", +"R-DME-1237069", +"R-RNO-1237042", +"R-TGU-1247645", +"R-BTA-1237042", +"R-GGA-1237069", +"R-DME-1247649", +"R-SSC-1237069", +"R-DRE-1237069", +"R-ATH-1247649" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn05467", +"rxn08237", +"rxn09706", +"rxn09821", +"rxn09775", +"rxn09876", +"rxn08238", +"rxn09860" +] +} +}, +{ +"id":"RPE", +"name":"Ribulose 5-phosphate 3-epimerase", +"metabolites":{ +"ru5p__D_c":-1.0, +"xu5p__D_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3386 or b4301", +"subsystem":"Pentose Phosphate Pathway", +"notes":{ +"original_bigg_ids":[ +"RPE" +] +}, +"annotation":{ +"bigg.reaction":[ +"RPE" +], +"biocyc":[ +"META:RIBULP3EPIM-RXN" +], +"ec-code":[ +"5.1.3.1" +], +"kegg.reaction":[ +"R01529" +], +"metanetx.reaction":[ +"MNXR104083" +], +"reactome.reaction":[ +"R-SPO-71303", +"R-CFA-199803", +"R-ATH-71303", +"R-SCE-71303", +"R-CFA-71303", +"R-DME-199803", +"R-XTR-199803", +"R-SSC-199803", +"R-GGA-199803", +"R-TGU-71303", +"R-OSA-199803", +"R-SSC-71303", +"R-MMU-71303", +"R-OSA-71303", +"R-HSA-71303", +"R-MMU-199803", +"R-XTR-71303", +"R-SPO-199803", +"R-SCE-199803", +"R-DDI-71303", +"R-RNO-71303", +"R-DME-71303", +"R-HSA-199803", +"R-DRE-71303", +"R-PFA-199803", +"R-CEL-199803", +"R-RNO-199803", +"R-PFA-71303", +"R-CEL-71303", +"R-TGU-199803", +"R-GGA-71303", +"R-DDI-199803", +"R-BTA-71303", +"R-ATH-199803", +"R-DRE-199803", +"R-BTA-199803" +], +"rhea":[ +"13677", +"13680", +"13678", +"13679" +], +"sabiork":[ +"62" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn01116" +] +} +}, +{ +"id":"CS", +"name":"Citrate synthase", +"metabolites":{ +"accoa_c":-1.0, +"cit_c":1.0, +"coa_c":1.0, +"h2o_c":-1.0, +"h_c":1.0, +"oaa_c":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0720", +"subsystem":"Citric Acid Cycle", +"notes":{ +"original_bigg_ids":[ +"CS" +] +}, +"annotation":{ +"bigg.reaction":[ +"CS" +], +"biocyc":[ +"META:CITSYN-RXN", +"META:RXN-14905" +], +"ec-code":[ +"2.3.3.16", +"2.3.3.1", +"2.3.3.3" +], +"kegg.reaction":[ +"R00351" +], +"metanetx.reaction":[ +"MNXR96920" +], +"reactome.reaction":[ +"R-GGA-373006", +"R-GGA-70975", +"R-CEL-70975", +"R-HSA-70975", +"R-DRE-70975", +"R-MMU-70975", +"R-ATH-70975", +"R-SPO-70975", +"R-OSA-70975", +"R-SCE-70975", +"R-SSC-70975", +"R-DDI-70975", +"R-RNO-70975", +"R-DME-70975", +"R-PFA-70975", +"R-XTR-70975", +"R-CFA-70975", +"R-BTA-70975" +], +"rhea":[ +"16847", +"16846", +"16845", +"16848" +], +"sabiork":[ +"267" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00256" +] +} +}, +{ +"id":"RPI", +"name":"Ribose-5-phosphate isomerase", +"metabolites":{ +"r5p_c":-1.0, +"ru5p__D_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2914 or b4090", +"subsystem":"Pentose Phosphate Pathway", +"notes":{ +"original_bigg_ids":[ +"RPI" +] +}, +"annotation":{ +"bigg.reaction":[ +"RPI" +], +"ec-code":[ +"5.3.1.6" +], +"metanetx.reaction":[ +"MNXR104084" +], +"sbo":"SBO:0000176" +} +}, +{ +"id":"SUCCt2_2", +"name":"Succinate transport via proton symport (2 H)", +"metabolites":{ +"h_c":2.0, +"h_e":-2.0, +"succ_c":1.0, +"succ_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3528", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"SUCCt2_2" +] +}, +"annotation":{ +"bigg.reaction":[ +"SUCCt2_2" +], +"biocyc":[ +"META:TRANS-RXN-121" +], +"metanetx.reaction":[ +"MNXR104620" +], +"rhea":[ +"29305", +"29306", +"29304", +"29303" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn10154", +"rxn09269" +] +} +}, +{ +"id":"CYTBD", +"name":"Cytochrome oxidase bd (ubiquinol-8: 2 protons)", +"metabolites":{ +"h2o_c":1.0, +"h_c":-2.0, +"h_e":2.0, +"o2_c":-0.5, +"q8_c":1.0, +"q8h2_c":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"(b0978 and b0979) or (b0733 and b0734)", +"subsystem":"Oxidative Phosphorylation", +"notes":{ +"original_bigg_ids":[ +"CYTBD" +] +}, +"annotation":{ +"bigg.reaction":[ +"CYTBD" +], +"metanetx.reaction":[ +"MNXR97031" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn12494", +"rxn10112", +"rxn08288" +] +} +}, +{ +"id":"D_LACt2", +"name":"D lactate transport via proton symport", +"metabolites":{ +"h_c":1.0, +"h_e":-1.0, +"lac__D_c":1.0, +"lac__D_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2975 or b3603", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"D_LACt2" +] +}, +"annotation":{ +"bigg.reaction":[ +"D_LACt2" +], +"biocyc":[ +"META:TRANS-RXN0-515" +], +"metanetx.reaction":[ +"MNXR97838" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn10171", +"rxn09772", +"rxn08350" +] +} +}, +{ +"id":"ENO", +"name":"Enolase", +"metabolites":{ +"2pg_c":-1.0, +"h2o_c":1.0, +"pep_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2779", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"ENO" +] +}, +"annotation":{ +"bigg.reaction":[ +"ENO" +], +"biocyc":[ +"META:2PGADEHYDRAT-RXN" +], +"ec-code":[ +"4.2.1.11" +], +"kegg.reaction":[ +"R00658" +], +"metanetx.reaction":[ +"MNXR97932" +], +"reactome.reaction":[ +"R-BTA-71660", +"R-RNO-70494", +"R-TGU-71660", +"R-SSC-71660", +"R-GGA-352981", +"R-DME-70494", +"R-CFA-70494", +"R-OSA-70494", +"R-SCE-71660", +"R-GGA-353044", +"R-CFA-71660", +"R-GGA-70494", +"R-PFA-71660", +"R-SPO-71660", +"R-SPO-70494", +"R-DDI-70494", +"R-RNO-71660", +"R-MMU-70494", +"R-ATH-70494", +"R-SCE-70494", +"R-SSC-70494", +"R-HSA-70494", +"R-DME-71660", +"R-CEL-71660", +"R-HSA-71660", +"R-TGU-70494", +"R-XTR-71660", +"R-DRE-70494", +"R-DRE-71660", +"R-MMU-71660", +"R-ATH-71660", +"R-BTA-70494", +"R-CEL-70494", +"R-XTR-70494", +"R-DDI-71660", +"R-OSA-71660", +"R-PFA-70494", +"R-GGA-71660" +], +"rhea":[ +"10166", +"10165", +"10164", +"10167" +], +"sabiork":[ +"8" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00459" +] +} +}, +{ +"id":"SUCCt3", +"name":"Succinate transport out via proton antiport", +"metabolites":{ +"h_c":1.0, +"h_e":-1.0, +"succ_c":-1.0, +"succ_e":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"SUCCt3" +] +}, +"annotation":{ +"bigg.reaction":[ +"SUCCt3" +], +"metanetx.reaction":[ +"MNXR104623" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn09270" +] +} +}, +{ +"id":"ETOHt2r", +"name":"Ethanol reversible transport via proton symport", +"metabolites":{ +"etoh_c":1.0, +"etoh_e":-1.0, +"h_c":1.0, +"h_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"ETOHt2r" +] +}, +"annotation":{ +"bigg.reaction":[ +"ETOHt2r" +], +"metanetx.reaction":[ +"MNXR97981" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn10146", +"rxn08427" +] +} +}, +{ +"id":"SUCDi", +"name":"Succinate dehydrogenase (irreversible)", +"metabolites":{ +"fum_c":1.0, +"q8_c":-1.0, +"q8h2_c":1.0, +"succ_c":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0721 and b0722 and b0723 and b0724", +"subsystem":"Oxidative Phosphorylation", +"notes":{ +"original_bigg_ids":[ +"SUCDi" +] +}, +"annotation":{ +"bigg.reaction":[ +"SUCDi" +], +"metanetx.reaction":[ +"MNXR99641" +], +"rhea":[ +"29190", +"29189", +"29187", +"29188" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn09272" +] +} +}, +{ +"id":"SUCOAS", +"name":"Succinyl-CoA synthetase (ADP-forming)", +"metabolites":{ +"adp_c":1.0, +"atp_c":-1.0, +"coa_c":-1.0, +"pi_c":1.0, +"succ_c":-1.0, +"succoa_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0728 and b0729", +"subsystem":"Citric Acid Cycle", +"notes":{ +"original_bigg_ids":[ +"SUCOAS" +] +}, +"annotation":{ +"bigg.reaction":[ +"SUCOAS" +], +"biocyc":[ +"META:SUCCCOASYN-RXN" +], +"ec-code":[ +"6.2.1.5" +], +"kegg.reaction":[ +"R00405" +], +"metanetx.reaction":[ +"MNXR104635" +], +"reactome.reaction":[ +"R-BTA-70997", +"R-GGA-372977", +"R-PFA-70997", +"R-GGA-373134", +"R-TGU-70997", +"R-XTR-70997", +"R-SSC-70997", +"R-HSA-70997", +"R-DRE-70997", +"R-SCE-70997", +"R-SPO-70997", +"R-DDI-70997", +"R-CFA-70997", +"R-OSA-70997", +"R-GGA-70997", +"R-RNO-70997", +"R-ATH-70997", +"R-MMU-70997" +], +"rhea":[ +"17664", +"17663", +"17662", +"17661" +], +"sabiork":[ +"260" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00285" +] +} +}, +{ +"id":"TALA", +"name":"Transaldolase", +"metabolites":{ +"e4p_c":1.0, +"f6p_c":1.0, +"g3p_c":-1.0, +"s7p_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2464 or b0008", +"subsystem":"Pentose Phosphate Pathway", +"notes":{ +"original_bigg_ids":[ +"TALA" +] +}, +"annotation":{ +"bigg.reaction":[ +"TALA" +], +"biocyc":[ +"META:TRANSALDOL-RXN" +], +"ec-code":[ +"2.2.1.2" +], +"kegg.reaction":[ +"R01827" +], +"metanetx.reaction":[ +"MNXR104715" +], +"rhea":[ +"17056", +"17055", +"17054", +"17053" +], +"sbo":"SBO:0000176" +} +}, +{ +"id":"THD2", +"name":"NAD(P) transhydrogenase", +"metabolites":{ +"h_c":2.0, +"h_e":-2.0, +"nad_c":1.0, +"nadh_c":-1.0, +"nadp_c":-1.0, +"nadph_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1602 and b1603", +"subsystem":"Oxidative Phosphorylation", +"notes":{ +"original_bigg_ids":[ +"THD2" +] +}, +"annotation":{ +"bigg.reaction":[ +"THD2" +], +"ec-code":[ +"1.6.1.1" +], +"metanetx.reaction":[ +"MNXR104805" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn10125", +"rxn09295" +] +} +}, +{ +"id":"TKT1", +"name":"Transketolase", +"metabolites":{ +"g3p_c":1.0, +"r5p_c":-1.0, +"s7p_c":1.0, +"xu5p__D_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2935 or b2465", +"subsystem":"Pentose Phosphate Pathway", +"notes":{ +"original_bigg_ids":[ +"TKT1" +] +}, +"annotation":{ +"bigg.reaction":[ +"TKT1" +], +"ec-code":[ +"2.2.1.1" +], +"metanetx.reaction":[ +"MNXR104868" +], +"sbo":"SBO:0000176" +} +}, +{ +"id":"TKT2", +"name":"Transketolase", +"metabolites":{ +"e4p_c":-1.0, +"f6p_c":1.0, +"g3p_c":1.0, +"xu5p__D_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2935 or b2465", +"subsystem":"Pentose Phosphate Pathway", +"notes":{ +"original_bigg_ids":[ +"TKT2" +] +}, +"annotation":{ +"bigg.reaction":[ +"TKT2" +], +"biocyc":[ +"META:2TRANSKETO-RXN" +], +"ec-code":[ +"2.2.1.1" +], +"kegg.reaction":[ +"R01830" +], +"metanetx.reaction":[ +"MNXR104869" +], +"rhea":[ +"27627", +"27628", +"27626", +"27629" +], +"sbo":"SBO:0000176" +} +}, +{ +"id":"TPI", +"name":"Triose-phosphate isomerase", +"metabolites":{ +"dhap_c":-1.0, +"g3p_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3919", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"TPI" +] +}, +"annotation":{ +"bigg.reaction":[ +"TPI" +], +"biocyc":[ +"META:TRIOSEPISOMERIZATION-RXN" +], +"ec-code":[ +"5.3.1.1" +], +"kegg.reaction":[ +"R01015" +], +"metanetx.reaction":[ +"MNXR104918" +], +"reactome.reaction":[ +"R-RNO-70481", +"R-MMU-70481", +"R-XTR-70481", +"R-SSC-70481", +"R-GGA-352927", +"R-SCE-70454", +"R-CEL-70481", +"R-PFA-70454", +"R-XTR-70454", +"R-BTA-70481", +"R-BTA-70454", +"R-GGA-352914", +"R-ATH-70481", +"R-CFA-70454", +"R-OSA-70454", +"R-HSA-70481", +"R-DRE-70454", +"R-DME-70481", +"R-OSA-70481", +"R-DRE-70481", +"R-ATH-70454", +"R-HSA-70454", +"R-SSC-70454", +"R-DDI-70454", +"R-SCE-70481", +"R-CFA-70481", +"R-PFA-70481", +"R-DDI-70481", +"R-SPO-70454", +"R-SPO-70481", +"R-RNO-70454", +"R-MMU-70454", +"R-CEL-70454", +"R-GGA-70481", +"R-GGA-70454", +"R-DME-70454" +], +"rhea":[ +"18587", +"18588", +"18586", +"18585" +], +"sabiork":[ +"4" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00747" +] +} +}, +{ +"id":"EX_ac_e", +"name":"Acetate exchange", +"metabolites":{ +"ac_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_ac_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_ac_e" +], +"biocyc":[ +"META:RXN0-1981", +"META:TRANS-RXN0-567" +], +"metanetx.reaction":[ +"MNXR95431" +], +"rhea":[ +"27817", +"27814", +"27816", +"27815" +], +"sabiork":[ +"12184" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn09787", +"rxn09866", +"rxn10904", +"rxn08063" +] +} +}, +{ +"id":"EX_acald_e", +"name":"Acetaldehyde exchange", +"metabolites":{ +"acald_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_acald_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_acald_e" +], +"metanetx.reaction":[ +"MNXR95212" +], +"reactome.reaction":[ +"R-HSA-449872" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn09700", +"rxn08033", +"rxn13212", +"rxn08032" +] +} +}, +{ +"id":"EX_akg_e", +"name":"2-Oxoglutarate exchange", +"metabolites":{ +"akg_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_akg_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_akg_e" +], +"metanetx.reaction":[ +"MNXR95663" +], +"sabiork":[ +"13794" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn10923", +"rxn08096", +"rxn13220" +] +} +}, +{ +"id":"EX_co2_e", +"name":"CO2 exchange", +"metabolites":{ +"co2_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_co2_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_co2_e" +], +"biocyc":[ +"META:TRANS-RXN0-545" +], +"metanetx.reaction":[ +"MNXR96810" +], +"reactome.reaction":[ +"R-DDI-1247645", +"R-CFA-1237069", +"R-TGU-1247649", +"R-CFA-1237042", +"R-CEL-1247645", +"R-XTR-1237069", +"R-HSA-1247645", +"R-OSA-1237042", +"R-GGA-1237042", +"R-BTA-1247645", +"R-GGA-1247649", +"R-RNO-1247645", +"R-XTR-1247645", +"R-TGU-1237042", +"R-SCE-1247649", +"R-MMU-1247649", +"R-CFA-1247649", +"R-GGA-1247645", +"R-SSC-1247645", +"R-BTA-1237069", +"R-RNO-1237069", +"R-SCE-1237042", +"R-DDI-1247649", +"R-SSC-1237042", +"R-DRE-1247649", +"R-DRE-1237042", +"R-DDI-1237042", +"R-DME-1237042", +"R-MMU-1237042", +"R-SSC-1247649", +"R-TGU-1237069", +"R-BTA-1247649", +"R-CFA-1247645", +"R-RNO-1247649", +"R-HSA-1237069", +"R-CEL-1237069", +"R-DDI-1237069", +"R-MMU-1237069", +"R-DME-1247645", +"R-ATH-1237042", +"R-OSA-1247649", +"R-HSA-1237042", +"R-DRE-1247645", +"R-HSA-1247649", +"R-MMU-1247645", +"R-DME-1237069", +"R-RNO-1237042", +"R-TGU-1247645", +"R-BTA-1237042", +"R-GGA-1237069", +"R-DME-1247649", +"R-SSC-1237069", +"R-DRE-1237069", +"R-ATH-1247649" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn05467", +"rxn08237", +"rxn09706", +"rxn09821", +"rxn09775", +"rxn09876", +"rxn08238", +"rxn09860" +] +} +}, +{ +"id":"EX_etoh_e", +"name":"Ethanol exchange", +"metabolites":{ +"etoh_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_etoh_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_etoh_e" +], +"biocyc":[ +"META:TRANS-RXN0-546" +], +"metanetx.reaction":[ +"MNXR97980" +], +"rhea":[ +"35269", +"35267", +"35270", +"35268" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn09683", +"rxn08428", +"rxn09764" +] +} +}, +{ +"id":"EX_for_e", +"name":"Formate exchange", +"metabolites":{ +"for_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_for_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_for_e" +], +"biocyc":[ +"META:TRANS-RXN-1" +], +"metanetx.reaction":[ +"MNXR99620" +], +"reactome.reaction":[ +"R-HSA-6803255" +], +"rhea":[ +"29681", +"29680", +"29682", +"29679" +], +"sabiork":[ +"12483" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn09754", +"rxn08525", +"rxn09682", +"rxn08526" +] +} +}, +{ +"id":"EX_fru_e", +"name":"D-Fructose exchange", +"metabolites":{ +"fru_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_fru_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_fru_e" +], +"metanetx.reaction":[ +"MNXR99663" +], +"reactome.reaction":[ +"R-OSA-189222", +"R-XTR-189222", +"R-SCE-189222", +"R-ATH-189222", +"R-RNO-189222", +"R-DME-189222", +"R-TGU-189222", +"R-SSC-189222", +"R-CFA-189222", +"R-DRE-189222", +"R-HSA-189222", +"R-GGA-189222", +"R-BTA-189222", +"R-MMU-189222", +"R-DDI-189222" +], +"sabiork":[ +"13415" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn12996", +"rxn08537" +] +} +}, +{ +"id":"EX_fum_e", +"name":"Fumarate exchange", +"metabolites":{ +"fum_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_fum_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_fum_e" +], +"biocyc":[ +"META:TRANS-RXN0-553" +], +"metanetx.reaction":[ +"MNXR99715" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn08544", +"rxn11013" +] +} +}, +{ +"id":"EX_glc__D_e", +"name":"D-Glucose exchange", +"metabolites":{ +"glc__D_e":-1.0 +}, +"lower_bound":-10.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_glc_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_glc__D_e" +], +"biocyc":[ +"META:TRANS-RXN0-574" +], +"metanetx.reaction":[ +"MNXR100188" +], +"sabiork":[ +"7002", +"601" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn09875", +"rxn09679", +"rxn08617" +] +} +}, +{ +"id":"EX_gln__L_e", +"name":"L-Glutamine exchange", +"metabolites":{ +"gln__L_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_gln_L_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_gln__L_e" +], +"biocyc":[ +"META:TRANS-RXN-233" +], +"metanetx.reaction":[ +"MNXR100259" +], +"reactome.reaction":[ +"R-HSA-212651", +"R-BTA-212614", +"R-RNO-212614", +"R-SSC-212614", +"R-MMU-212614", +"R-HSA-212614", +"R-GGA-212614", +"R-CFA-212614", +"R-TGU-212614", +"R-SCE-212614" +], +"sabiork":[ +"13421" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn08625", +"rxn10928" +] +} +}, +{ +"id":"EX_glu__L_e", +"name":"L-Glutamate exchange", +"metabolites":{ +"glu__L_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_glu_L_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_glu__L_e" +], +"biocyc":[ +"META:TRANS-RXN-234", +"META:TRANS-RXN-232" +], +"metanetx.reaction":[ +"MNXR100301" +], +"reactome.reaction":[ +"R-HSA-212658", +"R-TGU-210439", +"R-GGA-210439", +"R-XTR-210439", +"R-RNO-210439", +"R-CFA-210439", +"R-CEL-210439", +"R-DME-210439", +"R-SSC-210439", +"R-HSA-210439", +"R-DRE-210439", +"R-MMU-210439", +"R-BTA-210439" +], +"sabiork":[ +"12283" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn08633", +"rxn09750", +"rxn13304", +"rxn13120", +"rxn10917" +] +} +}, +{ +"id":"EX_h_e", +"name":"H+ exchange", +"metabolites":{ +"h_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_h_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_h_e" +], +"biocyc":[ +"META:RXN-14452" +], +"metanetx.reaction":[ +"MNXR100765" +], +"reactome.reaction":[ +"R-HSA-2534378", +"R-DDI-74723", +"R-BTA-170026", +"R-CFA-170026", +"R-SCE-74723", +"R-DRE-74723", +"R-HSA-170026", +"R-TGU-2534378", +"R-HSA-74723", +"R-CFA-2534378", +"R-TGU-74723", +"R-OSA-170026", +"R-RNO-2534378", +"R-GGA-2534378", +"R-MMU-2534378", +"R-BTA-2534378", +"R-SSC-2534378", +"R-DRE-170026", +"R-TGU-170026", +"R-GGA-170026", +"R-SCE-170026", +"R-DRE-2534378", +"R-BTA-74723", +"R-SPO-74723", +"R-XTR-74723", +"R-RNO-74723", +"R-XTR-2534378", +"R-MMU-74723", +"R-CFA-74723", +"R-GGA-74723", +"R-CEL-170026", +"R-MMU-170026", +"R-ATH-74723", +"R-DME-74723", +"R-PFA-74723", +"R-SSC-74723", +"R-XTR-170026", +"R-SSC-170026", +"R-CEL-74723", +"R-ATH-170026", +"R-RNO-170026", +"R-DME-170026" +], +"rhea":[ +"34980", +"34981", +"34982", +"34979" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn11009", +"rxn08730" +] +} +}, +{ +"id":"EX_h2o_e", +"name":"H2O exchange", +"metabolites":{ +"h2o_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_h2o_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_h2o_e" +], +"biocyc":[ +"META:TRANS-RXN-145", +"META:TRANS-RXN0-547" +], +"metanetx.reaction":[ +"MNXR98641" +], +"reactome.reaction":[ +"R-ATH-507868", +"R-CFA-432054", +"R-CFA-432010", +"R-RNO-507868", +"R-OSA-432065", +"R-GGA-432010", +"R-SPO-445714", +"R-PFA-445714", +"R-CFA-432065", +"R-GGA-432067", +"R-TGU-432054", +"R-TGU-445714", +"R-OSA-507868", +"R-DRE-507868", +"R-SPO-507868", +"R-BTA-432054", +"R-GGA-507870", +"R-OSA-432010", +"R-DME-432065", +"R-DRE-432067", +"R-PFA-507868", +"R-SSC-432054", +"R-HSA-432065", +"R-OSA-507870", +"R-HSA-432054", +"R-SSC-432065", +"R-CEL-507868", +"R-XTR-507868", +"R-ATH-507870", +"R-SCE-432065", +"R-BTA-507870", +"R-DME-432010", +"R-CFA-445714", +"R-DRE-445714", +"R-BTA-507868", +"R-GGA-507868", +"R-RNO-432054", +"R-RNO-432010", +"R-SSC-432067", +"R-CEL-445714", +"R-DDI-432065", +"R-ATH-432010", +"R-SCE-432054", +"R-MMU-432065", +"R-MMU-445714", +"R-GGA-432065", +"R-HSA-432067", +"R-SSC-507870", +"R-SCE-432067", +"R-RNO-507870", +"R-DME-432054", +"R-ATH-432067", +"R-BTA-445714", +"R-DRE-507870", +"R-DME-507868", +"R-DME-507870", +"R-DRE-432010", +"R-MMU-432010", +"R-HSA-445714", +"R-OSA-432054", +"R-RNO-432067", +"R-TGU-432010", +"R-TGU-507868", +"R-DDI-432054", +"R-PFA-507870", +"R-HSA-507870", +"R-XTR-432067", +"R-HSA-432010", +"R-SSC-507868", +"R-SCE-507870", +"R-CEL-507870", +"R-DDI-507868", +"R-DRE-432054", +"R-XTR-507870", +"R-DDI-432010", +"R-BTA-432065", +"R-CFA-432067", +"R-OSA-432067", +"R-ATH-432065", +"R-GGA-445714", +"R-SCE-507868", +"R-TGU-432065", +"R-MMU-432067", +"R-TGU-507870", +"R-CFA-507870", +"R-RNO-432065", +"R-MMU-432054", +"R-MMU-507868", +"R-SPO-507870", +"R-SCE-432010", +"R-MMU-507870", +"R-SSC-445714", +"R-HSA-507868", +"R-DME-432067", +"R-SSC-432010", +"R-TGU-432067", +"R-GGA-432054", +"R-BTA-432010", +"R-SCE-445714", +"R-DDI-507870", +"R-ATH-432054", +"R-DDI-432067", +"R-XTR-445714", +"R-BTA-432067", +"R-CFA-507868", +"R-RNO-445714" +], +"rhea":[ +"29668", +"29669", +"29667", +"29670" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn08687", +"rxn08686", +"rxn09745", +"rxn09838", +"rxn09874", +"rxn09812", +"rxn09643", +"rxn05319" +] +} +}, +{ +"id":"EX_lac__D_e", +"name":"D-lactate exchange", +"metabolites":{ +"lac__D_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_lac_D_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_lac__D_e" +], +"metanetx.reaction":[ +"MNXR97840" +], +"sabiork":[ +"12471" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn08351" +] +} +}, +{ +"id":"EX_mal__L_e", +"name":"L-Malate exchange", +"metabolites":{ +"mal__L_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_mal_L_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_mal__L_e" +], +"biocyc":[ +"META:TRANS-RXN-225", +"META:TRANS-RXN-224" +], +"metanetx.reaction":[ +"MNXR101367" +], +"sabiork":[ +"13793" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn10967", +"rxn08868" +] +} +}, +{ +"id":"EX_nh4_e", +"name":"Ammonia exchange", +"metabolites":{ +"nh4_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_nh4_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_nh4_e" +], +"biocyc":[ +"META:TRANS-RXN0-206", +"META:RXN-9615", +"META:TRANS-RXN0-544" +], +"metanetx.reaction":[ +"MNXR101950" +], +"reactome.reaction":[ +"R-CEL-444416", +"R-SSC-444416", +"R-DDI-444416", +"R-MMU-444416", +"R-DRE-444416", +"R-GGA-444416", +"R-CFA-444416", +"R-HSA-444416", +"R-XTR-444416", +"R-BTA-444416", +"R-RNO-444416", +"R-TGU-444416", +"R-DME-444416" +], +"rhea":[ +"28749", +"28748", +"28750", +"28747" +], +"sabiork":[ +"11683" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn13364", +"rxn09835", +"rxn05466", +"rxn08987", +"rxn08986", +"rxn09736" +] +} +}, +{ +"id":"EX_o2_e", +"name":"O2 exchange", +"metabolites":{ +"o2_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_o2_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_o2_e" +], +"biocyc":[ +"META:TRANS-RXN0-474" +], +"metanetx.reaction":[ +"MNXR102090" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn09641", +"rxn05468", +"rxn09031", +"rxn09032", +"rxn09734" +] +} +}, +{ +"id":"EX_pi_e", +"name":"Phosphate exchange", +"metabolites":{ +"pi_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_pi_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_pi_e" +], +"biocyc":[ +"META:TRANS-RXN0-470" +], +"metanetx.reaction":[ +"MNXR102871" +], +"rhea":[ +"32824", +"32826", +"32825", +"32823" +], +"sabiork":[ +"10985" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn10838", +"rxn09722", +"rxn09121", +"rxn13178" +] +} +}, +{ +"id":"EX_pyr_e", +"name":"Pyruvate exchange", +"metabolites":{ +"pyr_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_pyr_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_pyr_e" +], +"biocyc":[ +"META:TRANS-RXN0-506", +"META:TRANS-RXN0-570" +], +"metanetx.reaction":[ +"MNXR103384" +], +"sabiork":[ +"12168" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn10929", +"rxn09218" +] +} +}, +{ +"id":"EX_succ_e", +"name":"Succinate exchange", +"metabolites":{ +"succ_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"", +"subsystem":"Extracellular exchange", +"notes":{ +"original_bigg_ids":[ +"EX_succ_e" +] +}, +"annotation":{ +"bigg.reaction":[ +"EX_succ_e" +], +"biocyc":[ +"META:TRANS-RXN0-552" +], +"metanetx.reaction":[ +"MNXR104619" +], +"sbo":"SBO:0000627", +"seed.reaction":[ +"rxn10952", +"rxn09271" +] +} +}, +{ +"id":"FBA", +"name":"Fructose-bisphosphate aldolase", +"metabolites":{ +"dhap_c":1.0, +"fdp_c":-1.0, +"g3p_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2097 or b1773 or b2925", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"FBA" +] +}, +"annotation":{ +"bigg.reaction":[ +"FBA" +], +"ec-code":[ +"4.1.2.13" +], +"kegg.reaction":[ +"R01068" +], +"metanetx.reaction":[ +"MNXR99459" +], +"rhea":[ +"14729", +"14732", +"14731", +"14730" +], +"sabiork":[ +"1338" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00786" +] +} +}, +{ +"id":"FBP", +"name":"Fructose-bisphosphatase", +"metabolites":{ +"f6p_c":1.0, +"fdp_c":-1.0, +"h2o_c":-1.0, +"pi_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3925 or b4232", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"FBP" +] +}, +"annotation":{ +"bigg.reaction":[ +"FBP" +], +"ec-code":[ +"3.1.3.11" +], +"metanetx.reaction":[ +"MNXR99465" +], +"rhea":[ +"11067", +"11065", +"11066", +"11064" +], +"sabiork":[ +"2084" +], +"sbo":"SBO:0000176" +} +}, +{ +"id":"FORt2", +"name":"Formate transport in via proton symport", +"metabolites":{ +"for_c":1.0, +"for_e":-1.0, +"h_c":1.0, +"h_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0904 or b2492", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"FORt2" +] +}, +"annotation":{ +"bigg.reaction":[ +"FORt2" +], +"metanetx.reaction":[ +"MNXR99621" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn08524", +"rxn05559" +] +} +}, +{ +"id":"FORt", +"name":"Formate transport via diffusion", +"metabolites":{ +"for_c":1.0, +"for_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":0.0, +"gene_reaction_rule":"b0904 or b2492", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"FORti" +] +}, +"annotation":{ +"bigg.reaction":[ +"FORt" +], +"biocyc":[ +"META:TRANS-RXN-1" +], +"metanetx.reaction":[ +"MNXR99620" +], +"reactome.reaction":[ +"R-HSA-6803255" +], +"rhea":[ +"29681", +"29680", +"29682", +"29679" +], +"sabiork":[ +"12483" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn09754", +"rxn08525", +"rxn09682", +"rxn08526" +] +} +}, +{ +"id":"FRD7", +"name":"Fumarate reductase", +"metabolites":{ +"fum_c":-1.0, +"q8_c":1.0, +"q8h2_c":-1.0, +"succ_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b4151 and b4152 and b4153 and b4154", +"subsystem":"Oxidative Phosphorylation", +"notes":{ +"original_bigg_ids":[ +"FRD7" +] +}, +"annotation":{ +"bigg.reaction":[ +"FRD7" +], +"metanetx.reaction":[ +"MNXR99641" +], +"rhea":[ +"29190", +"29189", +"29187", +"29188" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn09272" +] +} +}, +{ +"id":"FRUpts2", +"name":"Fructose transport via PEP:Pyr PTS (f6p generating)", +"metabolites":{ +"f6p_c":1.0, +"fru_e":-1.0, +"pep_c":-1.0, +"pyr_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1817 and b1818 and b1819 and b2415 and b2416", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"FRUpts2" +] +}, +"annotation":{ +"bigg.reaction":[ +"FRUpts2" +], +"metanetx.reaction":[ +"MNXR99662" +], +"sbo":"SBO:0000185" +} +}, +{ +"id":"FUM", +"name":"Fumarase", +"metabolites":{ +"fum_c":-1.0, +"h2o_c":-1.0, +"mal__L_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1612 or b4122 or b1611", +"subsystem":"Citric Acid Cycle", +"notes":{ +"original_bigg_ids":[ +"FUM" +] +}, +"annotation":{ +"bigg.reaction":[ +"FUM" +], +"biocyc":[ +"META:FUMHYDR-RXN" +], +"ec-code":[ +"4.2.1.2" +], +"kegg.reaction":[ +"R01082" +], +"metanetx.reaction":[ +"MNXR99705" +], +"reactome.reaction":[ +"R-TGU-451033", +"R-TGU-70982", +"R-HSA-70982", +"R-ATH-451033", +"R-SPO-70982", +"R-SPO-451033", +"R-XTR-451033", +"R-MMU-70982", +"R-DRE-70982", +"R-DME-70982", +"R-DME-451033", +"R-HSA-451033", +"R-SCE-451033", +"R-DDI-451033", +"R-OSA-451033", +"R-CFA-70982", +"R-XTR-70982", +"R-MMU-451033", +"R-OSA-70982", +"R-BTA-70982", +"R-DRE-451033", +"R-GGA-373141", +"R-RNO-451033", +"R-CEL-451033", +"R-ATH-70982", +"R-GGA-373145", +"R-CEL-70982", +"R-BTA-451033", +"R-SSC-451033", +"R-SCE-70982", +"R-CFA-451033", +"R-RNO-70982", +"R-GGA-70982", +"R-DDI-70982", +"R-GGA-451033", +"R-SSC-70982" +], +"rhea":[ +"12463", +"12461", +"12462", +"12460" +], +"sabiork":[ +"256" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00799" +] +} +}, +{ +"id":"FUMt2_2", +"name":"Fumarate transport via proton symport (2 H)", +"metabolites":{ +"fum_c":1.0, +"fum_e":-1.0, +"h_c":2.0, +"h_e":-2.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3528", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"FUMt2_2" +] +}, +"annotation":{ +"bigg.reaction":[ +"FUMt2_2" +], +"biocyc":[ +"META:TRANS-RXN-121B" +], +"metanetx.reaction":[ +"MNXR99711" +], +"rhea":[ +"29332", +"29334", +"29333", +"29331" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn08542", +"rxn10152" +] +} +}, +{ +"id":"G6PDH2r", +"name":"Glucose 6-phosphate dehydrogenase", +"metabolites":{ +"6pgl_c":1.0, +"g6p_c":-1.0, +"h_c":1.0, +"nadp_c":-1.0, +"nadph_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1852", +"subsystem":"Pentose Phosphate Pathway", +"notes":{ +"original_bigg_ids":[ +"G6PDH2r" +] +}, +"annotation":{ +"bigg.reaction":[ +"G6PDH2r" +], +"biocyc":[ +"META:GLU6PDEHYDROG-RXN" +], +"ec-code":[ +"1.1.1.363", +"1.1.1.49" +], +"kegg.reaction":[ +"R00835" +], +"metanetx.reaction":[ +"MNXR99907" +], +"rhea":[ +"15842", +"15843", +"15841", +"15844" +], +"sabiork":[ +"1176", +"6509" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00604" +] +} +}, +{ +"id":"GAPD", +"name":"Glyceraldehyde-3-phosphate dehydrogenase", +"metabolites":{ +"13dpg_c":1.0, +"g3p_c":-1.0, +"h_c":1.0, +"nad_c":-1.0, +"nadh_c":1.0, +"pi_c":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1779", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"GAPD" +] +}, +"annotation":{ +"bigg.reaction":[ +"GAPD" +], +"biocyc":[ +"META:GAPOXNPHOSPHN-RXN" +], +"ec-code":[ +"1.2.1.12", +"1.2.1.59" +], +"kegg.reaction":[ +"R01061" +], +"metanetx.reaction":[ +"MNXR100040" +], +"reactome.reaction":[ +"R-ATH-70482", +"R-DME-70449", +"R-PFA-70482", +"R-SPO-70449", +"R-DRE-70449", +"R-CEL-70449", +"R-CEL-70482", +"R-CFA-70449", +"R-MMU-70482", +"R-HSA-70449", +"R-OSA-70482", +"R-GGA-352956", +"R-RNO-70449", +"R-SCE-70449", +"R-SSC-70482", +"R-ATH-70449", +"R-GGA-70482", +"R-OSA-70449", +"R-GGA-352921", +"R-DDI-70449", +"R-SPO-70482", +"R-TGU-70482", +"R-SCE-70482", +"R-HSA-70482", +"R-DME-70482", +"R-PFA-70449", +"R-XTR-70449", +"R-DRE-70482", +"R-XTR-70482", +"R-GGA-70449", +"R-RNO-70482", +"R-SSC-70449", +"R-DDI-70482", +"R-TGU-70449", +"R-MMU-70449", +"R-CFA-70482", +"R-BTA-70449", +"R-BTA-70482" +], +"rhea":[ +"10303", +"10300", +"10302", +"10301" +], +"sabiork":[ +"7844" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00781" +] +} +}, +{ +"id":"GLCpts", +"name":"D-glucose transport via PEP:Pyr PTS", +"metabolites":{ +"g6p_c":1.0, +"glc__D_e":-1.0, +"pep_c":-1.0, +"pyr_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"(b2417 and b1101 and b2415 and b2416) or (b1817 and b1818 and b1819 and b2415 and b2416) or (b2417 and b1621 and b2415 and b2416)", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"GLCpts" +] +}, +"annotation":{ +"bigg.reaction":[ +"GLCpts" +], +"metanetx.reaction":[ +"MNXR100237" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn08612", +"rxn05226" +] +} +}, +{ +"id":"GLNS", +"name":"Glutamine synthetase", +"metabolites":{ +"adp_c":1.0, +"atp_c":-1.0, +"gln__L_c":1.0, +"glu__L_c":-1.0, +"h_c":1.0, +"nh4_c":-1.0, +"pi_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3870 or b1297", +"subsystem":"Glutamate Metabolism", +"notes":{ +"original_bigg_ids":[ +"GLNS" +] +}, +"annotation":{ +"bigg.reaction":[ +"GLNS" +], +"biocyc":[ +"META:GLUTAMINESYN-RXN" +], +"ec-code":[ +"6.3.1.2" +], +"kegg.reaction":[ +"R00253" +], +"metanetx.reaction":[ +"MNXR100024" +], +"reactome.reaction":[ +"R-GGA-70606", +"R-RNO-70606", +"R-TGU-70606", +"R-DME-70606", +"R-CEL-70606", +"R-DRE-70606", +"R-XTR-70606", +"R-SPO-70606", +"R-ATH-70606", +"R-CFA-70606", +"R-BTA-70606", +"R-OSA-70606", +"R-SSC-70606", +"R-MMU-70606", +"R-HSA-70606", +"R-SCE-70606" +], +"rhea":[ +"16172", +"16171", +"16169", +"16170" +], +"sabiork":[ +"760" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00187" +] +} +}, +{ +"id":"GLNabc", +"name":"L-glutamine transport via ABC system", +"metabolites":{ +"adp_c":1.0, +"atp_c":-1.0, +"gln__L_c":1.0, +"gln__L_e":-1.0, +"h2o_c":-1.0, +"h_c":1.0, +"pi_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0811 and b0810 and b0809", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"GLNabc" +] +}, +"annotation":{ +"bigg.reaction":[ +"GLNabc" +], +"biocyc":[ +"META:ABC-12-RXN" +], +"ec-code":[ +"3.6.3.21" +], +"metanetx.reaction":[ +"MNXR100258" +], +"rhea":[ +"29895#1", +"29897#1", +"29898#1", +"29896#1" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn11233", +"rxn05196", +"rxn05155", +"rxn11101", +"rxn08624" +] +} +}, +{ +"id":"GLUDy", +"name":"Glutamate dehydrogenase (NADP)", +"metabolites":{ +"akg_c":1.0, +"glu__L_c":-1.0, +"h2o_c":-1.0, +"h_c":1.0, +"nadp_c":-1.0, +"nadph_c":1.0, +"nh4_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1761", +"subsystem":"Glutamate Metabolism", +"notes":{ +"original_bigg_ids":[ +"GLUDy" +] +}, +"annotation":{ +"bigg.reaction":[ +"GLUDy" +], +"biocyc":[ +"META:GLUTDEHYD-RXN" +], +"ec-code":[ +"1.4.1.13", +"1.4.1.3", +"1.4.1.4" +], +"kegg.reaction":[ +"R00248" +], +"metanetx.reaction":[ +"MNXR100086" +], +"rhea":[ +"11613", +"11614", +"11612", +"11615" +], +"sabiork":[ +"757" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00184" +] +} +}, +{ +"id":"GLUN", +"name":"Glutaminase", +"metabolites":{ +"gln__L_c":-1.0, +"glu__L_c":1.0, +"h2o_c":-1.0, +"nh4_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1812 or b0485 or b1524", +"subsystem":"Glutamate Metabolism", +"notes":{ +"original_bigg_ids":[ +"GLUN" +] +}, +"annotation":{ +"bigg.reaction":[ +"GLUN" +], +"biocyc":[ +"META:GLUTAMIN-RXN" +], +"ec-code":[ +"6.3.5.2", +"4.3.3.6", +"6.3.5.5", +"1.4.7.1", +"6.3.5.4", +"3.5.1.2", +"6.3.4.2", +"1.4.1.13", +"3.5.1.38" +], +"kegg.reaction":[ +"R00256" +], +"metanetx.reaction":[ +"MNXR100030" +], +"reactome.reaction":[ +"R-TGU-70609", +"R-XTR-70609", +"R-SSC-70609", +"R-GGA-70609", +"R-DDI-70609", +"R-MMU-70609", +"R-DME-70609", +"R-RNO-70609", +"R-CEL-70609", +"R-BTA-70609", +"R-DRE-70609", +"R-HSA-70609", +"R-CFA-70609" +], +"rhea":[ +"15892", +"15889", +"15891", +"15890" +], +"sabiork":[ +"762" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00189" +] +} +}, +{ +"id":"GLUSy", +"name":"Glutamate synthase (NADPH)", +"metabolites":{ +"akg_c":-1.0, +"gln__L_c":-1.0, +"glu__L_c":2.0, +"h_c":-1.0, +"nadp_c":1.0, +"nadph_c":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3212 and b3213", +"subsystem":"Glutamate Metabolism", +"notes":{ +"original_bigg_ids":[ +"GLUSy" +] +}, +"annotation":{ +"bigg.reaction":[ +"GLUSy" +], +"biocyc":[ +"META:GLUTAMATESYN-RXN" +], +"ec-code":[ +"1.4.1.13" +], +"kegg.reaction":[ +"R00114" +], +"metanetx.reaction":[ +"MNXR100291" +], +"rhea":[ +"15503", +"15501", +"15504", +"15502" +], +"sabiork":[ +"694" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00085" +] +} +}, +{ +"id":"GLUt2r", +"name":"L glutamate transport via proton symport reversible", +"metabolites":{ +"glu__L_c":1.0, +"glu__L_e":-1.0, +"h_c":1.0, +"h_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b4077", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"GLUt2r" +] +}, +"annotation":{ +"bigg.reaction":[ +"GLUt2r" +], +"metanetx.reaction":[ +"MNXR100300" +], +"reactome.reaction":[ +"R-SCE-8875623", +"R-MMU-8875623", +"R-TGU-8875623", +"R-XTR-8875623", +"R-SSC-8875623", +"R-DME-8875623", +"R-CEL-8875623", +"R-DRE-8875623", +"R-GGA-8875623", +"R-HSA-8875623", +"R-RNO-8875623", +"R-DDI-8875623", +"R-CFA-8875623", +"R-BTA-8875623" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn05297", +"rxn09813", +"rxn13303", +"rxn09751", +"rxn08631" +] +} +}, +{ +"id":"GND", +"name":"Phosphogluconate dehydrogenase", +"metabolites":{ +"6pgc_c":-1.0, +"co2_c":1.0, +"nadp_c":-1.0, +"nadph_c":1.0, +"ru5p__D_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2029", +"subsystem":"Pentose Phosphate Pathway", +"notes":{ +"original_bigg_ids":[ +"GND" +] +}, +"annotation":{ +"bigg.reaction":[ +"GND" +], +"biocyc":[ +"META:RXN-9952" +], +"ec-code":[ +"1.1.1.44", +"1.1.1.351" +], +"kegg.reaction":[ +"R01528" +], +"metanetx.reaction":[ +"MNXR100389" +], +"reactome.reaction":[ +"R-PFA-71299", +"R-GGA-71299", +"R-HSA-71299", +"R-SPO-71299", +"R-XTR-71299", +"R-ATH-71299", +"R-TGU-71299", +"R-OSA-71299", +"R-MMU-71299", +"R-DRE-71299", +"R-SCE-71299", +"R-SSC-71299", +"R-DDI-71299", +"R-CFA-71299", +"R-DME-71299", +"R-BTA-71299", +"R-CEL-71299" +], +"rhea":[ +"10116", +"10117", +"10118", +"10119" +], +"sabiork":[ +"108" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn01115" +] +} +}, +{ +"id":"H2Ot", +"name":"H2O transport via diffusion", +"metabolites":{ +"h2o_c":1.0, +"h2o_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0875 or s0001", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"H2Ot" +] +}, +"annotation":{ +"bigg.reaction":[ +"H2Ot" +], +"biocyc":[ +"META:TRANS-RXN-145", +"META:TRANS-RXN0-547" +], +"metanetx.reaction":[ +"MNXR98641" +], +"reactome.reaction":[ +"R-ATH-507868", +"R-CFA-432054", +"R-CFA-432010", +"R-RNO-507868", +"R-OSA-432065", +"R-GGA-432010", +"R-SPO-445714", +"R-PFA-445714", +"R-CFA-432065", +"R-GGA-432067", +"R-TGU-432054", +"R-TGU-445714", +"R-OSA-507868", +"R-DRE-507868", +"R-SPO-507868", +"R-BTA-432054", +"R-GGA-507870", +"R-OSA-432010", +"R-DME-432065", +"R-DRE-432067", +"R-PFA-507868", +"R-SSC-432054", +"R-HSA-432065", +"R-OSA-507870", +"R-HSA-432054", +"R-SSC-432065", +"R-CEL-507868", +"R-XTR-507868", +"R-ATH-507870", +"R-SCE-432065", +"R-BTA-507870", +"R-DME-432010", +"R-CFA-445714", +"R-DRE-445714", +"R-BTA-507868", +"R-GGA-507868", +"R-RNO-432054", +"R-RNO-432010", +"R-SSC-432067", +"R-CEL-445714", +"R-DDI-432065", +"R-ATH-432010", +"R-SCE-432054", +"R-MMU-432065", +"R-MMU-445714", +"R-GGA-432065", +"R-HSA-432067", +"R-SSC-507870", +"R-SCE-432067", +"R-RNO-507870", +"R-DME-432054", +"R-ATH-432067", +"R-BTA-445714", +"R-DRE-507870", +"R-DME-507868", +"R-DME-507870", +"R-DRE-432010", +"R-MMU-432010", +"R-HSA-445714", +"R-OSA-432054", +"R-RNO-432067", +"R-TGU-432010", +"R-TGU-507868", +"R-DDI-432054", +"R-PFA-507870", +"R-HSA-507870", +"R-XTR-432067", +"R-HSA-432010", +"R-SSC-507868", +"R-SCE-507870", +"R-CEL-507870", +"R-DDI-507868", +"R-DRE-432054", +"R-XTR-507870", +"R-DDI-432010", +"R-BTA-432065", +"R-CFA-432067", +"R-OSA-432067", +"R-ATH-432065", +"R-GGA-445714", +"R-SCE-507868", +"R-TGU-432065", +"R-MMU-432067", +"R-TGU-507870", +"R-CFA-507870", +"R-RNO-432065", +"R-MMU-432054", +"R-MMU-507868", +"R-SPO-507870", +"R-SCE-432010", +"R-MMU-507870", +"R-SSC-445714", +"R-HSA-507868", +"R-DME-432067", +"R-SSC-432010", +"R-TGU-432067", +"R-GGA-432054", +"R-BTA-432010", +"R-SCE-445714", +"R-DDI-507870", +"R-ATH-432054", +"R-DDI-432067", +"R-XTR-445714", +"R-BTA-432067", +"R-CFA-507868", +"R-RNO-445714" +], +"rhea":[ +"29668", +"29669", +"29667", +"29670" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn08687", +"rxn08686", +"rxn09745", +"rxn09838", +"rxn09874", +"rxn09812", +"rxn09643", +"rxn05319" +] +} +}, +{ +"id":"ICDHyr", +"name":"Isocitrate dehydrogenase (NADP)", +"metabolites":{ +"akg_c":1.0, +"co2_c":1.0, +"icit_c":-1.0, +"nadp_c":-1.0, +"nadph_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1136", +"subsystem":"Citric Acid Cycle", +"notes":{ +"original_bigg_ids":[ +"ICDHyr" +] +}, +"annotation":{ +"bigg.reaction":[ +"ICDHyr" +], +"ec-code":[ +"1.1.1.42" +], +"kegg.reaction":[ +"R00267" +], +"metanetx.reaction":[ +"MNXR100781" +], +"rhea":[ +"19629", +"19630", +"19631", +"19632" +], +"sabiork":[ +"269" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00198" +] +} +}, +{ +"id":"ICL", +"name":"Isocitrate lyase", +"metabolites":{ +"glx_c":1.0, +"icit_c":-1.0, +"succ_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b4015", +"subsystem":"Anaplerotic reactions", +"notes":{ +"original_bigg_ids":[ +"ICL" +] +}, +"annotation":{ +"bigg.reaction":[ +"ICL" +], +"ec-code":[ +"4.1.3.1" +], +"kegg.reaction":[ +"R00479" +], +"metanetx.reaction":[ +"MNXR100789" +], +"rhea":[ +"13248", +"13245", +"13246", +"13247" +], +"sabiork":[ +"911" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00336" +] +} +}, +{ +"id":"LDH_D", +"name":"D-lactate dehydrogenase", +"metabolites":{ +"h_c":1.0, +"lac__D_c":-1.0, +"nad_c":-1.0, +"nadh_c":1.0, +"pyr_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2133 or b1380", +"subsystem":"Pyruvate Metabolism", +"notes":{ +"original_bigg_ids":[ +"LDH_D" +] +}, +"annotation":{ +"bigg.reaction":[ +"LDH_D" +], +"biocyc":[ +"META:DLACTDEHYDROGNAD-RXN" +], +"ec-code":[ +"1.1.1.28" +], +"kegg.reaction":[ +"R00704" +], +"metanetx.reaction":[ +"MNXR101037" +], +"rhea":[ +"16370", +"16371", +"16372", +"16369" +], +"sabiork":[ +"155" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00500" +] +} +}, +{ +"id":"MALS", +"name":"Malate synthase", +"metabolites":{ +"accoa_c":-1.0, +"coa_c":1.0, +"glx_c":-1.0, +"h2o_c":-1.0, +"h_c":1.0, +"mal__L_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b4014 or b2976", +"subsystem":"Anaplerotic reactions", +"notes":{ +"original_bigg_ids":[ +"MALS" +] +}, +"annotation":{ +"bigg.reaction":[ +"MALS" +], +"biocyc":[ +"META:MALSYN-RXN" +], +"ec-code":[ +"2.3.3.9" +], +"kegg.reaction":[ +"R00472" +], +"metanetx.reaction":[ +"MNXR101347" +], +"rhea":[ +"18181", +"18182", +"18184", +"18183" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00330" +] +} +}, +{ +"id":"MALt2_2", +"name":"Malate transport via proton symport (2 H)", +"metabolites":{ +"h_c":2.0, +"h_e":-2.0, +"mal__L_c":1.0, +"mal__L_e":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3528", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"MALt2_2" +] +}, +"annotation":{ +"bigg.reaction":[ +"MALt2_2" +], +"biocyc":[ +"META:TRANS-RXN-121A" +], +"metanetx.reaction":[ +"MNXR101370" +], +"rhea":[ +"29341", +"29340", +"29342", +"29339" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn08865", +"rxn10153" +] +} +}, +{ +"id":"MDH", +"name":"Malate dehydrogenase", +"metabolites":{ +"h_c":1.0, +"mal__L_c":-1.0, +"nad_c":-1.0, +"nadh_c":1.0, +"oaa_c":1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3236", +"subsystem":"Citric Acid Cycle", +"notes":{ +"original_bigg_ids":[ +"MDH" +] +}, +"annotation":{ +"bigg.reaction":[ +"MDH" +], +"biocyc":[ +"META:MALATE-DEH-RXN" +], +"ec-code":[ +"1.1.1.37", +"1.1.1.299" +], +"kegg.reaction":[ +"R00342" +], +"metanetx.reaction":[ +"MNXR101439" +], +"reactome.reaction":[ +"R-BTA-70979", +"R-BTA-198508", +"R-SCE-70979", +"R-GGA-70979", +"R-MMU-71783", +"R-RNO-71783", +"R-DDI-198508", +"R-CFA-71783", +"R-CFA-198508", +"R-ATH-70979", +"R-DME-198508", +"R-TGU-71783", +"R-HSA-71783", +"R-BTA-71783", +"R-DRE-198508", +"R-SPO-70979", +"R-GGA-71783", +"R-TGU-198508", +"R-GGA-372422", +"R-CEL-71783", +"R-XTR-70979", +"R-RNO-198508", +"R-MMU-70979", +"R-SPO-71783", +"R-ATH-71783", +"R-MMU-198508", +"R-DME-70979", +"R-TGU-70979", +"R-CEL-198508", +"R-DME-71783", +"R-DRE-70979", +"R-OSA-71783", +"R-SSC-198508", +"R-GGA-372855", +"R-SSC-70979", +"R-OSA-70979", +"R-GGA-373047", +"R-GGA-198508", +"R-SSC-71783", +"R-HSA-70979", +"R-CFA-70979", +"R-XTR-71783", +"R-HSA-198508", +"R-XTR-198508", +"R-SCE-71783", +"R-RNO-70979", +"R-DRE-71783", +"R-CEL-70979" +], +"rhea":[ +"21432", +"21433", +"21434", +"21435" +], +"sabiork":[ +"113" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00248" +] +} +}, +{ +"id":"ME1", +"name":"Malic enzyme (NAD)", +"metabolites":{ +"co2_c":1.0, +"mal__L_c":-1.0, +"nad_c":-1.0, +"nadh_c":1.0, +"pyr_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b1479", +"subsystem":"Anaplerotic reactions", +"notes":{ +"original_bigg_ids":[ +"ME1" +] +}, +"annotation":{ +"bigg.reaction":[ +"ME1" +], +"biocyc":[ +"META:1.1.1.39-RXN" +], +"ec-code":[ +"1.1.1.38", +"1.1.1.39" +], +"kegg.reaction":[ +"R00214" +], +"metanetx.reaction":[ +"MNXR101446" +], +"rhea":[ +"12655", +"12654", +"12653", +"12656" +], +"sabiork":[ +"141" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00159" +] +} +}, +{ +"id":"ME2", +"name":"Malic enzyme (NADP)", +"metabolites":{ +"co2_c":1.0, +"mal__L_c":-1.0, +"nadp_c":-1.0, +"nadph_c":1.0, +"pyr_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2463", +"subsystem":"Anaplerotic reactions", +"notes":{ +"original_bigg_ids":[ +"ME2" +] +}, +"annotation":{ +"bigg.reaction":[ +"ME2" +], +"biocyc":[ +"META:MALIC-NADP-RXN" +], +"ec-code":[ +"1.1.1.40" +], +"kegg.reaction":[ +"R00216" +], +"metanetx.reaction":[ +"MNXR101443" +], +"rhea":[ +"18255", +"18256", +"18254", +"18253" +], +"sabiork":[ +"142" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00161" +] +} +}, +{ +"id":"NADH16", +"name":"NADH dehydrogenase (ubiquinone-8 & 3 protons)", +"metabolites":{ +"h_c":-4.0, +"h_e":3.0, +"nad_c":1.0, +"nadh_c":-1.0, +"q8_c":-1.0, +"q8h2_c":1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b2276 and b2277 and b2278 and b2279 and b2280 and b2281 and b2282 and b2283 and b2284 and b2285 and b2286 and b2287 and b2288", +"subsystem":"Oxidative Phosphorylation", +"notes":{ +"original_bigg_ids":[ +"NADH16" +] +}, +"annotation":{ +"bigg.reaction":[ +"NADH16" +], +"ec-code":[ +"1.6.5.3" +], +"metanetx.reaction":[ +"MNXR101864" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn08972" +] +} +}, +{ +"id":"NADTRHD", +"name":"NAD transhydrogenase", +"metabolites":{ +"nad_c":-1.0, +"nadh_c":1.0, +"nadp_c":1.0, +"nadph_c":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b3962 or (b1602 and b1603)", +"subsystem":"Oxidative Phosphorylation", +"notes":{ +"original_bigg_ids":[ +"NADTRHD" +] +}, +"annotation":{ +"bigg.reaction":[ +"NADTRHD" +], +"biocyc":[ +"META:PYRNUTRANSHYDROGEN-RXN" +], +"ec-code":[ +"1.6.1.3", +"1.6.1.2", +"1.6.1.1" +], +"kegg.reaction":[ +"R00112" +], +"metanetx.reaction":[ +"MNXR101898" +], +"rhea":[ +"11692", +"11695", +"11694", +"11693" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00083" +] +} +}, +{ +"id":"NH4t", +"name":"Ammonia reversible transport", +"metabolites":{ +"nh4_c":1.0, +"nh4_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"s0001 or b0451", +"subsystem":"Inorganic Ion Transport and Metabolism", +"notes":{ +"original_bigg_ids":[ +"NH4t" +] +}, +"annotation":{ +"bigg.reaction":[ +"NH4t" +], +"biocyc":[ +"META:TRANS-RXN0-206", +"META:RXN-9615", +"META:TRANS-RXN0-544" +], +"metanetx.reaction":[ +"MNXR101950" +], +"reactome.reaction":[ +"R-CEL-444416", +"R-SSC-444416", +"R-DDI-444416", +"R-MMU-444416", +"R-DRE-444416", +"R-GGA-444416", +"R-CFA-444416", +"R-HSA-444416", +"R-XTR-444416", +"R-BTA-444416", +"R-RNO-444416", +"R-TGU-444416", +"R-DME-444416" +], +"rhea":[ +"28749", +"28748", +"28750", +"28747" +], +"sabiork":[ +"11683" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn13364", +"rxn09835", +"rxn05466", +"rxn08987", +"rxn08986", +"rxn09736" +] +} +}, +{ +"id":"O2t", +"name":"O2 transport diffusion ", +"metabolites":{ +"o2_c":1.0, +"o2_e":-1.0 +}, +"lower_bound":-1000.0, +"upper_bound":1000.0, +"gene_reaction_rule":"s0001", +"subsystem":"Transport, Extracellular", +"notes":{ +"original_bigg_ids":[ +"O2t" +] +}, +"annotation":{ +"bigg.reaction":[ +"O2t" +], +"biocyc":[ +"META:TRANS-RXN0-474" +], +"metanetx.reaction":[ +"MNXR102090" +], +"sbo":"SBO:0000185", +"seed.reaction":[ +"rxn09641", +"rxn05468", +"rxn09031", +"rxn09032", +"rxn09734" +] +} +}, +{ +"id":"PDH", +"name":"Pyruvate dehydrogenase", +"metabolites":{ +"accoa_c":1.0, +"co2_c":1.0, +"coa_c":-1.0, +"nad_c":-1.0, +"nadh_c":1.0, +"pyr_c":-1.0 +}, +"lower_bound":0.0, +"upper_bound":1000.0, +"gene_reaction_rule":"b0114 and b0115 and b0116", +"subsystem":"Glycolysis/Gluconeogenesis", +"notes":{ +"original_bigg_ids":[ +"PDH" +] +}, +"annotation":{ +"bigg.reaction":[ +"PDH" +], +"biocyc":[ +"META:PYRUVDEH-RXN" +], +"ec-code":[ +"1.2.1", +"1.8.1.4", +"1.2.1.51", +"1.2.4.1", +"2.3.1.12" +], +"kegg.reaction":[ +"R00209" +], +"metanetx.reaction":[ +"MNXR102425" +], +"reactome.reaction":[ +"R-RNO-71397", +"R-OSA-71397", +"R-GGA-373177", +"R-DME-71397", +"R-TGU-71397", +"R-XTR-71397", +"R-CFA-71397", +"R-BTA-71397", +"R-HSA-71397", +"R-GGA-71397", +"R-SPO-71397", +"R-CEL-71397", +"R-DDI-71397", +"R-DRE-71397", +"R-SSC-71397", +"R-SCE-71397", +"R-ATH-71397", +"R-MMU-71397" +], +"rhea":[ +"28043", +"28045", +"28044", +"28042" +], +"sabiork":[ +"523" +], +"sbo":"SBO:0000176", +"seed.reaction":[ +"rxn00154" +] +} +} +], +"genes":[ +{ +"id":"b1241", +"name":"adhE", +"notes":{ +"original_bigg_ids":[ +"b1241" +] +}, +"annotation":{ +"asap":[ +"ABE-0004164" +], +"ecogene":[ +"EG10031" +], +"ncbigene":[ +"945837" +], +"ncbigi":[ +"16129202" +], +"refseq_locus_tag":[ +"b1241" +], +"refseq_name":[ +"adhE" +], +"refseq_synonym":[ +"JW1228", +"ECK1235", +"adhC", +"ana" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A9Q7" +] +} +}, +{ +"id":"b0351", +"name":"mhpF", +"notes":{ +"original_bigg_ids":[ +"b0351" +] +}, +"annotation":{ +"asap":[ +"ABE-0001207" +], +"ecogene":[ +"EG13625" +], +"ncbigene":[ +"945008" +], +"ncbigi":[ +"16128336" +], +"refseq_locus_tag":[ +"b0351" +], +"refseq_name":[ +"mhpF" +], +"refseq_synonym":[ +"JW0342", +"ECK0348" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P77580" +] +} +}, +{ +"id":"s0001", +"name":"", +"notes":{ +"original_bigg_ids":[ +"s0001" +] +}, +"annotation":{ +"sbo":"SBO:0000243" +} +}, +{ +"id":"b1849", +"name":"purT", +"notes":{ +"original_bigg_ids":[ +"b1849" +] +}, +"annotation":{ +"asap":[ +"ABE-0006162" +], +"ecogene":[ +"EG11809" +], +"ncbigene":[ +"946368" +], +"ncbigi":[ +"16129802" +], +"refseq_locus_tag":[ +"b1849" +], +"refseq_name":[ +"purT" +], +"refseq_synonym":[ +"JW1838", +"ECK1850" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P33221" +] +} +}, +{ +"id":"b3115", +"name":"tdcD", +"notes":{ +"original_bigg_ids":[ +"b3115" +] +}, +"annotation":{ +"asap":[ +"ABE-0010245" +], +"ecogene":[ +"EG11172" +], +"ncbigene":[ +"947635" +], +"ncbigi":[ +"145698313" +], +"refseq_locus_tag":[ +"b3115" +], +"refseq_name":[ +"tdcD" +], +"refseq_synonym":[ +"JW5806", +"ECK3104", +"yhaA" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P11868" +] +} +}, +{ +"id":"b2296", +"name":"ackA", +"notes":{ +"original_bigg_ids":[ +"b2296" +] +}, +"annotation":{ +"asap":[ +"ABE-0007579" +], +"ecogene":[ +"EG10027" +], +"ncbigene":[ +"946775" +], +"ncbigi":[ +"16130231" +], +"refseq_locus_tag":[ +"b2296" +], +"refseq_name":[ +"ackA" +], +"refseq_synonym":[ +"JW2293", +"ECK2290" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A6A3" +] +} +}, +{ +"id":"b1276", +"name":"acnA", +"notes":{ +"original_bigg_ids":[ +"b1276" +] +}, +"annotation":{ +"asap":[ +"ABE-0004283" +], +"ecogene":[ +"EG11325" +], +"ncbigene":[ +"946724" +], +"ncbigi":[ +"16129237" +], +"refseq_locus_tag":[ +"b1276" +], +"refseq_name":[ +"acnA" +], +"refseq_synonym":[ +"JW1268", +"ECK1271", +"acn" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P25516" +] +} +}, +{ +"id":"b0118", +"name":"acnB", +"notes":{ +"original_bigg_ids":[ +"b0118" +] +}, +"annotation":{ +"asap":[ +"ABE-0000411" +], +"ecogene":[ +"EG12316" +], +"ncbigene":[ +"944864" +], +"ncbigi":[ +"16128111" +], +"refseq_locus_tag":[ +"b0118" +], +"refseq_name":[ +"acnB" +], +"refseq_synonym":[ +"ECK0117", +"JW0114", +"yacJ", +"yacI" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P36683" +] +} +}, +{ +"id":"b0474", +"name":"adk", +"notes":{ +"original_bigg_ids":[ +"b0474" +] +}, +"annotation":{ +"asap":[ +"ABE-0001645" +], +"ecogene":[ +"EG10032" +], +"ncbigene":[ +"945097" +], +"ncbigi":[ +"16128458" +], +"refseq_locus_tag":[ +"b0474" +], +"refseq_name":[ +"adk" +], +"refseq_synonym":[ +"plsA", +"JW0463", +"ECK0468", +"dnaW" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P69441" +] +} +}, +{ +"id":"b0116", +"name":"lpd", +"notes":{ +"original_bigg_ids":[ +"b0116" +] +}, +"annotation":{ +"asap":[ +"ABE-0000404" +], +"ecogene":[ +"EG10543" +], +"ncbigene":[ +"944854" +], +"ncbigi":[ +"16128109" +], +"refseq_locus_tag":[ +"b0116" +], +"refseq_name":[ +"lpd" +], +"refseq_synonym":[ +"dhl", +"lpdA", +"ECK0115", +"JW0112" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A9P0" +] +} +}, +{ +"id":"b0727", +"name":"sucB", +"notes":{ +"original_bigg_ids":[ +"b0727" +] +}, +"annotation":{ +"asap":[ +"ABE-0002480" +], +"ecogene":[ +"EG10980" +], +"ncbigene":[ +"945307" +], +"ncbigi":[ +"16128702" +], +"refseq_locus_tag":[ +"b0727" +], +"refseq_name":[ +"sucB" +], +"refseq_synonym":[ +"JW0716", +"ECK0715" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFG6" +] +} +}, +{ +"id":"b0726", +"name":"sucA", +"notes":{ +"original_bigg_ids":[ +"b0726" +] +}, +"annotation":{ +"asap":[ +"ABE-0002478" +], +"ecogene":[ +"EG10979" +], +"ncbigene":[ +"945303" +], +"ncbigi":[ +"16128701" +], +"refseq_locus_tag":[ +"b0726" +], +"refseq_name":[ +"sucA" +], +"refseq_synonym":[ +"lys", +"JW0715", +"ECK0714" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFG3" +] +} +}, +{ +"id":"b2587", +"name":"kgtP", +"notes":{ +"original_bigg_ids":[ +"b2587" +] +}, +"annotation":{ +"asap":[ +"ABE-0008515" +], +"ecogene":[ +"EG10522" +], +"ncbigene":[ +"947069" +], +"ncbigi":[ +"16130512" +], +"refseq_locus_tag":[ +"b2587" +], +"refseq_name":[ +"kgtP" +], +"refseq_synonym":[ +"ECK2585", +"JW2571", +"witA" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AEX3" +] +} +}, +{ +"id":"b0356", +"name":"frmA", +"notes":{ +"original_bigg_ids":[ +"b0356" +] +}, +"annotation":{ +"asap":[ +"ABE-0001221" +], +"ecogene":[ +"EG50010" +], +"ncbigene":[ +"944988" +], +"ncbigi":[ +"16128341" +], +"refseq_locus_tag":[ +"b0356" +], +"refseq_name":[ +"frmA" +], +"refseq_synonym":[ +"ECK0353", +"adhC", +"JW0347" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P25437" +] +} +}, +{ +"id":"b1478", +"name":"adhP", +"notes":{ +"original_bigg_ids":[ +"b1478" +] +}, +"annotation":{ +"asap":[ +"ABE-0004928" +], +"ecogene":[ +"EG12622" +], +"ncbigene":[ +"946036" +], +"ncbigi":[ +"90111280" +], +"refseq_locus_tag":[ +"b1478" +], +"refseq_name":[ +"adhP" +], +"refseq_synonym":[ +"yddN", +"ECK1472", +"JW1474" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P39451" +] +} +}, +{ +"id":"b3734", +"name":"atpA", +"notes":{ +"original_bigg_ids":[ +"b3734" +] +}, +"annotation":{ +"asap":[ +"ABE-0012213" +], +"ecogene":[ +"EG10098" +], +"ncbigene":[ +"948242" +], +"ncbigi":[ +"16131602" +], +"refseq_locus_tag":[ +"b3734" +], +"refseq_name":[ +"atpA" +], +"refseq_synonym":[ +"uncA", +"papA", +"ECK3727", +"JW3712" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0ABB0" +] +} +}, +{ +"id":"b3733", +"name":"atpG", +"notes":{ +"original_bigg_ids":[ +"b3733" +] +}, +"annotation":{ +"asap":[ +"ABE-0012211" +], +"ecogene":[ +"EG10104" +], +"ncbigene":[ +"948243" +], +"ncbigi":[ +"16131601" +], +"refseq_locus_tag":[ +"b3733" +], +"refseq_name":[ +"atpG" +], +"refseq_synonym":[ +"uncG", +"ECK3726", +"papC", +"JW3711" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0ABA6" +] +} +}, +{ +"id":"b3736", +"name":"atpF", +"notes":{ +"original_bigg_ids":[ +"b3736" +] +}, +"annotation":{ +"asap":[ +"ABE-0012217" +], +"ecogene":[ +"EG10103" +], +"ncbigene":[ +"948247" +], +"ncbigi":[ +"16131604" +], +"refseq_locus_tag":[ +"b3736" +], +"refseq_name":[ +"atpF" +], +"refseq_synonym":[ +"uncF", +"JW3714", +"papF", +"ECK3729" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0ABA0" +] +} +}, +{ +"id":"b3737", +"name":"atpE", +"notes":{ +"original_bigg_ids":[ +"b3737" +] +}, +"annotation":{ +"asap":[ +"ABE-0012220" +], +"ecogene":[ +"EG10102" +], +"ncbigene":[ +"948253" +], +"ncbigi":[ +"16131605" +], +"refseq_locus_tag":[ +"b3737" +], +"refseq_name":[ +"atpE" +], +"refseq_synonym":[ +"uncE", +"JW3715", +"ECK3730", +"papH" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P68699" +] +} +}, +{ +"id":"b3739", +"name":"atpI", +"notes":{ +"original_bigg_ids":[ +"b3739" +] +}, +"annotation":{ +"asap":[ +"ABE-0012224" +], +"ecogene":[ +"EG10106" +], +"ncbigene":[ +"948251" +], +"ncbigi":[ +"90111645" +], +"refseq_locus_tag":[ +"b3739" +], +"refseq_name":[ +"atpI" +], +"refseq_synonym":[ +"uncI", +"JW5611", +"ECK3732" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0ABC0" +] +} +}, +{ +"id":"b3738", +"name":"atpB", +"notes":{ +"original_bigg_ids":[ +"b3738" +] +}, +"annotation":{ +"asap":[ +"ABE-0012222" +], +"ecogene":[ +"EG10099" +], +"ncbigene":[ +"948252" +], +"ncbigi":[ +"16131606" +], +"refseq_locus_tag":[ +"b3738" +], +"refseq_name":[ +"atpB" +], +"refseq_synonym":[ +"JW3716", +"ECK3731", +"uncB", +"papD" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AB98" +] +} +}, +{ +"id":"b3735", +"name":"atpH", +"notes":{ +"original_bigg_ids":[ +"b3735" +] +}, +"annotation":{ +"asap":[ +"ABE-0012215" +], +"ecogene":[ +"EG10105" +], +"ncbigene":[ +"948254" +], +"ncbigi":[ +"16131603" +], +"refseq_locus_tag":[ +"b3735" +], +"refseq_name":[ +"atpH" +], +"refseq_synonym":[ +"JW3713", +"papE", +"ECK3728", +"uncH" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0ABA4" +] +} +}, +{ +"id":"b3731", +"name":"atpC", +"notes":{ +"original_bigg_ids":[ +"b3731" +] +}, +"annotation":{ +"asap":[ +"ABE-0012206" +], +"ecogene":[ +"EG10100" +], +"ncbigene":[ +"948245" +], +"ncbigi":[ +"16131599" +], +"refseq_locus_tag":[ +"b3731" +], +"refseq_name":[ +"atpC" +], +"refseq_synonym":[ +"uncC", +"ECK3724", +"papG", +"JW3709" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A6E6" +] +} +}, +{ +"id":"b3732", +"name":"atpD", +"notes":{ +"original_bigg_ids":[ +"b3732" +] +}, +"annotation":{ +"asap":[ +"ABE-0012208" +], +"ecogene":[ +"EG10101" +], +"ncbigene":[ +"948244" +], +"ncbigi":[ +"16131600" +], +"refseq_locus_tag":[ +"b3732" +], +"refseq_name":[ +"atpD" +], +"refseq_synonym":[ +"papB", +"ECK3725", +"JW3710", +"uncD" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0ABB4" +] +} +}, +{ +"id":"b0720", +"name":"gltA", +"notes":{ +"original_bigg_ids":[ +"b0720" +] +}, +"annotation":{ +"asap":[ +"ABE-0002451" +], +"ecogene":[ +"EG10402" +], +"ncbigene":[ +"945323" +], +"ncbigi":[ +"16128695" +], +"refseq_locus_tag":[ +"b0720" +], +"refseq_name":[ +"gltA" +], +"refseq_synonym":[ +"JW0710", +"gluT", +"ECK0709", +"icdB" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0ABH7" +] +} +}, +{ +"id":"b0733", +"name":"cydA", +"notes":{ +"original_bigg_ids":[ +"b0733" +] +}, +"annotation":{ +"asap":[ +"ABE-0002499" +], +"ecogene":[ +"EG10173" +], +"ncbigene":[ +"945341" +], +"ncbigi":[ +"90111166" +], +"refseq_locus_tag":[ +"b0733" +], +"refseq_name":[ +"cydA" +], +"refseq_synonym":[ +"ECK0721", +"JW0722" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0ABJ9" +] +} +}, +{ +"id":"b0734", +"name":"cydB", +"notes":{ +"original_bigg_ids":[ +"b0734" +] +}, +"annotation":{ +"asap":[ +"ABE-0002501" +], +"ecogene":[ +"EG10174" +], +"ncbigene":[ +"945347" +], +"ncbigi":[ +"16128709" +], +"refseq_locus_tag":[ +"b0734" +], +"refseq_name":[ +"cydB" +], +"refseq_synonym":[ +"ECK0722", +"JW0723" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0ABK2" +] +} +}, +{ +"id":"b0979", +"name":"cbdB", +"notes":{ +"original_bigg_ids":[ +"b0979" +] +}, +"annotation":{ +"asap":[ +"ABE-0003302" +], +"ecogene":[ +"EG11379" +], +"ncbigene":[ +"947547" +], +"ncbigi":[ +"16128945" +], +"refseq_locus_tag":[ +"b0979" +], +"refseq_name":[ +"cbdB" +], +"refseq_synonym":[ +"JW0961", +"appB", +"cyxB", +"ECK0970" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P26458" +] +} +}, +{ +"id":"b0978", +"name":"cbdA", +"notes":{ +"original_bigg_ids":[ +"b0978" +] +}, +"annotation":{ +"asap":[ +"ABE-0003300" +], +"ecogene":[ +"EG11380" +], +"ncbigene":[ +"945585" +], +"ncbigi":[ +"16128944" +], +"refseq_locus_tag":[ +"b0978" +], +"refseq_name":[ +"cbdA" +], +"refseq_synonym":[ +"JW0960", +"ECK0969", +"cyxA", +"appC" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P26459" +] +} +}, +{ +"id":"b3603", +"name":"lldP", +"notes":{ +"original_bigg_ids":[ +"b3603" +] +}, +"annotation":{ +"asap":[ +"ABE-0011777" +], +"ecogene":[ +"EG11961" +], +"ncbigene":[ +"948114" +], +"ncbigi":[ +"16131474" +], +"refseq_locus_tag":[ +"b3603" +], +"refseq_name":[ +"lldP" +], +"refseq_synonym":[ +"JW3578", +"ECK3593", +"lct", +"lctP" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P33231" +] +} +}, +{ +"id":"b2975", +"name":"glcA", +"notes":{ +"original_bigg_ids":[ +"b2975" +] +}, +"annotation":{ +"asap":[ +"ABE-0009763" +], +"ecogene":[ +"EG12995" +], +"ncbigene":[ +"947259" +], +"ncbigi":[ +"16130875" +], +"refseq_locus_tag":[ +"b2975" +], +"refseq_name":[ +"glcA" +], +"refseq_synonym":[ +"ECK2969", +"JW2942", +"yghK" +], +"sbo":"SBO:0000243", +"uniprot":[ +"Q46839" +] +} +}, +{ +"id":"b2779", +"name":"eno", +"notes":{ +"original_bigg_ids":[ +"b2779" +] +}, +"annotation":{ +"asap":[ +"ABE-0009110" +], +"ecogene":[ +"EG10258" +], +"ncbigene":[ +"945032" +], +"ncbigi":[ +"16130686" +], +"refseq_locus_tag":[ +"b2779" +], +"refseq_name":[ +"eno" +], +"refseq_synonym":[ +"JW2750", +"ECK2773" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A6P9" +] +} +}, +{ +"id":"b2925", +"name":"fbaA", +"notes":{ +"original_bigg_ids":[ +"b2925" +] +}, +"annotation":{ +"asap":[ +"ABE-0009600" +], +"ecogene":[ +"EG10282" +], +"ncbigene":[ +"947415" +], +"ncbigi":[ +"16130826" +], +"refseq_locus_tag":[ +"b2925" +], +"refseq_name":[ +"fbaA" +], +"refseq_synonym":[ +"fba", +"ald", +"fda", +"ECK2921", +"JW2892" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AB71" +] +} +}, +{ +"id":"b1773", +"name":"ydjI", +"notes":{ +"original_bigg_ids":[ +"b1773" +] +}, +"annotation":{ +"asap":[ +"ABE-0005906" +], +"ecogene":[ +"EG13485" +], +"ncbigene":[ +"946291" +], +"ncbigi":[ +"16129727" +], +"refseq_locus_tag":[ +"b1773" +], +"refseq_name":[ +"ydjI" +], +"refseq_synonym":[ +"ECK1771", +"JW1762" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P77704" +] +} +}, +{ +"id":"b2097", +"name":"fbaB", +"notes":{ +"original_bigg_ids":[ +"b2097" +] +}, +"annotation":{ +"asap":[ +"ABE-0006941" +], +"ecogene":[ +"EG14062" +], +"ncbigene":[ +"946632" +], +"ncbigi":[ +"90111385" +], +"refseq_locus_tag":[ +"b2097" +], +"refseq_name":[ +"fbaB" +], +"refseq_synonym":[ +"dhnA", +"JW5344", +"ECK2090" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A991" +] +} +}, +{ +"id":"b3925", +"name":"glpX", +"notes":{ +"original_bigg_ids":[ +"b3925" +] +}, +"annotation":{ +"asap":[ +"ABE-0012821" +], +"ecogene":[ +"EG11517" +], +"ncbigene":[ +"948424" +], +"ncbigi":[ +"16131763" +], +"refseq_locus_tag":[ +"b3925" +], +"refseq_name":[ +"glpX" +], +"refseq_synonym":[ +"JW3896", +"ECK3917" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A9C9" +] +} +}, +{ +"id":"b4232", +"name":"fbp", +"notes":{ +"original_bigg_ids":[ +"b4232" +] +}, +"annotation":{ +"asap":[ +"ABE-0013842" +], +"ecogene":[ +"EG10283" +], +"ncbigene":[ +"948753" +], +"ncbigi":[ +"16132054" +], +"refseq_locus_tag":[ +"b4232" +], +"refseq_name":[ +"fbp" +], +"refseq_synonym":[ +"JW4191", +"ECK4227", +"fdp" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A993" +] +} +}, +{ +"id":"b2492", +"name":"focB", +"notes":{ +"original_bigg_ids":[ +"b2492" +] +}, +"annotation":{ +"asap":[ +"ABE-0008206" +], +"ecogene":[ +"EG14220" +], +"ncbigene":[ +"949032" +], +"ncbigi":[ +"16130417" +], +"refseq_locus_tag":[ +"b2492" +], +"refseq_name":[ +"focB" +], +"refseq_synonym":[ +"JW2477", +"ECK2488" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P77733" +] +} +}, +{ +"id":"b0904", +"name":"focA", +"notes":{ +"original_bigg_ids":[ +"b0904" +] +}, +"annotation":{ +"asap":[ +"ABE-0003073" +], +"ecogene":[ +"EG11258" +], +"ncbigene":[ +"945513" +], +"ncbigi":[ +"16128871" +], +"refseq_locus_tag":[ +"b0904" +], +"refseq_name":[ +"focA" +], +"refseq_synonym":[ +"ycaE", +"ECK0895", +"JW0887" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AC23" +] +} +}, +{ +"id":"b4152", +"name":"frdC", +"notes":{ +"original_bigg_ids":[ +"b4152" +] +}, +"annotation":{ +"asap":[ +"ABE-0013598" +], +"ecogene":[ +"EG10332" +], +"ncbigene":[ +"948680" +], +"ncbigi":[ +"16131977" +], +"refseq_locus_tag":[ +"b4152" +], +"refseq_name":[ +"frdC" +], +"refseq_synonym":[ +"ECK4148", +"JW4113" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A8Q0" +] +} +}, +{ +"id":"b4154", +"name":"frdA", +"notes":{ +"original_bigg_ids":[ +"b4154" +] +}, +"annotation":{ +"asap":[ +"ABE-0013604" +], +"ecogene":[ +"EG10330" +], +"ncbigene":[ +"948667" +], +"ncbigi":[ +"16131979" +], +"refseq_locus_tag":[ +"b4154" +], +"refseq_name":[ +"frdA" +], +"refseq_synonym":[ +"ECK4150", +"JW4115" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P00363" +] +} +}, +{ +"id":"b4153", +"name":"frdB", +"notes":{ +"original_bigg_ids":[ +"b4153" +] +}, +"annotation":{ +"asap":[ +"ABE-0013602" +], +"ecogene":[ +"EG10331" +], +"ncbigene":[ +"948666" +], +"ncbigi":[ +"16131978" +], +"refseq_locus_tag":[ +"b4153" +], +"refseq_name":[ +"frdB" +], +"refseq_synonym":[ +"JW4114", +"ECK4149" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AC47" +] +} +}, +{ +"id":"b4151", +"name":"frdD", +"notes":{ +"original_bigg_ids":[ +"b4151" +] +}, +"annotation":{ +"asap":[ +"ABE-0013595" +], +"ecogene":[ +"EG10333" +], +"ncbigene":[ +"948668" +], +"ncbigi":[ +"16131976" +], +"refseq_locus_tag":[ +"b4151" +], +"refseq_name":[ +"frdD" +], +"refseq_synonym":[ +"JW4112", +"ECK4147" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A8Q3" +] +} +}, +{ +"id":"b1819", +"name":"manZ", +"notes":{ +"original_bigg_ids":[ +"b1819" +] +}, +"annotation":{ +"asap":[ +"ABE-0006058" +], +"ecogene":[ +"EG10569" +], +"ncbigene":[ +"946342" +], +"ncbigi":[ +"345452720" +], +"refseq_locus_tag":[ +"b1819" +], +"refseq_name":[ +"manZ" +], +"refseq_synonym":[ +"ptsM", +"ECK1817", +"ptsX", +"gptB", +"mpt", +"JW1808" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P69805" +] +} +}, +{ +"id":"b1817", +"name":"manX", +"notes":{ +"original_bigg_ids":[ +"b1817" +] +}, +"annotation":{ +"asap":[ +"ABE-0006054" +], +"ecogene":[ +"EG10567" +], +"ncbigene":[ +"946334" +], +"ncbigi":[ +"16129771" +], +"refseq_locus_tag":[ +"b1817" +], +"refseq_name":[ +"manX" +], +"refseq_synonym":[ +"ECK1815", +"ptsX", +"gptB", +"mpt", +"JW1806", +"ptsL" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P69797" +] +} +}, +{ +"id":"b2416", +"name":"ptsI", +"notes":{ +"original_bigg_ids":[ +"b2416" +] +}, +"annotation":{ +"asap":[ +"ABE-0007967" +], +"ecogene":[ +"EG10789" +], +"ncbigene":[ +"946879" +], +"ncbigi":[ +"16130342" +], +"refseq_locus_tag":[ +"b2416" +], +"refseq_name":[ +"ptsI" +], +"refseq_synonym":[ +"ECK2411", +"ctr", +"JW2409" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P08839" +] +} +}, +{ +"id":"b2415", +"name":"ptsH", +"notes":{ +"original_bigg_ids":[ +"b2415" +] +}, +"annotation":{ +"asap":[ +"ABE-0007962" +], +"ecogene":[ +"EG10788" +], +"ncbigene":[ +"946886" +], +"ncbigi":[ +"16130341" +], +"refseq_locus_tag":[ +"b2415" +], +"refseq_name":[ +"ptsH" +], +"refseq_synonym":[ +"ctr", +"hpr", +"JW2408", +"ECK2410", +"iex?" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AA04" +] +} +}, +{ +"id":"b1818", +"name":"manY", +"notes":{ +"original_bigg_ids":[ +"b1818" +] +}, +"annotation":{ +"asap":[ +"ABE-0006056" +], +"ecogene":[ +"EG10568" +], +"ncbigene":[ +"946332" +], +"ncbigi":[ +"16129772" +], +"refseq_locus_tag":[ +"b1818" +], +"refseq_name":[ +"manY" +], +"refseq_synonym":[ +"ptsX", +"pel", +"ECK1816", +"JW1807", +"ptsP" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P69801" +] +} +}, +{ +"id":"b1611", +"name":"fumC", +"notes":{ +"original_bigg_ids":[ +"b1611" +] +}, +"annotation":{ +"asap":[ +"ABE-0005380" +], +"ecogene":[ +"EG10358" +], +"ncbigene":[ +"946147" +], +"ncbigi":[ +"16129569" +], +"refseq_locus_tag":[ +"b1611" +], +"refseq_name":[ +"fumC" +], +"refseq_synonym":[ +"JW1603", +"ECK1606" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P05042" +] +} +}, +{ +"id":"b4122", +"name":"fumB", +"notes":{ +"original_bigg_ids":[ +"b4122" +] +}, +"annotation":{ +"asap":[ +"ABE-0013501" +], +"ecogene":[ +"EG10357" +], +"ncbigene":[ +"948642" +], +"ncbigi":[ +"16131948" +], +"refseq_locus_tag":[ +"b4122" +], +"refseq_name":[ +"fumB" +], +"refseq_synonym":[ +"JW4083", +"ECK4115" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P14407" +] +} +}, +{ +"id":"b1612", +"name":"fumA", +"notes":{ +"original_bigg_ids":[ +"b1612" +] +}, +"annotation":{ +"asap":[ +"ABE-0005392" +], +"ecogene":[ +"EG10356" +], +"ncbigene":[ +"946826" +], +"ncbigi":[ +"16129570" +], +"refseq_locus_tag":[ +"b1612" +], +"refseq_name":[ +"fumA" +], +"refseq_synonym":[ +"JW1604", +"ECK1607" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AC33" +] +} +}, +{ +"id":"b3528", +"name":"dctA", +"notes":{ +"original_bigg_ids":[ +"b3528" +] +}, +"annotation":{ +"asap":[ +"ABE-0011527" +], +"ecogene":[ +"EG20044" +], +"ncbigene":[ +"948039" +], +"ncbigi":[ +"16131400" +], +"refseq_locus_tag":[ +"b3528" +], +"refseq_name":[ +"dctA" +], +"refseq_synonym":[ +"JW3496", +"ECK3513", +"out" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A830" +] +} +}, +{ +"id":"b1852", +"name":"zwf", +"notes":{ +"original_bigg_ids":[ +"b1852" +] +}, +"annotation":{ +"asap":[ +"ABE-0006171" +], +"ecogene":[ +"EG11221" +], +"ncbigene":[ +"946370" +], +"ncbigi":[ +"16129805" +], +"refseq_locus_tag":[ +"b1852" +], +"refseq_name":[ +"zwf" +], +"refseq_synonym":[ +"JW1841", +"ECK1853" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AC53" +] +} +}, +{ +"id":"b1779", +"name":"gapA", +"notes":{ +"original_bigg_ids":[ +"b1779" +] +}, +"annotation":{ +"asap":[ +"ABE-0005920" +], +"ecogene":[ +"EG10367" +], +"ncbigene":[ +"947679" +], +"ncbigi":[ +"16129733" +], +"refseq_locus_tag":[ +"b1779" +], +"refseq_name":[ +"gapA" +], +"refseq_synonym":[ +"ECK1777", +"JW1768" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A9B2" +] +} +}, +{ +"id":"b1101", +"name":"ptsG", +"notes":{ +"original_bigg_ids":[ +"b1101" +] +}, +"annotation":{ +"asap":[ +"ABE-0003722" +], +"ecogene":[ +"EG10787" +], +"ncbigene":[ +"945651" +], +"ncbigi":[ +"16129064" +], +"refseq_locus_tag":[ +"b1101" +], +"refseq_name":[ +"ptsG" +], +"refseq_synonym":[ +"car", +"JW1087", +"umg", +"glcA", +"umgC", +"cat", +"CR", +"tgl", +"ECK1087" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P69786" +] +} +}, +{ +"id":"b2417", +"name":"crr", +"notes":{ +"original_bigg_ids":[ +"b2417" +] +}, +"annotation":{ +"asap":[ +"ABE-0007971" +], +"ecogene":[ +"EG10165" +], +"ncbigene":[ +"946880" +], +"ncbigi":[ +"16130343" +], +"refseq_locus_tag":[ +"b2417" +], +"refseq_name":[ +"crr" +], +"refseq_synonym":[ +"gsr", +"JW2410", +"ECK2412", +"treD", +"tgs", +"iex" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P69783" +] +} +}, +{ +"id":"b1621", +"name":"malX", +"notes":{ +"original_bigg_ids":[ +"b1621" +] +}, +"annotation":{ +"asap":[ +"ABE-0005429" +], +"ecogene":[ +"EG10563" +], +"ncbigene":[ +"946009" +], +"ncbigi":[ +"16129579" +], +"refseq_locus_tag":[ +"b1621" +], +"refseq_name":[ +"malX" +], +"refseq_synonym":[ +"ECK1616", +"JW1613" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P19642" +] +} +}, +{ +"id":"b1297", +"name":"puuA", +"notes":{ +"original_bigg_ids":[ +"b1297" +] +}, +"annotation":{ +"asap":[ +"ABE-0004365" +], +"ecogene":[ +"EG13908" +], +"ncbigene":[ +"946202" +], +"ncbigi":[ +"90111244" +], +"refseq_locus_tag":[ +"b1297" +], +"refseq_name":[ +"puuA" +], +"refseq_synonym":[ +"ECK1292", +"JW5201", +"ycjK" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P78061" +] +} +}, +{ +"id":"b3870", +"name":"glnA", +"notes":{ +"original_bigg_ids":[ +"b3870" +] +}, +"annotation":{ +"asap":[ +"ABE-0012640" +], +"ecogene":[ +"EG10383" +], +"ncbigene":[ +"948370" +], +"ncbigi":[ +"16131710" +], +"refseq_locus_tag":[ +"b3870" +], +"refseq_name":[ +"glnA" +], +"refseq_synonym":[ +"ECK3863", +"JW3841" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A9C5" +] +} +}, +{ +"id":"b0809", +"name":"glnQ", +"notes":{ +"original_bigg_ids":[ +"b0809" +] +}, +"annotation":{ +"asap":[ +"ABE-0002764" +], +"ecogene":[ +"EG10389" +], +"ncbigene":[ +"945435" +], +"ncbigi":[ +"16128777" +], +"refseq_locus_tag":[ +"b0809" +], +"refseq_name":[ +"glnQ" +], +"refseq_synonym":[ +"JW0794", +"ECK0798" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P10346" +] +} +}, +{ +"id":"b0811", +"name":"glnH", +"notes":{ +"original_bigg_ids":[ +"b0811" +] +}, +"annotation":{ +"asap":[ +"ABE-0002771" +], +"ecogene":[ +"EG10386" +], +"ncbigene":[ +"944872" +], +"ncbigi":[ +"16128779" +], +"refseq_locus_tag":[ +"b0811" +], +"refseq_name":[ +"glnH" +], +"refseq_synonym":[ +"JW0796", +"ECK0800" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AEQ3" +] +} +}, +{ +"id":"b0810", +"name":"glnP", +"notes":{ +"original_bigg_ids":[ +"b0810" +] +}, +"annotation":{ +"asap":[ +"ABE-0002766" +], +"ecogene":[ +"EG10388" +], +"ncbigene":[ +"945621" +], +"ncbigi":[ +"16128778" +], +"refseq_locus_tag":[ +"b0810" +], +"refseq_name":[ +"glnP" +], +"refseq_synonym":[ +"JW0795", +"ECK0799" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AEQ6" +] +} +}, +{ +"id":"b1761", +"name":"gdhA", +"notes":{ +"original_bigg_ids":[ +"b1761" +] +}, +"annotation":{ +"asap":[ +"ABE-0005865" +], +"ecogene":[ +"EG10372" +], +"ncbigene":[ +"946802" +], +"ncbigi":[ +"16129715" +], +"refseq_locus_tag":[ +"b1761" +], +"refseq_name":[ +"gdhA" +], +"refseq_synonym":[ +"ECK1759", +"JW1750" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P00370" +] +} +}, +{ +"id":"b1524", +"name":"glsB", +"notes":{ +"original_bigg_ids":[ +"b1524" +] +}, +"annotation":{ +"asap":[ +"ABE-0005086" +], +"ecogene":[ +"EG13816" +], +"ncbigene":[ +"944973" +], +"ncbigi":[ +"16129483" +], +"refseq_locus_tag":[ +"b1524" +], +"refseq_name":[ +"glsB" +], +"refseq_synonym":[ +"glsA2", +"yneH", +"JW1517", +"ECK1517" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A6W0" +] +} +}, +{ +"id":"b0485", +"name":"glsA", +"notes":{ +"original_bigg_ids":[ +"b0485" +] +}, +"annotation":{ +"asap":[ +"ABE-0001688" +], +"ecogene":[ +"EG13247" +], +"ncbigene":[ +"946187" +], +"ncbigi":[ +"16128469" +], +"refseq_locus_tag":[ +"b0485" +], +"refseq_name":[ +"glsA" +], +"refseq_synonym":[ +"glsA1", +"ECK0479", +"ybaS", +"JW0474" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P77454" +] +} +}, +{ +"id":"b1812", +"name":"pabB", +"notes":{ +"original_bigg_ids":[ +"b1812" +] +}, +"annotation":{ +"asap":[ +"ABE-0006031" +], +"ecogene":[ +"EG10683" +], +"ncbigene":[ +"946337" +], +"ncbigi":[ +"16129766" +], +"refseq_locus_tag":[ +"b1812" +], +"refseq_name":[ +"pabB" +], +"refseq_synonym":[ +"ECK1810", +"JW1801" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P05041" +] +} +}, +{ +"id":"b3213", +"name":"gltD", +"notes":{ +"original_bigg_ids":[ +"b3213" +] +}, +"annotation":{ +"asap":[ +"ABE-0010547" +], +"ecogene":[ +"EG10404" +], +"ncbigene":[ +"947723" +], +"ncbigi":[ +"16131103" +], +"refseq_locus_tag":[ +"b3213" +], +"refseq_name":[ +"gltD" +], +"refseq_synonym":[ +"psiQ", +"aspB", +"ossB", +"JW3180", +"ECK3203" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P09832" +] +} +}, +{ +"id":"b3212", +"name":"gltB", +"notes":{ +"original_bigg_ids":[ +"b3212" +] +}, +"annotation":{ +"asap":[ +"ABE-0010545" +], +"ecogene":[ +"EG10403" +], +"ncbigene":[ +"947724" +], +"ncbigi":[ +"308209621" +], +"refseq_locus_tag":[ +"b3212" +], +"refseq_name":[ +"gltB" +], +"refseq_synonym":[ +"psiQ", +"aspB", +"ECK3202", +"ossB", +"JW3179" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P09831" +] +} +}, +{ +"id":"b4077", +"name":"gltP", +"notes":{ +"original_bigg_ids":[ +"b4077" +] +}, +"annotation":{ +"asap":[ +"ABE-0013357" +], +"ecogene":[ +"EG10405" +], +"ncbigene":[ +"948591" +], +"ncbigi":[ +"16131903" +], +"refseq_locus_tag":[ +"b4077" +], +"refseq_name":[ +"gltP" +], +"refseq_synonym":[ +"ECK4070", +"JW4038" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P21345" +] +} +}, +{ +"id":"b2029", +"name":"gnd", +"notes":{ +"original_bigg_ids":[ +"b2029" +] +}, +"annotation":{ +"asap":[ +"ABE-0006737" +], +"ecogene":[ +"EG10411" +], +"ncbigene":[ +"946554" +], +"ncbigi":[ +"16129970" +], +"refseq_locus_tag":[ +"b2029" +], +"refseq_name":[ +"gnd" +], +"refseq_synonym":[ +"JW2011", +"ECK2024" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P00350" +] +} +}, +{ +"id":"b0875", +"name":"aqpZ", +"notes":{ +"original_bigg_ids":[ +"b0875" +] +}, +"annotation":{ +"asap":[ +"ABE-0002976" +], +"ecogene":[ +"EG13270" +], +"ncbigene":[ +"945497" +], +"ncbigi":[ +"16128843" +], +"refseq_locus_tag":[ +"b0875" +], +"refseq_name":[ +"aqpZ" +], +"refseq_synonym":[ +"bniP", +"JW0859", +"ECK0866" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P60844" +] +} +}, +{ +"id":"b1136", +"name":"icd", +"notes":{ +"original_bigg_ids":[ +"b1136" +] +}, +"annotation":{ +"asap":[ +"ABE-0003823" +], +"ecogene":[ +"EG10489" +], +"ncbigene":[ +"945702" +], +"ncbigi":[ +"16129099" +], +"refseq_locus_tag":[ +"b1136" +], +"refseq_name":[ +"icd" +], +"refseq_synonym":[ +"icdA", +"icdE", +"JW1122", +"ECK1122" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P08200" +] +} +}, +{ +"id":"b4015", +"name":"aceA", +"notes":{ +"original_bigg_ids":[ +"b4015" +] +}, +"annotation":{ +"asap":[ +"ABE-0013128" +], +"ecogene":[ +"EG10022" +], +"ncbigene":[ +"948517" +], +"ncbigi":[ +"16131841" +], +"refseq_locus_tag":[ +"b4015" +], +"refseq_name":[ +"aceA" +], +"refseq_synonym":[ +"JW3975", +"icl", +"ECK4007" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A9G6" +] +} +}, +{ +"id":"b1380", +"name":"ldhA", +"notes":{ +"original_bigg_ids":[ +"b1380" +] +}, +"annotation":{ +"asap":[ +"ABE-0004619" +], +"ecogene":[ +"EG13186" +], +"ncbigene":[ +"946315" +], +"ncbigi":[ +"16129341" +], +"refseq_locus_tag":[ +"b1380" +], +"refseq_name":[ +"ldhA" +], +"refseq_synonym":[ +"ECK1377", +"JW1375", +"hslI", +"htpH", +"hslF" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P52643" +] +} +}, +{ +"id":"b2133", +"name":"dld", +"notes":{ +"original_bigg_ids":[ +"b2133" +] +}, +"annotation":{ +"asap":[ +"ABE-0007048" +], +"ecogene":[ +"EG10231" +], +"ncbigene":[ +"946653" +], +"ncbigi":[ +"16130071" +], +"refseq_locus_tag":[ +"b2133" +], +"refseq_name":[ +"dld" +], +"refseq_synonym":[ +"JW2121", +"ECK2126" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P06149" +] +} +}, +{ +"id":"b4014", +"name":"aceB", +"notes":{ +"original_bigg_ids":[ +"b4014" +] +}, +"annotation":{ +"asap":[ +"ABE-0013125" +], +"ecogene":[ +"EG10023" +], +"ncbigene":[ +"948512" +], +"ncbigi":[ +"16131840" +], +"refseq_locus_tag":[ +"b4014" +], +"refseq_name":[ +"aceB" +], +"refseq_synonym":[ +"ECK4006", +"mas", +"JW3974" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P08997" +] +} +}, +{ +"id":"b2976", +"name":"glcB", +"notes":{ +"original_bigg_ids":[ +"b2976" +] +}, +"annotation":{ +"asap":[ +"ABE-0009767" +], +"ecogene":[ +"EG20080" +], +"ncbigene":[ +"948857" +], +"ncbigi":[ +"16130876" +], +"refseq_locus_tag":[ +"b2976" +], +"refseq_name":[ +"glcB" +], +"refseq_synonym":[ +"JW2943", +"glc", +"ECK2970" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P37330" +] +} +}, +{ +"id":"b3236", +"name":"mdh", +"notes":{ +"original_bigg_ids":[ +"b3236" +] +}, +"annotation":{ +"asap":[ +"ABE-0010613" +], +"ecogene":[ +"EG10576" +], +"ncbigene":[ +"947854" +], +"ncbigi":[ +"16131126" +], +"refseq_locus_tag":[ +"b3236" +], +"refseq_name":[ +"mdh" +], +"refseq_synonym":[ +"ECK3225", +"JW3205" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P61889" +] +} +}, +{ +"id":"b1479", +"name":"maeA", +"notes":{ +"original_bigg_ids":[ +"b1479" +] +}, +"annotation":{ +"asap":[ +"ABE-0004931" +], +"ecogene":[ +"EG10948" +], +"ncbigene":[ +"946031" +], +"ncbigi":[ +"90111281" +], +"refseq_locus_tag":[ +"b1479" +], +"refseq_name":[ +"maeA" +], +"refseq_synonym":[ +"JW5238", +"sfcA", +"ECK1473" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P26616" +] +} +}, +{ +"id":"b2463", +"name":"maeB", +"notes":{ +"original_bigg_ids":[ +"b2463" +] +}, +"annotation":{ +"asap":[ +"ABE-0008111" +], +"ecogene":[ +"EG14193" +], +"ncbigene":[ +"946947" +], +"ncbigi":[ +"16130388" +], +"refseq_locus_tag":[ +"b2463" +], +"refseq_name":[ +"maeB" +], +"refseq_synonym":[ +"ECK2458", +"JW2447", +"ypfF" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P76558" +] +} +}, +{ +"id":"b2281", +"name":"nuoI", +"notes":{ +"original_bigg_ids":[ +"b2281" +] +}, +"annotation":{ +"asap":[ +"ABE-0007539" +], +"ecogene":[ +"EG12089" +], +"ncbigene":[ +"946757" +], +"ncbigi":[ +"16130216" +], +"refseq_locus_tag":[ +"b2281" +], +"refseq_name":[ +"nuoI" +], +"refseq_synonym":[ +"ECK2275", +"JW2276" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFD6" +] +} +}, +{ +"id":"b2277", +"name":"nuoM", +"notes":{ +"original_bigg_ids":[ +"b2277" +] +}, +"annotation":{ +"asap":[ +"ABE-0007529" +], +"ecogene":[ +"EG11773" +], +"ncbigene":[ +"947731" +], +"ncbigi":[ +"16130212" +], +"refseq_locus_tag":[ +"b2277" +], +"refseq_name":[ +"nuoM" +], +"refseq_synonym":[ +"JW2272", +"nuoA", +"ECK2271" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFE8" +] +} +}, +{ +"id":"b2280", +"name":"nuoJ", +"notes":{ +"original_bigg_ids":[ +"b2280" +] +}, +"annotation":{ +"asap":[ +"ABE-0007536" +], +"ecogene":[ +"EG12090" +], +"ncbigene":[ +"946756" +], +"ncbigi":[ +"16130215" +], +"refseq_locus_tag":[ +"b2280" +], +"refseq_name":[ +"nuoJ" +], +"refseq_synonym":[ +"ECK2274", +"JW2275" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFE0" +] +} +}, +{ +"id":"b2286", +"name":"nuoC", +"notes":{ +"original_bigg_ids":[ +"b2286" +] +}, +"annotation":{ +"asap":[ +"ABE-0007549" +], +"ecogene":[ +"EG12084" +], +"ncbigene":[ +"946759" +], +"ncbigi":[ +"145698291" +], +"refseq_locus_tag":[ +"b2286" +], +"refseq_name":[ +"nuoC" +], +"refseq_synonym":[ +"ECK2280", +"nuoD", +"nuoCD", +"JW5375" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P33599" +] +} +}, +{ +"id":"b2287", +"name":"nuoB", +"notes":{ +"original_bigg_ids":[ +"b2287" +] +}, +"annotation":{ +"asap":[ +"ABE-0007551" +], +"ecogene":[ +"EG12083" +], +"ncbigene":[ +"946738" +], +"ncbigi":[ +"16130222" +], +"refseq_locus_tag":[ +"b2287" +], +"refseq_name":[ +"nuoB" +], +"refseq_synonym":[ +"JW5875", +"ECK2281" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFC7" +] +} +}, +{ +"id":"b2284", +"name":"nuoF", +"notes":{ +"original_bigg_ids":[ +"b2284" +] +}, +"annotation":{ +"asap":[ +"ABE-0007545" +], +"ecogene":[ +"EG11774" +], +"ncbigene":[ +"946753" +], +"ncbigi":[ +"16130219" +], +"refseq_locus_tag":[ +"b2284" +], +"refseq_name":[ +"nuoF" +], +"refseq_synonym":[ +"ECK2278", +"nuoB", +"JW2279" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P31979" +] +} +}, +{ +"id":"b2276", +"name":"nuoN", +"notes":{ +"original_bigg_ids":[ +"b2276" +] +}, +"annotation":{ +"asap":[ +"ABE-0007526" +], +"ecogene":[ +"EG12093" +], +"ncbigene":[ +"945136" +], +"ncbigi":[ +"145698289" +], +"refseq_locus_tag":[ +"b2276" +], +"refseq_name":[ +"nuoN" +], +"refseq_synonym":[ +"JW2271", +"ECK2270" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFF0" +] +} +}, +{ +"id":"b2282", +"name":"nuoH", +"notes":{ +"original_bigg_ids":[ +"b2282" +] +}, +"annotation":{ +"asap":[ +"ABE-0007541" +], +"ecogene":[ +"EG12088" +], +"ncbigene":[ +"946761" +], +"ncbigi":[ +"16130217" +], +"refseq_locus_tag":[ +"b2282" +], +"refseq_name":[ +"nuoH" +], +"refseq_synonym":[ +"JW2277", +"ECK2276" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFD4" +] +} +}, +{ +"id":"b2279", +"name":"nuoK", +"notes":{ +"original_bigg_ids":[ +"b2279" +] +}, +"annotation":{ +"asap":[ +"ABE-0007534" +], +"ecogene":[ +"EG12091" +], +"ncbigene":[ +"947580" +], +"ncbigi":[ +"16130214" +], +"refseq_locus_tag":[ +"b2279" +], +"refseq_name":[ +"nuoK" +], +"refseq_synonym":[ +"JW2274", +"ECK2273" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFE4" +] +} +}, +{ +"id":"b2283", +"name":"nuoG", +"notes":{ +"original_bigg_ids":[ +"b2283" +] +}, +"annotation":{ +"asap":[ +"ABE-0007543" +], +"ecogene":[ +"EG12087" +], +"ncbigene":[ +"946762" +], +"ncbigi":[ +"145698290" +], +"refseq_locus_tag":[ +"b2283" +], +"refseq_name":[ +"nuoG" +], +"refseq_synonym":[ +"JW2278", +"ECK2277" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P33602" +] +} +}, +{ +"id":"b2285", +"name":"nuoE", +"notes":{ +"original_bigg_ids":[ +"b2285" +] +}, +"annotation":{ +"asap":[ +"ABE-0007547" +], +"ecogene":[ +"EG12086" +], +"ncbigene":[ +"946746" +], +"ncbigi":[ +"16130220" +], +"refseq_locus_tag":[ +"b2285" +], +"refseq_name":[ +"nuoE" +], +"refseq_synonym":[ +"JW2280", +"ECK2279" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFD1" +] +} +}, +{ +"id":"b2288", +"name":"nuoA", +"notes":{ +"original_bigg_ids":[ +"b2288" +] +}, +"annotation":{ +"asap":[ +"ABE-0007553" +], +"ecogene":[ +"EG12082" +], +"ncbigene":[ +"946764" +], +"ncbigi":[ +"49176207" +], +"refseq_locus_tag":[ +"b2288" +], +"refseq_name":[ +"nuoA" +], +"refseq_synonym":[ +"JW2283", +"ECK2282" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFC3" +] +} +}, +{ +"id":"b2278", +"name":"nuoL", +"notes":{ +"original_bigg_ids":[ +"b2278" +] +}, +"annotation":{ +"asap":[ +"ABE-0007532" +], +"ecogene":[ +"EG12092" +], +"ncbigene":[ +"945540" +], +"ncbigi":[ +"16130213" +], +"refseq_locus_tag":[ +"b2278" +], +"refseq_name":[ +"nuoL" +], +"refseq_synonym":[ +"ECK2272", +"JW2273" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P33607" +] +} +}, +{ +"id":"b1603", +"name":"pntA", +"notes":{ +"original_bigg_ids":[ +"b1603" +] +}, +"annotation":{ +"asap":[ +"ABE-0005354" +], +"ecogene":[ +"EG10744" +], +"ncbigene":[ +"946628" +], +"ncbigi":[ +"16129561" +], +"refseq_locus_tag":[ +"b1603" +], +"refseq_name":[ +"pntA" +], +"refseq_synonym":[ +"JW1595", +"ECK1598" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P07001" +] +} +}, +{ +"id":"b3962", +"name":"sthA", +"notes":{ +"original_bigg_ids":[ +"b3962" +] +}, +"annotation":{ +"asap":[ +"ABE-0012975" +], +"ecogene":[ +"EG11428" +], +"ncbigene":[ +"948461" +], +"ncbigi":[ +"90111670" +], +"refseq_locus_tag":[ +"b3962" +], +"refseq_name":[ +"sthA" +], +"refseq_synonym":[ +"ECK3954", +"udhA", +"JW5551", +"sth" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P27306" +] +} +}, +{ +"id":"b1602", +"name":"pntB", +"notes":{ +"original_bigg_ids":[ +"b1602" +] +}, +"annotation":{ +"asap":[ +"ABE-0005352" +], +"ecogene":[ +"EG10745" +], +"ncbigene":[ +"946144" +], +"ncbigi":[ +"16129560" +], +"refseq_locus_tag":[ +"b1602" +], +"refseq_name":[ +"pntB" +], +"refseq_synonym":[ +"ECK1597", +"JW1594" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AB67" +] +} +}, +{ +"id":"b0451", +"name":"amtB", +"notes":{ +"original_bigg_ids":[ +"b0451" +] +}, +"annotation":{ +"asap":[ +"ABE-0001564" +], +"ecogene":[ +"EG11821" +], +"ncbigene":[ +"945084" +], +"ncbigi":[ +"16128436" +], +"refseq_locus_tag":[ +"b0451" +], +"refseq_name":[ +"amtB" +], +"refseq_synonym":[ +"JW0441", +"ECK0445", +"ybaG" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P69681" +] +} +}, +{ +"id":"b0114", +"name":"aceE", +"notes":{ +"original_bigg_ids":[ +"b0114" +] +}, +"annotation":{ +"asap":[ +"ABE-0000397" +], +"ecogene":[ +"EG10024" +], +"ncbigene":[ +"944834" +], +"ncbigi":[ +"16128107" +], +"refseq_locus_tag":[ +"b0114" +], +"refseq_name":[ +"aceE" +], +"refseq_synonym":[ +"ECK0113", +"JW0110" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFG8" +] +} +}, +{ +"id":"b0115", +"name":"aceF", +"notes":{ +"original_bigg_ids":[ +"b0115" +] +}, +"annotation":{ +"asap":[ +"ABE-0000400" +], +"ecogene":[ +"EG10025" +], +"ncbigene":[ +"944794" +], +"ncbigi":[ +"16128108" +], +"refseq_locus_tag":[ +"b0115" +], +"refseq_name":[ +"aceF" +], +"refseq_synonym":[ +"ECK0114", +"JW0111" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P06959" +] +} +}, +{ +"id":"b3916", +"name":"pfkA", +"notes":{ +"original_bigg_ids":[ +"b3916" +] +}, +"annotation":{ +"asap":[ +"ABE-0012789" +], +"ecogene":[ +"EG10699" +], +"ncbigene":[ +"948412" +], +"ncbigi":[ +"16131754" +], +"refseq_locus_tag":[ +"b3916" +], +"refseq_name":[ +"pfkA" +], +"refseq_synonym":[ +"JW3887", +"ECK3908" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A796" +] +} +}, +{ +"id":"b1723", +"name":"pfkB", +"notes":{ +"original_bigg_ids":[ +"b1723" +] +}, +"annotation":{ +"asap":[ +"ABE-0005748" +], +"ecogene":[ +"EG10700" +], +"ncbigene":[ +"946230" +], +"ncbigi":[ +"49176138" +], +"refseq_locus_tag":[ +"b1723" +], +"refseq_name":[ +"pfkB" +], +"refseq_synonym":[ +"JW5280", +"ECK1721" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P06999" +] +} +}, +{ +"id":"b3114", +"name":"tdcE", +"notes":{ +"original_bigg_ids":[ +"b3114" +] +}, +"annotation":{ +"asap":[ +"ABE-0010242" +], +"ecogene":[ +"EG12758" +], +"ncbigene":[ +"947623" +], +"ncbigi":[ +"49176316" +], +"refseq_locus_tag":[ +"b3114" +], +"refseq_name":[ +"tdcE" +], +"refseq_synonym":[ +"JW5522", +"ECK3103", +"yhaS" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P42632" +] +} +}, +{ +"id":"b2579", +"name":"grcA", +"notes":{ +"original_bigg_ids":[ +"b2579" +] +}, +"annotation":{ +"asap":[ +"ABE-0008489" +], +"ecogene":[ +"EG11784" +], +"ncbigene":[ +"947068" +], +"ncbigi":[ +"16130504" +], +"refseq_locus_tag":[ +"b2579" +], +"refseq_name":[ +"grcA" +], +"refseq_synonym":[ +"ECK2577", +"yfiD", +"JW2563" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P68066" +] +} +}, +{ +"id":"b3951", +"name":"pflD", +"notes":{ +"original_bigg_ids":[ +"b3951" +] +}, +"annotation":{ +"asap":[ +"ABE-0012934" +], +"ecogene":[ +"EG11910" +], +"ncbigene":[ +"948454" +], +"ncbigi":[ +"16131789" +], +"refseq_locus_tag":[ +"b3951" +], +"refseq_name":[ +"pflD" +], +"refseq_synonym":[ +"ECK3942", +"yijL", +"JW3923" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P32674" +] +} +}, +{ +"id":"b0902", +"name":"pflA", +"notes":{ +"original_bigg_ids":[ +"b0902" +] +}, +"annotation":{ +"asap":[ +"ABE-0003068" +], +"ecogene":[ +"EG10028" +], +"ncbigene":[ +"945517" +], +"ncbigi":[ +"16128869" +], +"refseq_locus_tag":[ +"b0902" +], +"refseq_name":[ +"pflA" +], +"refseq_synonym":[ +"ECK0893", +"JW0885", +"act" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A9N4" +] +} +}, +{ +"id":"b3952", +"name":"pflC", +"notes":{ +"original_bigg_ids":[ +"b3952" +] +}, +"annotation":{ +"asap":[ +"ABE-0012937" +], +"ecogene":[ +"EG11911" +], +"ncbigene":[ +"948453" +], +"ncbigi":[ +"49176447" +], +"refseq_locus_tag":[ +"b3952" +], +"refseq_name":[ +"pflC" +], +"refseq_synonym":[ +"ECK3943", +"JW3924", +"yijM" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P32675" +] +} +}, +{ +"id":"b0903", +"name":"pflB", +"notes":{ +"original_bigg_ids":[ +"b0903" +] +}, +"annotation":{ +"asap":[ +"ABE-0003071" +], +"ecogene":[ +"EG10701" +], +"ncbigene":[ +"945514" +], +"ncbigi":[ +"16128870" +], +"refseq_locus_tag":[ +"b0903" +], +"refseq_name":[ +"pflB" +], +"refseq_synonym":[ +"pfl", +"ECK0894", +"JW0886" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P09373" +] +} +}, +{ +"id":"b4025", +"name":"pgi", +"notes":{ +"original_bigg_ids":[ +"b4025" +] +}, +"annotation":{ +"asap":[ +"ABE-0013163" +], +"ecogene":[ +"EG10702" +], +"ncbigene":[ +"948535" +], +"ncbigi":[ +"16131851" +], +"refseq_locus_tag":[ +"b4025" +], +"refseq_name":[ +"pgi" +], +"refseq_synonym":[ +"JW3985", +"ECK4017" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A6T1" +] +} +}, +{ +"id":"b2926", +"name":"pgk", +"notes":{ +"original_bigg_ids":[ +"b2926" +] +}, +"annotation":{ +"asap":[ +"ABE-0009605" +], +"ecogene":[ +"EG10703" +], +"ncbigene":[ +"947414" +], +"ncbigi":[ +"16130827" +], +"refseq_locus_tag":[ +"b2926" +], +"refseq_name":[ +"pgk" +], +"refseq_synonym":[ +"ECK2922", +"JW2893" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A799" +] +} +}, +{ +"id":"b0767", +"name":"pgl", +"notes":{ +"original_bigg_ids":[ +"b0767" +] +}, +"annotation":{ +"asap":[ +"ABE-0002611" +], +"ecogene":[ +"EG13231" +], +"ncbigene":[ +"946398" +], +"ncbigi":[ +"16128735" +], +"refseq_locus_tag":[ +"b0767" +], +"refseq_name":[ +"pgl" +], +"refseq_synonym":[ +"JW0750", +"ybhE", +"ECK0756", +"blu" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P52697" +] +} +}, +{ +"id":"b3612", +"name":"gpmM", +"notes":{ +"original_bigg_ids":[ +"b3612" +] +}, +"annotation":{ +"asap":[ +"ABE-0011818" +], +"ecogene":[ +"EG12296" +], +"ncbigene":[ +"948130" +], +"ncbigi":[ +"16131483" +], +"refseq_locus_tag":[ +"b3612" +], +"refseq_name":[ +"gpmM" +], +"refseq_synonym":[ +"JW3587", +"yibO", +"ECK3602", +"pgmI", +"gpmC", +"gpmI" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P37689" +] +} +}, +{ +"id":"b4395", +"name":"ytjC", +"notes":{ +"original_bigg_ids":[ +"b4395" +] +}, +"annotation":{ +"asap":[ +"ABE-0014416" +], +"ecogene":[ +"EG12164" +], +"ncbigene":[ +"948918" +], +"ncbigi":[ +"16132212" +], +"refseq_locus_tag":[ +"b4395" +], +"refseq_name":[ +"ytjC" +], +"refseq_synonym":[ +"gpmB", +"JW4358", +"ECK4387" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A7A2" +] +} +}, +{ +"id":"b0755", +"name":"gpmA", +"notes":{ +"original_bigg_ids":[ +"b0755" +] +}, +"annotation":{ +"asap":[ +"ABE-0002563" +], +"ecogene":[ +"EG11699" +], +"ncbigene":[ +"945068" +], +"ncbigi":[ +"16128723" +], +"refseq_locus_tag":[ +"b0755" +], +"refseq_name":[ +"gpmA" +], +"refseq_synonym":[ +"JW0738", +"gpm", +"ECK0744" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P62707" +] +} +}, +{ +"id":"b3493", +"name":"pitA", +"notes":{ +"original_bigg_ids":[ +"b3493" +] +}, +"annotation":{ +"asap":[ +"ABE-0011407" +], +"ecogene":[ +"EG12230" +], +"ncbigene":[ +"948009" +], +"ncbigi":[ +"16131365" +], +"refseq_locus_tag":[ +"b3493" +], +"refseq_name":[ +"pitA" +], +"refseq_synonym":[ +"pit", +"ECK3478", +"JW3460" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AFJ7" +] +} +}, +{ +"id":"b2987", +"name":"pitB", +"notes":{ +"original_bigg_ids":[ +"b2987" +] +}, +"annotation":{ +"asap":[ +"ABE-0009800" +], +"ecogene":[ +"EG12883" +], +"ncbigene":[ +"947475" +], +"ncbigi":[ +"16130887" +], +"refseq_locus_tag":[ +"b2987" +], +"refseq_name":[ +"pitB" +], +"refseq_synonym":[ +"ECK2981", +"JW2955" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P43676" +] +} +}, +{ +"id":"b3956", +"name":"ppc", +"notes":{ +"original_bigg_ids":[ +"b3956" +] +}, +"annotation":{ +"asap":[ +"ABE-0012950" +], +"ecogene":[ +"EG10756" +], +"ncbigene":[ +"948457" +], +"ncbigi":[ +"16131794" +], +"refseq_locus_tag":[ +"b3956" +], +"refseq_name":[ +"ppc" +], +"refseq_synonym":[ +"glu", +"ECK3947", +"asp", +"JW3928" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P00864" +] +} +}, +{ +"id":"b3403", +"name":"pck", +"notes":{ +"original_bigg_ids":[ +"b3403" +] +}, +"annotation":{ +"asap":[ +"ABE-0011106" +], +"ecogene":[ +"EG10688" +], +"ncbigene":[ +"945667" +], +"ncbigi":[ +"16131280" +], +"refseq_locus_tag":[ +"b3403" +], +"refseq_name":[ +"pck" +], +"refseq_synonym":[ +"JW3366", +"pckA", +"ECK3390" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P22259" +] +} +}, +{ +"id":"b1702", +"name":"ppsA", +"notes":{ +"original_bigg_ids":[ +"b1702" +] +}, +"annotation":{ +"asap":[ +"ABE-0005678" +], +"ecogene":[ +"EG10759" +], +"ncbigene":[ +"946209" +], +"ncbigi":[ +"16129658" +], +"refseq_locus_tag":[ +"b1702" +], +"refseq_name":[ +"ppsA" +], +"refseq_synonym":[ +"pps", +"ECK1700", +"JW1692" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P23538" +] +} +}, +{ +"id":"b2297", +"name":"pta", +"notes":{ +"original_bigg_ids":[ +"b2297" +] +}, +"annotation":{ +"asap":[ +"ABE-0007582" +], +"ecogene":[ +"EG20173" +], +"ncbigene":[ +"946778" +], +"ncbigi":[ +"16130232" +], +"refseq_locus_tag":[ +"b2297" +], +"refseq_name":[ +"pta" +], +"refseq_synonym":[ +"JW2294", +"ECK2291" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A9M8" +] +} +}, +{ +"id":"b2458", +"name":"eutD", +"notes":{ +"original_bigg_ids":[ +"b2458" +] +}, +"annotation":{ +"asap":[ +"ABE-0008097" +], +"ecogene":[ +"EG14188" +], +"ncbigene":[ +"946940" +], +"ncbigi":[ +"16130383" +], +"refseq_locus_tag":[ +"b2458" +], +"refseq_name":[ +"eutD" +], +"refseq_synonym":[ +"eutI", +"ypfA", +"ECK2453", +"JW2442" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P77218" +] +} +}, +{ +"id":"b1676", +"name":"pykF", +"notes":{ +"original_bigg_ids":[ +"b1676" +] +}, +"annotation":{ +"asap":[ +"ABE-0005600" +], +"ecogene":[ +"EG10804" +], +"ncbigene":[ +"946179" +], +"ncbigi":[ +"16129632" +], +"refseq_locus_tag":[ +"b1676" +], +"refseq_name":[ +"pykF" +], +"refseq_synonym":[ +"ECK1672", +"JW1666" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AD61" +] +} +}, +{ +"id":"b1854", +"name":"pykA", +"notes":{ +"original_bigg_ids":[ +"b1854" +] +}, +"annotation":{ +"asap":[ +"ABE-0006182" +], +"ecogene":[ +"EG10803" +], +"ncbigene":[ +"946527" +], +"ncbigi":[ +"16129807" +], +"refseq_locus_tag":[ +"b1854" +], +"refseq_name":[ +"pykA" +], +"refseq_synonym":[ +"JW1843", +"ECK1855" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P21599" +] +} +}, +{ +"id":"b3386", +"name":"rpe", +"notes":{ +"original_bigg_ids":[ +"b3386" +] +}, +"annotation":{ +"asap":[ +"ABE-0011061" +], +"ecogene":[ +"EG11960" +], +"ncbigene":[ +"947896" +], +"ncbigi":[ +"16131264" +], +"refseq_locus_tag":[ +"b3386" +], +"refseq_name":[ +"rpe" +], +"refseq_synonym":[ +"yhfD", +"ECK3373", +"JW3349", +"dod" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AG07" +] +} +}, +{ +"id":"b4301", +"name":"sgcE", +"notes":{ +"original_bigg_ids":[ +"b4301" +] +}, +"annotation":{ +"asap":[ +"ABE-0014097" +], +"ecogene":[ +"EG12553" +], +"ncbigene":[ +"948829" +], +"ncbigi":[ +"16132122" +], +"refseq_locus_tag":[ +"b4301" +], +"refseq_name":[ +"sgcE" +], +"refseq_synonym":[ +"JW4263", +"ECK4290", +"yjhK" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P39362" +] +} +}, +{ +"id":"b2914", +"name":"rpiA", +"notes":{ +"original_bigg_ids":[ +"b2914" +] +}, +"annotation":{ +"asap":[ +"ABE-0009567" +], +"ecogene":[ +"EG11443" +], +"ncbigene":[ +"947407" +], +"ncbigi":[ +"16130815" +], +"refseq_locus_tag":[ +"b2914" +], +"refseq_name":[ +"rpiA" +], +"refseq_synonym":[ +"ECK2910", +"JW5475", +"ygfC" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A7Z0" +] +} +}, +{ +"id":"b4090", +"name":"rpiB", +"notes":{ +"original_bigg_ids":[ +"b4090" +] +}, +"annotation":{ +"asap":[ +"ABE-0013405" +], +"ecogene":[ +"EG11827" +], +"ncbigene":[ +"948602" +], +"ncbigi":[ +"16131916" +], +"refseq_locus_tag":[ +"b4090" +], +"refseq_name":[ +"rpiB" +], +"refseq_synonym":[ +"JW4051", +"alsB", +"alsI", +"yjcA", +"ECK4083" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P37351" +] +} +}, +{ +"id":"b0721", +"name":"sdhC", +"notes":{ +"original_bigg_ids":[ +"b0721" +] +}, +"annotation":{ +"asap":[ +"ABE-0002460" +], +"ecogene":[ +"EG10933" +], +"ncbigene":[ +"945316" +], +"ncbigi":[ +"16128696" +], +"refseq_locus_tag":[ +"b0721" +], +"refseq_name":[ +"sdhC" +], +"refseq_synonym":[ +"JW0711", +"ECK0710", +"cybA" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P69054" +] +} +}, +{ +"id":"b0722", +"name":"sdhD", +"notes":{ +"original_bigg_ids":[ +"b0722" +] +}, +"annotation":{ +"asap":[ +"ABE-0002464" +], +"ecogene":[ +"EG10934" +], +"ncbigene":[ +"945322" +], +"ncbigi":[ +"16128697" +], +"refseq_locus_tag":[ +"b0722" +], +"refseq_name":[ +"sdhD" +], +"refseq_synonym":[ +"JW0712", +"ECK0711" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AC44" +] +} +}, +{ +"id":"b0724", +"name":"sdhB", +"notes":{ +"original_bigg_ids":[ +"b0724" +] +}, +"annotation":{ +"asap":[ +"ABE-0002468" +], +"ecogene":[ +"EG10932" +], +"ncbigene":[ +"945300" +], +"ncbigi":[ +"16128699" +], +"refseq_locus_tag":[ +"b0724" +], +"refseq_name":[ +"sdhB" +], +"refseq_synonym":[ +"ECK0713", +"JW0714" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P07014" +] +} +}, +{ +"id":"b0723", +"name":"sdhA", +"notes":{ +"original_bigg_ids":[ +"b0723" +] +}, +"annotation":{ +"asap":[ +"ABE-0002466" +], +"ecogene":[ +"EG10931" +], +"ncbigene":[ +"945402" +], +"ncbigi":[ +"16128698" +], +"refseq_locus_tag":[ +"b0723" +], +"refseq_name":[ +"sdhA" +], +"refseq_synonym":[ +"JW0713", +"ECK0712" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AC41" +] +} +}, +{ +"id":"b0729", +"name":"sucD", +"notes":{ +"original_bigg_ids":[ +"b0729" +] +}, +"annotation":{ +"asap":[ +"ABE-0002485" +], +"ecogene":[ +"EG10982" +], +"ncbigene":[ +"945314" +], +"ncbigi":[ +"16128704" +], +"refseq_locus_tag":[ +"b0729" +], +"refseq_name":[ +"sucD" +], +"refseq_synonym":[ +"JW0718", +"ECK0717" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0AGE9" +] +} +}, +{ +"id":"b0728", +"name":"sucC", +"notes":{ +"original_bigg_ids":[ +"b0728" +] +}, +"annotation":{ +"asap":[ +"ABE-0002483" +], +"ecogene":[ +"EG10981" +], +"ncbigene":[ +"945312" +], +"ncbigi":[ +"16128703" +], +"refseq_locus_tag":[ +"b0728" +], +"refseq_name":[ +"sucC" +], +"refseq_synonym":[ +"JW0717", +"ECK0716" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A836" +] +} +}, +{ +"id":"b0008", +"name":"talB", +"notes":{ +"original_bigg_ids":[ +"b0008" +] +}, +"annotation":{ +"asap":[ +"ABE-0000027" +], +"ecogene":[ +"EG11556" +], +"ncbigene":[ +"944748" +], +"ncbigi":[ +"16128002" +], +"refseq_locus_tag":[ +"b0008" +], +"refseq_name":[ +"talB" +], +"refseq_synonym":[ +"yaaK", +"JW0007", +"ECK0008" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A870" +] +} +}, +{ +"id":"b2464", +"name":"talA", +"notes":{ +"original_bigg_ids":[ +"b2464" +] +}, +"annotation":{ +"asap":[ +"ABE-0008115" +], +"ecogene":[ +"EG11797" +], +"ncbigene":[ +"947006" +], +"ncbigi":[ +"16130389" +], +"refseq_locus_tag":[ +"b2464" +], +"refseq_name":[ +"talA" +], +"refseq_synonym":[ +"ECK2459", +"JW2448" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A867" +] +} +}, +{ +"id":"b2465", +"name":"tktB", +"notes":{ +"original_bigg_ids":[ +"b2465" +] +}, +"annotation":{ +"asap":[ +"ABE-0008117" +], +"ecogene":[ +"EG12100" +], +"ncbigene":[ +"945865" +], +"ncbigi":[ +"16130390" +], +"refseq_locus_tag":[ +"b2465" +], +"refseq_name":[ +"tktB" +], +"refseq_synonym":[ +"JW2449", +"ECK2460" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P33570" +] +} +}, +{ +"id":"b2935", +"name":"tktA", +"notes":{ +"original_bigg_ids":[ +"b2935" +] +}, +"annotation":{ +"asap":[ +"ABE-0009625" +], +"ecogene":[ +"EG11427" +], +"ncbigene":[ +"947420" +], +"ncbigi":[ +"49176286" +], +"refseq_locus_tag":[ +"b2935" +], +"refseq_name":[ +"tktA" +], +"refseq_synonym":[ +"JW5478", +"tkt", +"ECK2930" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P27302" +] +} +}, +{ +"id":"b3919", +"name":"tpiA", +"notes":{ +"original_bigg_ids":[ +"b3919" +] +}, +"annotation":{ +"asap":[ +"ABE-0012799" +], +"ecogene":[ +"EG11015" +], +"ncbigene":[ +"948409" +], +"ncbigi":[ +"16131757" +], +"refseq_locus_tag":[ +"b3919" +], +"refseq_name":[ +"tpiA" +], +"refseq_synonym":[ +"JW3890", +"ECK3911", +"tpi" +], +"sbo":"SBO:0000243", +"uniprot":[ +"P0A858" +] +} +} +], +"id":"e_coli_core", +"compartments":{ +"c":"cytosol", +"e":"extracellular space" +}, +"version":"1" +} \ No newline at end of file diff --git a/tests/data/e_coli_core_for_annotation.xml b/tests/data/e_coli_core_for_annotation.xml new file mode 100644 index 000000000..5658f8fdb --- /dev/null +++ b/tests/data/e_coli_core_for_annotation.xml @@ -0,0 +1,8367 @@ + + + + + +
+

Key1 : Value1

+
+

+
e_coli_core - Escherichia coli str. K-12 substr. MG1655
+

+
+
+ +
+ + + +

Description

+
+

This is a metabolism model of Escherichia coli str. K-12 substr. MG1655 in + SBML format.

+
+
The content of this model has been carefully created in a manual research effort. This file has been exported from the software + COBRApy and further processed with the + JSBML-based + ModelPolisher application.
+
This file has been produced by the + Systems Biology Research Group using + BiGG Models knowledge-base version of Feb 24, 2018, where it is currently hosted and + identified by: + e_coli_core.
+

Terms of use

+
Copyright © 2017 The Regents of the University of California.
+
+

Redistribution and use of any part of this model from BiGG Models knowledge-base, with or without modification, are permitted provided that the following conditions are met: +

    +
  1. Redistributions of this SBML file must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. +
  3. Redistributions in a different form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided + with the distribution.
  4. +
This model is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

+

For specific licensing terms about this particular model and regulations of commercial use, see + this model in BiGG Models knowledge-base.

+
+

References

When using content from BiGG Models knowledge-base in your research works, please cite +
+
King ZA, Lu JS, Dräger A, Miller PC, Federowicz S, Lerman JA, Ebrahim A, Palsson BO, and Lewis NE. (2015). +
BiGG Models: A platform for integrating, standardizing, and sharing genome-scale models. + Nucl Acids Res. + doi:10.1093/nar/gkv1049
+
+
+ + + + + + + + Koenig + Matthias + + koenigmx@hu-berlin.de + + Humboldt-University Berlin, Institute for Theoretical Biology + + + + + Koenig + Matthias + + koenigmx@hu-berlin.de + + + + Koenig + Matthias + + + Humboldt-University Berlin, Institute for Theoretical Biology + + + + + Koenig + Matthias + + + + + + 2019-03-06T14:40:55Z + + + 2019-03-06T14:40:55Z + + + 2019-03-06T14:41:55Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Key1 : Value1

+

Key2 : Value2

+
+

A Heading

+
e_coli_core - Escherichia coli str. K-12 substr. MG1655
+
+

Key3 : Value3

+
+ +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
diff --git a/tests/data/e_coli_new_format.json b/tests/data/e_coli_new_format.json new file mode 100644 index 000000000..501789d95 --- /dev/null +++ b/tests/data/e_coli_new_format.json @@ -0,0 +1,8516 @@ +{ + "metabolites": [ + { + "id": "M_13dpg_c", + "name": "3-Phospho-D-glyceroyl phosphate", + "compartment": "c", + "charge": 0, + "formula": "C3H4O10P2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/13dpg", + "http://identifiers.org/biocyc/META:DPG", + "http://identifiers.org/chebi/CHEBI:11881", + "http://identifiers.org/chebi/CHEBI:16001", + "http://identifiers.org/chebi/CHEBI:1658", + "http://identifiers.org/chebi/CHEBI:20189", + "http://identifiers.org/chebi/CHEBI:57604", + "http://identifiers.org/hmdb/HMDB62758", + "http://identifiers.org/kegg.compound/C00236", + "http://identifiers.org/metanetx.chemical/MNXM261", + "http://identifiers.org/seed.compound/cpd00203" + ] + } + ] + } + }, + { + "id": "M_2pg_c", + "name": "D-Glycerate 2-phosphate", + "compartment": "c", + "charge": 0, + "formula": "C3H4O7P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/2pg", + "http://identifiers.org/biocyc/META:2-PG", + "http://identifiers.org/chebi/CHEBI:11651", + "http://identifiers.org/chebi/CHEBI:1267", + "http://identifiers.org/chebi/CHEBI:12986", + "http://identifiers.org/chebi/CHEBI:17835", + "http://identifiers.org/chebi/CHEBI:21028", + "http://identifiers.org/chebi/CHEBI:24344", + "http://identifiers.org/chebi/CHEBI:39868", + "http://identifiers.org/chebi/CHEBI:58289", + "http://identifiers.org/chebi/CHEBI:88350", + "http://identifiers.org/hmdb/HMDB03391", + "http://identifiers.org/hmdb/HMDB62707", + "http://identifiers.org/kegg.compound/C00631", + "http://identifiers.org/metanetx.chemical/MNXM275", + "http://identifiers.org/seed.compound/cpd00482" + ] + } + ] + } + }, + { + "id": "M_3pg_c", + "name": "3-Phospho-D-glycerate", + "compartment": "c", + "charge": 0, + "formula": "C3H4O7P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/3pg", + "http://identifiers.org/biocyc/META:G3P", + "http://identifiers.org/chebi/CHEBI:11879", + "http://identifiers.org/chebi/CHEBI:11880", + "http://identifiers.org/chebi/CHEBI:12987", + "http://identifiers.org/chebi/CHEBI:1657", + "http://identifiers.org/chebi/CHEBI:17794", + "http://identifiers.org/chebi/CHEBI:21029", + "http://identifiers.org/chebi/CHEBI:58272", + "http://identifiers.org/kegg.compound/C00197", + "http://identifiers.org/metanetx.chemical/MNXM126", + "http://identifiers.org/seed.compound/cpd00169" + ] + } + ] + } + }, + { + "id": "M_6pgc_c", + "name": "6-Phospho-D-gluconate", + "compartment": "c", + "charge": 0, + "formula": "C6H10O10P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/6pgc", + "http://identifiers.org/biocyc/META:CPD-2961", + "http://identifiers.org/chebi/CHEBI:12232", + "http://identifiers.org/chebi/CHEBI:16863", + "http://identifiers.org/chebi/CHEBI:2231", + "http://identifiers.org/chebi/CHEBI:33851", + "http://identifiers.org/chebi/CHEBI:40282", + "http://identifiers.org/chebi/CHEBI:48928", + "http://identifiers.org/chebi/CHEBI:58759", + "http://identifiers.org/hmdb/HMDB01316", + "http://identifiers.org/hmdb/HMDB62800", + "http://identifiers.org/kegg.compound/C00345", + "http://identifiers.org/metanetx.chemical/MNXM325", + "http://identifiers.org/seed.compound/cpd00284" + ] + } + ] + } + }, + { + "id": "M_6pgl_c", + "name": "6-phospho-D-glucono-1,5-lactone", + "compartment": "c", + "charge": 0, + "formula": "C6H9O9P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/6pgl", + "http://identifiers.org/biocyc/META:D-6-P-GLUCONO-DELTA-LACTONE", + "http://identifiers.org/chebi/CHEBI:12233", + "http://identifiers.org/chebi/CHEBI:12958", + "http://identifiers.org/chebi/CHEBI:16938", + "http://identifiers.org/chebi/CHEBI:20989", + "http://identifiers.org/chebi/CHEBI:4160", + "http://identifiers.org/chebi/CHEBI:57955", + "http://identifiers.org/hmdb/HMDB62628", + "http://identifiers.org/kegg.compound/C01236", + "http://identifiers.org/metanetx.chemical/MNXM429", + "http://identifiers.org/seed.compound/cpd00911" + ] + } + ] + } + }, + { + "id": "M_ac_c", + "name": "Acetate", + "compartment": "c", + "charge": 0, + "formula": "C2H3O2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/ac", + "http://identifiers.org/biocyc/META:ACET", + "http://identifiers.org/chebi/CHEBI:13704", + "http://identifiers.org/chebi/CHEBI:15366", + "http://identifiers.org/chebi/CHEBI:22165", + "http://identifiers.org/chebi/CHEBI:22169", + "http://identifiers.org/chebi/CHEBI:2387", + "http://identifiers.org/chebi/CHEBI:30089", + "http://identifiers.org/chebi/CHEBI:40480", + "http://identifiers.org/chebi/CHEBI:40486", + "http://identifiers.org/hmdb/HMDB00042", + "http://identifiers.org/kegg.compound/C00033", + "http://identifiers.org/kegg.drug/D00010", + "http://identifiers.org/lipidmaps/LMFA01010002", + "http://identifiers.org/metanetx.chemical/MNXM26", + "http://identifiers.org/seed.compound/cpd00029" + ] + } + ] + } + }, + { + "id": "M_ac_e", + "name": "Acetate", + "compartment": "e", + "charge": 0, + "formula": "C2H3O2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/ac", + "http://identifiers.org/biocyc/META:ACET", + "http://identifiers.org/chebi/CHEBI:13704", + "http://identifiers.org/chebi/CHEBI:15366", + "http://identifiers.org/chebi/CHEBI:22165", + "http://identifiers.org/chebi/CHEBI:22169", + "http://identifiers.org/chebi/CHEBI:2387", + "http://identifiers.org/chebi/CHEBI:30089", + "http://identifiers.org/chebi/CHEBI:40480", + "http://identifiers.org/chebi/CHEBI:40486", + "http://identifiers.org/hmdb/HMDB00042", + "http://identifiers.org/kegg.compound/C00033", + "http://identifiers.org/kegg.drug/D00010", + "http://identifiers.org/lipidmaps/LMFA01010002", + "http://identifiers.org/metanetx.chemical/MNXM26", + "http://identifiers.org/seed.compound/cpd00029" + ] + } + ] + } + }, + { + "id": "M_acald_c", + "name": "Acetaldehyde", + "compartment": "c", + "charge": 0, + "formula": "C2H4O", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/acald", + "http://identifiers.org/biocyc/META:ACETALD", + "http://identifiers.org/chebi/CHEBI:13703", + "http://identifiers.org/chebi/CHEBI:15343", + "http://identifiers.org/chebi/CHEBI:22158", + "http://identifiers.org/chebi/CHEBI:2383", + "http://identifiers.org/chebi/CHEBI:40533", + "http://identifiers.org/hmdb/HMDB00990", + "http://identifiers.org/kegg.compound/C00084", + "http://identifiers.org/metanetx.chemical/MNXM75", + "http://identifiers.org/seed.compound/cpd00071" + ] + } + ] + } + }, + { + "id": "M_acald_e", + "name": "Acetaldehyde", + "compartment": "e", + "charge": 0, + "formula": "C2H4O", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/acald", + "http://identifiers.org/biocyc/META:ACETALD", + "http://identifiers.org/chebi/CHEBI:13703", + "http://identifiers.org/chebi/CHEBI:15343", + "http://identifiers.org/chebi/CHEBI:22158", + "http://identifiers.org/chebi/CHEBI:2383", + "http://identifiers.org/chebi/CHEBI:40533", + "http://identifiers.org/hmdb/HMDB00990", + "http://identifiers.org/kegg.compound/C00084", + "http://identifiers.org/metanetx.chemical/MNXM75", + "http://identifiers.org/seed.compound/cpd00071" + ] + } + ] + } + }, + { + "id": "M_accoa_c", + "name": "Acetyl-CoA", + "compartment": "c", + "charge": 0, + "formula": "C23H34N7O17P3S", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/accoa", + "http://identifiers.org/biocyc/META:ACETYL-COA", + "http://identifiers.org/chebi/CHEBI:13712", + "http://identifiers.org/chebi/CHEBI:15351", + "http://identifiers.org/chebi/CHEBI:22192", + "http://identifiers.org/chebi/CHEBI:2408", + "http://identifiers.org/chebi/CHEBI:40470", + "http://identifiers.org/chebi/CHEBI:57288", + "http://identifiers.org/hmdb/HMDB01206", + "http://identifiers.org/kegg.compound/C00024", + "http://identifiers.org/lipidmaps/LMFA07050029", + "http://identifiers.org/lipidmaps/LMFA07050281", + "http://identifiers.org/metanetx.chemical/MNXM21", + "http://identifiers.org/seed.compound/cpd00022" + ] + } + ] + } + }, + { + "id": "M_acon_C_c", + "name": "Cis-Aconitate", + "compartment": "c", + "charge": 0, + "formula": "C6H3O6", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/acon_C", + "http://identifiers.org/biocyc/META:CIS-ACONITATE", + "http://identifiers.org/chebi/CHEBI:10482", + "http://identifiers.org/chebi/CHEBI:12798", + "http://identifiers.org/chebi/CHEBI:16383", + "http://identifiers.org/chebi/CHEBI:23306", + "http://identifiers.org/chebi/CHEBI:23308", + "http://identifiers.org/chebi/CHEBI:32805", + "http://identifiers.org/hmdb/HMDB00072", + "http://identifiers.org/hmdb/HMDB00461", + "http://identifiers.org/kegg.compound/C00417", + "http://identifiers.org/metanetx.chemical/MNXM813", + "http://identifiers.org/seed.compound/cpd00331" + ] + } + ] + } + }, + { + "id": "M_actp_c", + "name": "Acetyl phosphate", + "compartment": "c", + "charge": 0, + "formula": "C2H3O5P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/actp", + "http://identifiers.org/biocyc/META:ACETYL-P", + "http://identifiers.org/chebi/CHEBI:13711", + "http://identifiers.org/chebi/CHEBI:15350", + "http://identifiers.org/chebi/CHEBI:22191", + "http://identifiers.org/chebi/CHEBI:2407", + "http://identifiers.org/chebi/CHEBI:46262", + "http://identifiers.org/hmdb/HMDB01494", + "http://identifiers.org/kegg.compound/C00227", + "http://identifiers.org/metanetx.chemical/MNXM280", + "http://identifiers.org/seed.compound/cpd00196" + ] + } + ] + } + }, + { + "id": "M_adp_c", + "name": "ADP C10H12N5O10P2", + "compartment": "c", + "charge": 0, + "formula": "C10H12N5O10P2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/adp", + "http://identifiers.org/biocyc/META:ADP", + "http://identifiers.org/biocyc/META:CPD0-1651", + "http://identifiers.org/chebi/CHEBI:13222", + "http://identifiers.org/chebi/CHEBI:16761", + "http://identifiers.org/chebi/CHEBI:22244", + "http://identifiers.org/chebi/CHEBI:2342", + "http://identifiers.org/chebi/CHEBI:40553", + "http://identifiers.org/chebi/CHEBI:456216", + "http://identifiers.org/chebi/CHEBI:87518", + "http://identifiers.org/hmdb/HMDB01341", + "http://identifiers.org/kegg.compound/C00008", + "http://identifiers.org/kegg.glycan/G11113", + "http://identifiers.org/metanetx.chemical/MNXM7", + "http://identifiers.org/seed.compound/cpd00008" + ] + } + ] + } + }, + { + "id": "M_akg_c", + "name": "2-Oxoglutarate", + "compartment": "c", + "charge": 0, + "formula": "C5H4O5", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/akg", + "http://identifiers.org/biocyc/META:2-KETOGLUTARATE", + "http://identifiers.org/biocyc/META:CPD-16852", + "http://identifiers.org/chebi/CHEBI:11638", + "http://identifiers.org/chebi/CHEBI:1253", + "http://identifiers.org/chebi/CHEBI:16810", + "http://identifiers.org/chebi/CHEBI:19748", + "http://identifiers.org/chebi/CHEBI:19749", + "http://identifiers.org/chebi/CHEBI:30915", + "http://identifiers.org/chebi/CHEBI:30916", + "http://identifiers.org/chebi/CHEBI:40661", + "http://identifiers.org/hmdb/HMDB62781", + "http://identifiers.org/kegg.compound/C00026", + "http://identifiers.org/metanetx.chemical/MNXM20", + "http://identifiers.org/seed.compound/cpd00024" + ] + } + ] + } + }, + { + "id": "M_akg_e", + "name": "2-Oxoglutarate", + "compartment": "e", + "charge": 0, + "formula": "C5H4O5", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/akg", + "http://identifiers.org/biocyc/META:2-KETOGLUTARATE", + "http://identifiers.org/biocyc/META:CPD-16852", + "http://identifiers.org/chebi/CHEBI:11638", + "http://identifiers.org/chebi/CHEBI:1253", + "http://identifiers.org/chebi/CHEBI:16810", + "http://identifiers.org/chebi/CHEBI:19748", + "http://identifiers.org/chebi/CHEBI:19749", + "http://identifiers.org/chebi/CHEBI:30915", + "http://identifiers.org/chebi/CHEBI:30916", + "http://identifiers.org/chebi/CHEBI:40661", + "http://identifiers.org/hmdb/HMDB62781", + "http://identifiers.org/kegg.compound/C00026", + "http://identifiers.org/metanetx.chemical/MNXM20", + "http://identifiers.org/seed.compound/cpd00024" + ] + } + ] + } + }, + { + "id": "M_amp_c", + "name": "AMP C10H12N5O7P", + "compartment": "c", + "charge": 0, + "formula": "C10H12N5O7P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/amp", + "http://identifiers.org/biocyc/META:AMP", + "http://identifiers.org/biocyc/META:AMP-GROUP", + "http://identifiers.org/chebi/CHEBI:12056", + "http://identifiers.org/chebi/CHEBI:13234", + "http://identifiers.org/chebi/CHEBI:13235", + "http://identifiers.org/chebi/CHEBI:13736", + "http://identifiers.org/chebi/CHEBI:13740", + "http://identifiers.org/chebi/CHEBI:16027", + "http://identifiers.org/chebi/CHEBI:22242", + "http://identifiers.org/chebi/CHEBI:22245", + "http://identifiers.org/chebi/CHEBI:2356", + "http://identifiers.org/chebi/CHEBI:40510", + "http://identifiers.org/chebi/CHEBI:40721", + "http://identifiers.org/chebi/CHEBI:40726", + "http://identifiers.org/chebi/CHEBI:40786", + "http://identifiers.org/chebi/CHEBI:40826", + "http://identifiers.org/chebi/CHEBI:456215", + "http://identifiers.org/chebi/CHEBI:47222", + "http://identifiers.org/kegg.compound/C00020", + "http://identifiers.org/kegg.drug/D02769", + "http://identifiers.org/metanetx.chemical/MNXM14", + "http://identifiers.org/seed.compound/cpd00018", + "http://identifiers.org/seed.compound/cpd22272" + ] + } + ] + } + }, + { + "id": "M_atp_c", + "name": "ATP C10H12N5O13P3", + "compartment": "c", + "charge": 0, + "formula": "C10H12N5O13P3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/atp", + "http://identifiers.org/biocyc/META:ATP", + "http://identifiers.org/biocyc/META:CPD0-1634", + "http://identifiers.org/chebi/CHEBI:10789", + "http://identifiers.org/chebi/CHEBI:10841", + "http://identifiers.org/chebi/CHEBI:13236", + "http://identifiers.org/chebi/CHEBI:15422", + "http://identifiers.org/chebi/CHEBI:22249", + "http://identifiers.org/chebi/CHEBI:2359", + "http://identifiers.org/chebi/CHEBI:237958", + "http://identifiers.org/chebi/CHEBI:30616", + "http://identifiers.org/chebi/CHEBI:40938", + "http://identifiers.org/chebi/CHEBI:57299", + "http://identifiers.org/kegg.compound/C00002", + "http://identifiers.org/kegg.drug/D08646", + "http://identifiers.org/metanetx.chemical/MNXM3", + "http://identifiers.org/seed.compound/cpd00002" + ] + } + ] + } + }, + { + "id": "M_cit_c", + "name": "Citrate", + "compartment": "c", + "charge": 0, + "formula": "C6H5O7", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/cit", + "http://identifiers.org/biocyc/META:CIT", + "http://identifiers.org/chebi/CHEBI:132362", + "http://identifiers.org/chebi/CHEBI:133748", + "http://identifiers.org/chebi/CHEBI:13999", + "http://identifiers.org/chebi/CHEBI:16947", + "http://identifiers.org/chebi/CHEBI:23321", + "http://identifiers.org/chebi/CHEBI:23322", + "http://identifiers.org/chebi/CHEBI:30769", + "http://identifiers.org/chebi/CHEBI:35802", + "http://identifiers.org/chebi/CHEBI:35804", + "http://identifiers.org/chebi/CHEBI:35806", + "http://identifiers.org/chebi/CHEBI:35808", + "http://identifiers.org/chebi/CHEBI:35809", + "http://identifiers.org/chebi/CHEBI:35810", + "http://identifiers.org/chebi/CHEBI:3727", + "http://identifiers.org/chebi/CHEBI:41523", + "http://identifiers.org/chebi/CHEBI:42563", + "http://identifiers.org/chebi/CHEBI:76049", + "http://identifiers.org/chebi/CHEBI:79399", + "http://identifiers.org/hmdb/HMDB00094", + "http://identifiers.org/kegg.compound/C00158", + "http://identifiers.org/kegg.compound/C13660", + "http://identifiers.org/kegg.drug/D00037", + "http://identifiers.org/metanetx.chemical/MNXM131", + "http://identifiers.org/seed.compound/cpd00137" + ] + } + ] + } + }, + { + "id": "M_co2_c", + "name": "CO2 CO2", + "compartment": "c", + "charge": 0, + "formula": "CO2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/co2", + "http://identifiers.org/biocyc/META:CARBON-DIOXIDE", + "http://identifiers.org/chebi/CHEBI:13282", + "http://identifiers.org/chebi/CHEBI:13283", + "http://identifiers.org/chebi/CHEBI:13284", + "http://identifiers.org/chebi/CHEBI:13285", + "http://identifiers.org/chebi/CHEBI:16526", + "http://identifiers.org/chebi/CHEBI:23011", + "http://identifiers.org/chebi/CHEBI:3283", + "http://identifiers.org/chebi/CHEBI:48829", + "http://identifiers.org/hmdb/HMDB01967", + "http://identifiers.org/kegg.compound/C00011", + "http://identifiers.org/kegg.drug/D00004", + "http://identifiers.org/metanetx.chemical/MNXM13", + "http://identifiers.org/seed.compound/cpd00011" + ] + } + ] + } + }, + { + "id": "M_co2_e", + "name": "CO2 CO2", + "compartment": "e", + "charge": 0, + "formula": "CO2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/co2", + "http://identifiers.org/biocyc/META:CARBON-DIOXIDE", + "http://identifiers.org/chebi/CHEBI:13282", + "http://identifiers.org/chebi/CHEBI:13283", + "http://identifiers.org/chebi/CHEBI:13284", + "http://identifiers.org/chebi/CHEBI:13285", + "http://identifiers.org/chebi/CHEBI:16526", + "http://identifiers.org/chebi/CHEBI:23011", + "http://identifiers.org/chebi/CHEBI:3283", + "http://identifiers.org/chebi/CHEBI:48829", + "http://identifiers.org/hmdb/HMDB01967", + "http://identifiers.org/kegg.compound/C00011", + "http://identifiers.org/kegg.drug/D00004", + "http://identifiers.org/metanetx.chemical/MNXM13", + "http://identifiers.org/seed.compound/cpd00011" + ] + } + ] + } + }, + { + "id": "M_coa_c", + "name": "Coenzyme A", + "compartment": "c", + "charge": 0, + "formula": "C21H32N7O16P3S", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/coa", + "http://identifiers.org/biocyc/META:CO-A", + "http://identifiers.org/biocyc/META:COA-GROUP", + "http://identifiers.org/chebi/CHEBI:13294", + "http://identifiers.org/chebi/CHEBI:13295", + "http://identifiers.org/chebi/CHEBI:13298", + "http://identifiers.org/chebi/CHEBI:15346", + "http://identifiers.org/chebi/CHEBI:23355", + "http://identifiers.org/chebi/CHEBI:3771", + "http://identifiers.org/chebi/CHEBI:41597", + "http://identifiers.org/chebi/CHEBI:41631", + "http://identifiers.org/chebi/CHEBI:57287", + "http://identifiers.org/chebi/CHEBI:741566", + "http://identifiers.org/hmdb/HMDB01423", + "http://identifiers.org/kegg.compound/C00010", + "http://identifiers.org/metanetx.chemical/MNXM12", + "http://identifiers.org/seed.compound/cpd00010", + "http://identifiers.org/seed.compound/cpd22528" + ] + } + ] + } + }, + { + "id": "M_dhap_c", + "name": "Dihydroxyacetone phosphate", + "compartment": "c", + "charge": 0, + "formula": "C3H5O6P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/dhap", + "http://identifiers.org/biocyc/META:DIHYDROXY-ACETONE-PHOSPHATE", + "http://identifiers.org/chebi/CHEBI:14341", + "http://identifiers.org/chebi/CHEBI:14342", + "http://identifiers.org/chebi/CHEBI:16108", + "http://identifiers.org/chebi/CHEBI:24355", + "http://identifiers.org/chebi/CHEBI:39571", + "http://identifiers.org/chebi/CHEBI:5454", + "http://identifiers.org/chebi/CHEBI:57642", + "http://identifiers.org/hmdb/HMDB01473", + "http://identifiers.org/hmdb/HMDB11735", + "http://identifiers.org/kegg.compound/C00111", + "http://identifiers.org/metanetx.chemical/MNXM77", + "http://identifiers.org/seed.compound/cpd00095" + ] + } + ] + } + }, + { + "id": "M_e4p_c", + "name": "D-Erythrose 4-phosphate", + "compartment": "c", + "charge": 0, + "formula": "C4H7O7P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/e4p", + "http://identifiers.org/biocyc/META:ERYTHROSE-4P", + "http://identifiers.org/chebi/CHEBI:12921", + "http://identifiers.org/chebi/CHEBI:16897", + "http://identifiers.org/chebi/CHEBI:20927", + "http://identifiers.org/chebi/CHEBI:4114", + "http://identifiers.org/chebi/CHEBI:42349", + "http://identifiers.org/chebi/CHEBI:48153", + "http://identifiers.org/hmdb/HMDB01321", + "http://identifiers.org/kegg.compound/C00279", + "http://identifiers.org/metanetx.chemical/MNXM258", + "http://identifiers.org/seed.compound/cpd00236" + ] + } + ] + } + }, + { + "id": "M_etoh_c", + "name": "Ethanol", + "compartment": "c", + "charge": 0, + "formula": "C2H6O", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/etoh", + "http://identifiers.org/biocyc/META:ETOH", + "http://identifiers.org/chebi/CHEBI:14222", + "http://identifiers.org/chebi/CHEBI:16236", + "http://identifiers.org/chebi/CHEBI:23978", + "http://identifiers.org/chebi/CHEBI:30878", + "http://identifiers.org/chebi/CHEBI:30880", + "http://identifiers.org/chebi/CHEBI:42377", + "http://identifiers.org/chebi/CHEBI:44594", + "http://identifiers.org/chebi/CHEBI:4879", + "http://identifiers.org/chebi/CHEBI:52092", + "http://identifiers.org/hmdb/HMDB00108", + "http://identifiers.org/kegg.compound/C00469", + "http://identifiers.org/kegg.drug/D00068", + "http://identifiers.org/kegg.drug/D02798", + "http://identifiers.org/kegg.drug/D04855", + "http://identifiers.org/kegg.drug/D06542", + "http://identifiers.org/metanetx.chemical/MNXM303", + "http://identifiers.org/seed.compound/cpd00363" + ] + } + ] + } + }, + { + "id": "M_etoh_e", + "name": "Ethanol", + "compartment": "e", + "charge": 0, + "formula": "C2H6O", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/etoh", + "http://identifiers.org/biocyc/META:ETOH", + "http://identifiers.org/chebi/CHEBI:14222", + "http://identifiers.org/chebi/CHEBI:16236", + "http://identifiers.org/chebi/CHEBI:23978", + "http://identifiers.org/chebi/CHEBI:30878", + "http://identifiers.org/chebi/CHEBI:30880", + "http://identifiers.org/chebi/CHEBI:42377", + "http://identifiers.org/chebi/CHEBI:44594", + "http://identifiers.org/chebi/CHEBI:4879", + "http://identifiers.org/chebi/CHEBI:52092", + "http://identifiers.org/hmdb/HMDB00108", + "http://identifiers.org/kegg.compound/C00469", + "http://identifiers.org/kegg.drug/D00068", + "http://identifiers.org/kegg.drug/D02798", + "http://identifiers.org/kegg.drug/D04855", + "http://identifiers.org/kegg.drug/D06542", + "http://identifiers.org/metanetx.chemical/MNXM303", + "http://identifiers.org/seed.compound/cpd00363" + ] + } + ] + } + }, + { + "id": "M_f6p_c", + "name": "D-Fructose 6-phosphate", + "compartment": "c", + "charge": 0, + "formula": "C6H11O9P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/f6p", + "http://identifiers.org/biocyc/META:FRUCTOSE-6P", + "http://identifiers.org/chebi/CHEBI:10375", + "http://identifiers.org/chebi/CHEBI:12352", + "http://identifiers.org/chebi/CHEBI:16084", + "http://identifiers.org/chebi/CHEBI:22768", + "http://identifiers.org/chebi/CHEBI:42378", + "http://identifiers.org/chebi/CHEBI:57634", + "http://identifiers.org/hmdb/HMDB03971", + "http://identifiers.org/kegg.compound/C05345", + "http://identifiers.org/metanetx.chemical/MNXM89621", + "http://identifiers.org/seed.compound/cpd19035" + ] + } + ] + } + }, + { + "id": "M_fdp_c", + "name": "D-Fructose 1,6-bisphosphate", + "compartment": "c", + "charge": 0, + "formula": "C6H10O12P2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/fdp", + "http://identifiers.org/chebi/CHEBI:37736", + "http://identifiers.org/chebi/CHEBI:49299", + "http://identifiers.org/kegg.compound/C00354", + "http://identifiers.org/metanetx.chemical/MNXM417", + "http://identifiers.org/seed.compound/cpd00290" + ] + } + ] + } + }, + { + "id": "M_for_c", + "name": "Formate", + "compartment": "c", + "charge": 0, + "formula": "CH1O2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/for", + "http://identifiers.org/biocyc/META:CARBOXYL-GROUP", + "http://identifiers.org/biocyc/META:CPD-9845", + "http://identifiers.org/biocyc/META:CPD1G-1532", + "http://identifiers.org/biocyc/META:CPD1G-1533", + "http://identifiers.org/biocyc/META:CPD1G-1534", + "http://identifiers.org/biocyc/META:CPD1G-1535", + "http://identifiers.org/biocyc/META:FORMATE", + "http://identifiers.org/chebi/CHEBI:14276", + "http://identifiers.org/chebi/CHEBI:15740", + "http://identifiers.org/chebi/CHEBI:24081", + "http://identifiers.org/chebi/CHEBI:24082", + "http://identifiers.org/chebi/CHEBI:30751", + "http://identifiers.org/chebi/CHEBI:42460", + "http://identifiers.org/chebi/CHEBI:5145", + "http://identifiers.org/hmdb/HMDB00142", + "http://identifiers.org/kegg.compound/C00058", + "http://identifiers.org/metanetx.chemical/MNXM39", + "http://identifiers.org/seed.compound/cpd00047", + "http://identifiers.org/seed.compound/cpd22511" + ] + } + ] + } + }, + { + "id": "M_for_e", + "name": "Formate", + "compartment": "e", + "charge": 0, + "formula": "CH1O2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/for", + "http://identifiers.org/biocyc/META:CARBOXYL-GROUP", + "http://identifiers.org/biocyc/META:CPD-9845", + "http://identifiers.org/biocyc/META:CPD1G-1532", + "http://identifiers.org/biocyc/META:CPD1G-1533", + "http://identifiers.org/biocyc/META:CPD1G-1534", + "http://identifiers.org/biocyc/META:CPD1G-1535", + "http://identifiers.org/biocyc/META:FORMATE", + "http://identifiers.org/chebi/CHEBI:14276", + "http://identifiers.org/chebi/CHEBI:15740", + "http://identifiers.org/chebi/CHEBI:24081", + "http://identifiers.org/chebi/CHEBI:24082", + "http://identifiers.org/chebi/CHEBI:30751", + "http://identifiers.org/chebi/CHEBI:42460", + "http://identifiers.org/chebi/CHEBI:5145", + "http://identifiers.org/hmdb/HMDB00142", + "http://identifiers.org/kegg.compound/C00058", + "http://identifiers.org/metanetx.chemical/MNXM39", + "http://identifiers.org/seed.compound/cpd00047", + "http://identifiers.org/seed.compound/cpd22511" + ] + } + ] + } + }, + { + "id": "M_fru_e", + "name": "D-Fructose", + "compartment": "e", + "charge": 0, + "formula": "C6H12O6", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/fru", + "http://identifiers.org/biocyc/META:CPD-15382", + "http://identifiers.org/biocyc/META:D-Fructopyranose", + "http://identifiers.org/biocyc/META:FRU", + "http://identifiers.org/biocyc/META:Fructofuranose", + "http://identifiers.org/chebi/CHEBI:12923", + "http://identifiers.org/chebi/CHEBI:15824", + "http://identifiers.org/chebi/CHEBI:20929", + "http://identifiers.org/chebi/CHEBI:24104", + "http://identifiers.org/chebi/CHEBI:24110", + "http://identifiers.org/chebi/CHEBI:28757", + "http://identifiers.org/chebi/CHEBI:37714", + "http://identifiers.org/chebi/CHEBI:37721", + "http://identifiers.org/chebi/CHEBI:4118", + "http://identifiers.org/chebi/CHEBI:4119", + "http://identifiers.org/chebi/CHEBI:47424", + "http://identifiers.org/chebi/CHEBI:48095", + "http://identifiers.org/chebi/CHEBI:5172", + "http://identifiers.org/hmdb/HMDB62538", + "http://identifiers.org/kegg.compound/C00095", + "http://identifiers.org/kegg.compound/C01496", + "http://identifiers.org/kegg.compound/C05003", + "http://identifiers.org/kegg.compound/C10906", + "http://identifiers.org/kegg.drug/D00114", + "http://identifiers.org/metanetx.chemical/MNXM175", + "http://identifiers.org/seed.compound/cpd00082", + "http://identifiers.org/seed.compound/cpd19015", + "http://identifiers.org/seed.compound/cpd27040" + ] + } + ] + } + }, + { + "id": "M_fum_c", + "name": "Fumarate", + "compartment": "c", + "charge": 0, + "formula": "C4H2O4", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/fum", + "http://identifiers.org/biocyc/META:FUM", + "http://identifiers.org/chebi/CHEBI:14284", + "http://identifiers.org/chebi/CHEBI:18012", + "http://identifiers.org/chebi/CHEBI:22956", + "http://identifiers.org/chebi/CHEBI:22957", + "http://identifiers.org/chebi/CHEBI:22958", + "http://identifiers.org/chebi/CHEBI:24122", + "http://identifiers.org/chebi/CHEBI:24124", + "http://identifiers.org/chebi/CHEBI:29806", + "http://identifiers.org/chebi/CHEBI:36180", + "http://identifiers.org/chebi/CHEBI:37154", + "http://identifiers.org/chebi/CHEBI:37155", + "http://identifiers.org/chebi/CHEBI:42511", + "http://identifiers.org/chebi/CHEBI:42743", + "http://identifiers.org/chebi/CHEBI:5190", + "http://identifiers.org/hmdb/HMDB00134", + "http://identifiers.org/kegg.compound/C00122", + "http://identifiers.org/kegg.drug/D02308", + "http://identifiers.org/metanetx.chemical/MNXM93", + "http://identifiers.org/seed.compound/cpd00106" + ] + } + ] + } + }, + { + "id": "M_fum_e", + "name": "Fumarate", + "compartment": "e", + "charge": 0, + "formula": "C4H2O4", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/fum", + "http://identifiers.org/biocyc/META:FUM", + "http://identifiers.org/chebi/CHEBI:14284", + "http://identifiers.org/chebi/CHEBI:18012", + "http://identifiers.org/chebi/CHEBI:22956", + "http://identifiers.org/chebi/CHEBI:22957", + "http://identifiers.org/chebi/CHEBI:22958", + "http://identifiers.org/chebi/CHEBI:24122", + "http://identifiers.org/chebi/CHEBI:24124", + "http://identifiers.org/chebi/CHEBI:29806", + "http://identifiers.org/chebi/CHEBI:36180", + "http://identifiers.org/chebi/CHEBI:37154", + "http://identifiers.org/chebi/CHEBI:37155", + "http://identifiers.org/chebi/CHEBI:42511", + "http://identifiers.org/chebi/CHEBI:42743", + "http://identifiers.org/chebi/CHEBI:5190", + "http://identifiers.org/hmdb/HMDB00134", + "http://identifiers.org/kegg.compound/C00122", + "http://identifiers.org/kegg.drug/D02308", + "http://identifiers.org/metanetx.chemical/MNXM93", + "http://identifiers.org/seed.compound/cpd00106" + ] + } + ] + } + }, + { + "id": "M_g3p_c", + "name": "Glyceraldehyde 3-phosphate", + "compartment": "c", + "charge": 0, + "formula": "C3H5O6P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/g3p", + "http://identifiers.org/biocyc/META:GAP", + "http://identifiers.org/chebi/CHEBI:12983", + "http://identifiers.org/chebi/CHEBI:12984", + "http://identifiers.org/chebi/CHEBI:14333", + "http://identifiers.org/chebi/CHEBI:17138", + "http://identifiers.org/chebi/CHEBI:181", + "http://identifiers.org/chebi/CHEBI:18324", + "http://identifiers.org/chebi/CHEBI:21026", + "http://identifiers.org/chebi/CHEBI:29052", + "http://identifiers.org/chebi/CHEBI:5446", + "http://identifiers.org/chebi/CHEBI:58027", + "http://identifiers.org/chebi/CHEBI:59776", + "http://identifiers.org/hmdb/HMDB01112", + "http://identifiers.org/kegg.compound/C00118", + "http://identifiers.org/kegg.compound/C00661", + "http://identifiers.org/metanetx.chemical/MNXM74", + "http://identifiers.org/seed.compound/cpd00102", + "http://identifiers.org/seed.compound/cpd19005" + ] + } + ] + } + }, + { + "id": "M_g6p_c", + "name": "D-Glucose 6-phosphate", + "compartment": "c", + "charge": 0, + "formula": "C6H11O9P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/g6p", + "http://identifiers.org/biocyc/META:D-glucopyranose-6-phosphate", + "http://identifiers.org/chebi/CHEBI:14314", + "http://identifiers.org/chebi/CHEBI:4170", + "http://identifiers.org/chebi/CHEBI:61548", + "http://identifiers.org/hmdb/HMDB01401", + "http://identifiers.org/hmdb/HMDB01549", + "http://identifiers.org/hmdb/HMDB06793", + "http://identifiers.org/kegg.compound/C00092", + "http://identifiers.org/metanetx.chemical/MNXM160", + "http://identifiers.org/seed.compound/cpd00079", + "http://identifiers.org/seed.compound/cpd26836" + ] + } + ] + } + }, + { + "id": "M_glc__D_e", + "name": "D-Glucose", + "compartment": "e", + "charge": 0, + "formula": "C6H12O6", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/glc__D", + "http://identifiers.org/biocyc/META:Glucopyranose", + "http://identifiers.org/chebi/CHEBI:12965", + "http://identifiers.org/chebi/CHEBI:17634", + "http://identifiers.org/chebi/CHEBI:20999", + "http://identifiers.org/chebi/CHEBI:4167", + "http://identifiers.org/hmdb/HMDB00122", + "http://identifiers.org/hmdb/HMDB06564", + "http://identifiers.org/kegg.compound/C00031", + "http://identifiers.org/kegg.drug/D00009", + "http://identifiers.org/metanetx.chemical/MNXM41", + "http://identifiers.org/seed.compound/cpd00027", + "http://identifiers.org/seed.compound/cpd26821" + ] + } + ] + } + }, + { + "id": "M_gln__L_c", + "name": "L-Glutamine", + "compartment": "c", + "charge": 0, + "formula": "C5H10N2O3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/gln__L", + "http://identifiers.org/biocyc/META:GLN", + "http://identifiers.org/chebi/CHEBI:13110", + "http://identifiers.org/chebi/CHEBI:18050", + "http://identifiers.org/chebi/CHEBI:21308", + "http://identifiers.org/chebi/CHEBI:24316", + "http://identifiers.org/chebi/CHEBI:28300", + "http://identifiers.org/chebi/CHEBI:32665", + "http://identifiers.org/chebi/CHEBI:32666", + "http://identifiers.org/chebi/CHEBI:32678", + "http://identifiers.org/chebi/CHEBI:32679", + "http://identifiers.org/chebi/CHEBI:42812", + "http://identifiers.org/chebi/CHEBI:42814", + "http://identifiers.org/chebi/CHEBI:42899", + "http://identifiers.org/chebi/CHEBI:42943", + "http://identifiers.org/chebi/CHEBI:5432", + "http://identifiers.org/chebi/CHEBI:58359", + "http://identifiers.org/chebi/CHEBI:6227", + "http://identifiers.org/hmdb/HMDB00641", + "http://identifiers.org/kegg.compound/C00064", + "http://identifiers.org/kegg.compound/C00303", + "http://identifiers.org/kegg.drug/D00015", + "http://identifiers.org/metanetx.chemical/MNXM37", + "http://identifiers.org/seed.compound/cpd00053", + "http://identifiers.org/seed.compound/cpd00253" + ] + } + ] + } + }, + { + "id": "M_gln__L_e", + "name": "L-Glutamine", + "compartment": "e", + "charge": 0, + "formula": "C5H10N2O3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/gln__L", + "http://identifiers.org/biocyc/META:GLN", + "http://identifiers.org/chebi/CHEBI:13110", + "http://identifiers.org/chebi/CHEBI:18050", + "http://identifiers.org/chebi/CHEBI:21308", + "http://identifiers.org/chebi/CHEBI:24316", + "http://identifiers.org/chebi/CHEBI:28300", + "http://identifiers.org/chebi/CHEBI:32665", + "http://identifiers.org/chebi/CHEBI:32666", + "http://identifiers.org/chebi/CHEBI:32678", + "http://identifiers.org/chebi/CHEBI:32679", + "http://identifiers.org/chebi/CHEBI:42812", + "http://identifiers.org/chebi/CHEBI:42814", + "http://identifiers.org/chebi/CHEBI:42899", + "http://identifiers.org/chebi/CHEBI:42943", + "http://identifiers.org/chebi/CHEBI:5432", + "http://identifiers.org/chebi/CHEBI:58359", + "http://identifiers.org/chebi/CHEBI:6227", + "http://identifiers.org/hmdb/HMDB00641", + "http://identifiers.org/kegg.compound/C00064", + "http://identifiers.org/kegg.compound/C00303", + "http://identifiers.org/kegg.drug/D00015", + "http://identifiers.org/metanetx.chemical/MNXM37", + "http://identifiers.org/seed.compound/cpd00053", + "http://identifiers.org/seed.compound/cpd00253" + ] + } + ] + } + }, + { + "id": "M_glu__L_c", + "name": "L-Glutamate", + "compartment": "c", + "charge": 0, + "formula": "C5H8NO4", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/glu__L", + "http://identifiers.org/biocyc/META:GLT", + "http://identifiers.org/biocyc/META:Glutamates", + "http://identifiers.org/chebi/CHEBI:13107", + "http://identifiers.org/chebi/CHEBI:14321", + "http://identifiers.org/chebi/CHEBI:16015", + "http://identifiers.org/chebi/CHEBI:18237", + "http://identifiers.org/chebi/CHEBI:21301", + "http://identifiers.org/chebi/CHEBI:21304", + "http://identifiers.org/chebi/CHEBI:24314", + "http://identifiers.org/chebi/CHEBI:29985", + "http://identifiers.org/chebi/CHEBI:29987", + "http://identifiers.org/chebi/CHEBI:29988", + "http://identifiers.org/chebi/CHEBI:42825", + "http://identifiers.org/chebi/CHEBI:5431", + "http://identifiers.org/chebi/CHEBI:6224", + "http://identifiers.org/chebi/CHEBI:76051", + "http://identifiers.org/hmdb/HMDB00148", + "http://identifiers.org/hmdb/HMDB60475", + "http://identifiers.org/kegg.compound/C00025", + "http://identifiers.org/kegg.compound/C00302", + "http://identifiers.org/kegg.drug/D00007", + "http://identifiers.org/kegg.drug/D04341", + "http://identifiers.org/metanetx.chemical/MNXM89557", + "http://identifiers.org/seed.compound/cpd00023", + "http://identifiers.org/seed.compound/cpd19002", + "http://identifiers.org/seed.compound/cpd27177" + ] + } + ] + } + }, + { + "id": "M_glu__L_e", + "name": "L-Glutamate", + "compartment": "e", + "charge": 0, + "formula": "C5H8NO4", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/glu__L", + "http://identifiers.org/biocyc/META:GLT", + "http://identifiers.org/biocyc/META:Glutamates", + "http://identifiers.org/chebi/CHEBI:13107", + "http://identifiers.org/chebi/CHEBI:14321", + "http://identifiers.org/chebi/CHEBI:16015", + "http://identifiers.org/chebi/CHEBI:18237", + "http://identifiers.org/chebi/CHEBI:21301", + "http://identifiers.org/chebi/CHEBI:21304", + "http://identifiers.org/chebi/CHEBI:24314", + "http://identifiers.org/chebi/CHEBI:29985", + "http://identifiers.org/chebi/CHEBI:29987", + "http://identifiers.org/chebi/CHEBI:29988", + "http://identifiers.org/chebi/CHEBI:42825", + "http://identifiers.org/chebi/CHEBI:5431", + "http://identifiers.org/chebi/CHEBI:6224", + "http://identifiers.org/chebi/CHEBI:76051", + "http://identifiers.org/hmdb/HMDB00148", + "http://identifiers.org/hmdb/HMDB60475", + "http://identifiers.org/kegg.compound/C00025", + "http://identifiers.org/kegg.compound/C00302", + "http://identifiers.org/kegg.drug/D00007", + "http://identifiers.org/kegg.drug/D04341", + "http://identifiers.org/metanetx.chemical/MNXM89557", + "http://identifiers.org/seed.compound/cpd00023", + "http://identifiers.org/seed.compound/cpd19002", + "http://identifiers.org/seed.compound/cpd27177" + ] + } + ] + } + }, + { + "id": "M_glx_c", + "name": "Glyoxylate", + "compartment": "c", + "charge": 0, + "formula": "C2H1O3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/glx", + "http://identifiers.org/biocyc/META:GLYOX", + "http://identifiers.org/chebi/CHEBI:14368", + "http://identifiers.org/chebi/CHEBI:16891", + "http://identifiers.org/chebi/CHEBI:24420", + "http://identifiers.org/chebi/CHEBI:24421", + "http://identifiers.org/chebi/CHEBI:35977", + "http://identifiers.org/chebi/CHEBI:36655", + "http://identifiers.org/chebi/CHEBI:42767", + "http://identifiers.org/chebi/CHEBI:5509", + "http://identifiers.org/hmdb/HMDB00119", + "http://identifiers.org/kegg.compound/C00048", + "http://identifiers.org/metanetx.chemical/MNXM69", + "http://identifiers.org/seed.compound/cpd00040" + ] + } + ] + } + }, + { + "id": "M_h2o_c", + "name": "H2O H2O", + "compartment": "c", + "charge": 0, + "formula": "H2O", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/h2o", + "http://identifiers.org/biocyc/META:CPD-15815", + "http://identifiers.org/biocyc/META:HYDROXYL-GROUP", + "http://identifiers.org/biocyc/META:OH", + "http://identifiers.org/biocyc/META:OXONIUM", + "http://identifiers.org/biocyc/META:WATER", + "http://identifiers.org/chebi/CHEBI:10743", + "http://identifiers.org/chebi/CHEBI:13352", + "http://identifiers.org/chebi/CHEBI:13365", + "http://identifiers.org/chebi/CHEBI:13419", + "http://identifiers.org/chebi/CHEBI:15377", + "http://identifiers.org/chebi/CHEBI:16234", + "http://identifiers.org/chebi/CHEBI:27313", + "http://identifiers.org/chebi/CHEBI:29356", + "http://identifiers.org/chebi/CHEBI:29373", + "http://identifiers.org/chebi/CHEBI:29374", + "http://identifiers.org/chebi/CHEBI:29375", + "http://identifiers.org/chebi/CHEBI:29412", + "http://identifiers.org/chebi/CHEBI:30490", + "http://identifiers.org/chebi/CHEBI:33806", + "http://identifiers.org/chebi/CHEBI:33811", + "http://identifiers.org/chebi/CHEBI:33813", + "http://identifiers.org/chebi/CHEBI:41979", + "http://identifiers.org/chebi/CHEBI:41981", + "http://identifiers.org/chebi/CHEBI:42043", + "http://identifiers.org/chebi/CHEBI:42857", + "http://identifiers.org/chebi/CHEBI:43228", + "http://identifiers.org/chebi/CHEBI:44292", + "http://identifiers.org/chebi/CHEBI:44641", + "http://identifiers.org/chebi/CHEBI:44701", + "http://identifiers.org/chebi/CHEBI:44819", + "http://identifiers.org/chebi/CHEBI:5585", + "http://identifiers.org/chebi/CHEBI:5594", + "http://identifiers.org/hmdb/HMDB02111", + "http://identifiers.org/kegg.compound/C00001", + "http://identifiers.org/kegg.compound/C01328", + "http://identifiers.org/kegg.compound/C18714", + "http://identifiers.org/kegg.drug/D00001", + "http://identifiers.org/kegg.drug/D03703", + "http://identifiers.org/kegg.drug/D06322", + "http://identifiers.org/metanetx.chemical/MNXM2", + "http://identifiers.org/seed.compound/cpd00001", + "http://identifiers.org/seed.compound/cpd15275", + "http://identifiers.org/seed.compound/cpd27222" + ] + } + ] + } + }, + { + "id": "M_h2o_e", + "name": "H2O H2O", + "compartment": "e", + "charge": 0, + "formula": "H2O", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/h2o", + "http://identifiers.org/biocyc/META:CPD-15815", + "http://identifiers.org/biocyc/META:HYDROXYL-GROUP", + "http://identifiers.org/biocyc/META:OH", + "http://identifiers.org/biocyc/META:OXONIUM", + "http://identifiers.org/biocyc/META:WATER", + "http://identifiers.org/chebi/CHEBI:10743", + "http://identifiers.org/chebi/CHEBI:13352", + "http://identifiers.org/chebi/CHEBI:13365", + "http://identifiers.org/chebi/CHEBI:13419", + "http://identifiers.org/chebi/CHEBI:15377", + "http://identifiers.org/chebi/CHEBI:16234", + "http://identifiers.org/chebi/CHEBI:27313", + "http://identifiers.org/chebi/CHEBI:29356", + "http://identifiers.org/chebi/CHEBI:29373", + "http://identifiers.org/chebi/CHEBI:29374", + "http://identifiers.org/chebi/CHEBI:29375", + "http://identifiers.org/chebi/CHEBI:29412", + "http://identifiers.org/chebi/CHEBI:30490", + "http://identifiers.org/chebi/CHEBI:33806", + "http://identifiers.org/chebi/CHEBI:33811", + "http://identifiers.org/chebi/CHEBI:33813", + "http://identifiers.org/chebi/CHEBI:41979", + "http://identifiers.org/chebi/CHEBI:41981", + "http://identifiers.org/chebi/CHEBI:42043", + "http://identifiers.org/chebi/CHEBI:42857", + "http://identifiers.org/chebi/CHEBI:43228", + "http://identifiers.org/chebi/CHEBI:44292", + "http://identifiers.org/chebi/CHEBI:44641", + "http://identifiers.org/chebi/CHEBI:44701", + "http://identifiers.org/chebi/CHEBI:44819", + "http://identifiers.org/chebi/CHEBI:5585", + "http://identifiers.org/chebi/CHEBI:5594", + "http://identifiers.org/hmdb/HMDB02111", + "http://identifiers.org/kegg.compound/C00001", + "http://identifiers.org/kegg.compound/C01328", + "http://identifiers.org/kegg.compound/C18714", + "http://identifiers.org/kegg.drug/D00001", + "http://identifiers.org/kegg.drug/D03703", + "http://identifiers.org/kegg.drug/D06322", + "http://identifiers.org/metanetx.chemical/MNXM2", + "http://identifiers.org/seed.compound/cpd00001", + "http://identifiers.org/seed.compound/cpd15275", + "http://identifiers.org/seed.compound/cpd27222" + ] + } + ] + } + }, + { + "id": "M_h_c", + "name": "H+", + "compartment": "c", + "charge": 0, + "formula": "H", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/h", + "http://identifiers.org/biocyc/META:PROTON", + "http://identifiers.org/chebi/CHEBI:10744", + "http://identifiers.org/chebi/CHEBI:13357", + "http://identifiers.org/chebi/CHEBI:15378", + "http://identifiers.org/chebi/CHEBI:24636", + "http://identifiers.org/chebi/CHEBI:29233", + "http://identifiers.org/chebi/CHEBI:29234", + "http://identifiers.org/chebi/CHEBI:5584", + "http://identifiers.org/hmdb/HMDB59597", + "http://identifiers.org/kegg.compound/C00080", + "http://identifiers.org/metanetx.chemical/MNXM1", + "http://identifiers.org/seed.compound/cpd00067" + ] + } + ] + } + }, + { + "id": "M_h_e", + "name": "H+", + "compartment": "e", + "charge": 0, + "formula": "H", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/h", + "http://identifiers.org/biocyc/META:PROTON", + "http://identifiers.org/chebi/CHEBI:10744", + "http://identifiers.org/chebi/CHEBI:13357", + "http://identifiers.org/chebi/CHEBI:15378", + "http://identifiers.org/chebi/CHEBI:24636", + "http://identifiers.org/chebi/CHEBI:29233", + "http://identifiers.org/chebi/CHEBI:29234", + "http://identifiers.org/chebi/CHEBI:5584", + "http://identifiers.org/hmdb/HMDB59597", + "http://identifiers.org/kegg.compound/C00080", + "http://identifiers.org/metanetx.chemical/MNXM1", + "http://identifiers.org/seed.compound/cpd00067" + ] + } + ] + } + }, + { + "id": "M_icit_c", + "name": "Isocitrate", + "compartment": "c", + "charge": 0, + "formula": "C6H5O7", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/icit", + "http://identifiers.org/chebi/CHEBI:14465", + "http://identifiers.org/chebi/CHEBI:16087", + "http://identifiers.org/chebi/CHEBI:24884", + "http://identifiers.org/chebi/CHEBI:24886", + "http://identifiers.org/chebi/CHEBI:30887", + "http://identifiers.org/chebi/CHEBI:36453", + "http://identifiers.org/chebi/CHEBI:36454", + "http://identifiers.org/chebi/CHEBI:5998", + "http://identifiers.org/hmdb/HMDB00193", + "http://identifiers.org/kegg.compound/C00311", + "http://identifiers.org/metanetx.chemical/MNXM89661", + "http://identifiers.org/seed.compound/cpd00260" + ] + } + ] + } + }, + { + "id": "M_lac__D_c", + "name": "D-Lactate", + "compartment": "c", + "charge": 0, + "formula": "C3H5O3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/lac__D", + "http://identifiers.org/biocyc/META:D-LACTATE", + "http://identifiers.org/chebi/CHEBI:11001", + "http://identifiers.org/chebi/CHEBI:16004", + "http://identifiers.org/chebi/CHEBI:18684", + "http://identifiers.org/chebi/CHEBI:341", + "http://identifiers.org/chebi/CHEBI:42105", + "http://identifiers.org/chebi/CHEBI:42111", + "http://identifiers.org/chebi/CHEBI:43701", + "http://identifiers.org/hmdb/HMDB00171", + "http://identifiers.org/hmdb/HMDB01311", + "http://identifiers.org/kegg.compound/C00256", + "http://identifiers.org/metanetx.chemical/MNXM285", + "http://identifiers.org/seed.compound/cpd00221" + ] + } + ] + } + }, + { + "id": "M_lac__D_e", + "name": "D-Lactate", + "compartment": "e", + "charge": 0, + "formula": "C3H5O3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/lac__D", + "http://identifiers.org/biocyc/META:D-LACTATE", + "http://identifiers.org/chebi/CHEBI:11001", + "http://identifiers.org/chebi/CHEBI:16004", + "http://identifiers.org/chebi/CHEBI:18684", + "http://identifiers.org/chebi/CHEBI:341", + "http://identifiers.org/chebi/CHEBI:42105", + "http://identifiers.org/chebi/CHEBI:42111", + "http://identifiers.org/chebi/CHEBI:43701", + "http://identifiers.org/hmdb/HMDB00171", + "http://identifiers.org/hmdb/HMDB01311", + "http://identifiers.org/kegg.compound/C00256", + "http://identifiers.org/metanetx.chemical/MNXM285", + "http://identifiers.org/seed.compound/cpd00221" + ] + } + ] + } + }, + { + "id": "M_mal__L_c", + "name": "L-Malate", + "compartment": "c", + "charge": 0, + "formula": "C4H4O5", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/mal__L", + "http://identifiers.org/biocyc/META:MAL", + "http://identifiers.org/chebi/CHEBI:11066", + "http://identifiers.org/chebi/CHEBI:13140", + "http://identifiers.org/chebi/CHEBI:15589", + "http://identifiers.org/chebi/CHEBI:18784", + "http://identifiers.org/chebi/CHEBI:18785", + "http://identifiers.org/chebi/CHEBI:30797", + "http://identifiers.org/chebi/CHEBI:423", + "http://identifiers.org/hmdb/HMDB00156", + "http://identifiers.org/kegg.compound/C00149", + "http://identifiers.org/metanetx.chemical/MNXM98", + "http://identifiers.org/seed.compound/cpd00130" + ] + } + ] + } + }, + { + "id": "M_mal__L_e", + "name": "L-Malate", + "compartment": "e", + "charge": 0, + "formula": "C4H4O5", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/mal__L", + "http://identifiers.org/biocyc/META:MAL", + "http://identifiers.org/chebi/CHEBI:11066", + "http://identifiers.org/chebi/CHEBI:13140", + "http://identifiers.org/chebi/CHEBI:15589", + "http://identifiers.org/chebi/CHEBI:18784", + "http://identifiers.org/chebi/CHEBI:18785", + "http://identifiers.org/chebi/CHEBI:30797", + "http://identifiers.org/chebi/CHEBI:423", + "http://identifiers.org/hmdb/HMDB00156", + "http://identifiers.org/kegg.compound/C00149", + "http://identifiers.org/metanetx.chemical/MNXM98", + "http://identifiers.org/seed.compound/cpd00130" + ] + } + ] + } + }, + { + "id": "M_nad_c", + "name": "Nicotinamide adenine dinucleotide", + "compartment": "c", + "charge": 0, + "formula": "C21H26N7O14P2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/nad", + "http://identifiers.org/biocyc/META:NAD", + "http://identifiers.org/chebi/CHEBI:13393", + "http://identifiers.org/chebi/CHEBI:13394", + "http://identifiers.org/chebi/CHEBI:15846", + "http://identifiers.org/chebi/CHEBI:21901", + "http://identifiers.org/chebi/CHEBI:29867", + "http://identifiers.org/chebi/CHEBI:44214", + "http://identifiers.org/chebi/CHEBI:44215", + "http://identifiers.org/chebi/CHEBI:44281", + "http://identifiers.org/chebi/CHEBI:57540", + "http://identifiers.org/chebi/CHEBI:7422", + "http://identifiers.org/kegg.compound/C00003", + "http://identifiers.org/kegg.drug/D00002", + "http://identifiers.org/metanetx.chemical/MNXM8", + "http://identifiers.org/seed.compound/cpd00003" + ] + } + ] + } + }, + { + "id": "M_nadh_c", + "name": "Nicotinamide adenine dinucleotide - reduced", + "compartment": "c", + "charge": 0, + "formula": "C21H27N7O14P2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/nadh", + "http://identifiers.org/biocyc/META:NADH", + "http://identifiers.org/chebi/CHEBI:13395", + "http://identifiers.org/chebi/CHEBI:13396", + "http://identifiers.org/chebi/CHEBI:16908", + "http://identifiers.org/chebi/CHEBI:21902", + "http://identifiers.org/chebi/CHEBI:44216", + "http://identifiers.org/chebi/CHEBI:57945", + "http://identifiers.org/chebi/CHEBI:7423", + "http://identifiers.org/hmdb/HMDB01487", + "http://identifiers.org/kegg.compound/C00004", + "http://identifiers.org/metanetx.chemical/MNXM10", + "http://identifiers.org/seed.compound/cpd00004" + ] + } + ] + } + }, + { + "id": "M_nadp_c", + "name": "Nicotinamide adenine dinucleotide phosphate", + "compartment": "c", + "charge": 0, + "formula": "C21H25N7O17P3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/nadp", + "http://identifiers.org/biocyc/META:NADP", + "http://identifiers.org/chebi/CHEBI:13397", + "http://identifiers.org/chebi/CHEBI:13398", + "http://identifiers.org/chebi/CHEBI:18009", + "http://identifiers.org/chebi/CHEBI:21903", + "http://identifiers.org/chebi/CHEBI:25523", + "http://identifiers.org/chebi/CHEBI:29868", + "http://identifiers.org/chebi/CHEBI:44405", + "http://identifiers.org/chebi/CHEBI:44409", + "http://identifiers.org/chebi/CHEBI:58349", + "http://identifiers.org/chebi/CHEBI:7424", + "http://identifiers.org/kegg.compound/C00006", + "http://identifiers.org/metanetx.chemical/MNXM5", + "http://identifiers.org/seed.compound/cpd00006" + ] + } + ] + } + }, + { + "id": "M_nadph_c", + "name": "Nicotinamide adenine dinucleotide phosphate - reduced", + "compartment": "c", + "charge": 0, + "formula": "C21H26N7O17P3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/nadph", + "http://identifiers.org/biocyc/META:NADPH", + "http://identifiers.org/chebi/CHEBI:13399", + "http://identifiers.org/chebi/CHEBI:13400", + "http://identifiers.org/chebi/CHEBI:16474", + "http://identifiers.org/chebi/CHEBI:21904", + "http://identifiers.org/chebi/CHEBI:44286", + "http://identifiers.org/chebi/CHEBI:57783", + "http://identifiers.org/chebi/CHEBI:7425", + "http://identifiers.org/hmdb/HMDB00221", + "http://identifiers.org/hmdb/HMDB00799", + "http://identifiers.org/hmdb/HMDB06341", + "http://identifiers.org/kegg.compound/C00005", + "http://identifiers.org/metanetx.chemical/MNXM6", + "http://identifiers.org/seed.compound/cpd00005" + ] + } + ] + } + }, + { + "id": "M_nh4_c", + "name": "Ammonium", + "compartment": "c", + "charge": 0, + "formula": "H4N", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/nh4", + "http://identifiers.org/biocyc/META:AMMONIA", + "http://identifiers.org/biocyc/META:AMMONIUM", + "http://identifiers.org/chebi/CHEBI:13405", + "http://identifiers.org/chebi/CHEBI:13406", + "http://identifiers.org/chebi/CHEBI:13407", + "http://identifiers.org/chebi/CHEBI:135980", + "http://identifiers.org/chebi/CHEBI:13771", + "http://identifiers.org/chebi/CHEBI:16134", + "http://identifiers.org/chebi/CHEBI:22533", + "http://identifiers.org/chebi/CHEBI:22534", + "http://identifiers.org/chebi/CHEBI:28938", + "http://identifiers.org/chebi/CHEBI:29337", + "http://identifiers.org/chebi/CHEBI:29340", + "http://identifiers.org/chebi/CHEBI:44269", + "http://identifiers.org/chebi/CHEBI:44284", + "http://identifiers.org/chebi/CHEBI:44404", + "http://identifiers.org/chebi/CHEBI:49783", + "http://identifiers.org/chebi/CHEBI:7434", + "http://identifiers.org/chebi/CHEBI:7435", + "http://identifiers.org/hmdb/HMDB00051", + "http://identifiers.org/hmdb/HMDB41827", + "http://identifiers.org/kegg.compound/C00014", + "http://identifiers.org/kegg.compound/C01342", + "http://identifiers.org/kegg.drug/D02915", + "http://identifiers.org/kegg.drug/D02916", + "http://identifiers.org/metanetx.chemical/MNXM15", + "http://identifiers.org/seed.compound/cpd00013", + "http://identifiers.org/seed.compound/cpd19013" + ] + } + ] + } + }, + { + "id": "M_nh4_e", + "name": "Ammonium", + "compartment": "e", + "charge": 0, + "formula": "H4N", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/nh4", + "http://identifiers.org/biocyc/META:AMMONIA", + "http://identifiers.org/biocyc/META:AMMONIUM", + "http://identifiers.org/chebi/CHEBI:13405", + "http://identifiers.org/chebi/CHEBI:13406", + "http://identifiers.org/chebi/CHEBI:13407", + "http://identifiers.org/chebi/CHEBI:135980", + "http://identifiers.org/chebi/CHEBI:13771", + "http://identifiers.org/chebi/CHEBI:16134", + "http://identifiers.org/chebi/CHEBI:22533", + "http://identifiers.org/chebi/CHEBI:22534", + "http://identifiers.org/chebi/CHEBI:28938", + "http://identifiers.org/chebi/CHEBI:29337", + "http://identifiers.org/chebi/CHEBI:29340", + "http://identifiers.org/chebi/CHEBI:44269", + "http://identifiers.org/chebi/CHEBI:44284", + "http://identifiers.org/chebi/CHEBI:44404", + "http://identifiers.org/chebi/CHEBI:49783", + "http://identifiers.org/chebi/CHEBI:7434", + "http://identifiers.org/chebi/CHEBI:7435", + "http://identifiers.org/hmdb/HMDB00051", + "http://identifiers.org/hmdb/HMDB41827", + "http://identifiers.org/kegg.compound/C00014", + "http://identifiers.org/kegg.compound/C01342", + "http://identifiers.org/kegg.drug/D02915", + "http://identifiers.org/kegg.drug/D02916", + "http://identifiers.org/metanetx.chemical/MNXM15", + "http://identifiers.org/seed.compound/cpd00013", + "http://identifiers.org/seed.compound/cpd19013" + ] + } + ] + } + }, + { + "id": "M_o2_c", + "name": "O2 O2", + "compartment": "c", + "charge": 0, + "formula": "O2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/o2", + "http://identifiers.org/biocyc/META:OXYGEN-MOLECULE", + "http://identifiers.org/chebi/CHEBI:10745", + "http://identifiers.org/chebi/CHEBI:13416", + "http://identifiers.org/chebi/CHEBI:15379", + "http://identifiers.org/chebi/CHEBI:23833", + "http://identifiers.org/chebi/CHEBI:25366", + "http://identifiers.org/chebi/CHEBI:26689", + "http://identifiers.org/chebi/CHEBI:27140", + "http://identifiers.org/chebi/CHEBI:29097", + "http://identifiers.org/chebi/CHEBI:29793", + "http://identifiers.org/chebi/CHEBI:30491", + "http://identifiers.org/chebi/CHEBI:44742", + "http://identifiers.org/chebi/CHEBI:7860", + "http://identifiers.org/hmdb/HMDB01377", + "http://identifiers.org/kegg.compound/C00007", + "http://identifiers.org/kegg.drug/D00003", + "http://identifiers.org/metanetx.chemical/MNXM4", + "http://identifiers.org/seed.compound/cpd00007" + ] + } + ] + } + }, + { + "id": "M_o2_e", + "name": "O2 O2", + "compartment": "e", + "charge": 0, + "formula": "O2", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/o2", + "http://identifiers.org/biocyc/META:OXYGEN-MOLECULE", + "http://identifiers.org/chebi/CHEBI:10745", + "http://identifiers.org/chebi/CHEBI:13416", + "http://identifiers.org/chebi/CHEBI:15379", + "http://identifiers.org/chebi/CHEBI:23833", + "http://identifiers.org/chebi/CHEBI:25366", + "http://identifiers.org/chebi/CHEBI:26689", + "http://identifiers.org/chebi/CHEBI:27140", + "http://identifiers.org/chebi/CHEBI:29097", + "http://identifiers.org/chebi/CHEBI:29793", + "http://identifiers.org/chebi/CHEBI:30491", + "http://identifiers.org/chebi/CHEBI:44742", + "http://identifiers.org/chebi/CHEBI:7860", + "http://identifiers.org/hmdb/HMDB01377", + "http://identifiers.org/kegg.compound/C00007", + "http://identifiers.org/kegg.drug/D00003", + "http://identifiers.org/metanetx.chemical/MNXM4", + "http://identifiers.org/seed.compound/cpd00007" + ] + } + ] + } + }, + { + "id": "M_oaa_c", + "name": "Oxaloacetate", + "compartment": "c", + "charge": 0, + "formula": "C4H2O5", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/oaa", + "http://identifiers.org/biocyc/META:ENOL-OXALOACETATE", + "http://identifiers.org/biocyc/META:OXALACETIC_ACID", + "http://identifiers.org/chebi/CHEBI:12820", + "http://identifiers.org/chebi/CHEBI:14703", + "http://identifiers.org/chebi/CHEBI:16452", + "http://identifiers.org/chebi/CHEBI:24958", + "http://identifiers.org/chebi/CHEBI:24959", + "http://identifiers.org/chebi/CHEBI:25731", + "http://identifiers.org/chebi/CHEBI:25734", + "http://identifiers.org/chebi/CHEBI:29049", + "http://identifiers.org/chebi/CHEBI:30744", + "http://identifiers.org/chebi/CHEBI:7812", + "http://identifiers.org/hmdb/HMDB00223", + "http://identifiers.org/kegg.compound/C00036", + "http://identifiers.org/kegg.compound/C03981", + "http://identifiers.org/lipidmaps/LMFA01170061", + "http://identifiers.org/lipidmaps/LMFA01170120", + "http://identifiers.org/metanetx.chemical/MNXM46", + "http://identifiers.org/seed.compound/cpd00032", + "http://identifiers.org/seed.compound/cpd02469" + ] + } + ] + } + }, + { + "id": "M_pep_c", + "name": "Phosphoenolpyruvate", + "compartment": "c", + "charge": 0, + "formula": "C3H2O6P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/pep", + "http://identifiers.org/biocyc/META:PHOSPHO-ENOL-PYRUVATE", + "http://identifiers.org/chebi/CHEBI:14812", + "http://identifiers.org/chebi/CHEBI:18021", + "http://identifiers.org/chebi/CHEBI:26054", + "http://identifiers.org/chebi/CHEBI:26055", + "http://identifiers.org/chebi/CHEBI:44894", + "http://identifiers.org/chebi/CHEBI:44897", + "http://identifiers.org/chebi/CHEBI:58702", + "http://identifiers.org/chebi/CHEBI:8147", + "http://identifiers.org/hmdb/HMDB00263", + "http://identifiers.org/kegg.compound/C00074", + "http://identifiers.org/metanetx.chemical/MNXM73", + "http://identifiers.org/seed.compound/cpd00061" + ] + } + ] + } + }, + { + "id": "M_pi_c", + "name": "Phosphate", + "compartment": "c", + "charge": 0, + "formula": "HO4P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/pi", + "http://identifiers.org/biocyc/META:CPD-16459", + "http://identifiers.org/biocyc/META:CPD-9010", + "http://identifiers.org/biocyc/META:PHOSPHATE-GROUP", + "http://identifiers.org/biocyc/META:Pi", + "http://identifiers.org/chebi/CHEBI:14791", + "http://identifiers.org/chebi/CHEBI:18367", + "http://identifiers.org/chebi/CHEBI:26078", + "http://identifiers.org/chebi/CHEBI:29137", + "http://identifiers.org/chebi/CHEBI:29139", + "http://identifiers.org/chebi/CHEBI:35780", + "http://identifiers.org/chebi/CHEBI:39739", + "http://identifiers.org/chebi/CHEBI:39745", + "http://identifiers.org/chebi/CHEBI:43470", + "http://identifiers.org/chebi/CHEBI:43474", + "http://identifiers.org/chebi/CHEBI:45024", + "http://identifiers.org/chebi/CHEBI:7793", + "http://identifiers.org/hmdb/HMDB00973", + "http://identifiers.org/hmdb/HMDB01429", + "http://identifiers.org/hmdb/HMDB02105", + "http://identifiers.org/hmdb/HMDB02142", + "http://identifiers.org/hmdb/HMDB05947", + "http://identifiers.org/kegg.compound/C00009", + "http://identifiers.org/kegg.compound/C13558", + "http://identifiers.org/kegg.drug/D05467", + "http://identifiers.org/metanetx.chemical/MNXM9", + "http://identifiers.org/seed.compound/cpd00009", + "http://identifiers.org/seed.compound/cpd27787" + ] + } + ] + } + }, + { + "id": "M_pi_e", + "name": "Phosphate", + "compartment": "e", + "charge": 0, + "formula": "HO4P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/pi", + "http://identifiers.org/biocyc/META:CPD-16459", + "http://identifiers.org/biocyc/META:CPD-9010", + "http://identifiers.org/biocyc/META:PHOSPHATE-GROUP", + "http://identifiers.org/biocyc/META:Pi", + "http://identifiers.org/chebi/CHEBI:14791", + "http://identifiers.org/chebi/CHEBI:18367", + "http://identifiers.org/chebi/CHEBI:26078", + "http://identifiers.org/chebi/CHEBI:29137", + "http://identifiers.org/chebi/CHEBI:29139", + "http://identifiers.org/chebi/CHEBI:35780", + "http://identifiers.org/chebi/CHEBI:39739", + "http://identifiers.org/chebi/CHEBI:39745", + "http://identifiers.org/chebi/CHEBI:43470", + "http://identifiers.org/chebi/CHEBI:43474", + "http://identifiers.org/chebi/CHEBI:45024", + "http://identifiers.org/chebi/CHEBI:7793", + "http://identifiers.org/hmdb/HMDB00973", + "http://identifiers.org/hmdb/HMDB01429", + "http://identifiers.org/hmdb/HMDB02105", + "http://identifiers.org/hmdb/HMDB02142", + "http://identifiers.org/hmdb/HMDB05947", + "http://identifiers.org/kegg.compound/C00009", + "http://identifiers.org/kegg.compound/C13558", + "http://identifiers.org/kegg.drug/D05467", + "http://identifiers.org/metanetx.chemical/MNXM9", + "http://identifiers.org/seed.compound/cpd00009", + "http://identifiers.org/seed.compound/cpd27787" + ] + } + ] + } + }, + { + "id": "M_pyr_c", + "name": "Pyruvate", + "compartment": "c", + "charge": 0, + "formula": "C3H3O3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/pyr", + "http://identifiers.org/biocyc/META:PYRUVATE", + "http://identifiers.org/chebi/CHEBI:14987", + "http://identifiers.org/chebi/CHEBI:15361", + "http://identifiers.org/chebi/CHEBI:26462", + "http://identifiers.org/chebi/CHEBI:26466", + "http://identifiers.org/chebi/CHEBI:32816", + "http://identifiers.org/chebi/CHEBI:45253", + "http://identifiers.org/chebi/CHEBI:86354", + "http://identifiers.org/chebi/CHEBI:8685", + "http://identifiers.org/hmdb/HMDB00243", + "http://identifiers.org/hmdb/HMDB62676", + "http://identifiers.org/kegg.compound/C00022", + "http://identifiers.org/lipidmaps/LMFA01060077", + "http://identifiers.org/metanetx.chemical/MNXM23", + "http://identifiers.org/seed.compound/cpd00020" + ] + } + ] + } + }, + { + "id": "M_pyr_e", + "name": "Pyruvate", + "compartment": "e", + "charge": 0, + "formula": "C3H3O3", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/pyr", + "http://identifiers.org/biocyc/META:PYRUVATE", + "http://identifiers.org/chebi/CHEBI:14987", + "http://identifiers.org/chebi/CHEBI:15361", + "http://identifiers.org/chebi/CHEBI:26462", + "http://identifiers.org/chebi/CHEBI:26466", + "http://identifiers.org/chebi/CHEBI:32816", + "http://identifiers.org/chebi/CHEBI:45253", + "http://identifiers.org/chebi/CHEBI:86354", + "http://identifiers.org/chebi/CHEBI:8685", + "http://identifiers.org/hmdb/HMDB00243", + "http://identifiers.org/hmdb/HMDB62676", + "http://identifiers.org/kegg.compound/C00022", + "http://identifiers.org/lipidmaps/LMFA01060077", + "http://identifiers.org/metanetx.chemical/MNXM23", + "http://identifiers.org/seed.compound/cpd00020" + ] + } + ] + } + }, + { + "id": "M_q8_c", + "name": "Ubiquinone-8", + "compartment": "c", + "charge": 0, + "formula": "C49H74O4", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/q8", + "http://identifiers.org/biocyc/META:UBIQUINONE-8", + "http://identifiers.org/chebi/CHEBI:61683", + "http://identifiers.org/kegg.compound/C17569", + "http://identifiers.org/lipidmaps/LMPR02010005", + "http://identifiers.org/metanetx.chemical/MNXM232", + "http://identifiers.org/seed.compound/cpd15560" + ] + } + ] + } + }, + { + "id": "M_q8h2_c", + "name": "Ubiquinol-8", + "compartment": "c", + "charge": 0, + "formula": "C49H76O4", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/q8h2", + "http://identifiers.org/biocyc/META:CPD-9956", + "http://identifiers.org/chebi/CHEBI:61682", + "http://identifiers.org/hmdb/HMDB01060", + "http://identifiers.org/metanetx.chemical/MNXM191", + "http://identifiers.org/seed.compound/cpd15561", + "http://identifiers.org/seed.compound/cpd29608" + ] + } + ] + } + }, + { + "id": "M_r5p_c", + "name": "Alpha-D-Ribose 5-phosphate", + "compartment": "c", + "charge": 0, + "formula": "C5H9O8P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/r5p", + "http://identifiers.org/biocyc/META:CPD-15318", + "http://identifiers.org/chebi/CHEBI:10270", + "http://identifiers.org/chebi/CHEBI:12331", + "http://identifiers.org/chebi/CHEBI:18189", + "http://identifiers.org/chebi/CHEBI:22413", + "http://identifiers.org/kegg.compound/C03736", + "http://identifiers.org/metanetx.chemical/MNXM15900", + "http://identifiers.org/seed.compound/cpd19028" + ] + } + ] + } + }, + { + "id": "M_ru5p__D_c", + "name": "D-Ribulose 5-phosphate", + "compartment": "c", + "charge": 0, + "formula": "C5H9O8P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/ru5p__D", + "http://identifiers.org/biocyc/META:RIBULOSE-5P", + "http://identifiers.org/chebi/CHEBI:13018", + "http://identifiers.org/chebi/CHEBI:13040", + "http://identifiers.org/chebi/CHEBI:17363", + "http://identifiers.org/chebi/CHEBI:21088", + "http://identifiers.org/chebi/CHEBI:26572", + "http://identifiers.org/chebi/CHEBI:37455", + "http://identifiers.org/chebi/CHEBI:40192", + "http://identifiers.org/chebi/CHEBI:4243", + "http://identifiers.org/chebi/CHEBI:58121", + "http://identifiers.org/hmdb/HMDB00618", + "http://identifiers.org/hmdb/HMDB02033", + "http://identifiers.org/hmdb/HMDB02694", + "http://identifiers.org/kegg.compound/C00199", + "http://identifiers.org/metanetx.chemical/MNXM145", + "http://identifiers.org/seed.compound/cpd00171" + ] + } + ] + } + }, + { + "id": "M_s7p_c", + "name": "Sedoheptulose 7-phosphate", + "compartment": "c", + "charge": 0, + "formula": "C7H13O10P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/s7p", + "http://identifiers.org/biocyc/META:D-SEDOHEPTULOSE-7-P", + "http://identifiers.org/chebi/CHEBI:15073", + "http://identifiers.org/chebi/CHEBI:15074", + "http://identifiers.org/chebi/CHEBI:15721", + "http://identifiers.org/chebi/CHEBI:26621", + "http://identifiers.org/chebi/CHEBI:4244", + "http://identifiers.org/chebi/CHEBI:57483", + "http://identifiers.org/chebi/CHEBI:9083", + "http://identifiers.org/hmdb/HMDB01068", + "http://identifiers.org/hmdb/HMDB62754", + "http://identifiers.org/kegg.compound/C05382", + "http://identifiers.org/metanetx.chemical/MNXM271", + "http://identifiers.org/seed.compound/cpd00238" + ] + } + ] + } + }, + { + "id": "M_succ_c", + "name": "Succinate", + "compartment": "c", + "charge": 0, + "formula": "C4H4O4", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/succ", + "http://identifiers.org/biocyc/META:SUC", + "http://identifiers.org/chebi/CHEBI:132287", + "http://identifiers.org/chebi/CHEBI:15125", + "http://identifiers.org/chebi/CHEBI:15741", + "http://identifiers.org/chebi/CHEBI:22941", + "http://identifiers.org/chebi/CHEBI:22943", + "http://identifiers.org/chebi/CHEBI:26803", + "http://identifiers.org/chebi/CHEBI:26807", + "http://identifiers.org/chebi/CHEBI:30031", + "http://identifiers.org/chebi/CHEBI:30779", + "http://identifiers.org/chebi/CHEBI:45639", + "http://identifiers.org/chebi/CHEBI:90372", + "http://identifiers.org/chebi/CHEBI:9304", + "http://identifiers.org/hmdb/HMDB00254", + "http://identifiers.org/kegg.compound/C00042", + "http://identifiers.org/lipidmaps/LMFA01170043", + "http://identifiers.org/metanetx.chemical/MNXM25", + "http://identifiers.org/seed.compound/cpd00036" + ] + } + ] + } + }, + { + "id": "M_succ_e", + "name": "Succinate", + "compartment": "e", + "charge": 0, + "formula": "C4H4O4", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/succ", + "http://identifiers.org/biocyc/META:SUC", + "http://identifiers.org/chebi/CHEBI:132287", + "http://identifiers.org/chebi/CHEBI:15125", + "http://identifiers.org/chebi/CHEBI:15741", + "http://identifiers.org/chebi/CHEBI:22941", + "http://identifiers.org/chebi/CHEBI:22943", + "http://identifiers.org/chebi/CHEBI:26803", + "http://identifiers.org/chebi/CHEBI:26807", + "http://identifiers.org/chebi/CHEBI:30031", + "http://identifiers.org/chebi/CHEBI:30779", + "http://identifiers.org/chebi/CHEBI:45639", + "http://identifiers.org/chebi/CHEBI:90372", + "http://identifiers.org/chebi/CHEBI:9304", + "http://identifiers.org/hmdb/HMDB00254", + "http://identifiers.org/kegg.compound/C00042", + "http://identifiers.org/lipidmaps/LMFA01170043", + "http://identifiers.org/metanetx.chemical/MNXM25", + "http://identifiers.org/seed.compound/cpd00036" + ] + } + ] + } + }, + { + "id": "M_succoa_c", + "name": "Succinyl-CoA", + "compartment": "c", + "charge": 0, + "formula": "C25H35N7O19P3S", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/succoa", + "http://identifiers.org/biocyc/META:SUC-COA", + "http://identifiers.org/chebi/CHEBI:10746", + "http://identifiers.org/chebi/CHEBI:15127", + "http://identifiers.org/chebi/CHEBI:15380", + "http://identifiers.org/chebi/CHEBI:26811", + "http://identifiers.org/chebi/CHEBI:45541", + "http://identifiers.org/chebi/CHEBI:57292", + "http://identifiers.org/chebi/CHEBI:9310", + "http://identifiers.org/hmdb/HMDB01022", + "http://identifiers.org/kegg.compound/C00091", + "http://identifiers.org/lipidmaps/LMFA07050370", + "http://identifiers.org/metanetx.chemical/MNXM92", + "http://identifiers.org/seed.compound/cpd00078" + ] + } + ] + } + }, + { + "id": "M_xu5p__D_c", + "name": "D-Xylulose 5-phosphate", + "compartment": "c", + "charge": 0, + "formula": "C5H9O8P", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.metabolite/xu5p__D", + "http://identifiers.org/biocyc/META:XYLULOSE-5-PHOSPHATE", + "http://identifiers.org/chebi/CHEBI:13036", + "http://identifiers.org/chebi/CHEBI:16332", + "http://identifiers.org/chebi/CHEBI:21121", + "http://identifiers.org/chebi/CHEBI:27354", + "http://identifiers.org/chebi/CHEBI:4269", + "http://identifiers.org/chebi/CHEBI:57737", + "http://identifiers.org/hmdb/HMDB00868", + "http://identifiers.org/hmdb/HMDB06212", + "http://identifiers.org/kegg.compound/C00231", + "http://identifiers.org/metanetx.chemical/MNXM186", + "http://identifiers.org/seed.compound/cpd00198" + ] + } + ] + } + } + ], + "reactions": [ + { + "id": "R_ACALD", + "name": "Acetaldehyde dehydrogenase (acetylating)", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0351 or b1241", + "metabolites": { + "M_acald_c": -1.0, + "M_coa_c": -1.0, + "M_nad_c": -1.0, + "M_accoa_c": 1.0, + "M_h_c": 1.0, + "M_nadh_c": 1.0 + }, + "subsystem": "Pyruvate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ACALD", + "http://identifiers.org/biocyc/META:ACETALD-DEHYDROG-RXN", + "http://identifiers.org/ec-code/1.2.1.10", + "http://identifiers.org/kegg.reaction/R00228", + "http://identifiers.org/metanetx.reaction/MNXR95210", + "http://identifiers.org/rhea/23288", + "http://identifiers.org/rhea/23289", + "http://identifiers.org/rhea/23290", + "http://identifiers.org/rhea/23291" + ] + } + ] + } + }, + { + "id": "R_ACALDt", + "name": "Acetaldehyde reversible transport", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "s0001", + "metabolites": { + "M_acald_e": -1.0, + "M_acald_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ACALDt", + "http://identifiers.org/metanetx.reaction/MNXR95212" + ] + } + ] + } + }, + { + "id": "R_ACKr", + "name": "Acetate kinase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2296 or b3115 or b1849", + "metabolites": { + "M_ac_c": -1.0, + "M_atp_c": -1.0, + "M_actp_c": 1.0, + "M_adp_c": 1.0 + }, + "subsystem": "Pyruvate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ACKr", + "http://identifiers.org/biocyc/META:ACETATEKIN-RXN", + "http://identifiers.org/ec-code/2.7.2.1", + "http://identifiers.org/ec-code/2.7.2.15", + "http://identifiers.org/kegg.reaction/R00315", + "http://identifiers.org/metanetx.reaction/MNXR95269", + "http://identifiers.org/rhea/11352", + "http://identifiers.org/rhea/11353", + "http://identifiers.org/rhea/11354", + "http://identifiers.org/rhea/11355" + ] + } + ] + } + }, + { + "id": "R_ACONTa", + "name": "Aconitase (half-reaction A, Citrate hydro-lyase)", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0118 or b1276", + "metabolites": { + "M_cit_c": -1.0, + "M_acon_C_c": 1.0, + "M_h2o_c": 1.0 + }, + "subsystem": "Citric Acid Cycle", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ACONTa", + "http://identifiers.org/biocyc/META:ACONITATEDEHYDR-RXN", + "http://identifiers.org/ec-code/4.2.1.3", + "http://identifiers.org/kegg.reaction/R01325", + "http://identifiers.org/metanetx.reaction/MNXR95386", + "http://identifiers.org/rhea/10228", + "http://identifiers.org/rhea/10229", + "http://identifiers.org/rhea/10230", + "http://identifiers.org/rhea/10231" + ] + } + ] + } + }, + { + "id": "R_ACONTb", + "name": "Aconitase (half-reaction B, Isocitrate hydro-lyase)", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0118 or b1276", + "metabolites": { + "M_acon_C_c": -1.0, + "M_h2o_c": -1.0, + "M_icit_c": 1.0 + }, + "subsystem": "Citric Acid Cycle", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ACONTb", + "http://identifiers.org/ec-code/4.2.1.3", + "http://identifiers.org/kegg.reaction/R01900", + "http://identifiers.org/metanetx.reaction/MNXR95387", + "http://identifiers.org/rhea/22144", + "http://identifiers.org/rhea/22145", + "http://identifiers.org/rhea/22146", + "http://identifiers.org/rhea/22147" + ] + } + ] + } + }, + { + "id": "R_ACt2r", + "name": "Acetate reversible transport via proton symport", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_ac_e": -1.0, + "M_h_e": -1.0, + "M_ac_c": 1.0, + "M_h_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ACt2r", + "http://identifiers.org/biocyc/META:TRANS-RXN0-571", + "http://identifiers.org/metanetx.reaction/MNXR95429" + ] + } + ] + } + }, + { + "id": "R_ADK1", + "name": "Adenylate kinase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0474", + "metabolites": { + "M_amp_c": -1.0, + "M_atp_c": -1.0, + "M_adp_c": 2.0 + }, + "subsystem": "Oxidative Phosphorylation", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ADK1", + "http://identifiers.org/biocyc/META:ADENYL-KIN-RXN", + "http://identifiers.org/ec-code/2.7.4.3", + "http://identifiers.org/kegg.reaction/R00127", + "http://identifiers.org/metanetx.reaction/MNXR95450", + "http://identifiers.org/rhea/12973", + "http://identifiers.org/rhea/12974", + "http://identifiers.org/rhea/12975", + "http://identifiers.org/rhea/12976" + ] + } + ] + } + }, + { + "id": "R_AKGDH", + "name": "2-Oxogluterate dehydrogenase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0726 and b0116 and b0727", + "metabolites": { + "M_akg_c": -1.0, + "M_coa_c": -1.0, + "M_nad_c": -1.0, + "M_co2_c": 1.0, + "M_nadh_c": 1.0, + "M_succoa_c": 1.0 + }, + "subsystem": "Citric Acid Cycle", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/AKGDH", + "http://identifiers.org/biocyc/META:2OXOGLUTARATEDEH-RXN", + "http://identifiers.org/ec-code/1.2.1.52", + "http://identifiers.org/ec-code/1.2.4.2", + "http://identifiers.org/ec-code/1.8.1.4", + "http://identifiers.org/ec-code/2.3.1.61", + "http://identifiers.org/kegg.reaction/R08549", + "http://identifiers.org/metanetx.reaction/MNXR95655", + "http://identifiers.org/rhea/27786", + "http://identifiers.org/rhea/27787", + "http://identifiers.org/rhea/27788", + "http://identifiers.org/rhea/27789" + ] + } + ] + } + }, + { + "id": "R_AKGt2r", + "name": "2 oxoglutarate reversible transport via symport", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2587", + "metabolites": { + "M_akg_e": -1.0, + "M_h_e": -1.0, + "M_akg_c": 1.0, + "M_h_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/AKGt2r", + "http://identifiers.org/biocyc/META:TRANS-RXN-23", + "http://identifiers.org/metanetx.reaction/MNXR95661", + "http://identifiers.org/rhea/29011", + "http://identifiers.org/rhea/29012", + "http://identifiers.org/rhea/29013", + "http://identifiers.org/rhea/29014" + ] + } + ] + } + }, + { + "id": "R_ALCD2x", + "name": "Alcohol dehydrogenase (ethanol)", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1478 or b0356 or b1241", + "metabolites": { + "M_etoh_c": -1.0, + "M_nad_c": -1.0, + "M_acald_c": 1.0, + "M_h_c": 1.0, + "M_nadh_c": 1.0 + }, + "subsystem": "Pyruvate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ALCD2x", + "http://identifiers.org/biocyc/META:ALCOHOL-DEHYDROG-RXN", + "http://identifiers.org/ec-code/1.1.1.1", + "http://identifiers.org/ec-code/1.1.1.71", + "http://identifiers.org/kegg.reaction/R00754", + "http://identifiers.org/metanetx.reaction/MNXR95725", + "http://identifiers.org/rhea/25290", + "http://identifiers.org/rhea/25291", + "http://identifiers.org/rhea/25292", + "http://identifiers.org/rhea/25293" + ] + } + ] + } + }, + { + "id": "R_ATPM", + "name": "ATP maintenance requirement", + "lower_bound": 8.39, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_atp_c": -1.0, + "M_h2o_c": -1.0, + "M_adp_c": 1.0, + "M_h_c": 1.0, + "M_pi_c": 1.0 + }, + "subsystem": "Biomass and maintenance functions", + "metadata": { + "sbo": "SBO:0000630", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ATPM", + "http://identifiers.org/biocyc/META:ATPASE-RXN", + "http://identifiers.org/ec-code/3.6.1.15", + "http://identifiers.org/ec-code/3.6.1.3", + "http://identifiers.org/ec-code/3.6.1.5", + "http://identifiers.org/ec-code/3.6.1.8", + "http://identifiers.org/ec-code/3.6.3.1", + "http://identifiers.org/ec-code/3.6.3.10", + "http://identifiers.org/ec-code/3.6.3.11", + "http://identifiers.org/ec-code/3.6.3.12", + "http://identifiers.org/ec-code/3.6.3.14", + "http://identifiers.org/ec-code/3.6.3.15", + "http://identifiers.org/ec-code/3.6.3.16", + "http://identifiers.org/ec-code/3.6.3.17", + "http://identifiers.org/ec-code/3.6.3.18", + "http://identifiers.org/ec-code/3.6.3.19", + "http://identifiers.org/ec-code/3.6.3.2", + "http://identifiers.org/ec-code/3.6.3.20", + "http://identifiers.org/ec-code/3.6.3.21", + "http://identifiers.org/ec-code/3.6.3.22", + "http://identifiers.org/ec-code/3.6.3.23", + "http://identifiers.org/ec-code/3.6.3.24", + "http://identifiers.org/ec-code/3.6.3.25", + "http://identifiers.org/ec-code/3.6.3.26", + "http://identifiers.org/ec-code/3.6.3.27", + "http://identifiers.org/ec-code/3.6.3.28", + "http://identifiers.org/ec-code/3.6.3.29", + "http://identifiers.org/ec-code/3.6.3.3", + "http://identifiers.org/ec-code/3.6.3.30", + "http://identifiers.org/ec-code/3.6.3.31", + "http://identifiers.org/ec-code/3.6.3.32", + "http://identifiers.org/ec-code/3.6.3.33", + "http://identifiers.org/ec-code/3.6.3.34", + "http://identifiers.org/ec-code/3.6.3.35", + "http://identifiers.org/ec-code/3.6.3.36", + "http://identifiers.org/ec-code/3.6.3.37", + "http://identifiers.org/ec-code/3.6.3.38", + "http://identifiers.org/ec-code/3.6.3.39", + "http://identifiers.org/ec-code/3.6.3.4", + "http://identifiers.org/ec-code/3.6.3.40", + "http://identifiers.org/ec-code/3.6.3.41", + "http://identifiers.org/ec-code/3.6.3.42", + "http://identifiers.org/ec-code/3.6.3.43", + "http://identifiers.org/ec-code/3.6.3.44", + "http://identifiers.org/ec-code/3.6.3.46", + "http://identifiers.org/ec-code/3.6.3.47", + "http://identifiers.org/ec-code/3.6.3.48", + "http://identifiers.org/ec-code/3.6.3.49", + "http://identifiers.org/ec-code/3.6.3.5", + "http://identifiers.org/ec-code/3.6.3.50", + "http://identifiers.org/ec-code/3.6.3.51", + "http://identifiers.org/ec-code/3.6.3.52", + "http://identifiers.org/ec-code/3.6.3.53", + "http://identifiers.org/ec-code/3.6.3.54", + "http://identifiers.org/ec-code/3.6.3.6", + "http://identifiers.org/ec-code/3.6.3.7", + "http://identifiers.org/ec-code/3.6.3.8", + "http://identifiers.org/ec-code/3.6.3.9", + "http://identifiers.org/ec-code/3.6.4.1", + "http://identifiers.org/ec-code/3.6.4.10", + "http://identifiers.org/ec-code/3.6.4.11", + "http://identifiers.org/ec-code/3.6.4.12", + "http://identifiers.org/ec-code/3.6.4.13", + "http://identifiers.org/ec-code/3.6.4.2", + "http://identifiers.org/ec-code/3.6.4.3", + "http://identifiers.org/ec-code/3.6.4.4", + "http://identifiers.org/ec-code/3.6.4.5", + "http://identifiers.org/ec-code/3.6.4.6", + "http://identifiers.org/ec-code/3.6.4.7", + "http://identifiers.org/ec-code/3.6.4.8", + "http://identifiers.org/ec-code/3.6.4.9", + "http://identifiers.org/kegg.reaction/R00086", + "http://identifiers.org/metanetx.reaction/MNXR96131", + "http://identifiers.org/rhea/13065", + "http://identifiers.org/rhea/13066", + "http://identifiers.org/rhea/13067", + "http://identifiers.org/rhea/13068" + ] + } + ] + } + }, + { + "id": "R_ATPS4r", + "name": "ATP synthase (four protons for one ATP)", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "(b3738 and b3736 and b3737 and b3735 and b3733 and b3731 and b3732 and b3734) or (b3734 and b3732 and b3731 and b3733 and b3735 and b3737 and b3736 and b3738 and b3739)", + "metabolites": { + "M_adp_c": -1.0, + "M_h_e": -4.0, + "M_pi_c": -1.0, + "M_atp_c": 1.0, + "M_h2o_c": 1.0, + "M_h_c": 3.0 + }, + "subsystem": "Oxidative Phosphorylation", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ATPS4r", + "http://identifiers.org/biocyc/META:ATPSYN-RXN", + "http://identifiers.org/ec-code/3.6.3.14", + "http://identifiers.org/metanetx.reaction/MNXR96136" + ] + } + ] + } + }, + { + "id": "R_BIOMASS_Ecoli_core_w_GAM", + "name": "Biomass Objective Function with GAM", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_3pg_c": -1.496, + "M_accoa_c": -3.7478, + "M_atp_c": -59.81, + "M_e4p_c": -0.361, + "M_f6p_c": -0.0709, + "M_g3p_c": -0.129, + "M_g6p_c": -0.205, + "M_gln__L_c": -0.2557, + "M_glu__L_c": -4.9414, + "M_h2o_c": -59.81, + "M_nad_c": -3.547, + "M_nadph_c": -13.0279, + "M_oaa_c": -1.7867, + "M_pep_c": -0.5191, + "M_pyr_c": -2.8328, + "M_r5p_c": -0.8977, + "M_adp_c": 59.81, + "M_akg_c": 4.1182, + "M_coa_c": 3.7478, + "M_h_c": 59.81, + "M_nadh_c": 3.547, + "M_nadp_c": 13.0279, + "M_pi_c": 59.81 + }, + "objective_coefficient": 1.0, + "metadata": { + "sbo": "SBO:0000629", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/Ecoli_core_w_GAM"] + } + ] + } + }, + { + "id": "R_CO2t", + "name": "CO2 transporter via diffusion", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "s0001", + "metabolites": { + "M_co2_e": -1.0, + "M_co2_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/CO2t", + "http://identifiers.org/biocyc/META:TRANS-RXN0-545", + "http://identifiers.org/metanetx.reaction/MNXR96810" + ] + } + ] + } + }, + { + "id": "R_CS", + "name": "Citrate synthase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0720", + "metabolites": { + "M_accoa_c": -1.0, + "M_h2o_c": -1.0, + "M_oaa_c": -1.0, + "M_cit_c": 1.0, + "M_coa_c": 1.0, + "M_h_c": 1.0 + }, + "subsystem": "Citric Acid Cycle", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/CS", + "http://identifiers.org/biocyc/META:CITSYN-RXN", + "http://identifiers.org/biocyc/META:RXN-14905", + "http://identifiers.org/ec-code/2.3.3.1", + "http://identifiers.org/ec-code/2.3.3.16", + "http://identifiers.org/ec-code/2.3.3.3", + "http://identifiers.org/kegg.reaction/R00351", + "http://identifiers.org/metanetx.reaction/MNXR96920", + "http://identifiers.org/rhea/16845", + "http://identifiers.org/rhea/16846", + "http://identifiers.org/rhea/16847", + "http://identifiers.org/rhea/16848" + ] + } + ] + } + }, + { + "id": "R_CYTBD", + "name": "Cytochrome oxidase bd (ubiquinol-8: 2 protons)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "(b0978 and b0979) or (b0733 and b0734)", + "metabolites": { + "M_h_c": -2.0, + "M_o2_c": -0.5, + "M_q8h2_c": -1.0, + "M_h2o_c": 1.0, + "M_h_e": 2.0, + "M_q8_c": 1.0 + }, + "subsystem": "Oxidative Phosphorylation", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/CYTBD", + "http://identifiers.org/metanetx.reaction/MNXR97031" + ] + } + ] + } + }, + { + "id": "R_D_LACt2", + "name": "D lactate transport via proton symport", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2975 or b3603", + "metabolites": { + "M_h_e": -1.0, + "M_lac__D_e": -1.0, + "M_h_c": 1.0, + "M_lac__D_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/D_LACt2", + "http://identifiers.org/biocyc/META:TRANS-RXN0-515", + "http://identifiers.org/metanetx.reaction/MNXR97838" + ] + } + ] + } + }, + { + "id": "R_ENO", + "name": "Enolase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2779", + "metabolites": { + "M_2pg_c": -1.0, + "M_h2o_c": 1.0, + "M_pep_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ENO", + "http://identifiers.org/biocyc/META:2PGADEHYDRAT-RXN", + "http://identifiers.org/ec-code/4.2.1.11", + "http://identifiers.org/kegg.reaction/R00658", + "http://identifiers.org/metanetx.reaction/MNXR97932", + "http://identifiers.org/rhea/10164", + "http://identifiers.org/rhea/10165", + "http://identifiers.org/rhea/10166", + "http://identifiers.org/rhea/10167" + ] + } + ] + } + }, + { + "id": "R_ETOHt2r", + "name": "Ethanol reversible transport via proton symport", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_etoh_e": -1.0, + "M_h_e": -1.0, + "M_etoh_c": 1.0, + "M_h_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ETOHt2r", + "http://identifiers.org/metanetx.reaction/MNXR97981" + ] + } + ] + } + }, + { + "id": "R_EX_ac_e", + "name": "Acetate exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_ac_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_ac_e"] + } + ] + } + }, + { + "id": "R_EX_acald_e", + "name": "Acetaldehyde exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_acald_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_acald_e"] + } + ] + } + }, + { + "id": "R_EX_akg_e", + "name": "2-Oxoglutarate exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_akg_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_akg_e"] + } + ] + } + }, + { + "id": "R_EX_co2_e", + "name": "CO2 exchange", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_co2_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_co2_e"] + } + ] + } + }, + { + "id": "R_EX_etoh_e", + "name": "Ethanol exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_etoh_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_etoh_e"] + } + ] + } + }, + { + "id": "R_EX_for_e", + "name": "Formate exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_for_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_for_e"] + } + ] + } + }, + { + "id": "R_EX_fru_e", + "name": "D-Fructose exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_fru_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_fru_e"] + } + ] + } + }, + { + "id": "R_EX_fum_e", + "name": "Fumarate exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_fum_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_fum_e"] + } + ] + } + }, + { + "id": "R_EX_glc__D_e", + "name": "D-Glucose exchange", + "lower_bound": -10.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_glc__D_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_glc__D_e"] + } + ] + } + }, + { + "id": "R_EX_gln__L_e", + "name": "L-Glutamine exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_gln__L_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_gln__L_e"] + } + ] + } + }, + { + "id": "R_EX_glu__L_e", + "name": "L-Glutamate exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_glu__L_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_glu__L_e"] + } + ] + } + }, + { + "id": "R_EX_h_e", + "name": "H+ exchange", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_h_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/h"] + } + ] + } + }, + { + "id": "R_EX_h2o_e", + "name": "H2O exchange", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_h2o_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_h2o_e"] + } + ] + } + }, + { + "id": "R_EX_lac__D_e", + "name": "D-lactate exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_lac__D_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_lac__D_e"] + } + ] + } + }, + { + "id": "R_EX_mal__L_e", + "name": "L-Malate exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_mal__L_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_mal__L_e"] + } + ] + } + }, + { + "id": "R_EX_nh4_e", + "name": "Ammonia exchange", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_nh4_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_nh4_e"] + } + ] + } + }, + { + "id": "R_EX_o2_e", + "name": "O2 exchange", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_o2_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_o2_e"] + } + ] + } + }, + { + "id": "R_EX_pi_e", + "name": "Phosphate exchange", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_pi_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_pi_e"] + } + ] + } + }, + { + "id": "R_EX_pyr_e", + "name": "Pyruvate exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_pyr_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_pyr_e"] + } + ] + } + }, + { + "id": "R_EX_succ_e", + "name": "Succinate exchange", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_succ_e": -1.0 + }, + "metadata": { + "sbo": "SBO:0000627", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/bigg.reaction/EX_succ_e"] + } + ] + } + }, + { + "id": "R_FBA", + "name": "Fructose-bisphosphate aldolase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1773 or b2097 or b2925", + "metabolites": { + "M_fdp_c": -1.0, + "M_dhap_c": 1.0, + "M_g3p_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/FBA", + "http://identifiers.org/ec-code/4.1.2.13", + "http://identifiers.org/kegg.reaction/R01068", + "http://identifiers.org/metanetx.reaction/MNXR99459", + "http://identifiers.org/rhea/14729", + "http://identifiers.org/rhea/14730", + "http://identifiers.org/rhea/14731", + "http://identifiers.org/rhea/14732" + ] + } + ] + } + }, + { + "id": "R_FBP", + "name": "Fructose-bisphosphatase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3925 or b4232", + "metabolites": { + "M_fdp_c": -1.0, + "M_h2o_c": -1.0, + "M_f6p_c": 1.0, + "M_pi_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/FBP", + "http://identifiers.org/ec-code/3.1.3.11", + "http://identifiers.org/metanetx.reaction/MNXR99465", + "http://identifiers.org/rhea/11064", + "http://identifiers.org/rhea/11065", + "http://identifiers.org/rhea/11066", + "http://identifiers.org/rhea/11067" + ] + } + ] + } + }, + { + "id": "R_FORt2", + "name": "Formate transport in via proton symport", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0904 or b2492", + "metabolites": { + "M_for_e": -1.0, + "M_h_e": -1.0, + "M_for_c": 1.0, + "M_h_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/FORt2", + "http://identifiers.org/metanetx.reaction/MNXR99621" + ] + } + ] + } + }, + { + "id": "R_FORt", + "name": "Formate transport via diffusion", + "lower_bound": -1000.0, + "upper_bound": 0.0, + "gene_reaction_rule": "b0904 or b2492", + "metabolites": { + "M_for_e": -1.0, + "M_for_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/FORt", + "http://identifiers.org/biocyc/META:TRANS-RXN-1", + "http://identifiers.org/metanetx.reaction/MNXR99620", + "http://identifiers.org/rhea/29679", + "http://identifiers.org/rhea/29680", + "http://identifiers.org/rhea/29681", + "http://identifiers.org/rhea/29682" + ] + } + ] + } + }, + { + "id": "R_FRD7", + "name": "Fumarate reductase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b4153 and b4151 and b4152 and b4154", + "metabolites": { + "M_fum_c": -1.0, + "M_q8h2_c": -1.0, + "M_q8_c": 1.0, + "M_succ_c": 1.0 + }, + "subsystem": "Oxidative Phosphorylation", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/FRD7", + "http://identifiers.org/metanetx.reaction/MNXR99641", + "http://identifiers.org/rhea/29187", + "http://identifiers.org/rhea/29188", + "http://identifiers.org/rhea/29189", + "http://identifiers.org/rhea/29190" + ] + } + ] + } + }, + { + "id": "R_FRUpts2", + "name": "Fructose transport via PEP:Pyr PTS (f6p generating)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2415 and b1818 and b1817 and b1819 and b2416", + "metabolites": { + "M_fru_e": -1.0, + "M_pep_c": -1.0, + "M_f6p_c": 1.0, + "M_pyr_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/FRUpts2", + "http://identifiers.org/metanetx.reaction/MNXR99662" + ] + } + ] + } + }, + { + "id": "R_FUM", + "name": "Fumarase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b4122 or b1612 or b1611", + "metabolites": { + "M_fum_c": -1.0, + "M_h2o_c": -1.0, + "M_mal__L_c": 1.0 + }, + "subsystem": "Citric Acid Cycle", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/FUM", + "http://identifiers.org/biocyc/META:FUMHYDR-RXN", + "http://identifiers.org/ec-code/4.2.1.2", + "http://identifiers.org/kegg.reaction/R01082", + "http://identifiers.org/metanetx.reaction/MNXR99705", + "http://identifiers.org/rhea/12460", + "http://identifiers.org/rhea/12461", + "http://identifiers.org/rhea/12462", + "http://identifiers.org/rhea/12463" + ] + } + ] + } + }, + { + "id": "R_FUMt2_2", + "name": "Fumarate transport via proton symport (2 H)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3528", + "metabolites": { + "M_fum_e": -1.0, + "M_h_e": -2.0, + "M_fum_c": 1.0, + "M_h_c": 2.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/FUMt2_2", + "http://identifiers.org/biocyc/META:TRANS-RXN-121B", + "http://identifiers.org/metanetx.reaction/MNXR99711", + "http://identifiers.org/rhea/29331", + "http://identifiers.org/rhea/29332", + "http://identifiers.org/rhea/29333", + "http://identifiers.org/rhea/29334" + ] + } + ] + } + }, + { + "id": "R_G6PDH2r", + "name": "Glucose 6-phosphate dehydrogenase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1852", + "metabolites": { + "M_g6p_c": -1.0, + "M_nadp_c": -1.0, + "M_6pgl_c": 1.0, + "M_h_c": 1.0, + "M_nadph_c": 1.0 + }, + "subsystem": "Pentose Phosphate Pathway", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/G6PDH2r", + "http://identifiers.org/biocyc/META:GLU6PDEHYDROG-RXN", + "http://identifiers.org/ec-code/1.1.1.363", + "http://identifiers.org/ec-code/1.1.1.49", + "http://identifiers.org/kegg.reaction/R00835", + "http://identifiers.org/metanetx.reaction/MNXR99907", + "http://identifiers.org/rhea/15841", + "http://identifiers.org/rhea/15842", + "http://identifiers.org/rhea/15843", + "http://identifiers.org/rhea/15844" + ] + } + ] + } + }, + { + "id": "R_GAPD", + "name": "Glyceraldehyde-3-phosphate dehydrogenase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1779", + "metabolites": { + "M_g3p_c": -1.0, + "M_nad_c": -1.0, + "M_pi_c": -1.0, + "M_13dpg_c": 1.0, + "M_h_c": 1.0, + "M_nadh_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GAPD", + "http://identifiers.org/biocyc/META:GAPOXNPHOSPHN-RXN", + "http://identifiers.org/ec-code/1.2.1.12", + "http://identifiers.org/ec-code/1.2.1.59", + "http://identifiers.org/kegg.reaction/R01061", + "http://identifiers.org/metanetx.reaction/MNXR100040", + "http://identifiers.org/rhea/10300", + "http://identifiers.org/rhea/10301", + "http://identifiers.org/rhea/10302", + "http://identifiers.org/rhea/10303" + ] + } + ] + } + }, + { + "id": "R_GLCpts", + "name": "D-glucose transport via PEP:Pyr PTS", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "(b2415 and b1818 and b1817 and b1819 and b2416) or (b2415 and b2417 and b1101 and b2416) or (b2415 and b2417 and b1621 and b2416)", + "metabolites": { + "M_glc__D_e": -1.0, + "M_pep_c": -1.0, + "M_g6p_c": 1.0, + "M_pyr_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GLCpts", + "http://identifiers.org/metanetx.reaction/MNXR100237" + ] + } + ] + } + }, + { + "id": "R_GLNS", + "name": "Glutamine synthetase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3870 or b1297", + "metabolites": { + "M_atp_c": -1.0, + "M_glu__L_c": -1.0, + "M_nh4_c": -1.0, + "M_adp_c": 1.0, + "M_gln__L_c": 1.0, + "M_h_c": 1.0, + "M_pi_c": 1.0 + }, + "subsystem": "Glutamate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GLNS", + "http://identifiers.org/biocyc/META:GLUTAMINESYN-RXN", + "http://identifiers.org/ec-code/6.3.1.2", + "http://identifiers.org/kegg.reaction/R00253", + "http://identifiers.org/metanetx.reaction/MNXR100024", + "http://identifiers.org/rhea/16169", + "http://identifiers.org/rhea/16170", + "http://identifiers.org/rhea/16171", + "http://identifiers.org/rhea/16172" + ] + } + ] + } + }, + { + "id": "R_GLNabc", + "name": "L-glutamine transport via ABC system", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0810 and b0811 and b0809", + "metabolites": { + "M_atp_c": -1.0, + "M_gln__L_e": -1.0, + "M_h2o_c": -1.0, + "M_adp_c": 1.0, + "M_gln__L_c": 1.0, + "M_h_c": 1.0, + "M_pi_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GLNabc", + "http://identifiers.org/biocyc/META:ABC-12-RXN", + "http://identifiers.org/ec-code/3.6.3.21", + "http://identifiers.org/metanetx.reaction/MNXR100258", + "http://identifiers.org/rhea/29895#1", + "http://identifiers.org/rhea/29896#1", + "http://identifiers.org/rhea/29897#1", + "http://identifiers.org/rhea/29898#1" + ] + } + ] + } + }, + { + "id": "R_GLUDy", + "name": "Glutamate dehydrogenase (NADP)", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1761", + "metabolites": { + "M_glu__L_c": -1.0, + "M_h2o_c": -1.0, + "M_nadp_c": -1.0, + "M_akg_c": 1.0, + "M_h_c": 1.0, + "M_nadph_c": 1.0, + "M_nh4_c": 1.0 + }, + "subsystem": "Glutamate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GLUDy", + "http://identifiers.org/biocyc/META:GLUTDEHYD-RXN", + "http://identifiers.org/ec-code/1.4.1.13", + "http://identifiers.org/ec-code/1.4.1.3", + "http://identifiers.org/ec-code/1.4.1.4", + "http://identifiers.org/kegg.reaction/R00248", + "http://identifiers.org/metanetx.reaction/MNXR100086", + "http://identifiers.org/rhea/11612", + "http://identifiers.org/rhea/11613", + "http://identifiers.org/rhea/11614", + "http://identifiers.org/rhea/11615" + ] + } + ] + } + }, + { + "id": "R_GLUN", + "name": "Glutaminase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0485 or b1812 or b1524", + "metabolites": { + "M_gln__L_c": -1.0, + "M_h2o_c": -1.0, + "M_glu__L_c": 1.0, + "M_nh4_c": 1.0 + }, + "subsystem": "Glutamate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GLUN", + "http://identifiers.org/biocyc/META:GLUTAMIN-RXN", + "http://identifiers.org/ec-code/1.4.1.13", + "http://identifiers.org/ec-code/1.4.7.1", + "http://identifiers.org/ec-code/3.5.1.2", + "http://identifiers.org/ec-code/3.5.1.38", + "http://identifiers.org/ec-code/4.3.3.6", + "http://identifiers.org/ec-code/6.3.4.2", + "http://identifiers.org/ec-code/6.3.5.2", + "http://identifiers.org/ec-code/6.3.5.4", + "http://identifiers.org/ec-code/6.3.5.5", + "http://identifiers.org/kegg.reaction/R00256", + "http://identifiers.org/metanetx.reaction/MNXR100030", + "http://identifiers.org/rhea/15889", + "http://identifiers.org/rhea/15890", + "http://identifiers.org/rhea/15891", + "http://identifiers.org/rhea/15892" + ] + } + ] + } + }, + { + "id": "R_GLUSy", + "name": "Glutamate synthase (NADPH)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3212 and b3213", + "metabolites": { + "M_akg_c": -1.0, + "M_gln__L_c": -1.0, + "M_h_c": -1.0, + "M_nadph_c": -1.0, + "M_glu__L_c": 2.0, + "M_nadp_c": 1.0 + }, + "subsystem": "Glutamate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GLUSy", + "http://identifiers.org/biocyc/META:GLUTAMATESYN-RXN", + "http://identifiers.org/ec-code/1.4.1.13", + "http://identifiers.org/kegg.reaction/R00114", + "http://identifiers.org/metanetx.reaction/MNXR100291", + "http://identifiers.org/rhea/15501", + "http://identifiers.org/rhea/15502", + "http://identifiers.org/rhea/15503", + "http://identifiers.org/rhea/15504" + ] + } + ] + } + }, + { + "id": "R_GLUt2r", + "name": "L glutamate transport via proton symport reversible", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b4077", + "metabolites": { + "M_glu__L_e": -1.0, + "M_h_e": -1.0, + "M_glu__L_c": 1.0, + "M_h_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GLUt2r", + "http://identifiers.org/metanetx.reaction/MNXR100300" + ] + } + ] + } + }, + { + "id": "R_GND", + "name": "Phosphogluconate dehydrogenase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2029", + "metabolites": { + "M_6pgc_c": -1.0, + "M_nadp_c": -1.0, + "M_co2_c": 1.0, + "M_nadph_c": 1.0, + "M_ru5p__D_c": 1.0 + }, + "subsystem": "Pentose Phosphate Pathway", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/GND", + "http://identifiers.org/biocyc/META:RXN-9952", + "http://identifiers.org/ec-code/1.1.1.351", + "http://identifiers.org/ec-code/1.1.1.44", + "http://identifiers.org/kegg.reaction/R01528", + "http://identifiers.org/metanetx.reaction/MNXR100389", + "http://identifiers.org/rhea/10116", + "http://identifiers.org/rhea/10117", + "http://identifiers.org/rhea/10118", + "http://identifiers.org/rhea/10119" + ] + } + ] + } + }, + { + "id": "R_H2Ot", + "name": "H2O transport via diffusion", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0875 or s0001", + "metabolites": { + "M_h2o_e": -1.0, + "M_h2o_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/H2Ot", + "http://identifiers.org/biocyc/META:TRANS-RXN-145", + "http://identifiers.org/biocyc/META:TRANS-RXN0-547", + "http://identifiers.org/metanetx.reaction/MNXR98641", + "http://identifiers.org/rhea/29667", + "http://identifiers.org/rhea/29668", + "http://identifiers.org/rhea/29669", + "http://identifiers.org/rhea/29670" + ] + } + ] + } + }, + { + "id": "R_ICDHyr", + "name": "Isocitrate dehydrogenase (NADP)", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1136", + "metabolites": { + "M_icit_c": -1.0, + "M_nadp_c": -1.0, + "M_akg_c": 1.0, + "M_co2_c": 1.0, + "M_nadph_c": 1.0 + }, + "subsystem": "Citric Acid Cycle", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ICDHyr", + "http://identifiers.org/ec-code/1.1.1.42", + "http://identifiers.org/kegg.reaction/R00267", + "http://identifiers.org/metanetx.reaction/MNXR100781", + "http://identifiers.org/rhea/19629", + "http://identifiers.org/rhea/19630", + "http://identifiers.org/rhea/19631", + "http://identifiers.org/rhea/19632" + ] + } + ] + } + }, + { + "id": "R_ICL", + "name": "Isocitrate lyase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b4015", + "metabolites": { + "M_icit_c": -1.0, + "M_glx_c": 1.0, + "M_succ_c": 1.0 + }, + "subsystem": "Anaplerotic reactions", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ICL", + "http://identifiers.org/ec-code/4.1.3.1", + "http://identifiers.org/kegg.reaction/R00479", + "http://identifiers.org/metanetx.reaction/MNXR100789", + "http://identifiers.org/rhea/13245", + "http://identifiers.org/rhea/13246", + "http://identifiers.org/rhea/13247", + "http://identifiers.org/rhea/13248" + ] + } + ] + } + }, + { + "id": "R_LDH_D", + "name": "D-lactate dehydrogenase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2133 or b1380", + "metabolites": { + "M_lac__D_c": -1.0, + "M_nad_c": -1.0, + "M_h_c": 1.0, + "M_nadh_c": 1.0, + "M_pyr_c": 1.0 + }, + "subsystem": "Pyruvate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/LDH_D", + "http://identifiers.org/biocyc/META:DLACTDEHYDROGNAD-RXN", + "http://identifiers.org/ec-code/1.1.1.28", + "http://identifiers.org/kegg.reaction/R00704", + "http://identifiers.org/metanetx.reaction/MNXR101037", + "http://identifiers.org/rhea/16369", + "http://identifiers.org/rhea/16370", + "http://identifiers.org/rhea/16371", + "http://identifiers.org/rhea/16372" + ] + } + ] + } + }, + { + "id": "R_MALS", + "name": "Malate synthase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b4014 or b2976", + "metabolites": { + "M_accoa_c": -1.0, + "M_glx_c": -1.0, + "M_h2o_c": -1.0, + "M_coa_c": 1.0, + "M_h_c": 1.0, + "M_mal__L_c": 1.0 + }, + "subsystem": "Anaplerotic reactions", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/MALS", + "http://identifiers.org/biocyc/META:MALSYN-RXN", + "http://identifiers.org/ec-code/2.3.3.9", + "http://identifiers.org/kegg.reaction/R00472", + "http://identifiers.org/metanetx.reaction/MNXR101347", + "http://identifiers.org/rhea/18181", + "http://identifiers.org/rhea/18182", + "http://identifiers.org/rhea/18183", + "http://identifiers.org/rhea/18184" + ] + } + ] + } + }, + { + "id": "R_MALt2_2", + "name": "Malate transport via proton symport (2 H)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3528", + "metabolites": { + "M_h_e": -2.0, + "M_mal__L_e": -1.0, + "M_h_c": 2.0, + "M_mal__L_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/MALt2_2", + "http://identifiers.org/biocyc/META:TRANS-RXN-121A", + "http://identifiers.org/metanetx.reaction/MNXR101370", + "http://identifiers.org/rhea/29339", + "http://identifiers.org/rhea/29340", + "http://identifiers.org/rhea/29341", + "http://identifiers.org/rhea/29342" + ] + } + ] + } + }, + { + "id": "R_MDH", + "name": "Malate dehydrogenase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3236", + "metabolites": { + "M_mal__L_c": -1.0, + "M_nad_c": -1.0, + "M_h_c": 1.0, + "M_nadh_c": 1.0, + "M_oaa_c": 1.0 + }, + "subsystem": "Citric Acid Cycle", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/MDH", + "http://identifiers.org/biocyc/META:MALATE-DEH-RXN", + "http://identifiers.org/ec-code/1.1.1.299", + "http://identifiers.org/ec-code/1.1.1.37", + "http://identifiers.org/kegg.reaction/R00342", + "http://identifiers.org/metanetx.reaction/MNXR101439", + "http://identifiers.org/rhea/21432", + "http://identifiers.org/rhea/21433", + "http://identifiers.org/rhea/21434", + "http://identifiers.org/rhea/21435" + ] + } + ] + } + }, + { + "id": "R_ME1", + "name": "Malic enzyme (NAD)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1479", + "metabolites": { + "M_mal__L_c": -1.0, + "M_nad_c": -1.0, + "M_co2_c": 1.0, + "M_nadh_c": 1.0, + "M_pyr_c": 1.0 + }, + "subsystem": "Anaplerotic reactions", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ME1", + "http://identifiers.org/biocyc/META:1.1.1.39-RXN", + "http://identifiers.org/ec-code/1.1.1.38", + "http://identifiers.org/ec-code/1.1.1.39", + "http://identifiers.org/kegg.reaction/R00214", + "http://identifiers.org/metanetx.reaction/MNXR101446", + "http://identifiers.org/rhea/12653", + "http://identifiers.org/rhea/12654", + "http://identifiers.org/rhea/12655", + "http://identifiers.org/rhea/12656" + ] + } + ] + } + }, + { + "id": "R_ME2", + "name": "Malic enzyme (NADP)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2463", + "metabolites": { + "M_mal__L_c": -1.0, + "M_nadp_c": -1.0, + "M_co2_c": 1.0, + "M_nadph_c": 1.0, + "M_pyr_c": 1.0 + }, + "subsystem": "Anaplerotic reactions", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/ME2", + "http://identifiers.org/biocyc/META:MALIC-NADP-RXN", + "http://identifiers.org/ec-code/1.1.1.40", + "http://identifiers.org/kegg.reaction/R00216", + "http://identifiers.org/metanetx.reaction/MNXR101443", + "http://identifiers.org/rhea/18253", + "http://identifiers.org/rhea/18254", + "http://identifiers.org/rhea/18255", + "http://identifiers.org/rhea/18256" + ] + } + ] + } + }, + { + "id": "R_NADH16", + "name": "NADH dehydrogenase (ubiquinone-8 & 3 protons)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2287 and b2285 and b2283 and b2281 and b2279 and b2277 and b2276 and b2278 and b2280 and b2282 and b2284 and b2286 and b2288", + "metabolites": { + "M_h_c": -4.0, + "M_nadh_c": -1.0, + "M_q8_c": -1.0, + "M_h_e": 3.0, + "M_nad_c": 1.0, + "M_q8h2_c": 1.0 + }, + "subsystem": "Oxidative Phosphorylation", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/NADH16", + "http://identifiers.org/ec-code/1.6.5.3", + "http://identifiers.org/metanetx.reaction/MNXR101864" + ] + } + ] + } + }, + { + "id": "R_NADTRHD", + "name": "NAD transhydrogenase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3962 or (b1602 and b1603)", + "metabolites": { + "M_nad_c": -1.0, + "M_nadph_c": -1.0, + "M_nadh_c": 1.0, + "M_nadp_c": 1.0 + }, + "subsystem": "Oxidative Phosphorylation", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/NADTRHD", + "http://identifiers.org/biocyc/META:PYRNUTRANSHYDROGEN-RXN", + "http://identifiers.org/ec-code/1.6.1.1", + "http://identifiers.org/ec-code/1.6.1.2", + "http://identifiers.org/ec-code/1.6.1.3", + "http://identifiers.org/kegg.reaction/R00112", + "http://identifiers.org/metanetx.reaction/MNXR101898", + "http://identifiers.org/rhea/11692", + "http://identifiers.org/rhea/11693", + "http://identifiers.org/rhea/11694", + "http://identifiers.org/rhea/11695" + ] + } + ] + } + }, + { + "id": "R_NH4t", + "name": "Ammonia reversible transport", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "s0001 or b0451", + "metabolites": { + "M_nh4_e": -1.0, + "M_nh4_c": 1.0 + }, + "subsystem": "Inorganic Ion Transport and Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/NH4t", + "http://identifiers.org/biocyc/META:RXN-9615", + "http://identifiers.org/biocyc/META:TRANS-RXN0-206", + "http://identifiers.org/biocyc/META:TRANS-RXN0-544", + "http://identifiers.org/metanetx.reaction/MNXR101950", + "http://identifiers.org/rhea/28747", + "http://identifiers.org/rhea/28748", + "http://identifiers.org/rhea/28749", + "http://identifiers.org/rhea/28750" + ] + } + ] + } + }, + { + "id": "R_O2t", + "name": "O2 transport diffusion", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "s0001", + "metabolites": { + "M_o2_e": -1.0, + "M_o2_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/O2t", + "http://identifiers.org/biocyc/META:TRANS-RXN0-474", + "http://identifiers.org/metanetx.reaction/MNXR102090" + ] + } + ] + } + }, + { + "id": "R_PDH", + "name": "Pyruvate dehydrogenase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0115 and b0114 and b0116", + "metabolites": { + "M_coa_c": -1.0, + "M_nad_c": -1.0, + "M_pyr_c": -1.0, + "M_accoa_c": 1.0, + "M_co2_c": 1.0, + "M_nadh_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PDH", + "http://identifiers.org/biocyc/META:PYRUVDEH-RXN", + "http://identifiers.org/ec-code/1.2.1.-", + "http://identifiers.org/ec-code/1.2.1.51", + "http://identifiers.org/ec-code/1.2.4.1", + "http://identifiers.org/ec-code/1.8.1.4", + "http://identifiers.org/ec-code/2.3.1.12", + "http://identifiers.org/kegg.reaction/R00209", + "http://identifiers.org/metanetx.reaction/MNXR102425", + "http://identifiers.org/rhea/28042", + "http://identifiers.org/rhea/28043", + "http://identifiers.org/rhea/28044", + "http://identifiers.org/rhea/28045" + ] + } + ] + } + }, + { + "id": "R_PFK", + "name": "Phosphofructokinase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3916 or b1723", + "metabolites": { + "M_atp_c": -1.0, + "M_f6p_c": -1.0, + "M_adp_c": 1.0, + "M_fdp_c": 1.0, + "M_h_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PFK", + "http://identifiers.org/ec-code/2.7.1.11", + "http://identifiers.org/metanetx.reaction/MNXR102507", + "http://identifiers.org/rhea/16109", + "http://identifiers.org/rhea/16110", + "http://identifiers.org/rhea/16111", + "http://identifiers.org/rhea/16112" + ] + } + ] + } + }, + { + "id": "R_PFL", + "name": "Pyruvate formate lyase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "(b0902 and b3114) or (b0903 and b0902 and b2579) or (b0902 and b0903) or (b3951 and b3952)", + "metabolites": { + "M_coa_c": -1.0, + "M_pyr_c": -1.0, + "M_accoa_c": 1.0, + "M_for_c": 1.0 + }, + "subsystem": "Pyruvate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PFL", + "http://identifiers.org/biocyc/META:PYRUVFORMLY-RXN", + "http://identifiers.org/ec-code/2.3.1.54", + "http://identifiers.org/kegg.reaction/R00212", + "http://identifiers.org/metanetx.reaction/MNXR102514", + "http://identifiers.org/rhea/11844", + "http://identifiers.org/rhea/11845", + "http://identifiers.org/rhea/11846", + "http://identifiers.org/rhea/11847" + ] + } + ] + } + }, + { + "id": "R_PGI", + "name": "Glucose-6-phosphate isomerase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b4025", + "metabolites": { + "M_g6p_c": -1.0, + "M_f6p_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PGI", + "http://identifiers.org/biocyc/META:PGLUCISOM-RXN", + "http://identifiers.org/ec-code/5.3.1.9", + "http://identifiers.org/metanetx.reaction/MNXR102535" + ] + } + ] + } + }, + { + "id": "R_PGK", + "name": "Phosphoglycerate kinase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2926", + "metabolites": { + "M_3pg_c": -1.0, + "M_atp_c": -1.0, + "M_13dpg_c": 1.0, + "M_adp_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PGK", + "http://identifiers.org/biocyc/META:PHOSGLYPHOS-RXN", + "http://identifiers.org/ec-code/2.7.2.3", + "http://identifiers.org/kegg.reaction/R01512", + "http://identifiers.org/metanetx.reaction/MNXR102538", + "http://identifiers.org/rhea/14801", + "http://identifiers.org/rhea/14802", + "http://identifiers.org/rhea/14803", + "http://identifiers.org/rhea/14804" + ] + } + ] + } + }, + { + "id": "R_PGL", + "name": "6-phosphogluconolactonase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0767", + "metabolites": { + "M_6pgl_c": -1.0, + "M_h2o_c": -1.0, + "M_6pgc_c": 1.0, + "M_h_c": 1.0 + }, + "subsystem": "Pentose Phosphate Pathway", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PGL", + "http://identifiers.org/biocyc/META:6PGLUCONOLACT-RXN", + "http://identifiers.org/ec-code/3.1.1.31", + "http://identifiers.org/kegg.reaction/R02035", + "http://identifiers.org/metanetx.reaction/MNXR102539", + "http://identifiers.org/rhea/12556", + "http://identifiers.org/rhea/12557", + "http://identifiers.org/rhea/12558", + "http://identifiers.org/rhea/12559" + ] + } + ] + } + }, + { + "id": "R_PGM", + "name": "Phosphoglycerate mutase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b4395 or b3612 or b0755", + "metabolites": { + "M_2pg_c": -1.0, + "M_3pg_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PGM", + "http://identifiers.org/biocyc/META:3PGAREARR-RXN", + "http://identifiers.org/biocyc/META:RXN-15513", + "http://identifiers.org/ec-code/5.4.2.1", + "http://identifiers.org/ec-code/5.4.2.11", + "http://identifiers.org/ec-code/5.4.2.12", + "http://identifiers.org/kegg.reaction/R01518", + "http://identifiers.org/metanetx.reaction/MNXR102547", + "http://identifiers.org/rhea/15901", + "http://identifiers.org/rhea/15902", + "http://identifiers.org/rhea/15903", + "http://identifiers.org/rhea/15904" + ] + } + ] + } + }, + { + "id": "R_PIt2r", + "name": "Phosphate reversible transport via symport", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2987 or b3493", + "metabolites": { + "M_h_e": -1.0, + "M_pi_e": -1.0, + "M_h_c": 1.0, + "M_pi_c": 1.0 + }, + "subsystem": "Inorganic Ion Transport and Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PIt2r", + "http://identifiers.org/biocyc/META:TRANS-RXN-114", + "http://identifiers.org/metanetx.reaction/MNXR102872", + "http://identifiers.org/rhea/29939", + "http://identifiers.org/rhea/29940", + "http://identifiers.org/rhea/29941", + "http://identifiers.org/rhea/29942" + ] + } + ] + } + }, + { + "id": "R_PPC", + "name": "Phosphoenolpyruvate carboxylase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3956", + "metabolites": { + "M_co2_c": -1.0, + "M_h2o_c": -1.0, + "M_pep_c": -1.0, + "M_h_c": 1.0, + "M_oaa_c": 1.0, + "M_pi_c": 1.0 + }, + "subsystem": "Anaplerotic reactions", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PPC", + "http://identifiers.org/ec-code/4.1.1.31", + "http://identifiers.org/kegg.reaction/R00345", + "http://identifiers.org/metanetx.reaction/MNXR103096", + "http://identifiers.org/rhea/23072", + "http://identifiers.org/rhea/23073", + "http://identifiers.org/rhea/23074", + "http://identifiers.org/rhea/23075" + ] + } + ] + } + }, + { + "id": "R_PPCK", + "name": "Phosphoenolpyruvate carboxykinase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3403", + "metabolites": { + "M_atp_c": -1.0, + "M_oaa_c": -1.0, + "M_adp_c": 1.0, + "M_co2_c": 1.0, + "M_pep_c": 1.0 + }, + "subsystem": "Anaplerotic reactions", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PPCK", + "http://identifiers.org/biocyc/META:PEPCARBOXYKIN-RXN", + "http://identifiers.org/ec-code/4.1.1.49", + "http://identifiers.org/kegg.reaction/R00341", + "http://identifiers.org/metanetx.reaction/MNXR103099", + "http://identifiers.org/rhea/18617", + "http://identifiers.org/rhea/18618", + "http://identifiers.org/rhea/18619", + "http://identifiers.org/rhea/18620" + ] + } + ] + } + }, + { + "id": "R_PPS", + "name": "Phosphoenolpyruvate synthase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1702", + "metabolites": { + "M_atp_c": -1.0, + "M_h2o_c": -1.0, + "M_pyr_c": -1.0, + "M_amp_c": 1.0, + "M_h_c": 2.0, + "M_pep_c": 1.0, + "M_pi_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PPS", + "http://identifiers.org/biocyc/META:PEPSYNTH-RXN", + "http://identifiers.org/ec-code/2.7.9.2", + "http://identifiers.org/kegg.reaction/R00199", + "http://identifiers.org/metanetx.reaction/MNXR103140", + "http://identifiers.org/rhea/11364", + "http://identifiers.org/rhea/11365", + "http://identifiers.org/rhea/11366", + "http://identifiers.org/rhea/11367" + ] + } + ] + } + }, + { + "id": "R_PTAr", + "name": "Phosphotransacetylase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2297 or b2458", + "metabolites": { + "M_accoa_c": -1.0, + "M_pi_c": -1.0, + "M_actp_c": 1.0, + "M_coa_c": 1.0 + }, + "subsystem": "Pyruvate Metabolism", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PTAr", + "http://identifiers.org/biocyc/META:PHOSACETYLTRANS-RXN", + "http://identifiers.org/ec-code/2.3.1.8", + "http://identifiers.org/kegg.reaction/R00230", + "http://identifiers.org/metanetx.reaction/MNXR103319", + "http://identifiers.org/rhea/19521", + "http://identifiers.org/rhea/19522", + "http://identifiers.org/rhea/19523", + "http://identifiers.org/rhea/19524" + ] + } + ] + } + }, + { + "id": "R_PYK", + "name": "Pyruvate kinase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1854 or b1676", + "metabolites": { + "M_adp_c": -1.0, + "M_h_c": -1.0, + "M_pep_c": -1.0, + "M_atp_c": 1.0, + "M_pyr_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PYK", + "http://identifiers.org/biocyc/META:PEPDEPHOS-RXN", + "http://identifiers.org/ec-code/2.7.1.40", + "http://identifiers.org/kegg.reaction/R00200", + "http://identifiers.org/metanetx.reaction/MNXR103371", + "http://identifiers.org/rhea/18157", + "http://identifiers.org/rhea/18158", + "http://identifiers.org/rhea/18159", + "http://identifiers.org/rhea/18160" + ] + } + ] + } + }, + { + "id": "R_PYRt2", + "name": "Pyruvate transport in via proton symport", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_h_e": -1.0, + "M_pyr_e": -1.0, + "M_h_c": 1.0, + "M_pyr_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/PYRt2", + "http://identifiers.org/metanetx.reaction/MNXR103385" + ] + } + ] + } + }, + { + "id": "R_RPE", + "name": "Ribulose 5-phosphate 3-epimerase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3386 or b4301", + "metabolites": { + "M_ru5p__D_c": -1.0, + "M_xu5p__D_c": 1.0 + }, + "subsystem": "Pentose Phosphate Pathway", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/RPE", + "http://identifiers.org/biocyc/META:RIBULP3EPIM-RXN", + "http://identifiers.org/ec-code/5.1.3.1", + "http://identifiers.org/kegg.reaction/R01529", + "http://identifiers.org/metanetx.reaction/MNXR104083", + "http://identifiers.org/rhea/13677", + "http://identifiers.org/rhea/13678", + "http://identifiers.org/rhea/13679", + "http://identifiers.org/rhea/13680" + ] + } + ] + } + }, + { + "id": "R_RPI", + "name": "Ribose-5-phosphate isomerase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2914 or b4090", + "metabolites": { + "M_r5p_c": -1.0, + "M_ru5p__D_c": 1.0 + }, + "subsystem": "Pentose Phosphate Pathway", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/RPI", + "http://identifiers.org/ec-code/5.3.1.6", + "http://identifiers.org/metanetx.reaction/MNXR104084" + ] + } + ] + } + }, + { + "id": "R_SUCCt2_2", + "name": "Succinate transport via proton symport (2 H)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3528", + "metabolites": { + "M_h_e": -2.0, + "M_succ_e": -1.0, + "M_h_c": 2.0, + "M_succ_c": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/SUCCt2_2", + "http://identifiers.org/biocyc/META:TRANS-RXN-121", + "http://identifiers.org/metanetx.reaction/MNXR104620", + "http://identifiers.org/rhea/29303", + "http://identifiers.org/rhea/29304", + "http://identifiers.org/rhea/29305", + "http://identifiers.org/rhea/29306" + ] + } + ] + } + }, + { + "id": "R_SUCCt3", + "name": "Succinate transport out via proton antiport", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "", + "metabolites": { + "M_h_e": -1.0, + "M_succ_c": -1.0, + "M_h_c": 1.0, + "M_succ_e": 1.0 + }, + "subsystem": "Transport, Extracellular", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/SUCCt3", + "http://identifiers.org/metanetx.reaction/MNXR104623" + ] + } + ] + } + }, + { + "id": "R_SUCDi", + "name": "Succinate dehydrogenase (irreversible)", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0723 and b0721 and b0722 and b0724", + "metabolites": { + "M_q8_c": -1.0, + "M_succ_c": -1.0, + "M_fum_c": 1.0, + "M_q8h2_c": 1.0 + }, + "subsystem": "Oxidative Phosphorylation", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/SUCDi", + "http://identifiers.org/metanetx.reaction/MNXR99641", + "http://identifiers.org/rhea/29187", + "http://identifiers.org/rhea/29188", + "http://identifiers.org/rhea/29189", + "http://identifiers.org/rhea/29190" + ] + } + ] + } + }, + { + "id": "R_SUCOAS", + "name": "Succinyl-CoA synthetase (ADP-forming)", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b0728 and b0729", + "metabolites": { + "M_atp_c": -1.0, + "M_coa_c": -1.0, + "M_succ_c": -1.0, + "M_adp_c": 1.0, + "M_pi_c": 1.0, + "M_succoa_c": 1.0 + }, + "subsystem": "Citric Acid Cycle", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/SUCOAS", + "http://identifiers.org/biocyc/META:SUCCCOASYN-RXN", + "http://identifiers.org/ec-code/6.2.1.5", + "http://identifiers.org/kegg.reaction/R00405", + "http://identifiers.org/metanetx.reaction/MNXR104635", + "http://identifiers.org/rhea/17661", + "http://identifiers.org/rhea/17662", + "http://identifiers.org/rhea/17663", + "http://identifiers.org/rhea/17664" + ] + } + ] + } + }, + { + "id": "R_TALA", + "name": "Transaldolase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2464 or b0008", + "metabolites": { + "M_g3p_c": -1.0, + "M_s7p_c": -1.0, + "M_e4p_c": 1.0, + "M_f6p_c": 1.0 + }, + "subsystem": "Pentose Phosphate Pathway", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/TALA", + "http://identifiers.org/biocyc/META:TRANSALDOL-RXN", + "http://identifiers.org/ec-code/2.2.1.2", + "http://identifiers.org/kegg.reaction/R01827", + "http://identifiers.org/metanetx.reaction/MNXR104715", + "http://identifiers.org/rhea/17053", + "http://identifiers.org/rhea/17054", + "http://identifiers.org/rhea/17055", + "http://identifiers.org/rhea/17056" + ] + } + ] + } + }, + { + "id": "R_THD2", + "name": "NAD(P) transhydrogenase", + "lower_bound": 0.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b1602 and b1603", + "metabolites": { + "M_h_e": -2.0, + "M_nadh_c": -1.0, + "M_nadp_c": -1.0, + "M_h_c": 2.0, + "M_nad_c": 1.0, + "M_nadph_c": 1.0 + }, + "subsystem": "Oxidative Phosphorylation", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/THD2", + "http://identifiers.org/ec-code/1.6.1.1", + "http://identifiers.org/metanetx.reaction/MNXR104805" + ] + } + ] + } + }, + { + "id": "R_TKT1", + "name": "Transketolase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2935 or b2465", + "metabolites": { + "M_r5p_c": -1.0, + "M_xu5p__D_c": -1.0, + "M_g3p_c": 1.0, + "M_s7p_c": 1.0 + }, + "subsystem": "Pentose Phosphate Pathway", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/TKT1", + "http://identifiers.org/ec-code/2.2.1.1", + "http://identifiers.org/metanetx.reaction/MNXR104868" + ] + } + ] + } + }, + { + "id": "R_TKT2", + "name": "Transketolase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b2935 or b2465", + "metabolites": { + "M_e4p_c": -1.0, + "M_xu5p__D_c": -1.0, + "M_f6p_c": 1.0, + "M_g3p_c": 1.0 + }, + "subsystem": "Pentose Phosphate Pathway", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/TKT2", + "http://identifiers.org/biocyc/META:2TRANSKETO-RXN", + "http://identifiers.org/ec-code/2.2.1.1", + "http://identifiers.org/kegg.reaction/R01830", + "http://identifiers.org/metanetx.reaction/MNXR104869", + "http://identifiers.org/rhea/27626", + "http://identifiers.org/rhea/27627", + "http://identifiers.org/rhea/27628", + "http://identifiers.org/rhea/27629" + ] + } + ] + } + }, + { + "id": "R_TPI", + "name": "Triose-phosphate isomerase", + "lower_bound": -1000.0, + "upper_bound": 1000.0, + "gene_reaction_rule": "b3919", + "metabolites": { + "M_dhap_c": -1.0, + "M_g3p_c": 1.0 + }, + "subsystem": "Glycolysis/Gluconeogenesis", + "metadata": { + "sbo": "SBO:0000375", + "standardized": [ + { + "qualifier": "bqb_is", + "resources": [ + "http://identifiers.org/bigg.reaction/TPI", + "http://identifiers.org/biocyc/META:TRIOSEPISOMERIZATION-RXN", + "http://identifiers.org/ec-code/5.3.1.1", + "http://identifiers.org/kegg.reaction/R01015", + "http://identifiers.org/metanetx.reaction/MNXR104918", + "http://identifiers.org/rhea/18585", + "http://identifiers.org/rhea/18586", + "http://identifiers.org/rhea/18587", + "http://identifiers.org/rhea/18588" + ] + } + ] + } + } + ], + "genes": [ + { + "id": "G_b0351", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P77580"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0001207", + "http://identifiers.org/ecogene/EG13625", + "http://identifiers.org/ncbigene/945008", + "http://identifiers.org/ncbiprotein/16128336" + ] + } + ] + } + }, + { + "id": "G_b1241", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A9Q7"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0004164", + "http://identifiers.org/ecogene/EG10031", + "http://identifiers.org/ncbigene/945837", + "http://identifiers.org/ncbiprotein/16129202" + ] + } + ] + } + }, + { + "id": "G_s0001", + "name": "" + }, + { + "id": "G_b2296", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A6A3"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007579", + "http://identifiers.org/ecogene/EG10027", + "http://identifiers.org/ncbigene/946775", + "http://identifiers.org/ncbiprotein/16130231" + ] + } + ] + } + }, + { + "id": "G_b3115", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P11868"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0010245", + "http://identifiers.org/ecogene/EG11172", + "http://identifiers.org/ncbigene/947635", + "http://identifiers.org/ncbiprotein/145698313" + ] + } + ] + } + }, + { + "id": "G_b1849", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P33221"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0006162", + "http://identifiers.org/ecogene/EG11809", + "http://identifiers.org/ncbigene/946368", + "http://identifiers.org/ncbiprotein/16129802" + ] + } + ] + } + }, + { + "id": "G_b1276", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P25516"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0004283", + "http://identifiers.org/ecogene/EG11325", + "http://identifiers.org/ncbigene/946724", + "http://identifiers.org/ncbiprotein/16129237" + ] + } + ] + } + }, + { + "id": "G_b0118", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P36683"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0000411", + "http://identifiers.org/ecogene/EG12316", + "http://identifiers.org/ncbigene/944864", + "http://identifiers.org/ncbiprotein/16128111" + ] + } + ] + } + }, + { + "id": "G_b0474", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P69441"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0001645", + "http://identifiers.org/ecogene/EG10032", + "http://identifiers.org/ncbigene/945097", + "http://identifiers.org/ncbiprotein/16128458" + ] + } + ] + } + }, + { + "id": "G_b0726", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFG3"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002478", + "http://identifiers.org/ecogene/EG10979", + "http://identifiers.org/ncbigene/945303", + "http://identifiers.org/ncbiprotein/16128701" + ] + } + ] + } + }, + { + "id": "G_b0116", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A9P0"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0000404", + "http://identifiers.org/ecogene/EG10543", + "http://identifiers.org/ncbigene/944854", + "http://identifiers.org/ncbiprotein/16128109" + ] + } + ] + } + }, + { + "id": "G_b0727", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFG6"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002480", + "http://identifiers.org/ecogene/EG10980", + "http://identifiers.org/ncbigene/945307", + "http://identifiers.org/ncbiprotein/16128702" + ] + } + ] + } + }, + { + "id": "G_b2587", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AEX3"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0008515", + "http://identifiers.org/ecogene/EG10522", + "http://identifiers.org/ncbigene/947069", + "http://identifiers.org/ncbiprotein/16130512" + ] + } + ] + } + }, + { + "id": "G_b0356", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P25437"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0001221", + "http://identifiers.org/ecogene/EG50010", + "http://identifiers.org/ncbigene/944988", + "http://identifiers.org/ncbiprotein/16128341" + ] + } + ] + } + }, + { + "id": "G_b1478", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P39451"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0004928", + "http://identifiers.org/ecogene/EG12622", + "http://identifiers.org/ncbigene/946036", + "http://identifiers.org/ncbiprotein/90111280" + ] + } + ] + } + }, + { + "id": "G_b3736", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0ABA0"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012217", + "http://identifiers.org/ecogene/EG10103", + "http://identifiers.org/ncbigene/948247", + "http://identifiers.org/ncbiprotein/16131604" + ] + } + ] + } + }, + { + "id": "G_b3731", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A6E6"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012206", + "http://identifiers.org/ecogene/EG10100", + "http://identifiers.org/ncbigene/948245", + "http://identifiers.org/ncbiprotein/16131599" + ] + } + ] + } + }, + { + "id": "G_b3732", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0ABB4"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012208", + "http://identifiers.org/ecogene/EG10101", + "http://identifiers.org/ncbigene/948244", + "http://identifiers.org/ncbiprotein/16131600" + ] + } + ] + } + }, + { + "id": "G_b3737", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P68699"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012220", + "http://identifiers.org/ecogene/EG10102", + "http://identifiers.org/ncbigene/948253", + "http://identifiers.org/ncbiprotein/16131605" + ] + } + ] + } + }, + { + "id": "G_b3734", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0ABB0"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012213", + "http://identifiers.org/ecogene/EG10098", + "http://identifiers.org/ncbigene/948242", + "http://identifiers.org/ncbiprotein/16131602" + ] + } + ] + } + }, + { + "id": "G_b3735", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0ABA4"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012215", + "http://identifiers.org/ecogene/EG10105", + "http://identifiers.org/ncbigene/948254", + "http://identifiers.org/ncbiprotein/16131603" + ] + } + ] + } + }, + { + "id": "G_b3738", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AB98"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012222", + "http://identifiers.org/ecogene/EG10099", + "http://identifiers.org/ncbigene/948252", + "http://identifiers.org/ncbiprotein/16131606" + ] + } + ] + } + }, + { + "id": "G_b3739", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0ABC0"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012224", + "http://identifiers.org/ecogene/EG10106", + "http://identifiers.org/ncbigene/948251", + "http://identifiers.org/ncbiprotein/90111645" + ] + } + ] + } + }, + { + "id": "G_b3733", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0ABA6"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012211", + "http://identifiers.org/ecogene/EG10104", + "http://identifiers.org/ncbigene/948243", + "http://identifiers.org/ncbiprotein/16131601" + ] + } + ] + } + }, + { + "id": "G_b0720", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0ABH7"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002451", + "http://identifiers.org/ecogene/EG10402", + "http://identifiers.org/ncbigene/945323", + "http://identifiers.org/ncbiprotein/16128695" + ] + } + ] + } + }, + { + "id": "G_b0979", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P26458"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0003302", + "http://identifiers.org/ecogene/EG11379", + "http://identifiers.org/ncbigene/947547", + "http://identifiers.org/ncbiprotein/16128945" + ] + } + ] + } + }, + { + "id": "G_b0978", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P26459"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0003300", + "http://identifiers.org/ecogene/EG11380", + "http://identifiers.org/ncbigene/945585", + "http://identifiers.org/ncbiprotein/16128944" + ] + } + ] + } + }, + { + "id": "G_b0733", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0ABJ9"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002499", + "http://identifiers.org/ecogene/EG10173", + "http://identifiers.org/ncbigene/945341", + "http://identifiers.org/ncbiprotein/90111166" + ] + } + ] + } + }, + { + "id": "G_b0734", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0ABK2"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002501", + "http://identifiers.org/ecogene/EG10174", + "http://identifiers.org/ncbigene/945347", + "http://identifiers.org/ncbiprotein/16128709" + ] + } + ] + } + }, + { + "id": "G_b2975", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/Q46839"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0009763", + "http://identifiers.org/ecogene/EG12995", + "http://identifiers.org/ncbigene/947259", + "http://identifiers.org/ncbiprotein/16130875" + ] + } + ] + } + }, + { + "id": "G_b3603", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P33231"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0011777", + "http://identifiers.org/ecogene/EG11961", + "http://identifiers.org/ncbigene/948114", + "http://identifiers.org/ncbiprotein/16131474" + ] + } + ] + } + }, + { + "id": "G_b2779", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A6P9"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0009110", + "http://identifiers.org/ecogene/EG10258", + "http://identifiers.org/ncbigene/945032", + "http://identifiers.org/ncbiprotein/16130686" + ] + } + ] + } + }, + { + "id": "G_b2097", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A991"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0006941", + "http://identifiers.org/ecogene/EG14062", + "http://identifiers.org/ncbigene/946632", + "http://identifiers.org/ncbiprotein/90111385" + ] + } + ] + } + }, + { + "id": "G_b1773", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P77704"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005906", + "http://identifiers.org/ecogene/EG13485", + "http://identifiers.org/ncbigene/946291", + "http://identifiers.org/ncbiprotein/16129727" + ] + } + ] + } + }, + { + "id": "G_b2925", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AB71"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0009600", + "http://identifiers.org/ecogene/EG10282", + "http://identifiers.org/ncbigene/947415", + "http://identifiers.org/ncbiprotein/16130826" + ] + } + ] + } + }, + { + "id": "G_b4232", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A993"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013842", + "http://identifiers.org/ecogene/EG10283", + "http://identifiers.org/ncbigene/948753", + "http://identifiers.org/ncbiprotein/16132054" + ] + } + ] + } + }, + { + "id": "G_b3925", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A9C9"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012821", + "http://identifiers.org/ecogene/EG11517", + "http://identifiers.org/ncbigene/948424", + "http://identifiers.org/ncbiprotein/16131763" + ] + } + ] + } + }, + { + "id": "G_b2492", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P77733"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0008206", + "http://identifiers.org/ecogene/EG14220", + "http://identifiers.org/ncbigene/949032", + "http://identifiers.org/ncbiprotein/16130417" + ] + } + ] + } + }, + { + "id": "G_b0904", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AC23"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0003073", + "http://identifiers.org/ecogene/EG11258", + "http://identifiers.org/ncbigene/945513", + "http://identifiers.org/ncbiprotein/16128871" + ] + } + ] + } + }, + { + "id": "G_b4151", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A8Q3"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013595", + "http://identifiers.org/ecogene/EG10333", + "http://identifiers.org/ncbigene/948668", + "http://identifiers.org/ncbiprotein/16131976" + ] + } + ] + } + }, + { + "id": "G_b4152", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A8Q0"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013598", + "http://identifiers.org/ecogene/EG10332", + "http://identifiers.org/ncbigene/948680", + "http://identifiers.org/ncbiprotein/16131977" + ] + } + ] + } + }, + { + "id": "G_b4154", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P00363"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013604", + "http://identifiers.org/ecogene/EG10330", + "http://identifiers.org/ncbigene/948667", + "http://identifiers.org/ncbiprotein/16131979" + ] + } + ] + } + }, + { + "id": "G_b4153", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AC47"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013602", + "http://identifiers.org/ecogene/EG10331", + "http://identifiers.org/ncbigene/948666", + "http://identifiers.org/ncbiprotein/16131978" + ] + } + ] + } + }, + { + "id": "G_b2416", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P08839"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007967", + "http://identifiers.org/ecogene/EG10789", + "http://identifiers.org/ncbigene/946879", + "http://identifiers.org/ncbiprotein/16130342" + ] + } + ] + } + }, + { + "id": "G_b2415", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AA04"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007962", + "http://identifiers.org/ecogene/EG10788", + "http://identifiers.org/ncbigene/946886", + "http://identifiers.org/ncbiprotein/16130341" + ] + } + ] + } + }, + { + "id": "G_b1817", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P69797"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0006054", + "http://identifiers.org/ecogene/EG10567", + "http://identifiers.org/ncbigene/946334", + "http://identifiers.org/ncbiprotein/16129771" + ] + } + ] + } + }, + { + "id": "G_b1818", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P69801"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0006056", + "http://identifiers.org/ecogene/EG10568", + "http://identifiers.org/ncbigene/946332", + "http://identifiers.org/ncbiprotein/16129772" + ] + } + ] + } + }, + { + "id": "G_b1819", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P69805"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0006058", + "http://identifiers.org/ecogene/EG10569", + "http://identifiers.org/ncbigene/946342", + "http://identifiers.org/ncbiprotein/345452720" + ] + } + ] + } + }, + { + "id": "G_b1611", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P05042"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005380", + "http://identifiers.org/ecogene/EG10358", + "http://identifiers.org/ncbigene/946147", + "http://identifiers.org/ncbiprotein/16129569" + ] + } + ] + } + }, + { + "id": "G_b4122", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P14407"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013501", + "http://identifiers.org/ecogene/EG10357", + "http://identifiers.org/ncbigene/948642", + "http://identifiers.org/ncbiprotein/16131948" + ] + } + ] + } + }, + { + "id": "G_b1612", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AC33"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005392", + "http://identifiers.org/ecogene/EG10356", + "http://identifiers.org/ncbigene/946826", + "http://identifiers.org/ncbiprotein/16129570" + ] + } + ] + } + }, + { + "id": "G_b3528", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A830"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0011527", + "http://identifiers.org/ecogene/EG20044", + "http://identifiers.org/ncbigene/948039", + "http://identifiers.org/ncbiprotein/16131400" + ] + } + ] + } + }, + { + "id": "G_b1852", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AC53"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0006171", + "http://identifiers.org/ecogene/EG11221", + "http://identifiers.org/ncbigene/946370", + "http://identifiers.org/ncbiprotein/16129805" + ] + } + ] + } + }, + { + "id": "G_b1779", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A9B2"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005920", + "http://identifiers.org/ecogene/EG10367", + "http://identifiers.org/ncbigene/947679", + "http://identifiers.org/ncbiprotein/16129733" + ] + } + ] + } + }, + { + "id": "G_b1101", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P69786"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0003722", + "http://identifiers.org/ecogene/EG10787", + "http://identifiers.org/ncbigene/945651", + "http://identifiers.org/ncbiprotein/16129064" + ] + } + ] + } + }, + { + "id": "G_b2417", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P69783"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007971", + "http://identifiers.org/ecogene/EG10165", + "http://identifiers.org/ncbigene/946880", + "http://identifiers.org/ncbiprotein/16130343" + ] + } + ] + } + }, + { + "id": "G_b1621", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P19642"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005429", + "http://identifiers.org/ecogene/EG10563", + "http://identifiers.org/ncbigene/946009", + "http://identifiers.org/ncbiprotein/16129579" + ] + } + ] + } + }, + { + "id": "G_b1297", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P78061"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0004365", + "http://identifiers.org/ecogene/EG13908", + "http://identifiers.org/ncbigene/946202", + "http://identifiers.org/ncbiprotein/90111244" + ] + } + ] + } + }, + { + "id": "G_b3870", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A9C5"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012640", + "http://identifiers.org/ecogene/EG10383", + "http://identifiers.org/ncbigene/948370", + "http://identifiers.org/ncbiprotein/16131710" + ] + } + ] + } + }, + { + "id": "G_b0811", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AEQ3"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002771", + "http://identifiers.org/ecogene/EG10386", + "http://identifiers.org/ncbigene/944872", + "http://identifiers.org/ncbiprotein/16128779" + ] + } + ] + } + }, + { + "id": "G_b0810", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AEQ6"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002766", + "http://identifiers.org/ecogene/EG10388", + "http://identifiers.org/ncbigene/945621", + "http://identifiers.org/ncbiprotein/16128778" + ] + } + ] + } + }, + { + "id": "G_b0809", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P10346"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002764", + "http://identifiers.org/ecogene/EG10389", + "http://identifiers.org/ncbigene/945435", + "http://identifiers.org/ncbiprotein/16128777" + ] + } + ] + } + }, + { + "id": "G_b1761", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P00370"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005865", + "http://identifiers.org/ecogene/EG10372", + "http://identifiers.org/ncbigene/946802", + "http://identifiers.org/ncbiprotein/16129715" + ] + } + ] + } + }, + { + "id": "G_b0485", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P77454"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0001688", + "http://identifiers.org/ecogene/EG13247", + "http://identifiers.org/ncbigene/946187", + "http://identifiers.org/ncbiprotein/16128469" + ] + } + ] + } + }, + { + "id": "G_b1524", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A6W0"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005086", + "http://identifiers.org/ecogene/EG13816", + "http://identifiers.org/ncbigene/944973", + "http://identifiers.org/ncbiprotein/16129483" + ] + } + ] + } + }, + { + "id": "G_b1812", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P05041"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0006031", + "http://identifiers.org/ecogene/EG10683", + "http://identifiers.org/ncbigene/946337", + "http://identifiers.org/ncbiprotein/16129766" + ] + } + ] + } + }, + { + "id": "G_b3212", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P09831"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0010545", + "http://identifiers.org/ecogene/EG10403", + "http://identifiers.org/ncbigene/947724", + "http://identifiers.org/ncbiprotein/308209621" + ] + } + ] + } + }, + { + "id": "G_b3213", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P09832"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0010547", + "http://identifiers.org/ecogene/EG10404", + "http://identifiers.org/ncbigene/947723", + "http://identifiers.org/ncbiprotein/16131103" + ] + } + ] + } + }, + { + "id": "G_b4077", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P21345"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013357", + "http://identifiers.org/ecogene/EG10405", + "http://identifiers.org/ncbigene/948591", + "http://identifiers.org/ncbiprotein/16131903" + ] + } + ] + } + }, + { + "id": "G_b2029", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P00350"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0006737", + "http://identifiers.org/ecogene/EG10411", + "http://identifiers.org/ncbigene/946554", + "http://identifiers.org/ncbiprotein/16129970" + ] + } + ] + } + }, + { + "id": "G_b0875", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P60844"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002976", + "http://identifiers.org/ecogene/EG13270", + "http://identifiers.org/ncbigene/945497", + "http://identifiers.org/ncbiprotein/16128843" + ] + } + ] + } + }, + { + "id": "G_b1136", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P08200"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0003823", + "http://identifiers.org/ecogene/EG10489", + "http://identifiers.org/ncbigene/945702", + "http://identifiers.org/ncbiprotein/16129099" + ] + } + ] + } + }, + { + "id": "G_b4015", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A9G6"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013128", + "http://identifiers.org/ecogene/EG10022", + "http://identifiers.org/ncbigene/948517", + "http://identifiers.org/ncbiprotein/16131841" + ] + } + ] + } + }, + { + "id": "G_b2133", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P06149"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007048", + "http://identifiers.org/ecogene/EG10231", + "http://identifiers.org/ncbigene/946653", + "http://identifiers.org/ncbiprotein/16130071" + ] + } + ] + } + }, + { + "id": "G_b1380", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P52643"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0004619", + "http://identifiers.org/ecogene/EG13186", + "http://identifiers.org/ncbigene/946315", + "http://identifiers.org/ncbiprotein/16129341" + ] + } + ] + } + }, + { + "id": "G_b2976", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P37330"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0009767", + "http://identifiers.org/ecogene/EG20080", + "http://identifiers.org/ncbigene/948857", + "http://identifiers.org/ncbiprotein/16130876" + ] + } + ] + } + }, + { + "id": "G_b4014", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P08997"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013125", + "http://identifiers.org/ecogene/EG10023", + "http://identifiers.org/ncbigene/948512", + "http://identifiers.org/ncbiprotein/16131840" + ] + } + ] + } + }, + { + "id": "G_b3236", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P61889"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0010613", + "http://identifiers.org/ecogene/EG10576", + "http://identifiers.org/ncbigene/947854", + "http://identifiers.org/ncbiprotein/16131126" + ] + } + ] + } + }, + { + "id": "G_b1479", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P26616"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0004931", + "http://identifiers.org/ecogene/EG10948", + "http://identifiers.org/ncbigene/946031", + "http://identifiers.org/ncbiprotein/90111281" + ] + } + ] + } + }, + { + "id": "G_b2463", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P76558"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0008111", + "http://identifiers.org/ecogene/EG14193", + "http://identifiers.org/ncbigene/946947", + "http://identifiers.org/ncbiprotein/16130388" + ] + } + ] + } + }, + { + "id": "G_b2276", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFF0"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007526", + "http://identifiers.org/ecogene/EG12093", + "http://identifiers.org/ncbigene/945136", + "http://identifiers.org/ncbiprotein/145698289" + ] + } + ] + } + }, + { + "id": "G_b2279", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFE4"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007534", + "http://identifiers.org/ecogene/EG12091", + "http://identifiers.org/ncbigene/947580", + "http://identifiers.org/ncbiprotein/16130214" + ] + } + ] + } + }, + { + "id": "G_b2288", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFC3"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007553", + "http://identifiers.org/ecogene/EG12082", + "http://identifiers.org/ncbigene/946764", + "http://identifiers.org/ncbiprotein/49176207" + ] + } + ] + } + }, + { + "id": "G_b2278", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P33607"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007532", + "http://identifiers.org/ecogene/EG12092", + "http://identifiers.org/ncbigene/945540", + "http://identifiers.org/ncbiprotein/16130213" + ] + } + ] + } + }, + { + "id": "G_b2286", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P33599"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007549", + "http://identifiers.org/ecogene/EG12084", + "http://identifiers.org/ncbigene/946759", + "http://identifiers.org/ncbiprotein/145698291" + ] + } + ] + } + }, + { + "id": "G_b2285", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFD1"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007547", + "http://identifiers.org/ecogene/EG12086", + "http://identifiers.org/ncbigene/946746", + "http://identifiers.org/ncbiprotein/16130220" + ] + } + ] + } + }, + { + "id": "G_b2283", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P33602"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007543", + "http://identifiers.org/ecogene/EG12087", + "http://identifiers.org/ncbigene/946762", + "http://identifiers.org/ncbiprotein/145698290" + ] + } + ] + } + }, + { + "id": "G_b2287", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFC7"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007551", + "http://identifiers.org/ecogene/EG12083", + "http://identifiers.org/ncbigene/946738", + "http://identifiers.org/ncbiprotein/16130222" + ] + } + ] + } + }, + { + "id": "G_b2284", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P31979"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007545", + "http://identifiers.org/ecogene/EG11774", + "http://identifiers.org/ncbigene/946753", + "http://identifiers.org/ncbiprotein/16130219" + ] + } + ] + } + }, + { + "id": "G_b2281", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFD6"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007539", + "http://identifiers.org/ecogene/EG12089", + "http://identifiers.org/ncbigene/946757", + "http://identifiers.org/ncbiprotein/16130216" + ] + } + ] + } + }, + { + "id": "G_b2277", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFE8"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007529", + "http://identifiers.org/ecogene/EG11773", + "http://identifiers.org/ncbigene/947731", + "http://identifiers.org/ncbiprotein/16130212" + ] + } + ] + } + }, + { + "id": "G_b2282", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFD4"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007541", + "http://identifiers.org/ecogene/EG12088", + "http://identifiers.org/ncbigene/946761", + "http://identifiers.org/ncbiprotein/16130217" + ] + } + ] + } + }, + { + "id": "G_b2280", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFE0"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007536", + "http://identifiers.org/ecogene/EG12090", + "http://identifiers.org/ncbigene/946756", + "http://identifiers.org/ncbiprotein/16130215" + ] + } + ] + } + }, + { + "id": "G_b1603", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P07001"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005354", + "http://identifiers.org/ecogene/EG10744", + "http://identifiers.org/ncbigene/946628", + "http://identifiers.org/ncbiprotein/16129561" + ] + } + ] + } + }, + { + "id": "G_b1602", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AB67"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005352", + "http://identifiers.org/ecogene/EG10745", + "http://identifiers.org/ncbigene/946144", + "http://identifiers.org/ncbiprotein/16129560" + ] + } + ] + } + }, + { + "id": "G_b3962", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P27306"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012975", + "http://identifiers.org/ecogene/EG11428", + "http://identifiers.org/ncbigene/948461", + "http://identifiers.org/ncbiprotein/90111670" + ] + } + ] + } + }, + { + "id": "G_b0451", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P69681"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0001564", + "http://identifiers.org/ecogene/EG11821", + "http://identifiers.org/ncbigene/945084", + "http://identifiers.org/ncbiprotein/16128436" + ] + } + ] + } + }, + { + "id": "G_b0114", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFG8"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0000397", + "http://identifiers.org/ecogene/EG10024", + "http://identifiers.org/ncbigene/944834", + "http://identifiers.org/ncbiprotein/16128107" + ] + } + ] + } + }, + { + "id": "G_b0115", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P06959"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0000400", + "http://identifiers.org/ecogene/EG10025", + "http://identifiers.org/ncbigene/944794", + "http://identifiers.org/ncbiprotein/16128108" + ] + } + ] + } + }, + { + "id": "G_b1723", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P06999"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005748", + "http://identifiers.org/ecogene/EG10700", + "http://identifiers.org/ncbigene/946230", + "http://identifiers.org/ncbiprotein/49176138" + ] + } + ] + } + }, + { + "id": "G_b3916", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A796"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012789", + "http://identifiers.org/ecogene/EG10699", + "http://identifiers.org/ncbigene/948412", + "http://identifiers.org/ncbiprotein/16131754" + ] + } + ] + } + }, + { + "id": "G_b3114", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P42632"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0010242", + "http://identifiers.org/ecogene/EG12758", + "http://identifiers.org/ncbigene/947623", + "http://identifiers.org/ncbiprotein/49176316" + ] + } + ] + } + }, + { + "id": "G_b3952", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P32675"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012937", + "http://identifiers.org/ecogene/EG11911", + "http://identifiers.org/ncbigene/948453", + "http://identifiers.org/ncbiprotein/49176447" + ] + } + ] + } + }, + { + "id": "G_b3951", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P32674"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012934", + "http://identifiers.org/ecogene/EG11910", + "http://identifiers.org/ncbigene/948454", + "http://identifiers.org/ncbiprotein/16131789" + ] + } + ] + } + }, + { + "id": "G_b0902", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A9N4"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0003068", + "http://identifiers.org/ecogene/EG10028", + "http://identifiers.org/ncbigene/945517", + "http://identifiers.org/ncbiprotein/16128869" + ] + } + ] + } + }, + { + "id": "G_b0903", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P09373"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0003071", + "http://identifiers.org/ecogene/EG10701", + "http://identifiers.org/ncbigene/945514", + "http://identifiers.org/ncbiprotein/16128870" + ] + } + ] + } + }, + { + "id": "G_b2579", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P68066"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0008489", + "http://identifiers.org/ecogene/EG11784", + "http://identifiers.org/ncbigene/947068", + "http://identifiers.org/ncbiprotein/16130504" + ] + } + ] + } + }, + { + "id": "G_b4025", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A6T1"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013163", + "http://identifiers.org/ecogene/EG10702", + "http://identifiers.org/ncbigene/948535", + "http://identifiers.org/ncbiprotein/16131851" + ] + } + ] + } + }, + { + "id": "G_b2926", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A799"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0009605", + "http://identifiers.org/ecogene/EG10703", + "http://identifiers.org/ncbigene/947414", + "http://identifiers.org/ncbiprotein/16130827" + ] + } + ] + } + }, + { + "id": "G_b0767", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P52697"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002611", + "http://identifiers.org/ecogene/EG13231", + "http://identifiers.org/ncbigene/946398", + "http://identifiers.org/ncbiprotein/16128735" + ] + } + ] + } + }, + { + "id": "G_b0755", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P62707"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002563", + "http://identifiers.org/ecogene/EG11699", + "http://identifiers.org/ncbigene/945068", + "http://identifiers.org/ncbiprotein/16128723" + ] + } + ] + } + }, + { + "id": "G_b4395", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A7A2"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0014416", + "http://identifiers.org/ecogene/EG12164", + "http://identifiers.org/ncbigene/948918", + "http://identifiers.org/ncbiprotein/16132212" + ] + } + ] + } + }, + { + "id": "G_b3612", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P37689"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0011818", + "http://identifiers.org/ecogene/EG12296", + "http://identifiers.org/ncbigene/948130", + "http://identifiers.org/ncbiprotein/16131483" + ] + } + ] + } + }, + { + "id": "G_b2987", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P43676"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0009800", + "http://identifiers.org/ecogene/EG12883", + "http://identifiers.org/ncbigene/947475", + "http://identifiers.org/ncbiprotein/16130887" + ] + } + ] + } + }, + { + "id": "G_b3493", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AFJ7"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0011407", + "http://identifiers.org/ecogene/EG12230", + "http://identifiers.org/ncbigene/948009", + "http://identifiers.org/ncbiprotein/16131365" + ] + } + ] + } + }, + { + "id": "G_b3956", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P00864"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012950", + "http://identifiers.org/ecogene/EG10756", + "http://identifiers.org/ncbigene/948457", + "http://identifiers.org/ncbiprotein/16131794" + ] + } + ] + } + }, + { + "id": "G_b3403", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P22259"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0011106", + "http://identifiers.org/ecogene/EG10688", + "http://identifiers.org/ncbigene/945667", + "http://identifiers.org/ncbiprotein/16131280" + ] + } + ] + } + }, + { + "id": "G_b1702", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P23538"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005678", + "http://identifiers.org/ecogene/EG10759", + "http://identifiers.org/ncbigene/946209", + "http://identifiers.org/ncbiprotein/16129658" + ] + } + ] + } + }, + { + "id": "G_b2297", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A9M8"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0007582", + "http://identifiers.org/ecogene/EG20173", + "http://identifiers.org/ncbigene/946778", + "http://identifiers.org/ncbiprotein/16130232" + ] + } + ] + } + }, + { + "id": "G_b2458", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P77218"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0008097", + "http://identifiers.org/ecogene/EG14188", + "http://identifiers.org/ncbigene/946940", + "http://identifiers.org/ncbiprotein/16130383" + ] + } + ] + } + }, + { + "id": "G_b1676", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AD61"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0005600", + "http://identifiers.org/ecogene/EG10804", + "http://identifiers.org/ncbigene/946179", + "http://identifiers.org/ncbiprotein/16129632" + ] + } + ] + } + }, + { + "id": "G_b1854", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P21599"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0006182", + "http://identifiers.org/ecogene/EG10803", + "http://identifiers.org/ncbigene/946527", + "http://identifiers.org/ncbiprotein/16129807" + ] + } + ] + } + }, + { + "id": "G_b4301", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P39362"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0014097", + "http://identifiers.org/ecogene/EG12553", + "http://identifiers.org/ncbigene/948829", + "http://identifiers.org/ncbiprotein/16132122" + ] + } + ] + } + }, + { + "id": "G_b3386", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AG07"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0011061", + "http://identifiers.org/ecogene/EG11960", + "http://identifiers.org/ncbigene/947896", + "http://identifiers.org/ncbiprotein/16131264" + ] + } + ] + } + }, + { + "id": "G_b2914", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A7Z0"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0009567", + "http://identifiers.org/ecogene/EG11443", + "http://identifiers.org/ncbigene/947407", + "http://identifiers.org/ncbiprotein/16130815" + ] + } + ] + } + }, + { + "id": "G_b4090", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P37351"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0013405", + "http://identifiers.org/ecogene/EG11827", + "http://identifiers.org/ncbigene/948602", + "http://identifiers.org/ncbiprotein/16131916" + ] + } + ] + } + }, + { + "id": "G_b0723", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AC41"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002466", + "http://identifiers.org/ecogene/EG10931", + "http://identifiers.org/ncbigene/945402", + "http://identifiers.org/ncbiprotein/16128698" + ] + } + ] + } + }, + { + "id": "G_b0724", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P07014"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002468", + "http://identifiers.org/ecogene/EG10932", + "http://identifiers.org/ncbigene/945300", + "http://identifiers.org/ncbiprotein/16128699" + ] + } + ] + } + }, + { + "id": "G_b0722", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AC44"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002464", + "http://identifiers.org/ecogene/EG10934", + "http://identifiers.org/ncbigene/945322", + "http://identifiers.org/ncbiprotein/16128697" + ] + } + ] + } + }, + { + "id": "G_b0721", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P69054"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002460", + "http://identifiers.org/ecogene/EG10933", + "http://identifiers.org/ncbigene/945316", + "http://identifiers.org/ncbiprotein/16128696" + ] + } + ] + } + }, + { + "id": "G_b0729", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0AGE9"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002485", + "http://identifiers.org/ecogene/EG10982", + "http://identifiers.org/ncbigene/945314", + "http://identifiers.org/ncbiprotein/16128704" + ] + } + ] + } + }, + { + "id": "G_b0728", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A836"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0002483", + "http://identifiers.org/ecogene/EG10981", + "http://identifiers.org/ncbigene/945312", + "http://identifiers.org/ncbiprotein/16128703" + ] + } + ] + } + }, + { + "id": "G_b0008", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A870"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0000027", + "http://identifiers.org/ecogene/EG11556", + "http://identifiers.org/ncbigene/944748", + "http://identifiers.org/ncbiprotein/16128002" + ] + } + ] + } + }, + { + "id": "G_b2464", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A867"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0008115", + "http://identifiers.org/ecogene/EG11797", + "http://identifiers.org/ncbigene/947006", + "http://identifiers.org/ncbiprotein/16130389" + ] + } + ] + } + }, + { + "id": "G_b2935", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P27302"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0009625", + "http://identifiers.org/ecogene/EG11427", + "http://identifiers.org/ncbigene/947420", + "http://identifiers.org/ncbiprotein/49176286" + ] + } + ] + } + }, + { + "id": "G_b2465", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P33570"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0008117", + "http://identifiers.org/ecogene/EG12100", + "http://identifiers.org/ncbigene/945865", + "http://identifiers.org/ncbiprotein/16130390" + ] + } + ] + } + }, + { + "id": "G_b3919", + "name": "", + "metadata": { + "standardized": [ + { + "qualifier": "bqb_is", + "resources": ["http://identifiers.org/uniprot/P0A858"] + }, + { + "qualifier": "bqb_isEncodedBy", + "resources": [ + "http://identifiers.org/asap/ABE-0012799", + "http://identifiers.org/ecogene/EG11015", + "http://identifiers.org/ncbigene/948409", + "http://identifiers.org/ncbiprotein/16131757" + ] + } + ] + } + } + ], + "groups": [ + { + "id": "G_g1", + "members": [ + { + "idRef": "R_LDH_D", + "type": "Reaction" + }, + { + "idRef": "R_PFL", + "type": "Reaction" + }, + { + "idRef": "R_ACKr", + "type": "Reaction" + }, + { + "idRef": "R_PTAr", + "type": "Reaction" + }, + { + "idRef": "R_ACALD", + "type": "Reaction" + }, + { + "idRef": "R_ALCD2x", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Pyruvate Metabolism" + }, + { + "id": "G_g2", + "members": [ + { + "idRef": "R_PYRt2", + "type": "Reaction" + }, + { + "idRef": "R_H2Ot", + "type": "Reaction" + }, + { + "idRef": "R_GLCpts", + "type": "Reaction" + }, + { + "idRef": "R_MALt2_2", + "type": "Reaction" + }, + { + "idRef": "R_AKGt2r", + "type": "Reaction" + }, + { + "idRef": "R_FRUpts2", + "type": "Reaction" + }, + { + "idRef": "R_O2t", + "type": "Reaction" + }, + { + "idRef": "R_FORt2", + "type": "Reaction" + }, + { + "idRef": "R_FUMt2_2", + "type": "Reaction" + }, + { + "idRef": "R_GLNabc", + "type": "Reaction" + }, + { + "idRef": "R_ACALDt", + "type": "Reaction" + }, + { + "idRef": "R_GLUt2r", + "type": "Reaction" + }, + { + "idRef": "R_CO2t", + "type": "Reaction" + }, + { + "idRef": "R_SUCCt2_2", + "type": "Reaction" + }, + { + "idRef": "R_D_LACt2", + "type": "Reaction" + }, + { + "idRef": "R_FORt", + "type": "Reaction" + }, + { + "idRef": "R_ETOHt2r", + "type": "Reaction" + }, + { + "idRef": "R_ACt2r", + "type": "Reaction" + }, + { + "idRef": "R_SUCCt3", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Transport, Extracellular" + }, + { + "id": "G_g3", + "members": [ + { + "idRef": "R_MDH", + "type": "Reaction" + }, + { + "idRef": "R_AKGDH", + "type": "Reaction" + }, + { + "idRef": "R_SUCOAS", + "type": "Reaction" + }, + { + "idRef": "R_CS", + "type": "Reaction" + }, + { + "idRef": "R_FUM", + "type": "Reaction" + }, + { + "idRef": "R_ICDHyr", + "type": "Reaction" + }, + { + "idRef": "R_ACONTb", + "type": "Reaction" + }, + { + "idRef": "R_ACONTa", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Citric Acid Cycle" + }, + { + "id": "G_g4", + "members": [ + { + "idRef": "R_THD2", + "type": "Reaction" + }, + { + "idRef": "R_NADH16", + "type": "Reaction" + }, + { + "idRef": "R_ATPS4r", + "type": "Reaction" + }, + { + "idRef": "R_ADK1", + "type": "Reaction" + }, + { + "idRef": "R_SUCDi", + "type": "Reaction" + }, + { + "idRef": "R_CYTBD", + "type": "Reaction" + }, + { + "idRef": "R_NADTRHD", + "type": "Reaction" + }, + { + "idRef": "R_FRD7", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Oxidative Phosphorylation" + }, + { + "id": "G_g5", + "members": [ + { + "idRef": "R_ATPM", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Biomass and maintenance functions" + }, + { + "id": "G_g6", + "members": [ + { + "idRef": "R_PGM", + "type": "Reaction" + }, + { + "idRef": "R_PYK", + "type": "Reaction" + }, + { + "idRef": "R_FBP", + "type": "Reaction" + }, + { + "idRef": "R_FBA", + "type": "Reaction" + }, + { + "idRef": "R_GAPD", + "type": "Reaction" + }, + { + "idRef": "R_PGK", + "type": "Reaction" + }, + { + "idRef": "R_TPI", + "type": "Reaction" + }, + { + "idRef": "R_PGI", + "type": "Reaction" + }, + { + "idRef": "R_PDH", + "type": "Reaction" + }, + { + "idRef": "R_ENO", + "type": "Reaction" + }, + { + "idRef": "R_PFK", + "type": "Reaction" + }, + { + "idRef": "R_PPS", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Glycolysis/Gluconeogenesis" + }, + { + "id": "G_g7", + "members": [ + { + "idRef": "R_TKT2", + "type": "Reaction" + }, + { + "idRef": "R_PGL", + "type": "Reaction" + }, + { + "idRef": "R_RPE", + "type": "Reaction" + }, + { + "idRef": "R_RPI", + "type": "Reaction" + }, + { + "idRef": "R_TALA", + "type": "Reaction" + }, + { + "idRef": "R_TKT1", + "type": "Reaction" + }, + { + "idRef": "R_GND", + "type": "Reaction" + }, + { + "idRef": "R_G6PDH2r", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Pentose Phosphate Pathway" + }, + { + "id": "G_g8", + "members": [ + { + "idRef": "R_GLUN", + "type": "Reaction" + }, + { + "idRef": "R_GLNS", + "type": "Reaction" + }, + { + "idRef": "R_GLUSy", + "type": "Reaction" + }, + { + "idRef": "R_GLUDy", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Glutamate Metabolism" + }, + { + "id": "G_g9", + "members": [ + { + "idRef": "R_PPCK", + "type": "Reaction" + }, + { + "idRef": "R_ICL", + "type": "Reaction" + }, + { + "idRef": "R_MALS", + "type": "Reaction" + }, + { + "idRef": "R_ME1", + "type": "Reaction" + }, + { + "idRef": "R_ME2", + "type": "Reaction" + }, + { + "idRef": "R_PPC", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Anaplerotic reactions" + }, + { + "id": "G_g10", + "members": [ + { + "idRef": "R_NH4t", + "type": "Reaction" + }, + { + "idRef": "R_PIt2r", + "type": "Reaction" + } + ], + "kind": "partonomy", + "name": "Inorganic Ion Transport and Metabolism" + } + ], + "sbml_info": { + "model.id": "e_coli_core", + "level": 3, + "version": 1, + "creators": [], + "created": "", + "notes": {}, + "metadata": { + "sbo": "SBO:0000624" + }, + "packages": { + "fbc": 2, + "groups": 1 + }, + "info": " SBML L3V1, fbc-v2, groups-v1" + }, + "id": "e_coli_core", + "name": "Escherichia coli str. K-12 substr. MG1655", + "compartments": { + "c": "cytosol", + "e": "extracellular space" + }, + "notes": { + "For specific licensing terms about this particular model and regulations of commercial use, see\n this model in BiGG Models knowledge-base.", + "Redistribution and use of any part of this model from BiGG Models knowledge-base, with or without modification, are permitted provided that the following conditions are met": "
    \n
  1. Redistributions of this SBML file must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. \n
  3. Redistributions in a different form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided\n with the distribution.
  4. \n
This model is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.", + "This is a metabolism model of Escherichia coli str. K-12 substr. MG1655 in\n SBML\u00a0format." + }, + "metadata": { + "standardized": [ + { + "qualifier": "bqb_hasTaxon", + "resources": ["http://identifiers.org/taxonomy/511145"] + }, + { + "qualifier": "bqm_is", + "resources": ["http://identifiers.org/bigg.model/e_coli_core"] + }, + { + "qualifier": "bqm_isDescribedBy", + "resources": ["http://identifiers.org/doi/10.1128/ecosalplus.10.2.1"] + } + ] + }, + "version": "1" +} diff --git a/tests/data/example_notes.xml b/tests/data/example_notes.xml index 13fcdff15..ccbb3b9fd 100644 --- a/tests/data/example_notes.xml +++ b/tests/data/example_notes.xml @@ -46,7 +46,6 @@ - @@ -72,7 +71,6 @@ - diff --git a/tests/data/iJO1366.pickle b/tests/data/iJO1366.pickle index 3856b85be..14178f2a2 100644 Binary files a/tests/data/iJO1366.pickle and b/tests/data/iJO1366.pickle differ diff --git a/tests/data/mini.json b/tests/data/mini.json new file mode 100644 index 000000000..3ecf28e0d --- /dev/null +++ b/tests/data/mini.json @@ -0,0 +1,1641 @@ +{ + "compartments": { + "c": "cytosol", + "e": "extracellular" + }, + "genes": [ + { + "id": "G_b0755", + "name": "gpmA" + }, + { + "id": "G_b0875", + "name": "aqpZ" + }, + { + "id": "G_b1101", + "name": "ptsG" + }, + { + "id": "G_b1380", + "name": "ldhA" + }, + { + "id": "G_b1621", + "name": "malX" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/ncbiprotein/1208453", + "http://identifiers.org/ncbiprotein/1652654" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "id": "G_b1676", + "name": "pykF" + }, + { + "id": "G_b1723", + "name": "pfkB" + }, + { + "id": "G_b1773", + "name": "ydjI" + }, + { + "id": "G_b1779", + "name": "gapA" + }, + { + "id": "G_b1817", + "name": "manX" + }, + { + "id": "G_b1818", + "name": "manY" + }, + { + "id": "G_b1819", + "name": "manZ" + }, + { + "id": "G_b1854", + "name": "pykA" + }, + { + "id": "G_b2097", + "name": "fbaB" + }, + { + "id": "G_b2133", + "name": "dld" + }, + { + "id": "G_b2415", + "name": "ptsH" + }, + { + "id": "G_b2416", + "name": "ptsI" + }, + { + "id": "G_b2417", + "name": "crr" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/ncbiprotein/1653839" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "id": "G_b2779", + "name": "eno" + }, + { + "id": "G_b2925", + "name": "fbaA" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/ncbiprotein/1653609" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "id": "G_b2926", + "name": "pgk" + }, + { + "id": "G_b2987", + "name": "pitB" + }, + { + "id": "G_b3493", + "name": "pitA" + }, + { + "id": "G_b3612", + "name": "gpmM" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/ncbiprotein/1006614", + "http://identifiers.org/ncbiprotein/1651919" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "id": "G_b3916", + "name": "pfkA" + }, + { + "id": "G_b3919", + "name": "tpiA" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/ncbiprotein/1653253" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "id": "G_b4025", + "name": "pgi" + }, + { + "id": "G_b4395", + "name": "ytjC" + }, + { + "id": "G_s0001", + "name": "G_s0001" + } + ], + "groups": [], + "id": "mini_textbook", + "metabolites": [ + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/13dpg", + "http://identifiers.org/biocyc/DPG", + "http://identifiers.org/chebi/CHEBI:11881", + "http://identifiers.org/chebi/CHEBI:16001", + "http://identifiers.org/chebi/CHEBI:1658", + "http://identifiers.org/chebi/CHEBI:20189", + "http://identifiers.org/chebi/CHEBI:57604", + "http://identifiers.org/hmdb/HMDB01270", + "http://identifiers.org/kegg.compound/C00236", + "http://identifiers.org/pubchem.substance/3535", + "http://identifiers.org/reactome/REACT_29800", + "http://identifiers.org/seed.compound/cpd00203", + "http://identifiers.org/unipathway.compound/UPC00236" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -4, + "compartment": "c", + "formula": "C3H4O10P2", + "id": "M_13dpg_c", + "name": "3-Phospho-D-glyceroyl phosphate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/2pg", + "http://identifiers.org/biocyc/2-PG", + "http://identifiers.org/chebi/CHEBI:11651", + "http://identifiers.org/chebi/CHEBI:1267", + "http://identifiers.org/chebi/CHEBI:12986", + "http://identifiers.org/chebi/CHEBI:17835", + "http://identifiers.org/chebi/CHEBI:21028", + "http://identifiers.org/chebi/CHEBI:24344", + "http://identifiers.org/chebi/CHEBI:39868", + "http://identifiers.org/chebi/CHEBI:58289", + "http://identifiers.org/hmdb/HMDB00362", + "http://identifiers.org/hmdb/HMDB03391", + "http://identifiers.org/kegg.compound/C00631", + "http://identifiers.org/pubchem.substance/3904", + "http://identifiers.org/reactome/REACT_30485", + "http://identifiers.org/seed.compound/cpd00482", + "http://identifiers.org/unipathway.compound/UPC00631" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -3, + "compartment": "c", + "formula": "C3H4O7P", + "id": "M_2pg_c", + "name": "D-Glycerate 2-phosphate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/3pg", + "http://identifiers.org/biocyc/G3P", + "http://identifiers.org/chebi/CHEBI:11879", + "http://identifiers.org/chebi/CHEBI:11880", + "http://identifiers.org/chebi/CHEBI:11882", + "http://identifiers.org/chebi/CHEBI:12987", + "http://identifiers.org/chebi/CHEBI:1657", + "http://identifiers.org/chebi/CHEBI:1659", + "http://identifiers.org/chebi/CHEBI:17050", + "http://identifiers.org/chebi/CHEBI:17794", + "http://identifiers.org/chebi/CHEBI:21029", + "http://identifiers.org/chebi/CHEBI:24345", + "http://identifiers.org/chebi/CHEBI:40016", + "http://identifiers.org/chebi/CHEBI:57998", + "http://identifiers.org/chebi/CHEBI:58272", + "http://identifiers.org/hmdb/HMDB00807", + "http://identifiers.org/kegg.compound/C00197", + "http://identifiers.org/kegg.compound/C00597", + "http://identifiers.org/pubchem.substance/3497", + "http://identifiers.org/reactome/REACT_29728", + "http://identifiers.org/seed.compound/cpd00169", + "http://identifiers.org/unipathway.compound/UPC00197", + "http://identifiers.org/unipathway.compound/UPC00597" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -3, + "compartment": "c", + "formula": "C3H4O7P", + "id": "M_3pg_c", + "name": "3-Phospho-D-glycerate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/adp", + "http://identifiers.org/biocyc/ADP", + "http://identifiers.org/biocyc/ADP-GROUP", + "http://identifiers.org/cas/58-64-0", + "http://identifiers.org/cas/58-64-0", + "http://identifiers.org/chebi/CHEBI:13222", + "http://identifiers.org/chebi/CHEBI:16761", + "http://identifiers.org/chebi/CHEBI:22244", + "http://identifiers.org/chebi/CHEBI:2342", + "http://identifiers.org/chebi/CHEBI:40553", + "http://identifiers.org/chebi/CHEBI:456216", + "http://identifiers.org/hmdb/HMDB01341", + "http://identifiers.org/kegg.compound/C00008", + "http://identifiers.org/kegg.glycan/G11113", + "http://identifiers.org/pubchem.substance/3310", + "http://identifiers.org/reactome/REACT_113581", + "http://identifiers.org/reactome/REACT_113582", + "http://identifiers.org/reactome/REACT_114564", + "http://identifiers.org/reactome/REACT_114565", + "http://identifiers.org/reactome/REACT_190072", + "http://identifiers.org/reactome/REACT_196180", + "http://identifiers.org/reactome/REACT_211606", + "http://identifiers.org/reactome/REACT_29370", + "http://identifiers.org/reactome/REACT_429153", + "http://identifiers.org/reactome/REACT_429160", + "http://identifiers.org/reactome/REACT_481002", + "http://identifiers.org/seed.compound/cpd00008", + "http://identifiers.org/unipathway.compound/UPC00008" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -3, + "compartment": "c", + "formula": "C10H12N5O10P2", + "id": "M_adp_c", + "name": "ADP" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/atp", + "http://identifiers.org/biocyc/ATP", + "http://identifiers.org/cas/56-65-5", + "http://identifiers.org/cas/56-65-5", + "http://identifiers.org/chebi/CHEBI:10789", + "http://identifiers.org/chebi/CHEBI:10841", + "http://identifiers.org/chebi/CHEBI:13236", + "http://identifiers.org/chebi/CHEBI:15422", + "http://identifiers.org/chebi/CHEBI:22249", + "http://identifiers.org/chebi/CHEBI:2359", + "http://identifiers.org/chebi/CHEBI:30616", + "http://identifiers.org/chebi/CHEBI:40938", + "http://identifiers.org/chebi/CHEBI:57299", + "http://identifiers.org/hmdb/HMDB00538", + "http://identifiers.org/kegg.compound/C00002", + "http://identifiers.org/kegg.drug/D08646", + "http://identifiers.org/pubchem.substance/3304", + "http://identifiers.org/reactome/REACT_113592", + "http://identifiers.org/reactome/REACT_113593", + "http://identifiers.org/reactome/REACT_114570", + "http://identifiers.org/reactome/REACT_139836", + "http://identifiers.org/reactome/REACT_190078", + "http://identifiers.org/reactome/REACT_211579", + "http://identifiers.org/reactome/REACT_29358", + "http://identifiers.org/reactome/REACT_389573", + "http://identifiers.org/seed.compound/cpd00002", + "http://identifiers.org/unipathway.compound/UPC00002" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -4, + "compartment": "c", + "formula": "C10H12N5O13P3", + "id": "M_atp_c", + "name": "ATP" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/dhap", + "http://identifiers.org/biocyc/DIHYDROXY-ACETONE-PHOSPHATE", + "http://identifiers.org/cas/57-04-5", + "http://identifiers.org/cas/57-04-5", + "http://identifiers.org/chebi/CHEBI:14341", + "http://identifiers.org/chebi/CHEBI:14342", + "http://identifiers.org/chebi/CHEBI:16108", + "http://identifiers.org/chebi/CHEBI:24355", + "http://identifiers.org/chebi/CHEBI:39571", + "http://identifiers.org/chebi/CHEBI:5454", + "http://identifiers.org/chebi/CHEBI:57642", + "http://identifiers.org/hmdb/HMDB01473", + "http://identifiers.org/hmdb/HMDB11735", + "http://identifiers.org/kegg.compound/C00111", + "http://identifiers.org/pubchem.substance/3411", + "http://identifiers.org/reactome/REACT_188451", + "http://identifiers.org/reactome/REACT_390404", + "http://identifiers.org/reactome/REACT_75970", + "http://identifiers.org/seed.compound/cpd00095", + "http://identifiers.org/unipathway.compound/UPC00111" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -2, + "compartment": "c", + "formula": "C3H5O6P", + "id": "M_dhap_c", + "name": "Dihydroxyacetone phosphate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/f6p", + "http://identifiers.org/biocyc/FRUCTOSE-6P", + "http://identifiers.org/cas/643-13-0", + "http://identifiers.org/cas/643-13-0", + "http://identifiers.org/chebi/CHEBI:10375", + "http://identifiers.org/chebi/CHEBI:12352", + "http://identifiers.org/chebi/CHEBI:16084", + "http://identifiers.org/chebi/CHEBI:22768", + "http://identifiers.org/chebi/CHEBI:42378", + "http://identifiers.org/chebi/CHEBI:45804", + "http://identifiers.org/chebi/CHEBI:57634", + "http://identifiers.org/chebi/CHEBI:61527", + "http://identifiers.org/chebi/CHEBI:61553", + "http://identifiers.org/hmdb/HMDB03971", + "http://identifiers.org/kegg.compound/C00085", + "http://identifiers.org/kegg.compound/C05345", + "http://identifiers.org/pubchem.substance/3385", + "http://identifiers.org/seed.compound/cpd00072", + "http://identifiers.org/unipathway.compound/UPC00085", + "http://identifiers.org/unipathway.compound/UPC05345" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -2, + "compartment": "c", + "formula": "C6H11O9P", + "id": "M_f6p_c", + "name": "D-Fructose 6-phosphate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/fdp", + "http://identifiers.org/biocyc/FRUCTOSE-16-DIPHOSPHATE", + "http://identifiers.org/cas/488-69-7", + "http://identifiers.org/cas/488-69-7", + "http://identifiers.org/chebi/CHEBI:10374", + "http://identifiers.org/chebi/CHEBI:22767", + "http://identifiers.org/chebi/CHEBI:28013", + "http://identifiers.org/chebi/CHEBI:32966", + "http://identifiers.org/chebi/CHEBI:32967", + "http://identifiers.org/chebi/CHEBI:32968", + "http://identifiers.org/chebi/CHEBI:37736", + "http://identifiers.org/chebi/CHEBI:40591", + "http://identifiers.org/chebi/CHEBI:40595", + "http://identifiers.org/chebi/CHEBI:41014", + "http://identifiers.org/chebi/CHEBI:42553", + "http://identifiers.org/chebi/CHEBI:49299", + "http://identifiers.org/kegg.compound/C00354", + "http://identifiers.org/kegg.compound/C05378", + "http://identifiers.org/pubchem.substance/3647", + "http://identifiers.org/seed.compound/cpd00290", + "http://identifiers.org/unipathway.compound/UPC00354" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -4, + "compartment": "c", + "formula": "C6H10O12P2", + "id": "M_fdp_c", + "name": "D-Fructose 1,6-bisphosphate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/g3p", + "http://identifiers.org/cas/142-10-9", + "http://identifiers.org/cas/142-10-9", + "http://identifiers.org/chebi/CHEBI:14333", + "http://identifiers.org/chebi/CHEBI:17138", + "http://identifiers.org/chebi/CHEBI:5446", + "http://identifiers.org/chebi/CHEBI:58027", + "http://identifiers.org/hmdb/HMDB01112", + "http://identifiers.org/kegg.compound/C00118", + "http://identifiers.org/kegg.compound/C00661", + "http://identifiers.org/pubchem.substance/3930", + "http://identifiers.org/seed.compound/cpd00102", + "http://identifiers.org/unipathway.compound/UPC00118", + "http://identifiers.org/unipathway.compound/UPC00661" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -2, + "compartment": "c", + "formula": "C3H5O6P", + "id": "M_g3p_c", + "name": "Glyceraldehyde 3-phosphate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/g6p", + "http://identifiers.org/biocyc/D-glucose-6-phosphate", + "http://identifiers.org/biocyc/GLC-6-P", + "http://identifiers.org/cas/56-73-5", + "http://identifiers.org/cas/56-73-5", + "http://identifiers.org/chebi/CHEBI:10399", + "http://identifiers.org/chebi/CHEBI:12375", + "http://identifiers.org/chebi/CHEBI:17719", + "http://identifiers.org/chebi/CHEBI:22797", + "http://identifiers.org/chebi/CHEBI:41041", + "http://identifiers.org/chebi/CHEBI:4170", + "http://identifiers.org/chebi/CHEBI:58247", + "http://identifiers.org/chebi/CHEBI:61548", + "http://identifiers.org/hmdb/HMDB01401", + "http://identifiers.org/hmdb/HMDB01549", + "http://identifiers.org/hmdb/HMDB03498", + "http://identifiers.org/hmdb/HMDB06793", + "http://identifiers.org/kegg.compound/C00092", + "http://identifiers.org/kegg.compound/C01172", + "http://identifiers.org/pubchem.substance/3392", + "http://identifiers.org/reactome/REACT_1629756", + "http://identifiers.org/seed.compound/cpd00079", + "http://identifiers.org/unipathway.compound/UPC00092" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -2, + "compartment": "c", + "formula": "C6H11O9P", + "id": "M_g6p_c", + "name": "D-Glucose 6-phosphate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/glc__D", + "http://identifiers.org/cas/50-99-7", + "http://identifiers.org/cas/50-99-7", + "http://identifiers.org/kegg.compound/C00031", + "http://identifiers.org/pubchem.substance/3333" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": 0, + "compartment": "e", + "formula": "C6H12O6", + "id": "M_glc__D_e", + "name": "D-Glucose" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/h2o", + "http://identifiers.org/biocyc/OH", + "http://identifiers.org/biocyc/OXONIUM", + "http://identifiers.org/biocyc/WATER", + "http://identifiers.org/cas/7732-18-5", + "http://identifiers.org/cas/7732-18-5", + "http://identifiers.org/chebi/CHEBI:10743", + "http://identifiers.org/chebi/CHEBI:13352", + "http://identifiers.org/chebi/CHEBI:13365", + "http://identifiers.org/chebi/CHEBI:13419", + "http://identifiers.org/chebi/CHEBI:15377", + "http://identifiers.org/chebi/CHEBI:16234", + "http://identifiers.org/chebi/CHEBI:27313", + "http://identifiers.org/chebi/CHEBI:29356", + "http://identifiers.org/chebi/CHEBI:29373", + "http://identifiers.org/chebi/CHEBI:29374", + "http://identifiers.org/chebi/CHEBI:29375", + "http://identifiers.org/chebi/CHEBI:29412", + "http://identifiers.org/chebi/CHEBI:33811", + "http://identifiers.org/chebi/CHEBI:33813", + "http://identifiers.org/chebi/CHEBI:35511", + "http://identifiers.org/chebi/CHEBI:36385", + "http://identifiers.org/chebi/CHEBI:41979", + "http://identifiers.org/chebi/CHEBI:41981", + "http://identifiers.org/chebi/CHEBI:42043", + "http://identifiers.org/chebi/CHEBI:42857", + "http://identifiers.org/chebi/CHEBI:43228", + "http://identifiers.org/chebi/CHEBI:44292", + "http://identifiers.org/chebi/CHEBI:44641", + "http://identifiers.org/chebi/CHEBI:44701", + "http://identifiers.org/chebi/CHEBI:44819", + "http://identifiers.org/chebi/CHEBI:53442", + "http://identifiers.org/chebi/CHEBI:5585", + "http://identifiers.org/chebi/CHEBI:5594", + "http://identifiers.org/hmdb/HMDB01039", + "http://identifiers.org/hmdb/HMDB02111", + "http://identifiers.org/kegg.compound/C00001", + "http://identifiers.org/kegg.compound/C01328", + "http://identifiers.org/kegg.compound/C18712", + "http://identifiers.org/kegg.compound/C18714", + "http://identifiers.org/kegg.drug/D00001", + "http://identifiers.org/kegg.drug/D03703", + "http://identifiers.org/kegg.drug/D06322", + "http://identifiers.org/pubchem.substance/3303", + "http://identifiers.org/reactome/REACT_109276", + "http://identifiers.org/reactome/REACT_113518", + "http://identifiers.org/reactome/REACT_113519", + "http://identifiers.org/reactome/REACT_113521", + "http://identifiers.org/reactome/REACT_141343", + "http://identifiers.org/reactome/REACT_1605715", + "http://identifiers.org/reactome/REACT_189422", + "http://identifiers.org/reactome/REACT_2022884", + "http://identifiers.org/reactome/REACT_29356", + "http://identifiers.org/reactome/REACT_351603", + "http://identifiers.org/reactome/REACT_947593", + "http://identifiers.org/seed.compound/cpd00001", + "http://identifiers.org/seed.compound/cpd15275", + "http://identifiers.org/unipathway.compound/UPC00001", + "http://identifiers.org/unipathway.compound/UPC01328" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": 0, + "compartment": "c", + "formula": "H2O", + "id": "M_h2o_c", + "name": "H2O" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/h2o", + "http://identifiers.org/biocyc/OH", + "http://identifiers.org/biocyc/OXONIUM", + "http://identifiers.org/biocyc/WATER", + "http://identifiers.org/cas/7732-18-5", + "http://identifiers.org/cas/7732-18-5", + "http://identifiers.org/chebi/CHEBI:10743", + "http://identifiers.org/chebi/CHEBI:13352", + "http://identifiers.org/chebi/CHEBI:13365", + "http://identifiers.org/chebi/CHEBI:13419", + "http://identifiers.org/chebi/CHEBI:15377", + "http://identifiers.org/chebi/CHEBI:16234", + "http://identifiers.org/chebi/CHEBI:27313", + "http://identifiers.org/chebi/CHEBI:29356", + "http://identifiers.org/chebi/CHEBI:29373", + "http://identifiers.org/chebi/CHEBI:29374", + "http://identifiers.org/chebi/CHEBI:29375", + "http://identifiers.org/chebi/CHEBI:29412", + "http://identifiers.org/chebi/CHEBI:33811", + "http://identifiers.org/chebi/CHEBI:33813", + "http://identifiers.org/chebi/CHEBI:35511", + "http://identifiers.org/chebi/CHEBI:36385", + "http://identifiers.org/chebi/CHEBI:41979", + "http://identifiers.org/chebi/CHEBI:41981", + "http://identifiers.org/chebi/CHEBI:42043", + "http://identifiers.org/chebi/CHEBI:42857", + "http://identifiers.org/chebi/CHEBI:43228", + "http://identifiers.org/chebi/CHEBI:44292", + "http://identifiers.org/chebi/CHEBI:44641", + "http://identifiers.org/chebi/CHEBI:44701", + "http://identifiers.org/chebi/CHEBI:44819", + "http://identifiers.org/chebi/CHEBI:53442", + "http://identifiers.org/chebi/CHEBI:5585", + "http://identifiers.org/chebi/CHEBI:5594", + "http://identifiers.org/hmdb/HMDB01039", + "http://identifiers.org/hmdb/HMDB02111", + "http://identifiers.org/kegg.compound/C00001", + "http://identifiers.org/kegg.compound/C01328", + "http://identifiers.org/kegg.compound/C18712", + "http://identifiers.org/kegg.compound/C18714", + "http://identifiers.org/kegg.drug/D00001", + "http://identifiers.org/kegg.drug/D03703", + "http://identifiers.org/kegg.drug/D06322", + "http://identifiers.org/pubchem.substance/3303", + "http://identifiers.org/reactome/REACT_109276", + "http://identifiers.org/reactome/REACT_113518", + "http://identifiers.org/reactome/REACT_113519", + "http://identifiers.org/reactome/REACT_113521", + "http://identifiers.org/reactome/REACT_141343", + "http://identifiers.org/reactome/REACT_1605715", + "http://identifiers.org/reactome/REACT_189422", + "http://identifiers.org/reactome/REACT_2022884", + "http://identifiers.org/reactome/REACT_29356", + "http://identifiers.org/reactome/REACT_351603", + "http://identifiers.org/reactome/REACT_947593", + "http://identifiers.org/seed.compound/cpd00001", + "http://identifiers.org/seed.compound/cpd15275", + "http://identifiers.org/unipathway.compound/UPC00001", + "http://identifiers.org/unipathway.compound/UPC01328" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": 0, + "compartment": "e", + "formula": "H2O", + "id": "M_h2o_e", + "name": "H2O" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/h", + "http://identifiers.org/biocyc/PROTON", + "http://identifiers.org/cas/12408-02-5", + "http://identifiers.org/cas/12408-02-5", + "http://identifiers.org/chebi/CHEBI:10744", + "http://identifiers.org/chebi/CHEBI:13357", + "http://identifiers.org/chebi/CHEBI:15378", + "http://identifiers.org/chebi/CHEBI:24636", + "http://identifiers.org/chebi/CHEBI:5584", + "http://identifiers.org/kegg.compound/C00080", + "http://identifiers.org/pubchem.substance/3380", + "http://identifiers.org/reactome/REACT_113529", + "http://identifiers.org/reactome/REACT_1470067", + "http://identifiers.org/reactome/REACT_156540", + "http://identifiers.org/reactome/REACT_1614597", + "http://identifiers.org/reactome/REACT_163953", + "http://identifiers.org/reactome/REACT_193465", + "http://identifiers.org/reactome/REACT_194688", + "http://identifiers.org/reactome/REACT_2000349", + "http://identifiers.org/reactome/REACT_351626", + "http://identifiers.org/reactome/REACT_372511", + "http://identifiers.org/reactome/REACT_374900", + "http://identifiers.org/reactome/REACT_425969", + "http://identifiers.org/reactome/REACT_425978", + "http://identifiers.org/reactome/REACT_425999", + "http://identifiers.org/reactome/REACT_427899", + "http://identifiers.org/reactome/REACT_428040", + "http://identifiers.org/reactome/REACT_428548", + "http://identifiers.org/reactome/REACT_70106", + "http://identifiers.org/reactome/REACT_74722", + "http://identifiers.org/seed.compound/cpd00067", + "http://identifiers.org/unipathway.compound/UPC00080" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": 1, + "compartment": "c", + "formula": "H", + "id": "M_h_c", + "name": "H+" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/h", + "http://identifiers.org/biocyc/PROTON", + "http://identifiers.org/cas/12408-02-5", + "http://identifiers.org/cas/12408-02-5", + "http://identifiers.org/chebi/CHEBI:10744", + "http://identifiers.org/chebi/CHEBI:13357", + "http://identifiers.org/chebi/CHEBI:15378", + "http://identifiers.org/chebi/CHEBI:24636", + "http://identifiers.org/chebi/CHEBI:5584", + "http://identifiers.org/kegg.compound/C00080", + "http://identifiers.org/pubchem.substance/3380", + "http://identifiers.org/reactome/REACT_113529", + "http://identifiers.org/reactome/REACT_1470067", + "http://identifiers.org/reactome/REACT_156540", + "http://identifiers.org/reactome/REACT_1614597", + "http://identifiers.org/reactome/REACT_163953", + "http://identifiers.org/reactome/REACT_193465", + "http://identifiers.org/reactome/REACT_194688", + "http://identifiers.org/reactome/REACT_2000349", + "http://identifiers.org/reactome/REACT_351626", + "http://identifiers.org/reactome/REACT_372511", + "http://identifiers.org/reactome/REACT_374900", + "http://identifiers.org/reactome/REACT_425969", + "http://identifiers.org/reactome/REACT_425978", + "http://identifiers.org/reactome/REACT_425999", + "http://identifiers.org/reactome/REACT_427899", + "http://identifiers.org/reactome/REACT_428040", + "http://identifiers.org/reactome/REACT_428548", + "http://identifiers.org/reactome/REACT_70106", + "http://identifiers.org/reactome/REACT_74722", + "http://identifiers.org/seed.compound/cpd00067", + "http://identifiers.org/unipathway.compound/UPC00080" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": 1, + "compartment": "e", + "formula": "H", + "id": "M_h_e", + "name": "H+" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/lac__D", + "http://identifiers.org/biocyc/META:D-LACTATE", + "http://identifiers.org/chebi/CHEBI:11001", + "http://identifiers.org/chebi/CHEBI:16004", + "http://identifiers.org/chebi/CHEBI:18684", + "http://identifiers.org/chebi/CHEBI:341", + "http://identifiers.org/chebi/CHEBI:42105", + "http://identifiers.org/chebi/CHEBI:42111", + "http://identifiers.org/chebi/CHEBI:43701", + "http://identifiers.org/hmdb/HMDB00171", + "http://identifiers.org/hmdb/HMDB01311", + "http://identifiers.org/kegg.compound/C00256", + "http://identifiers.org/metanetx.chemical/MNXM285", + "http://identifiers.org/seed.compound/cpd00221" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -1, + "compartment": "c", + "formula": "C3H5O3", + "id": "M_lac__D_c", + "name": "D-Lactate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/lac__D", + "http://identifiers.org/biocyc/META:D-LACTATE", + "http://identifiers.org/chebi/CHEBI:11001", + "http://identifiers.org/chebi/CHEBI:16004", + "http://identifiers.org/chebi/CHEBI:18684", + "http://identifiers.org/chebi/CHEBI:341", + "http://identifiers.org/chebi/CHEBI:42105", + "http://identifiers.org/chebi/CHEBI:42111", + "http://identifiers.org/chebi/CHEBI:43701", + "http://identifiers.org/hmdb/HMDB00171", + "http://identifiers.org/hmdb/HMDB01311", + "http://identifiers.org/kegg.compound/C00256", + "http://identifiers.org/metanetx.chemical/MNXM285", + "http://identifiers.org/seed.compound/cpd00221" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -1, + "compartment": "e", + "formula": "C3H5O3", + "id": "M_lac__D_e", + "name": "D-Lactate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/nad", + "http://identifiers.org/biocyc/NAD", + "http://identifiers.org/cas/53-84-9", + "http://identifiers.org/cas/53-84-9", + "http://identifiers.org/chebi/CHEBI:13389", + "http://identifiers.org/chebi/CHEBI:13393", + "http://identifiers.org/chebi/CHEBI:13394", + "http://identifiers.org/chebi/CHEBI:15846", + "http://identifiers.org/chebi/CHEBI:21901", + "http://identifiers.org/chebi/CHEBI:44214", + "http://identifiers.org/chebi/CHEBI:44215", + "http://identifiers.org/chebi/CHEBI:44281", + "http://identifiers.org/chebi/CHEBI:57540", + "http://identifiers.org/chebi/CHEBI:7422", + "http://identifiers.org/hmdb/HMDB00902", + "http://identifiers.org/kegg.compound/C00003", + "http://identifiers.org/kegg.drug/D00002", + "http://identifiers.org/pubchem.substance/3305", + "http://identifiers.org/reactome/REACT_113526", + "http://identifiers.org/reactome/REACT_192307", + "http://identifiers.org/reactome/REACT_194653", + "http://identifiers.org/reactome/REACT_29360", + "http://identifiers.org/reactome/REACT_427523", + "http://identifiers.org/seed.compound/cpd00003", + "http://identifiers.org/unipathway.compound/UPC00003" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -1, + "compartment": "c", + "formula": "C21H26N7O14P2", + "id": "M_nad_c", + "name": "Nicotinamide adenine dinucleotide" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/nadh", + "http://identifiers.org/biocyc/NADH", + "http://identifiers.org/cas/58-68-4", + "http://identifiers.org/cas/58-68-4", + "http://identifiers.org/chebi/CHEBI:13395", + "http://identifiers.org/chebi/CHEBI:13396", + "http://identifiers.org/chebi/CHEBI:16908", + "http://identifiers.org/chebi/CHEBI:21902", + "http://identifiers.org/chebi/CHEBI:44216", + "http://identifiers.org/chebi/CHEBI:57945", + "http://identifiers.org/chebi/CHEBI:7423", + "http://identifiers.org/hmdb/HMDB01487", + "http://identifiers.org/kegg.compound/C00004", + "http://identifiers.org/pubchem.substance/3306", + "http://identifiers.org/reactome/REACT_192305", + "http://identifiers.org/reactome/REACT_194697", + "http://identifiers.org/reactome/REACT_29362", + "http://identifiers.org/reactome/REACT_73473", + "http://identifiers.org/seed.compound/cpd00004", + "http://identifiers.org/unipathway.compound/UPC00004" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -2, + "compartment": "c", + "formula": "C21H27N7O14P2", + "id": "M_nadh_c", + "name": "Nicotinamide adenine dinucleotide - reduced" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/pep", + "http://identifiers.org/biocyc/PHOSPHO-ENOL-PYRUVATE", + "http://identifiers.org/cas/138-08-9", + "http://identifiers.org/cas/138-08-9", + "http://identifiers.org/chebi/CHEBI:14812", + "http://identifiers.org/chebi/CHEBI:18021", + "http://identifiers.org/chebi/CHEBI:26054", + "http://identifiers.org/chebi/CHEBI:26055", + "http://identifiers.org/chebi/CHEBI:44894", + "http://identifiers.org/chebi/CHEBI:44897", + "http://identifiers.org/chebi/CHEBI:58702", + "http://identifiers.org/chebi/CHEBI:8147", + "http://identifiers.org/hmdb/HMDB00263", + "http://identifiers.org/kegg.compound/C00074", + "http://identifiers.org/pubchem.substance/3374", + "http://identifiers.org/reactome/REACT_29492", + "http://identifiers.org/reactome/REACT_372364", + "http://identifiers.org/seed.compound/cpd00061", + "http://identifiers.org/unipathway.compound/UPC00074" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -3, + "compartment": "c", + "formula": "C3H2O6P", + "id": "M_pep_c", + "name": "Phosphoenolpyruvate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/pi", + "http://identifiers.org/biocyc/CPD0-1421", + "http://identifiers.org/biocyc/PHOSPHATE-GROUP", + "http://identifiers.org/biocyc/Pi", + "http://identifiers.org/cas/14265-44-2", + "http://identifiers.org/cas/14265-44-2", + "http://identifiers.org/chebi/CHEBI:14791", + "http://identifiers.org/chebi/CHEBI:18367", + "http://identifiers.org/chebi/CHEBI:24838", + "http://identifiers.org/chebi/CHEBI:26020", + "http://identifiers.org/chebi/CHEBI:26078", + "http://identifiers.org/chebi/CHEBI:29137", + "http://identifiers.org/chebi/CHEBI:29139", + "http://identifiers.org/chebi/CHEBI:32596", + "http://identifiers.org/chebi/CHEBI:32597", + "http://identifiers.org/chebi/CHEBI:34683", + "http://identifiers.org/chebi/CHEBI:34855", + "http://identifiers.org/chebi/CHEBI:35433", + "http://identifiers.org/chebi/CHEBI:37583", + "http://identifiers.org/chebi/CHEBI:37585", + "http://identifiers.org/chebi/CHEBI:39739", + "http://identifiers.org/chebi/CHEBI:39745", + "http://identifiers.org/chebi/CHEBI:43470", + "http://identifiers.org/chebi/CHEBI:43474", + "http://identifiers.org/chebi/CHEBI:4496", + "http://identifiers.org/chebi/CHEBI:45024", + "http://identifiers.org/chebi/CHEBI:63036", + "http://identifiers.org/chebi/CHEBI:63051", + "http://identifiers.org/chebi/CHEBI:7793", + "http://identifiers.org/chebi/CHEBI:9679", + "http://identifiers.org/hmdb/HMDB02142", + "http://identifiers.org/kegg.compound/C00009", + "http://identifiers.org/kegg.compound/C13556", + "http://identifiers.org/kegg.compound/C13558", + "http://identifiers.org/kegg.drug/D05467", + "http://identifiers.org/pubchem.substance/3311", + "http://identifiers.org/reactome/REACT_109277", + "http://identifiers.org/reactome/REACT_113548", + "http://identifiers.org/reactome/REACT_113550", + "http://identifiers.org/reactome/REACT_113551", + "http://identifiers.org/reactome/REACT_2255331", + "http://identifiers.org/reactome/REACT_29372", + "http://identifiers.org/reactome/REACT_947590", + "http://identifiers.org/seed.compound/cpd00009", + "http://identifiers.org/seed.compound/cpd09463", + "http://identifiers.org/seed.compound/cpd09464", + "http://identifiers.org/unipathway.compound/UPC00009" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -2, + "compartment": "c", + "formula": "HO4P", + "id": "M_pi_c", + "name": "Phosphate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/pi", + "http://identifiers.org/biocyc/CPD0-1421", + "http://identifiers.org/biocyc/PHOSPHATE-GROUP", + "http://identifiers.org/biocyc/Pi", + "http://identifiers.org/cas/14265-44-2", + "http://identifiers.org/cas/14265-44-2", + "http://identifiers.org/chebi/CHEBI:14791", + "http://identifiers.org/chebi/CHEBI:18367", + "http://identifiers.org/chebi/CHEBI:24838", + "http://identifiers.org/chebi/CHEBI:26020", + "http://identifiers.org/chebi/CHEBI:26078", + "http://identifiers.org/chebi/CHEBI:29137", + "http://identifiers.org/chebi/CHEBI:29139", + "http://identifiers.org/chebi/CHEBI:32596", + "http://identifiers.org/chebi/CHEBI:32597", + "http://identifiers.org/chebi/CHEBI:34683", + "http://identifiers.org/chebi/CHEBI:34855", + "http://identifiers.org/chebi/CHEBI:35433", + "http://identifiers.org/chebi/CHEBI:37583", + "http://identifiers.org/chebi/CHEBI:37585", + "http://identifiers.org/chebi/CHEBI:39739", + "http://identifiers.org/chebi/CHEBI:39745", + "http://identifiers.org/chebi/CHEBI:43470", + "http://identifiers.org/chebi/CHEBI:43474", + "http://identifiers.org/chebi/CHEBI:4496", + "http://identifiers.org/chebi/CHEBI:45024", + "http://identifiers.org/chebi/CHEBI:63036", + "http://identifiers.org/chebi/CHEBI:63051", + "http://identifiers.org/chebi/CHEBI:7793", + "http://identifiers.org/chebi/CHEBI:9679", + "http://identifiers.org/hmdb/HMDB02142", + "http://identifiers.org/kegg.compound/C00009", + "http://identifiers.org/kegg.compound/C13556", + "http://identifiers.org/kegg.compound/C13558", + "http://identifiers.org/kegg.drug/D05467", + "http://identifiers.org/pubchem.substance/3311", + "http://identifiers.org/reactome/REACT_109277", + "http://identifiers.org/reactome/REACT_113548", + "http://identifiers.org/reactome/REACT_113550", + "http://identifiers.org/reactome/REACT_113551", + "http://identifiers.org/reactome/REACT_2255331", + "http://identifiers.org/reactome/REACT_29372", + "http://identifiers.org/reactome/REACT_947590", + "http://identifiers.org/seed.compound/cpd00009", + "http://identifiers.org/seed.compound/cpd09463", + "http://identifiers.org/seed.compound/cpd09464", + "http://identifiers.org/unipathway.compound/UPC00009" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -2, + "compartment": "e", + "formula": "HO4P", + "id": "M_pi_e", + "name": "Phosphate" + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.metabolite/pyr", + "http://identifiers.org/biocyc/PYRUVATE", + "http://identifiers.org/cas/127-17-3", + "http://identifiers.org/cas/127-17-3", + "http://identifiers.org/chebi/CHEBI:14987", + "http://identifiers.org/chebi/CHEBI:15361", + "http://identifiers.org/chebi/CHEBI:26462", + "http://identifiers.org/chebi/CHEBI:26466", + "http://identifiers.org/chebi/CHEBI:32816", + "http://identifiers.org/chebi/CHEBI:45253", + "http://identifiers.org/chebi/CHEBI:8685", + "http://identifiers.org/hmdb/HMDB00243", + "http://identifiers.org/kegg.compound/C00022", + "http://identifiers.org/lipidmaps/LMFA01060077", + "http://identifiers.org/pubchem.substance/3324", + "http://identifiers.org/reactome/REACT_113557", + "http://identifiers.org/reactome/REACT_29398", + "http://identifiers.org/reactome/REACT_389680", + "http://identifiers.org/seed.compound/cpd00020", + "http://identifiers.org/unipathway.compound/UPC00022" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "charge": -1, + "compartment": "c", + "formula": "C3H3O3", + "id": "M_pyr_c", + "name": "Pyruvate" + } + ], + "reactions": [ + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/ATPM" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "", + "id": "R_ATPM", + "lower_bound": 8.39, + "metabolites": { + "M_adp_c": 1.0, + "M_atp_c": -1.0, + "M_h2o_c": -1.0, + "M_h_c": 1.0, + "M_pi_c": 1.0 + }, + "name": "ATP maintenance requirement", + "objective_coefficient": 1.0, + "upper_bound": 1000.0 + }, + { + "gene_reaction_rule": "", + "id": "R_D_LACt2", + "lower_bound": -1000.0, + "metabolites": {}, + "name": "", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/ENO" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b2779", + "id": "R_ENO", + "lower_bound": -1000.0, + "metabolites": { + "M_2pg_c": -1.0, + "M_h2o_c": 1.0, + "M_pep_c": 1.0 + }, + "name": "enolase", + "upper_bound": 1000.0 + }, + { + "annotation": { + "sbo": "SBO:0000627", + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/glc" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "", + "id": "R_EX_glc__D_e", + "lower_bound": -10.0, + "metabolites": { + "M_glc__D_e": -1.0 + }, + "name": "D-Glucose exchange", + "upper_bound": 1000.0 + }, + { + "annotation": { + "sbo": "SBO:0000627", + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/h" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "", + "id": "R_EX_h_e", + "lower_bound": -1000.0, + "metabolites": { + "M_h_e": -1.0 + }, + "name": "H+ exchange", + "upper_bound": 1000.0 + }, + { + "annotation": { + "sbo": "SBO:0000627", + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/lac__D" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "", + "id": "R_EX_lac__D_e", + "lower_bound": 0.0, + "metabolites": { + "M_lac__D_e": -1.0 + }, + "name": "D-lactate exchange", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/FBA" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b1773 or b2097 or b2925", + "id": "R_FBA", + "lower_bound": -1000.0, + "metabolites": { + "M_dhap_c": 1.0, + "M_fdp_c": -1.0, + "M_g3p_c": 1.0 + }, + "name": "fructose-bisphosphate aldolase", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/GAPD" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b1779", + "id": "R_GAPD", + "lower_bound": -1000.0, + "metabolites": { + "M_13dpg_c": 1.0, + "M_g3p_c": -1.0, + "M_h_c": 1.0, + "M_nad_c": -1.0, + "M_nadh_c": 1.0, + "M_pi_c": -1.0 + }, + "name": "glyceraldehyde-3-phosphate dehydrogenase", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/GLCpts" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "(b2415 and b2417 and b1101 and b2416) or (b2415 and b2417 and b1621 and b2416) or (b2415 and b1818 and b1817 and b1819 and b2416)", + "id": "R_GLCpts", + "lower_bound": 0.0, + "metabolites": { + "M_g6p_c": 1.0, + "M_glc__D_e": -1.0, + "M_pep_c": -1.0, + "M_pyr_c": 1.0 + }, + "name": "D-glucose transport via PEP:Pyr PTS", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/H2Ot" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b0875 or s0001", + "id": "R_H2Ot", + "lower_bound": -1000.0, + "metabolites": { + "M_h2o_c": 1.0, + "M_h2o_e": -1.0 + }, + "name": "R H2O transport via - diffusion", + "upper_bound": 1000.0 + }, + { + "annotation": { + "sbo": "SBO:0000375", + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/LDH_D", + "http://identifiers.org/biocyc/META:DLACTDEHYDROGNAD-RXN", + "http://identifiers.org/ec-code/1.1.1.28", + "http://identifiers.org/kegg.reaction/R00704", + "http://identifiers.org/metanetx.reaction/MNXR101037", + "http://identifiers.org/rhea/16369", + "http://identifiers.org/rhea/16370", + "http://identifiers.org/rhea/16371", + "http://identifiers.org/rhea/16372" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b2133 or b1380", + "id": "R_LDH_D", + "lower_bound": -1000.0, + "metabolites": { + "M_h_c": 1.0, + "M_lac__D_c": -1.0, + "M_nad_c": -1.0, + "M_nadh_c": 1.0, + "M_pyr_c": 1.0 + }, + "name": "D-lactate dehydrogenase", + "subsystem": "Pyruvate Metabolism", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/PFK" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b3916 or b1723", + "id": "R_PFK", + "lower_bound": 0.0, + "metabolites": { + "M_adp_c": 1.0, + "M_atp_c": -1.0, + "M_f6p_c": -1.0, + "M_fdp_c": 1.0, + "M_h_c": 1.0 + }, + "name": "phosphofructokinase", + "objective_coefficient": 1.0, + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/PGI" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b4025", + "id": "R_PGI", + "lower_bound": -1000.0, + "metabolites": { + "M_f6p_c": 1.0, + "M_g6p_c": -1.0 + }, + "name": "glucose-6-phosphate isomerase", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/PGK" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b2926", + "id": "R_PGK", + "lower_bound": -1000.0, + "metabolites": { + "M_13dpg_c": 1.0, + "M_3pg_c": -1.0, + "M_adp_c": 1.0, + "M_atp_c": -1.0 + }, + "name": "phosphoglycerate kinase", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/PGM" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b4395 or b3612 or b0755", + "id": "R_PGM", + "lower_bound": -1000.0, + "metabolites": { + "M_2pg_c": -1.0, + "M_3pg_c": 1.0 + }, + "name": "phosphoglycerate mutase", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/PIt2r" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b2987 or b3493", + "id": "R_PIt2r", + "lower_bound": -1000.0, + "metabolites": { + "M_h_c": 1.0, + "M_h_e": -1.0, + "M_pi_c": 1.0, + "M_pi_e": -1.0 + }, + "name": "R phosphate reversible transport via - symport", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/PYK" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b1854 or b1676", + "id": "R_PYK", + "lower_bound": 0.0, + "metabolites": { + "M_adp_c": -1.0, + "M_atp_c": 1.0, + "M_h_c": -1.0, + "M_pep_c": -1.0, + "M_pyr_c": 1.0 + }, + "name": "pyruvate kinase", + "upper_bound": 1000.0 + }, + { + "annotation": { + "standardized": [ + { + "external_resources": { + "resources": [ + "http://identifiers.org/bigg.reaction/TPI" + ] + }, + "qualifier": "bqb_is" + } + ] + }, + "gene_reaction_rule": "b3919", + "id": "R_TPI", + "lower_bound": -1000.0, + "metabolites": { + "M_dhap_c": -1.0, + "M_g3p_c": 1.0 + }, + "name": "triose-phosphate isomerase", + "upper_bound": 1000.0 + } + ], + "version": "1" +} diff --git a/tests/data/mini.pickle b/tests/data/mini.pickle index b0e0f1f40..4f0b9355e 100644 Binary files a/tests/data/mini.pickle and b/tests/data/mini.pickle differ diff --git a/tests/data/mini_cobra.xml b/tests/data/mini_cobra.xml index bc0d31f38..fea4da98b 100644 --- a/tests/data/mini_cobra.xml +++ b/tests/data/mini_cobra.xml @@ -21,19 +21,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -46,23 +46,23 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -75,29 +75,29 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -110,33 +110,33 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -149,32 +149,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -187,25 +187,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -218,25 +218,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -249,26 +249,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -281,19 +281,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -306,28 +306,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -340,10 +340,10 @@ - - - - + + + + @@ -356,64 +356,64 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -426,64 +426,64 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -496,37 +496,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -539,37 +539,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -582,20 +582,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -608,20 +608,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -634,30 +634,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -670,25 +670,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -701,24 +701,24 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -731,52 +731,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -789,52 +789,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -847,25 +847,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -889,7 +889,7 @@ - + @@ -905,14 +905,14 @@ - + - + @@ -935,7 +935,7 @@ - + @@ -951,7 +951,7 @@ - + @@ -967,7 +967,7 @@ - + @@ -983,7 +983,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1036,7 +1036,7 @@ - + @@ -1080,7 +1080,7 @@ - + @@ -1105,15 +1105,15 @@ - - - - - - - - - + + + + + + + + + @@ -1141,7 +1141,7 @@ - + @@ -1169,7 +1169,7 @@ - + @@ -1191,7 +1191,7 @@ - + @@ -1215,7 +1215,7 @@ - + @@ -1241,7 +1241,7 @@ - + @@ -1268,7 +1268,7 @@ - + @@ -1296,7 +1296,7 @@ - + @@ -1322,97 +1322,97 @@ - - - - - + + + + + - - + + - - - - - - - - - - - - + + + + + + + + + + + + - + - + - + - - - + + + - - + + - + - + - - + +
diff --git a/tests/data/mini_fbc2.xml b/tests/data/mini_fbc2.xml index bc0d31f38..fea4da98b 100644 --- a/tests/data/mini_fbc2.xml +++ b/tests/data/mini_fbc2.xml @@ -21,19 +21,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -46,23 +46,23 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -75,29 +75,29 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -110,33 +110,33 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -149,32 +149,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -187,25 +187,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -218,25 +218,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -249,26 +249,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -281,19 +281,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -306,28 +306,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -340,10 +340,10 @@ - - - - + + + + @@ -356,64 +356,64 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -426,64 +426,64 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -496,37 +496,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -539,37 +539,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -582,20 +582,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -608,20 +608,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -634,30 +634,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -670,25 +670,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -701,24 +701,24 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -731,52 +731,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -789,52 +789,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -847,25 +847,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -889,7 +889,7 @@ - + @@ -905,14 +905,14 @@ - + - + @@ -935,7 +935,7 @@ - + @@ -951,7 +951,7 @@ - + @@ -967,7 +967,7 @@ - + @@ -983,7 +983,7 @@ - + @@ -1010,7 +1010,7 @@ - + @@ -1036,7 +1036,7 @@ - + @@ -1080,7 +1080,7 @@ - + @@ -1105,15 +1105,15 @@ - - - - - - - - - + + + + + + + + + @@ -1141,7 +1141,7 @@ - + @@ -1169,7 +1169,7 @@ - + @@ -1191,7 +1191,7 @@ - + @@ -1215,7 +1215,7 @@ - + @@ -1241,7 +1241,7 @@ - + @@ -1268,7 +1268,7 @@ - + @@ -1296,7 +1296,7 @@ - + @@ -1322,97 +1322,97 @@ - - - - - + + + + + - - + + - - - - - - - - - - - - + + + + + + + + + + + + - + - + - + - - - + + + - - + + - + - + - - + + diff --git a/tests/data/mini_fbc2.xml.bz2 b/tests/data/mini_fbc2.xml.bz2 index 73cc7b9e0..ac2b19cf1 100644 Binary files a/tests/data/mini_fbc2.xml.bz2 and b/tests/data/mini_fbc2.xml.bz2 differ diff --git a/tests/data/mini_fbc2.xml.gz b/tests/data/mini_fbc2.xml.gz index 569cd4ffe..651a743f0 100644 Binary files a/tests/data/mini_fbc2.xml.gz and b/tests/data/mini_fbc2.xml.gz differ diff --git a/tests/data/mini_fbc3.xml b/tests/data/mini_fbc3.xml new file mode 100644 index 000000000..0cbf9dfed --- /dev/null +++ b/tests/data/mini_fbc3.xml @@ -0,0 +1,1436 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/mini_fbc3.xml.bz2 b/tests/data/mini_fbc3.xml.bz2 new file mode 100644 index 000000000..7cf72b0b4 Binary files /dev/null and b/tests/data/mini_fbc3.xml.bz2 differ diff --git a/tests/data/mini_fbc3.xml.gz b/tests/data/mini_fbc3.xml.gz new file mode 100644 index 000000000..fa678321c Binary files /dev/null and b/tests/data/mini_fbc3.xml.gz differ diff --git a/tests/data/mini_wrong_key_caps.mat b/tests/data/mini_wrong_key_caps.mat index 017c0c53c..49177ea78 100644 Binary files a/tests/data/mini_wrong_key_caps.mat and b/tests/data/mini_wrong_key_caps.mat differ diff --git a/tests/data/raven.pickle b/tests/data/raven.pickle index 8d4b59859..264c3a1fa 100644 Binary files a/tests/data/raven.pickle and b/tests/data/raven.pickle differ diff --git a/tests/data/salmonella.pickle b/tests/data/salmonella.pickle index 1f355d41c..c1fda9792 100644 Binary files a/tests/data/salmonella.pickle and b/tests/data/salmonella.pickle differ diff --git a/tests/data/salmonella_old.pickle b/tests/data/salmonella_old.pickle new file mode 100644 index 000000000..33b1e8f7a Binary files /dev/null and b/tests/data/salmonella_old.pickle differ diff --git a/tests/data/textbook_fva.json b/tests/data/textbook_fva.json index 84f685f75..5c5dc7fe7 100644 --- a/tests/data/textbook_fva.json +++ b/tests/data/textbook_fva.json @@ -1 +1 @@ -{"maximum": {"ACALD": 0.0, "ACALDt": 0.0, "ACKr": 0.0, "ACONTa": 6.00725, "ACONTb": 6.00725, "ACt2r": 0.0, "ADK1": -0.0, "AKGDH": 5.06438, "AKGt2r": 0.0, "ALCD2x": 0.0, "ATPM": 8.39, "ATPS4r": 45.51401, "Biomass_Ecoli_core": 0.87392, "CO2t": -22.80983, "CS": 6.00725, "CYTBD": 43.59899, "D_LACt2": 0.0, "ENO": 14.71614, "ETOHt2r": 0.0, "EX_ac_e": -0.0, "EX_acald_e": -0.0, "EX_akg_e": -0.0, "EX_co2_e": 22.80983, "EX_etoh_e": -0.0, "EX_for_e": -0.0, "EX_fru_e": -0.0, "EX_fum_e": 0.0, "EX_glc__D_e": -10.0, "EX_gln__L_e": 0.0, "EX_glu__L_e": -0.0, "EX_h_e": 17.53087, "EX_h2o_e": 29.17583, "EX_lac__D_e": -0.0, "EX_mal__L_e": -0.0, "EX_nh4_e": -4.76532, "EX_o2_e": -21.79949, "EX_pi_e": -3.2149, "EX_pyr_e": -0.0, "EX_succ_e": -0.0, "FBA": 7.47738, "FBP": -0.0, "FORt2": -0.0, "FORti": -0.0, "FRD7": 994.93562, "FRUpts2": 0.0, "FUM": 5.06438, "FUMt2_2": 0.0, "G6PDH2r": 4.95998, "GAPD": 16.02353, "GLCpts": 10.0, "GLNS": 0.22346, "GLNabc": 0.0, "GLUDy": -4.54186, "GLUN": -0.0, "GLUSy": -0.0, "GLUt2r": 0.0, "GND": 4.95998, "H2Ot": -29.17583, "ICDHyr": 6.00725, "ICL": -0.0, "LDH_D": 0.0, "MALS": -0.0, "MALt2_2": 0.0, "MDH": 5.06438, "ME1": -0.0, "ME2": -0.0, "NADH16": 38.53461, "NADTRHD": -0.0, "NH4t": 4.76532, "O2t": 21.79949, "PDH": 9.28253, "PFK": 7.47738, "PFL": -0.0, "PGI": 4.86086, "PGK": -16.02353, "PGL": 4.95998, "PGM": -14.71614, "PIt2r": 3.2149, "PPC": 2.50431, "PPCK": -0.0, "PPS": -0.0, "PTAr": -0.0, "PYK": 1.75818, "PYRt2": 0.0, "RPE": 2.67848, "RPI": -2.2815, "SUCCt2_2": -0.0, "SUCCt3": -0.0, "SUCDi": 1000.0, "SUCOAS": -5.06438, "TALA": 1.49698, "THD2": -0.0, "TKT1": 1.49698, "TKT2": 1.1815, "TPI": 7.47738}, "minimum": {"ACALD": 0.0, "ACALDt": 0.0, "ACKr": 0.0, "ACONTa": 6.00725, "ACONTb": 6.00725, "ACt2r": 0.0, "ADK1": 0.0, "AKGDH": 5.06438, "AKGt2r": 0.0, "ALCD2x": 0.0, "ATPM": 8.39, "ATPS4r": 45.51401, "Biomass_Ecoli_core": 0.87392, "CO2t": -22.80983, "CS": 6.00725, "CYTBD": 43.59899, "D_LACt2": 0.0, "ENO": 14.71614, "ETOHt2r": 0.0, "EX_ac_e": 0.0, "EX_acald_e": 0.0, "EX_akg_e": 0.0, "EX_co2_e": 22.80983, "EX_etoh_e": 0.0, "EX_for_e": 0.0, "EX_fru_e": 0.0, "EX_fum_e": 0.0, "EX_glc__D_e": -10.0, "EX_gln__L_e": 0.0, "EX_glu__L_e": 0.0, "EX_h_e": 17.53087, "EX_h2o_e": 29.17583, "EX_lac__D_e": 0.0, "EX_mal__L_e": 0.0, "EX_nh4_e": -4.76532, "EX_o2_e": -21.79949, "EX_pi_e": -3.2149, "EX_pyr_e": 0.0, "EX_succ_e": 0.0, "FBA": 7.47738, "FBP": 0.0, "FORt2": 0.0, "FORti": 0.0, "FRD7": 0.0, "FRUpts2": 0.0, "FUM": 5.06438, "FUMt2_2": 0.0, "G6PDH2r": 4.95998, "GAPD": 16.02353, "GLCpts": 10.0, "GLNS": 0.22346, "GLNabc": 0.0, "GLUDy": -4.54186, "GLUN": 0.0, "GLUSy": 0.0, "GLUt2r": 0.0, "GND": 4.95998, "H2Ot": -29.17583, "ICDHyr": 6.00725, "ICL": 0.0, "LDH_D": 0.0, "MALS": 0.0, "MALt2_2": 0.0, "MDH": 5.06438, "ME1": 0.0, "ME2": 0.0, "NADH16": 38.53461, "NADTRHD": 0.0, "NH4t": 4.76532, "O2t": 21.79949, "PDH": 9.28253, "PFK": 7.47738, "PFL": 0.0, "PGI": 4.86086, "PGK": -16.02353, "PGL": 4.95998, "PGM": -14.71614, "PIt2r": 3.2149, "PPC": 2.50431, "PPCK": 0.0, "PPS": 0.0, "PTAr": 0.0, "PYK": 1.75818, "PYRt2": 0.0, "RPE": 2.67848, "RPI": -2.2815, "SUCCt2_2": 0.0, "SUCCt3": 0.0, "SUCDi": 5.06438, "SUCOAS": -5.06438, "TALA": 1.49698, "THD2": 0.0, "TKT1": 1.49698, "TKT2": 1.1815, "TPI": 7.47738}} \ No newline at end of file +{"maximum": {"ACALD": 0.0, "ACALDt": 0.0, "ACKr": 0.0, "ACONTa": 6.00725, "ACONTb": 6.00725, "ACt2r": 0.0, "ADK1": 0.0, "AKGDH": 5.06438, "AKGt2r": 0.0, "ALCD2x": 0.0, "ATPM": 8.39, "ATPS4r": 45.51401, "Biomass_Ecoli_core": 0.87392, "CO2t": -22.80983, "CS": 6.00725, "CYTBD": 43.59899, "D_LACt2": 0.0, "ENO": 14.71614, "ETOHt2r": 0.0, "EX_ac_e": 0.0, "EX_acald_e": 0.0, "EX_akg_e": 0.0, "EX_co2_e": 22.80983, "EX_etoh_e": 0.0, "EX_for_e": 0.0, "EX_fru_e": 0.0, "EX_fum_e": 0.0, "EX_glc__D_e": -10.0, "EX_gln__L_e": 0.0, "EX_glu__L_e": 0.0, "EX_h_e": 17.53087, "EX_h2o_e": 29.17583, "EX_lac__D_e": 0.0, "EX_mal__L_e": 0.0, "EX_nh4_e": -4.76532, "EX_o2_e": -21.79949, "EX_pi_e": -3.2149, "EX_pyr_e": 0.0, "EX_succ_e": 0.0, "FBA": 7.47738, "FBP": 0.0, "FORt2": 0.0, "FORti": 0.0, "FRD7": 994.93562, "FRUpts2": 0.0, "FUM": 5.06438, "FUMt2_2": 0.0, "G6PDH2r": 4.95998, "GAPD": 16.02353, "GLCpts": 10.0, "GLNS": 0.22346, "GLNabc": 0.0, "GLUDy": -4.54186, "GLUN": 0.0, "GLUSy": 0.0, "GLUt2r": 0.0, "GND": 4.95998, "H2Ot": -29.17583, "ICDHyr": 6.00725, "ICL": 0.0, "LDH_D": 0.0, "MALS": 0.0, "MALt2_2": 0.0, "MDH": 5.06438, "ME1": 0.0, "ME2": 0.0, "NADH16": 38.53461, "NADTRHD": 0.0, "NH4t": 4.76532, "O2t": 21.79949, "PDH": 9.28253, "PFK": 7.47738, "PFL": 0.0, "PGI": 4.86086, "PGK": -16.02353, "PGL": 4.95998, "PGM": -14.71614, "PIt2r": 3.2149, "PPC": 2.50431, "PPCK": 0.0, "PPS": 0.0, "PTAr": 0.0, "PYK": 1.75818, "PYRt2": 0.0, "RPE": 2.67848, "RPI": -2.2815, "SUCCt2_2": 0.0, "SUCCt3": 0.0, "SUCDi": 1000.0, "SUCOAS": -5.06438, "TALA": 1.49698, "THD2": 0.0, "TKT1": 1.49698, "TKT2": 1.1815, "TPI": 7.47738}, "minimum": {"ACALD": -0.0, "ACALDt": -0.0, "ACKr": -0.0, "ACONTa": 6.00725, "ACONTb": 6.00725, "ACt2r": -0.0, "ADK1": 0.0, "AKGDH": 5.06438, "AKGt2r": -0.0, "ALCD2x": -0.0, "ATPM": 8.39, "ATPS4r": 45.51401, "Biomass_Ecoli_core": 0.87392, "CO2t": -22.80983, "CS": 6.00725, "CYTBD": 43.59899, "D_LACt2": -0.0, "ENO": 14.71614, "ETOHt2r": -0.0, "EX_ac_e": 0.0, "EX_acald_e": 0.0, "EX_akg_e": 0.0, "EX_co2_e": 22.80983, "EX_etoh_e": 0.0, "EX_for_e": 0.0, "EX_fru_e": 0.0, "EX_fum_e": 0.0, "EX_glc__D_e": -10.0, "EX_gln__L_e": 0.0, "EX_glu__L_e": 0.0, "EX_h_e": 17.53087, "EX_h2o_e": 29.17583, "EX_lac__D_e": 0.0, "EX_mal__L_e": 0.0, "EX_nh4_e": -4.76532, "EX_o2_e": -21.79949, "EX_pi_e": -3.2149, "EX_pyr_e": 0.0, "EX_succ_e": 0.0, "FBA": 7.47738, "FBP": 0.0, "FORt2": 0.0, "FORti": 0.0, "FRD7": 0.0, "FRUpts2": -0.0, "FUM": 5.06438, "FUMt2_2": -0.0, "G6PDH2r": 4.95998, "GAPD": 16.02353, "GLCpts": 10.0, "GLNS": 0.22346, "GLNabc": -0.0, "GLUDy": -4.54186, "GLUN": 0.0, "GLUSy": 0.0, "GLUt2r": -0.0, "GND": 4.95998, "H2Ot": -29.17583, "ICDHyr": 6.00725, "ICL": 0.0, "LDH_D": -0.0, "MALS": 0.0, "MALt2_2": 0.0, "MDH": 5.06438, "ME1": 0.0, "ME2": 0.0, "NADH16": 38.53461, "NADTRHD": 0.0, "NH4t": 4.76532, "O2t": 21.79949, "PDH": 9.28253, "PFK": 7.47738, "PFL": 0.0, "PGI": 4.86086, "PGK": -16.02353, "PGL": 4.95998, "PGM": -14.71614, "PIt2r": 3.2149, "PPC": 2.50431, "PPCK": 0.0, "PPS": 0.0, "PTAr": 0.0, "PYK": 1.75818, "PYRt2": -0.0, "RPE": 2.67848, "RPI": -2.2815, "SUCCt2_2": -0.0, "SUCCt3": 0.0, "SUCDi": 5.06438, "SUCOAS": -5.06438, "TALA": 1.49698, "THD2": 0.0, "TKT1": 1.49698, "TKT2": 1.1815, "TPI": 7.47738}} \ No newline at end of file diff --git a/tests/data/textbook_pfba_fva.json b/tests/data/textbook_pfba_fva.json index 09633dd87..5eeaff2ae 100644 --- a/tests/data/textbook_pfba_fva.json +++ b/tests/data/textbook_pfba_fva.json @@ -1 +1 @@ -{"maximum": {"ACALD": 0.0, "ACALDt": 0.0, "ACKr": 0.0, "ACONTa": 6.00725, "ACONTb": 6.00725, "ACt2r": 0.0, "ADK1": 0.0, "AKGDH": 5.06438, "AKGt2r": 0.0, "ALCD2x": 0.0, "ATPM": 8.39, "ATPS4r": 45.51401, "Biomass_Ecoli_core": 0.87392, "CO2t": -22.80983, "CS": 6.00725, "CYTBD": 43.59899, "D_LACt2": 0.0, "ENO": 14.71614, "ETOHt2r": 0.0, "EX_ac_e": 0.0, "EX_acald_e": 0.0, "EX_akg_e": 0.0, "EX_co2_e": 22.80983, "EX_etoh_e": 0.0, "EX_for_e": 0.0, "EX_fru_e": 0.0, "EX_fum_e": 0.0, "EX_glc__D_e": -10.0, "EX_gln__L_e": 0.0, "EX_glu__L_e": 0.0, "EX_h_e": 17.53087, "EX_h2o_e": 29.17583, "EX_lac__D_e": 0.0, "EX_mal__L_e": 0.0, "EX_nh4_e": -4.76532, "EX_o2_e": -21.79949, "EX_pi_e": -3.2149, "EX_pyr_e": 0.0, "EX_succ_e": 0.0, "FBA": 7.47738, "FBP": 0.0, "FORt2": 0.0, "FORti": 0.0, "FRD7": 25.9211, "FRUpts2": 0.0, "FUM": 5.06438, "FUMt2_2": 0.0, "G6PDH2r": 4.95998, "GAPD": 16.02353, "GLCpts": 10.0, "GLNS": 0.22346, "GLNabc": 0.0, "GLUDy": -4.54186, "GLUN": 0.0, "GLUSy": 0.0, "GLUt2r": 0.0, "GND": 4.95998, "H2Ot": -29.17583, "ICDHyr": 6.00725, "ICL": 0.0, "LDH_D": 0.0, "MALS": 0.0, "MALt2_2": 0.0, "MDH": 5.06438, "ME1": 0.0, "ME2": 0.0, "NADH16": 38.53461, "NADTRHD": 0.0, "NH4t": 4.76532, "O2t": 21.79949, "PDH": 9.28253, "PFK": 7.47738, "PFL": 0.0, "PGI": 4.86086, "PGK": -16.02353, "PGL": 4.95998, "PGM": -14.71614, "PIt2r": 3.2149, "PPC": 2.50431, "PPCK": 0.0, "PPS": 0.0, "PTAr": 0.0, "PYK": 1.75818, "PYRt2": 0.0, "RPE": 2.67848, "RPI": -2.2815, "SUCCt2_2": 0.0, "SUCCt3": 0.0, "SUCDi": 30.98548, "SUCOAS": -5.06438, "TALA": 1.49698, "THD2": 0.0, "TKT1": 1.49698, "TKT2": 1.1815, "TPI": 7.47738}, "minimum": {"ACALD": 0.0, "ACALDt": 0.0, "ACKr": 0.0, "ACONTa": 6.00725, "ACONTb": 6.00725, "ACt2r": 0.0, "ADK1": 0.0, "AKGDH": 5.06438, "AKGt2r": 0.0, "ALCD2x": 0.0, "ATPM": 8.39, "ATPS4r": 45.51401, "Biomass_Ecoli_core": 0.87392, "CO2t": -22.80983, "CS": 6.00725, "CYTBD": 43.59899, "D_LACt2": 0.0, "ENO": 14.71614, "ETOHt2r": 0.0, "EX_ac_e": 0.0, "EX_acald_e": 0.0, "EX_akg_e": 0.0, "EX_co2_e": 22.80983, "EX_etoh_e": 0.0, "EX_for_e": 0.0, "EX_fru_e": 0.0, "EX_fum_e": 0.0, "EX_glc__D_e": -10.0, "EX_gln__L_e": 0.0, "EX_glu__L_e": 0.0, "EX_h_e": 17.53087, "EX_h2o_e": 29.17583, "EX_lac__D_e": 0.0, "EX_mal__L_e": 0.0, "EX_nh4_e": -4.76532, "EX_o2_e": -21.79949, "EX_pi_e": -3.2149, "EX_pyr_e": 0.0, "EX_succ_e": 0.0, "FBA": 7.47738, "FBP": 0.0, "FORt2": 0.0, "FORti": 0.0, "FRD7": 0.0, "FRUpts2": 0.0, "FUM": 5.06438, "FUMt2_2": 0.0, "G6PDH2r": 4.95998, "GAPD": 16.02353, "GLCpts": 10.0, "GLNS": 0.22346, "GLNabc": 0.0, "GLUDy": -4.54186, "GLUN": 0.0, "GLUSy": 0.0, "GLUt2r": 0.0, "GND": 4.95998, "H2Ot": -29.17583, "ICDHyr": 6.00725, "ICL": 0.0, "LDH_D": 0.0, "MALS": 0.0, "MALt2_2": 0.0, "MDH": 5.06438, "ME1": 0.0, "ME2": 0.0, "NADH16": 38.53461, "NADTRHD": 0.0, "NH4t": 4.76532, "O2t": 21.79949, "PDH": 9.28253, "PFK": 7.47738, "PFL": 0.0, "PGI": 4.86086, "PGK": -16.02353, "PGL": 4.95998, "PGM": -14.71614, "PIt2r": 3.2149, "PPC": 2.50431, "PPCK": 0.0, "PPS": 0.0, "PTAr": 0.0, "PYK": 1.75818, "PYRt2": 0.0, "RPE": 2.67848, "RPI": -2.2815, "SUCCt2_2": 0.0, "SUCCt3": 0.0, "SUCDi": 5.06438, "SUCOAS": -5.06438, "TALA": 1.49698, "THD2": 0.0, "TKT1": 1.49698, "TKT2": 1.1815, "TPI": 7.47738}} \ No newline at end of file +{"maximum": {"ACALD": 0.0, "ACALDt": 0.0, "ACKr": 0.0, "ACONTa": 6.00725, "ACONTb": 6.00725, "ACt2r": 0.0, "ADK1": -0.0, "AKGDH": 5.06438, "AKGt2r": 0.0, "ALCD2x": 0.0, "ATPM": 8.39, "ATPS4r": 45.51401, "Biomass_Ecoli_core": 0.87392, "CO2t": -22.80983, "CS": 6.00725, "CYTBD": 43.59899, "D_LACt2": 0.0, "ENO": 14.71614, "ETOHt2r": 0.0, "EX_ac_e": -0.0, "EX_acald_e": -0.0, "EX_akg_e": -0.0, "EX_co2_e": 22.80983, "EX_etoh_e": -0.0, "EX_for_e": -0.0, "EX_fru_e": 0.0, "EX_fum_e": -0.0, "EX_glc__D_e": -10.0, "EX_gln__L_e": -0.0, "EX_glu__L_e": 0.0, "EX_h_e": 17.53087, "EX_h2o_e": 29.17583, "EX_lac__D_e": -0.0, "EX_mal__L_e": 0.0, "EX_nh4_e": -4.76532, "EX_o2_e": -21.79949, "EX_pi_e": -3.2149, "EX_pyr_e": -0.0, "EX_succ_e": 0.0, "FBA": 7.47738, "FBP": -0.0, "FORt2": -0.0, "FORti": -0.0, "FRD7": 25.9211, "FRUpts2": 0.0, "FUM": 5.06438, "FUMt2_2": 0.0, "G6PDH2r": 4.95998, "GAPD": 16.02353, "GLCpts": 10.0, "GLNS": 0.22346, "GLNabc": 0.0, "GLUDy": -4.54186, "GLUN": -0.0, "GLUSy": -0.0, "GLUt2r": 0.0, "GND": 4.95998, "H2Ot": -29.17583, "ICDHyr": 6.00725, "ICL": -0.0, "LDH_D": 0.0, "MALS": 0.0, "MALt2_2": 0.0, "MDH": 5.06438, "ME1": -0.0, "ME2": -0.0, "NADH16": 38.53461, "NADTRHD": -0.0, "NH4t": 4.76532, "O2t": 21.79949, "PDH": 9.28253, "PFK": 7.47738, "PFL": -0.0, "PGI": 4.86086, "PGK": -16.02353, "PGL": 4.95998, "PGM": -14.71614, "PIt2r": 3.2149, "PPC": 2.50431, "PPCK": -0.0, "PPS": -0.0, "PTAr": -0.0, "PYK": 1.75818, "PYRt2": 0.0, "RPE": 2.67848, "RPI": -2.2815, "SUCCt2_2": -0.0, "SUCCt3": -0.0, "SUCDi": 30.98548, "SUCOAS": -5.06438, "TALA": 1.49698, "THD2": -0.0, "TKT1": 1.49698, "TKT2": 1.1815, "TPI": 7.47738}, "minimum": {"ACALD": 0.0, "ACALDt": 0.0, "ACKr": 0.0, "ACONTa": 6.00725, "ACONTb": 6.00725, "ACt2r": 0.0, "ADK1": 0.0, "AKGDH": 5.06438, "AKGt2r": 0.0, "ALCD2x": 0.0, "ATPM": 8.39, "ATPS4r": 45.51401, "Biomass_Ecoli_core": 0.87392, "CO2t": -22.80983, "CS": 6.00725, "CYTBD": 43.59899, "D_LACt2": 0.0, "ENO": 14.71614, "ETOHt2r": 0.0, "EX_ac_e": 0.0, "EX_acald_e": 0.0, "EX_akg_e": 0.0, "EX_co2_e": 22.80983, "EX_etoh_e": 0.0, "EX_for_e": 0.0, "EX_fru_e": 0.0, "EX_fum_e": 0.0, "EX_glc__D_e": -10.0, "EX_gln__L_e": 0.0, "EX_glu__L_e": 0.0, "EX_h_e": 17.53087, "EX_h2o_e": 29.17583, "EX_lac__D_e": 0.0, "EX_mal__L_e": 0.0, "EX_nh4_e": -4.76532, "EX_o2_e": -21.79949, "EX_pi_e": -3.2149, "EX_pyr_e": 0.0, "EX_succ_e": 0.0, "FBA": 7.47738, "FBP": 0.0, "FORt2": 0.0, "FORti": 0.0, "FRD7": 0.0, "FRUpts2": 0.0, "FUM": 5.06438, "FUMt2_2": 0.0, "G6PDH2r": 4.95998, "GAPD": 16.02353, "GLCpts": 10.0, "GLNS": 0.22346, "GLNabc": 0.0, "GLUDy": -4.54186, "GLUN": 0.0, "GLUSy": 0.0, "GLUt2r": 0.0, "GND": 4.95998, "H2Ot": -29.17583, "ICDHyr": 6.00725, "ICL": 0.0, "LDH_D": 0.0, "MALS": 0.0, "MALt2_2": 0.0, "MDH": 5.06438, "ME1": 0.0, "ME2": 0.0, "NADH16": 38.53461, "NADTRHD": 0.0, "NH4t": 4.76532, "O2t": 21.79949, "PDH": 9.28253, "PFK": 7.47738, "PFL": 0.0, "PGI": 4.86086, "PGK": -16.02353, "PGL": 4.95998, "PGM": -14.71614, "PIt2r": 3.2149, "PPC": 2.50431, "PPCK": 0.0, "PPS": 0.0, "PTAr": 0.0, "PYK": 1.75818, "PYRt2": 0.0, "RPE": 2.67848, "RPI": -2.2815, "SUCCt2_2": 0.0, "SUCCt3": 0.0, "SUCDi": 5.06438, "SUCOAS": -5.06438, "TALA": 1.49698, "THD2": 0.0, "TKT1": 1.49698, "TKT2": 1.1815, "TPI": 7.47738}} \ No newline at end of file diff --git a/tests/data/textbook_solution.pickle b/tests/data/textbook_solution.pickle index 455a93840..d008b728e 100644 Binary files a/tests/data/textbook_solution.pickle and b/tests/data/textbook_solution.pickle differ diff --git a/tests/data/update_pickles.py b/tests/data/update_pickles.py index f26ce2caf..d1e1320e3 100755 --- a/tests/data/update_pickles.py +++ b/tests/data/update_pickles.py @@ -67,15 +67,19 @@ "ATPM", "PIt2r", ): - mini.add_reaction(r.copy()) + mini.add_reactions([r.copy()]) mini.reactions.ATPM.upper_bound = mini.reactions.PGI.upper_bound mini.objective = ["PFK", "ATPM"] # No biomass, 2 reactions # add in some information from iJO1366 - mini.add_reaction(ecoli_model.reactions.LDH_D.copy()) - mini.add_reaction(ecoli_model.reactions.EX_lac__D_e.copy()) r = cobra.Reaction("D_LACt2") - mini.add_reaction(r) + mini.add_reactions( + [ + ecoli_model.reactions.LDH_D.copy(), + ecoli_model.reactions.EX_lac__D_e.copy(), + r, + ] + ) mini.reactions.GLCpts.gene_reaction_rule = ( ecoli_model.reactions.GLCptspp.gene_reaction_rule ) @@ -104,9 +108,9 @@ mini, importlib_resources.files(cobra.data).joinpath("mini.json"), pretty=True ) save_yaml_model(mini, importlib_resources.files(cobra.data).joinpath("mini.yml")) - write_sbml_model(mini, "mini_fbc2.xml") - write_sbml_model(mini, "mini_fbc2.xml.bz2") - write_sbml_model(mini, "mini_fbc2.xml.gz") + write_sbml_model(mini, "mini_fbc3.xml") + write_sbml_model(mini, "mini_fbc3.xml.bz2") + write_sbml_model(mini, "mini_fbc3.xml.gz") write_sbml_model( mini, importlib_resources.files(cobra.data).joinpath("mini_cobra.xml") ) diff --git a/tests/data/valid_annotation_format.json b/tests/data/valid_annotation_format.json index 8bbb6a38c..38be556a7 100644 --- a/tests/data/valid_annotation_format.json +++ b/tests/data/valid_annotation_format.json @@ -5,9 +5,9 @@ "name":"", "compartment":"c", "annotation": { - "bigg.reaction": [["is", "PFK26"]], - "kegg.reaction": [["is", "R02732"]], - "rhea": [["is", "15656"]] + "bigg.reaction": ["PFK26"], + "kegg.reaction": ["R02732"], + "rhea": ["15656"] } } ], diff --git a/tests/test_core/test_group.py b/tests/test_core/test_group.py index a5ed210e1..9f4d390a5 100644 --- a/tests/test_core/test_group.py +++ b/tests/test_core/test_group.py @@ -1,9 +1,12 @@ """Test functions of group via model.py.""" +from os.path import join + import pytest from cobra import Model from cobra.core import Group +from cobra.io import load_json_model, read_sbml_model, save_json_model def test_group_add_elements(model: Model) -> None: @@ -33,3 +36,18 @@ def test_group_kind() -> None: group.kind = "collection" assert group.kind == "collection" + + +def test_read_write_json(data_directory, tmp_path): + """Test reading and writing groups to json.""" + model = read_sbml_model(join(data_directory, "e_coli_core.xml")) + assert model.groups is not None + assert len(model.groups) == 10 + assert len(model.groups[0].members) == 6 + + path_to_file = join(tmp_path, "group_ecoli.json") + save_json_model(model, path_to_file) + model_from_json = load_json_model(path_to_file) + assert model_from_json.groups is not None + assert len(model_from_json.groups) == 10 + assert len(model_from_json.groups[0].members) == 6 diff --git a/tests/test_core/test_metadata/test_customannotations.py b/tests/test_core/test_metadata/test_customannotations.py new file mode 100644 index 000000000..11b0b6009 --- /dev/null +++ b/tests/test_core/test_metadata/test_customannotations.py @@ -0,0 +1,283 @@ +"""Test functions of custom.py.""" + +import sys +from pathlib import Path + +import pytest + +from cobra.core import Model, Species +from cobra.core.metadata.custom import CustomAnnotation, CustomAnnotationStore +from cobra.core.metadata.resource import Qualifier +from cobra.io import ( + load_json_model, + load_yaml_model, + read_sbml_model, + save_json_model, + save_yaml_model, + write_sbml_model, +) + + +def test_customannotation(): + """Test creating and manipulating a single CustomAnnotation.""" + ann = CustomAnnotation.from_data( + { + "id": "KV_id", + "name": "abc_xyz", + "key": "keyX", + "value": "45", + "uri": "https://cobrapy.readthedocs.io/", + } + ) + assert isinstance(ann, CustomAnnotation) + assert ann.id == "KV_id" + assert ann.name == "abc_xyz" + assert ann.key == "keyX" + assert ann.value == "45" + assert ann.uri == "https://cobrapy.readthedocs.io/" + + with pytest.raises(ValueError): + ann.remove_from_parent() + + with pytest.raises(AttributeError): + ann.key = "new_key" + ann.value = "42" + assert ann.value == "42" + ann.uri = "https://opencobra.github.io/" + assert ann.uri == "https://opencobra.github.io/" + + with pytest.raises(TypeError): + ann = CustomAnnotation.from_data("key:value") + ann = CustomAnnotation.from_data( + { + "key": "keyX", + "value": "45", + "uri": "https://cobrapy.readthedocs.io/", + } + ) + assert isinstance(ann.__str__(), str) + assert isinstance(ann.__repr__(), str) + + +def test_customannotationstore(): + """Test creating and manipulating a CustomAnnotationStore object.""" + entry1 = { + "key": "key1", + "value": "45", + "uri": "https://cobrapy.readthedocs.io/", + } + entry2 = CustomAnnotation.from_data( + { + "key": "key2", + "value": "48", + "uri": "https://tinyurl2.com/ybyr7b62", + } + ) + entry3 = CustomAnnotation(key="key3", value="50") + + kvp = CustomAnnotationStore(entries=[entry1, entry2, entry3]) + + assert len(kvp) == 3 + for key in ["key1", "key2", "key3"]: + assert key in kvp + assert kvp["key2"] == entry2 + + kvp["key1"] = {"key": "key1", "value": "test"} + assert kvp["key1"].value == "test" + with pytest.raises(ValueError): + kvp["key1"] = {"key": "key4", "value": "test"} + + kvp2 = CustomAnnotation(key="key2", value="test") + kvp["key2"] = kvp2 + assert kvp["key2"].value == "test" + with pytest.raises(ValueError): + kvp["key2"] = CustomAnnotation(key="key4", value="test") + + with pytest.raises(ValueError): + other_store = CustomAnnotationStore(entries=[kvp2]) + other_store = CustomAnnotationStore() + with pytest.raises(ValueError): + other_store.add(kvp2) + with pytest.raises(ValueError): + other_store[kvp2.key] = kvp2 + with pytest.raises(ValueError): + kvp[kvp2.key] = kvp2 + + kvp["key3"] = "test" + assert kvp["key3"].value == "test" + with pytest.raises(TypeError): + kvp["key1"] = 10 + + kvp.add(dict(key="key4", value="value4")) + assert kvp["key4"].value == "value4" + + with pytest.raises(IndexError): + kvp.add([dict(key="key4", value="other_value")]) + + assert len(kvp) == 4 + kvp.remove(kvp2) + assert len(kvp) == 3 + with pytest.raises(ValueError): + kvp.remove("key5") + with pytest.raises(ValueError): + kvp.remove(CustomAnnotation(key="key1", value="different")) + with pytest.raises(ValueError): + kvp.remove(CustomAnnotation(key="key5", value="different")) + + kvp.remove("key1") + assert len(kvp) == 2 + + kvp["key3"].remove_from_parent() + + assert isinstance(kvp.__repr__(), str) + assert isinstance(kvp._repr_html_(), str) + + +def test_customannotation_for_object() -> None: + """Test accessing custom annotations of a cobrapy object.""" + s = Species() + s.metadata.custom["key1"] = "value1" + assert s.metadata.custom["key1"].value == "value1" + s.add_annotations( + CustomAnnotation( + key="key2", value="value2", uri="https://cobrapy.readthedocs.io/" + ) + ) + assert s.metadata.custom["key2"].value == "value2" + assert s.metadata.custom["key2"].uri == "https://cobrapy.readthedocs.io/" + + assert s.metadata.to_dict()["custom"]["key2"]["value"] == "value2" + + +@pytest.mark.parametrize("model_type", ["direct", "sbml", "json", "yaml"]) +def test_read_write_model(complex_model: Model, tmp_path: Path, model_type: str): + """Test annotation consistency when writing and reading an SBML file.""" + model = None + if model_type == "sbml": + out_path = tmp_path / "complex_model_writing.sbml" + assert write_sbml_model(complex_model, str(out_path)) is None + + model = read_sbml_model(str(out_path)) + elif model_type == "json": + out_path = tmp_path / "complex_model_writing.json" + assert save_json_model(complex_model, str(out_path)) is None + + model = load_json_model(str(out_path)) + elif model_type == "yaml": + out_path = tmp_path / "complex_model_writing.yaml" + assert save_yaml_model(complex_model, str(out_path)) is None + + model = load_yaml_model(str(out_path)) + else: + model = complex_model + assert model + + assert ( + model.metadata.standardized[Qualifier.Biological_hasTaxon][0] + .resources[0] + .identifier + == "511145" + ) + + assert model.metadata.custom + assert model.metadata.custom["trusted_source"].value == "42" + + metabolite = model.metabolites.get_by_id("2pg_c") + assert metabolite.metadata.custom + assert metabolite.metadata.custom["toolset"].value == "expert" + assert ( + metabolite.metadata.custom["toolset"].uri == "urn:awesometool.com:keyvaluepair" + ) + + assert metabolite.metadata.custom["nested"].value == "yes" + + +@pytest.mark.parametrize( + "model_type", + [ + "direct", + pytest.param( + "sbml", marks=pytest.mark.xfail(reason="not implemented in libsbml") + ), + "json", + "yaml", + ], +) +@pytest.mark.skipif(sys.version_info < (3, 9), reason="requires python 3.9 or higher") +def test_read_write_cvterms_in_kvp_model( + complex_model: Model, tmp_path: Path, model_type: str +): + """Test nested kvp annotation consistency when writing and reading an SBML file.""" + model = None + if model_type == "sbml": + out_path = tmp_path / "complex_model_writing.sbml" + assert write_sbml_model(complex_model, str(out_path)) is None + + model = read_sbml_model(str(out_path)) + elif model_type == "json": + out_path = tmp_path / "complex_model_writing.json" + assert save_json_model(complex_model, str(out_path)) is None + + model = load_json_model(str(out_path)) + elif model_type == "yaml": + out_path = tmp_path / "complex_model_writing.yaml" + assert save_yaml_model(complex_model, str(out_path)) is None + + model = load_yaml_model(str(out_path)) + else: + model = complex_model + assert model + + metabolite = model.metabolites.get_by_id("2pg_c") + + assert ( + metabolite.metadata.custom["nested"] + .metadata.standardized[Qualifier.Modelling_isDescribedBy][0] + .resources[0] + .identifier + == "e_coli_core" + ) + + +@pytest.mark.parametrize( + "model_type", + [ + "direct", + pytest.param( + "sbml", marks=pytest.mark.xfail(reason="not implemented in libsbml") + ), + "json", + "yaml", + ], +) +@pytest.mark.skipif(sys.version_info < (3, 9), reason="requires python 3.9 or higher") +def test_read_write_nested_kvp_model( + complex_model: Model, tmp_path: Path, model_type: str +): + """Test nested kvp annotation consistency when writing and reading an SBML file.""" + model = None + if model_type == "sbml": + out_path = tmp_path / "complex_model_writing.sbml" + assert write_sbml_model(complex_model, str(out_path)) is None + + model = read_sbml_model(str(out_path)) + elif model_type == "json": + out_path = tmp_path / "complex_model_writing.json" + assert save_json_model(complex_model, str(out_path)) is None + + model = load_json_model(str(out_path)) + elif model_type == "yaml": + out_path = tmp_path / "complex_model_writing.yaml" + assert save_yaml_model(complex_model, str(out_path)) is None + + model = load_yaml_model(str(out_path)) + else: + model = complex_model + assert model + + metabolite = model.metabolites.get_by_id("2pg_c") + + assert ( + metabolite.metadata.custom["nested"].metadata.custom["nested_kvp"].value + == "not_recommended" + ) diff --git a/tests/test_core/test_metadata/test_history.py b/tests/test_core/test_metadata/test_history.py new file mode 100644 index 000000000..402eb407f --- /dev/null +++ b/tests/test_core/test_metadata/test_history.py @@ -0,0 +1,252 @@ +"""Test functions of history.py.""" + +import os +from datetime import datetime, timedelta, timezone + +import pytest + +from cobra.core import Species +from cobra.core.metadata.history import Creator, History +from cobra.io import read_sbml_model + + +JUNE_26TH = "2020-06-26T12:34:11+00:00" +JUNE_26TH_530 = "2020-06-26T00:34:11+05:30" +TEST_COM = "test@test.com" + + +def _read_ecoli_annotation_model(data_directory): + """Read model with history elements.""" + test_xml = os.path.join(data_directory, "e_coli_core_for_annotation.xml") + model = read_sbml_model(test_xml) + return model + + +def test_create_history(): + """Create a history object and verify its contents.""" + history = History( + creators=[ + Creator( + given_name="Matthias", + family_name="Koenig", + organisation="HU", + email=TEST_COM, + ), + Creator( + name="Andreas Draeger", + organisation="University of Tübingen", + email="test2@test2.com", + ), + ], + created_date=JUNE_26TH_530, + modified_dates=[ + JUNE_26TH, + JUNE_26TH_530, + ], + ) + assert len(history.creators) == 2 + assert history.created_date.isoformat() == JUNE_26TH_530 + assert history.created_date == History.parse_datetime(JUNE_26TH_530) + assert history.creators[0].name == "Matthias Koenig" + assert history.creators[1].name == "Andreas Draeger" + assert len(history.modified_dates) == 2 + + with pytest.raises(TypeError): + _ = History.from_data(1) + assert history == History.from_data(history) + + history = History() + assert history.is_empty() + + +def test_history_from_ecoli_xml(data_directory): + """Test loading the history of an e_coli_core SBML file.""" + model = _read_ecoli_annotation_model(data_directory) + history = History( + creators=[ + Creator( + given_name="Matthias", + family_name="Koenig", + email="koenigmx@hu-berlin.de", + organisation="Humboldt-University Berlin, " + "Institute for Theoretical Biology", + ), + Creator( + given_name="Matthias", + family_name="Koenig", + email="koenigmx@hu-berlin.de", + ), + Creator( + given_name="Matthias", + family_name="Koenig", + organisation="Humboldt-University Berlin, " + "Institute for Theoretical Biology", + ), + Creator( + given_name="Matthias", + family_name="Koenig", + ), + ], + created_date="2019-03-06T14:40:55Z", + modified_dates=[ + "2019-03-06T14:40:55Z", + "2019-03-06T14:41:55Z", + ], + ) + print(history) + print(model.metadata.history) + assert model.metadata.history == history + model.metadata.history.created_date = None + assert model.metadata.history == History( + creators=[ + Creator( + given_name="Matthias", + family_name="Koenig", + email="koenigmx@hu-berlin.de", + organisation="Humboldt-University Berlin, " + "Institute for Theoretical Biology", + ), + Creator( + given_name="Matthias", + family_name="Koenig", + email="koenigmx@hu-berlin.de", + ), + Creator( + given_name="Matthias", + family_name="Koenig", + organisation="Humboldt-University Berlin, " + "Institute for Theoretical Biology", + ), + Creator( + given_name="Matthias", + family_name="Koenig", + ), + ], + modified_dates=[ + "2019-03-06T14:40:55Z", + "2019-03-06T14:41:55Z", + ], + ) + + +def test_create_creator(): + """Test creating a Creator metadata object and verify its contents.""" + creator = Creator( + name="Matthias König", + organisation="HU", + email=TEST_COM, + ) + assert creator.name == "Matthias König" + assert creator.organisation == "HU" + assert creator.email == TEST_COM + + creator = Creator( + given_name="Matthias", + family_name="König", + organisation="HU", + email=TEST_COM, + ) + assert creator.name == "Matthias König" + assert creator.organisation == "HU" + assert creator.email == TEST_COM + + creator = Creator( + given_name="Matthias", + organisation="HU", + email=TEST_COM, + ) + assert creator.name == "Matthias" + assert creator.organisation == "HU" + assert creator.email == TEST_COM + + creator = Creator( + **{ + "given_name": "Matthias", + "family_name": "König", + "organisation": "HU", + "email": TEST_COM, + } + ) + + assert creator.name == "Matthias König" + assert creator.organisation == "HU" + assert creator.email == TEST_COM + + creator = Creator( + **{ + "given_name": "Matthias", + "organisation": "HU", + "email": TEST_COM, + } + ) + + assert creator.name == "Matthias" + assert creator.organisation == "HU" + assert creator.email == TEST_COM + + creator = Creator().from_data( + { + "given_name": "Matthias", + "family_name": "König", + "organisation": "HU", + "email": TEST_COM, + } + ) + + assert creator.name == "Matthias König" + assert creator.organisation == "HU" + assert creator.email == TEST_COM + + creator = Creator().from_data( + { + "given_name": "Matthias", + "organisation": "HU", + "email": TEST_COM, + } + ) + + assert creator.name == "Matthias" + assert creator.organisation == "HU" + assert creator.email == TEST_COM + + with pytest.raises(ValueError): + creator = Creator( + name="Pascal A. Pieters", given_name="Pascal", family_name="Pieters" + ) + + +def test_historydatetime(): + """Test the 'created_date' property of the History object.""" + # valid date + dt_str1 = JUNE_26TH_530 + datetime_obj = History(created_date=dt_str1) + assert datetime_obj.created_date.isoformat() == dt_str1 + + # valid date + datetime_obj = History(created_date=JUNE_26TH) + assert datetime_obj.created_date.isoformat() == JUNE_26TH + datetime_obj.created_date = None + assert datetime_obj.created_date is None + + # create from python datetime + datetime_obj.created_date = datetime.now() + assert datetime_obj.created_date is not None + + # incorrect format + with pytest.raises(ValueError): + datetime_obj.created_date = datetime.now(timezone(timedelta(hours=1))).strftime( + "%Y-%m-%dT%H:%M:%S%Z" + ) + + with pytest.raises(TypeError): + datetime_obj.created_date = {"date": "June 26th"} + + +def test_object_history() -> None: + """Test history and creators for a cobrapy object.""" + s = Species() + s.metadata.add_creators([Creator(name="Pascal A. Pieters")]) + assert s.metadata.history.creators[0].name == "Pascal A. Pieters" + + s.metadata.add_modification_dates(JUNE_26TH) + assert s.metadata.history.modified_dates[0].isoformat() == JUNE_26TH diff --git a/tests/test_core/test_metadata/test_metadata.py b/tests/test_core/test_metadata/test_metadata.py new file mode 100644 index 000000000..a4951f404 --- /dev/null +++ b/tests/test_core/test_metadata/test_metadata.py @@ -0,0 +1,1021 @@ +"""Tests for the metadata structures.""" + +import json +from pathlib import Path + +import pytest + +from cobra import Model +from cobra.core.metadata import Metadata, Qualifier, StandardizedAnnotation +from cobra.core.metadata.resource import QualifiersAlias, Resource +from cobra.core.metadata.standardized import ( + SimplifiedAnnotationInterface, + StandardizedAnnotationList, + StandardizedAnnotationStore, +) +from cobra.core.species import Species +from cobra.io import load_json_model, read_sbml_model, save_json_model, write_sbml_model + + +PUBMED_EXAMPLE = "https://identifiers.org/pubmed/1111111" +ECO_EXAMPLE = "https://identifiers.org/eco/ECO:0000004" +RESOURCE_LIST = [ + "http://identifiers.org/bigg.metabolite/13dpg", + "http://identifiers.org/biocyc/DPG", + "http://identifiers.org/chebi/CHEBI:11881", + "http://identifiers.org/chebi/CHEBI:16001", + "http://identifiers.org/chebi/CHEBI:1658", + "http://identifiers.org/chebi/CHEBI:20189", + "http://identifiers.org/chebi/CHEBI:57604", + "http://identifiers.org/hmdb/HMDB01270", + "http://identifiers.org/kegg.compound/C00236", + "http://identifiers.org/pubchem.substance/3535", + "http://identifiers.org/reactome/REACT_29800", + "http://identifiers.org/seed.compound/cpd00203", + "http://identifiers.org/unipathway.compound/UPC00236", +] +ECOLI_MODEL_ANNOTATIONS = [ + { + "qualifier": "bqb_hasTaxon", + "resources": ["http://identifiers.org/taxonomy/511145"], + }, + { + "qualifier": "bqm_is", + "resources": ["http://identifiers.org/bigg.model/e_coli_core"], + "annotations": [ + { + "qualifier": "bqb_isDescribedBy", + "resources": [PUBMED_EXAMPLE], + }, + { + "qualifier": "bqb_isDescribedBy", + "resources": [ECO_EXAMPLE], + }, + ], + }, + { + "qualifier": "bqm_isDescribedBy", + "resources": ["http://identifiers.org/doi/10.1128/ecosalplus.10.2.1"], + }, + { + "qualifier": "bqm_isDescribedBy", + "resources": ["http://identifiers.org/ncbiprotein/16128336"], + }, +] +COBRA_URL = "https://cobrapy.readthedocs.io/" +CHEBI_SET = {"CHEBI:43215", "CHEBI:11881"} + + +def test_annotation() -> None: + """Test creating an annotation manually.""" + # a cobra component + s = Species() + # assert s.metadata == {} # nothing set for annotation, so empty dict + assert s.metadata.standardized == StandardizedAnnotationStore() + # assert not s.annotation.keys() + # assert s.metadata.custom == {} + assert s.metadata.history.creators == [] + assert s.metadata.history.modified_dates == [] + + # setting annotation via old annotation format + s.annotation["chebi"] = list(CHEBI_SET) + + assert set(s.annotation["chebi"]) == CHEBI_SET + assert set(s.annotation["chebi"]) == CHEBI_SET + # assert set(s.metadata.standardized[Qualifier.Biological_is]["chebi"]) == CHEBI_SET + + s.metadata.standardized = StandardizedAnnotationStore() + + s.add_annotations( + [ + "https://identifiers.org/chebi/CHEBI:43215", + "https://identifiers.org/chebi/CHEBI:11881", + ] + ) + assert s.metadata.standardized == { + "https://identifiers.org/chebi/CHEBI:43215", + "https://identifiers.org/chebi/CHEBI:11881", + } + + # checking old (fixed) annotation format + assert s.annotation == {"chebi": list(sorted(["CHEBI:43215", "CHEBI:11881"]))} + + # checking new standardized + cvt = StandardizedAnnotationStore( + [ + StandardizedAnnotation( + qualifier=Qualifier.Biological_is, + resources=[ + "https://identifiers.org/chebi/CHEBI:43215", + "https://identifiers.org/chebi/CHEBI:11881", + ], + ), + ] + ) + + # The next assertion should probably not hold, because of how we add annotations + # with the same qualifier. Or we should change the behaviour of add_annotations + # etc. when only strings are supplied. + # assert s.metadata.standardized == cvt + s.metadata.standardized = [] + assert s.metadata.standardized == StandardizedAnnotationStore() + assert s.metadata.standardized.resources == frozenset() + assert s.metadata.standardized == {} + + s.metadata.standardized = cvt + + assert s.metadata.standardized.resources == { + Resource("CHEBI:43215"), + Resource("CHEBI:11881"), + } + + # checking old (fixed) annotation format + assert s.annotation == {"chebi": list(sorted(["CHEBI:43215", "CHEBI:11881"]))} + + cvt[0].remove_from_parent() + assert s.metadata.standardized == [] + + # adding an SBO term + s.metadata.sbo = ["SBO:0000123"] + assert "sbo" in s.annotation + # assert s.annotation == { + # "chebi": ["CHEBI:43215", "CHEBI:11881"], + # "sbo": ["SBO:0000123"], + # } + + cvt2 = StandardizedAnnotationStore( + [ + StandardizedAnnotation( + qualifier="bqb_is", + resources=["https://identifiers.org/chebi/CHEBI:11881"], + ), + StandardizedAnnotation("https://identifiers.org/chebi/CHEBI:43215"), + ] + ) + + s.metadata.standardized = cvt2 + assert s.metadata.standardized.uris == { + "https://identifiers.org/chebi/CHEBI:43215", + "https://identifiers.org/chebi/CHEBI:11881", + } + + # print(s.annotation[Qualifier.Biological_is]) + # print(s.annotation[0]) + print(s.annotation["chebi"]) + + assert ( + s.metadata.standardized[0].resources[0].uri + == "https://identifiers.org/chebi/CHEBI:11881" + ) + + assert set(s.metadata.standardized[Qualifier.Biological_is].uris) == { + "https://identifiers.org/chebi/CHEBI:43215", + "https://identifiers.org/chebi/CHEBI:11881", + } + + # assert 0 == 1 + # s.annotation.__delitem__("sbo") + + # checking old (fixed) annotation format + # assert s.annotation == {"chebi": sorted(["CHEBI:43215", "CHEBI:11881"])} + + +def test_standardized_annotation() -> None: + """Test creating and manipulating standardized annotations.""" + + s = Species() + s.metadata.add_standardized(ECOLI_MODEL_ANNOTATIONS) + assert s.metadata.standardized == ECOLI_MODEL_ANNOTATIONS + + s_other = Species() + with pytest.raises(ValueError): + s_other.add_annotations(s.metadata.standardized[0]) + + ann = StandardizedAnnotation("https://identifiers.org/chebi/CHEBI:43215") + s_other.add_annotations([ann]) + + assert ( + s_other.metadata.standardized.resources_for("chebi")[0].identifier + == "CHEBI:43215" + ) + + ann.remove_from_parent() + assert len(s_other.metadata.standardized.resources_for("chebi")) == 0 + with pytest.raises(ValueError): + ann.remove_from_parent() + + ann.qualifier = Qualifier.Biological_hasPart + assert ann.qualifier == Qualifier.Biological_hasPart + assert ann.qualifier in QualifiersAlias.Biological_any + + ann.qualifier = "bqm_is" + assert ann.qualifier == Qualifier.Modelling_is + assert ann.qualifier not in QualifiersAlias.Biological_known + + ann.resources = [ + "https://identifiers.org/chebi/CHEBI:43215", + "https://identifiers.org/chebi/CHEBI:11881", + ] + assert next(iter(ann.resources)).identifier == "CHEBI:43215" + + ann.annotations = [ + StandardizedAnnotation(["http://identifiers.org/taxonomy/511145"]) + ] + assert len(ann.uris) == 2 + assert len(ann.all_uris) == 3 + + assert all(resource.namespace == "chebi" for resource in ann.resources) + assert all(namespace == "chebi" for (namespace, _) in ann.to_tuples()) + + records = ann.to_records() + assert len(records) == 3 + main_group = next(x["annotation_group"] for x in records if x["parent_group"] == 0) + assert ( + next(x["namespace"] for x in records if x["parent_group"] == main_group) + == "taxonomy" + ) + + ann_dict = ann.to_dict() + assert ann_dict == ann + del ann_dict["annotations"] + assert not ann_dict == ann + ann_dict = ann.to_dict() + resource = ann.resources[0] + with pytest.raises(ValueError): + ann.add_resources([resource]) + resource.remove_from_parent() + assert not ann_dict == ann + with pytest.raises(ValueError): + resource.remove_from_parent() + ann.add_resources([resource]) + assert ann_dict == ann + with pytest.raises(ValueError): + new_ann = StandardizedAnnotation() + new_ann.add_resources([resource]) + + assert ann != 1 + + ann.resources = None + assert len(ann.resources) == 0 + + ann.add_resources( + [Resource.from_data({"uri": "http://identifiers.org/taxonomy/51114"})] + ) + assert len(ann.resources) == 1 + ann.add_resources( + [Resource.from_data({"namespace": "chebi", "identifier": "CHEBI:43215"})] + ) + assert len(ann.resources) == 2 + with pytest.raises(TypeError): + ann.add_resources([Resource.from_data(None)]) + + resource = Resource(uri="https://identifiers.org/uniprot/A0PK11") + + assert resource.namespace == "uniprot" + assert ( + Resource(uri="https://www.uniprot.org/uniprotkb/A0PK11", strict=False).namespace + is None + ) + with pytest.raises(ValueError): + Resource(uri="https://www.uniprot.org/uniprotkb/A0PK11") + + assert resource.to_dict()["namespace"] == "uniprot" + assert resource == Resource(resource.uri) + assert resource == {"uri": resource.uri} + assert resource == ("uniprot", "A0PK11") + + assert resource != ("uniprot",) + assert resource != 1 + + with pytest.raises(TypeError): + ann.resources = [1, 2] + + with pytest.raises(TypeError): + ann.qualifier = "unknown" + + with pytest.raises(TypeError): + ann.qualifier = 1 + + assert isinstance(ann._repr_html_(), str) + assert isinstance(resource._repr_html_(), str) + + +def test_standardized_annotation_store() -> None: + """Test creating and manipulating standardized stores.""" + + s = Species() + s.metadata.add_standardized(ECOLI_MODEL_ANNOTATIONS) + assert s.metadata.standardized == ECOLI_MODEL_ANNOTATIONS + assert isinstance(s.metadata.standardized, StandardizedAnnotationStore) + s_other = Species() + s_other.metadata.add_standardized(ECOLI_MODEL_ANNOTATIONS) + assert s.metadata.standardized == s_other.metadata.standardized + assert s.metadata == s_other.metadata + with pytest.raises(TypeError): + _ = s.metadata == 1 + + with pytest.raises(ValueError): + s.metadata.standardized.add(s.metadata.standardized[0]) + new_store = StandardizedAnnotationStore() + assert not new_store + with pytest.raises(ValueError): + new_store.add(s.metadata.standardized[0]) + new_list = StandardizedAnnotationList() + assert not new_list + new_list.add(s.metadata.standardized[0]) + assert len(new_list) == 1 + + new_store = StandardizedAnnotationStore( + [ + StandardizedAnnotation("https://identifiers.org/chebi/CHEBI:43215"), + "https://identifiers.org/chebi/CHEBI:11881", + Resource("https://identifiers.org/chebi/CHEBI:16001"), + { + "qualifier": Qualifier.Biological_hasTaxon, + "resources": ["http://identifiers.org/taxonomy/511145"], + }, + ] + ) + assert len(new_store) == 3 + assert len(new_store.resources) == 4 + + assert new_store != 1 + + with pytest.raises(TypeError): + new_store[0] = None + with pytest.raises(TypeError): + _ = new_store[[0.15]] + + assert len(new_store[Qualifier.Biological_hasTaxon]) == 1 + assert len(new_store[QualifiersAlias.Biological_any]) == 3 + + assert len(StandardizedAnnotationStore(None)) == 0 + assert len(StandardizedAnnotationStore([None])) == 0 + assert ( + len( + StandardizedAnnotationStore( + [Resource("CHEBI:43215"), Resource("CHEBI:11881")] + ) + ) + == 1 + ) + with pytest.raises(TypeError): + StandardizedAnnotationStore(1) + with pytest.raises(TypeError): + StandardizedAnnotationStore([1]) + with pytest.raises(TypeError): + StandardizedAnnotationStore.from_data(1) + + assert len(s.metadata.standardized.resources) == 4 + assert len(s.metadata.standardized.all_resources) == 6 + assert len(s.metadata.standardized.uris) == 4 + assert len(s.metadata.standardized.all_uris) == 6 + assert len(s.metadata.standardized.qualifiers) == 3 + assert len(s.metadata.standardized.all_qualifiers) == 4 + + assert len(s.metadata.standardized[Qualifier.Modelling_isDescribedBy]) == 2 + assert len(s.metadata.standardized[QualifiersAlias.Modelling_any]) == 3 + assert ( + len( + s.metadata.standardized[ + [Qualifier.Biological_hasTaxon, Qualifier.Modelling_is] + ] + ) + == 2 + ) + with pytest.raises(TypeError): + s.metadata.standardized["a"] + + assert ( + s.metadata.standardized.resources_for( + qualifier=Qualifier.Modelling_isDescribedBy, namespace="doi" + )[0].identifier + == "10.1128/ecosalplus.10.2.1" + ) + assert ( + s.metadata.standardized.resources_for( + qualifier=QualifiersAlias.Modelling_known, + namespace=["eco", "taxonomy"], + nested=True, + )[0].uri + == ECO_EXAMPLE + ) + with pytest.raises(TypeError): + assert ( + s.metadata.standardized.resources_for( + qualifier=[QualifiersAlias.Modelling_known, 1], + namespace=["eco", "taxonomy"], + nested=True, + )[0].uri + == ECO_EXAMPLE + ) + ann = new_store[0] + ann.remove_from_parent() + + s.metadata.standardized[0] = ann + assert s.metadata.standardized[0] == ann + + assert not (s.metadata.standardized == "string") + assert s.metadata.standardized != s_other.metadata.standardized + assert s.metadata != s_other.metadata + + assert isinstance(s.metadata.standardized._repr_html_(), str) + + +def test_old_style_annotation() -> None: + """Test creating old style annotations using add_simple_annotations.""" + s = Species() + s.annotation.add({"chebi": "CHEBI:17234"}) + s.annotation.add({"chebi": ["CHEBI:1723456", "CHEBI:172345"]}) + with pytest.raises(TypeError): + s.annotation.add({"chebi": [["CHEBI:123", "CHEBI:1234"]]}) + assert len(s.annotation) == 1 + s.annotation.add(None) + assert len(s.annotation) == 1 + assert s.annotation.number_of_resources == 3 + s.annotation["eco"] = "123" + assert len(s.annotation) == 2 + assert s.annotation.number_of_resources == 4 + assert set(s.annotation["eco"]) == {"123"} + assert set(s.annotation.get("eco")) == {"123"} + assert set(s.annotation.get("eco", ["456"])) == {"123"} + with pytest.raises(IndexError): + _ = s.annotation["invalid"] + assert s.annotation.get("invalid") is None + assert set(s.annotation.get("invalid", ["456"])) == {"456"} + + s.annotation.update({"bigg.metabolite": "glc__D"}) + assert set(s.annotation["bigg.metabolite"]) == {"glc__D"} + del s.annotation["bigg.metabolite"] + assert s.annotation.get("bigg.metabolite") is None + other_interface = SimplifiedAnnotationInterface(Metadata()) + other_interface["bigg.metabolite"] = "glc__D" + s.annotation.update(other_interface) + assert set(s.annotation["bigg.metabolite"]) == {"glc__D"} + s.annotation.update({"bigg.metabolite": ["glc__L"]}) + assert set(s.annotation["bigg.metabolite"]) == {"glc__L"} + del s.annotation["bigg.metabolite"] + + ref_ann = Metadata() + simpl_ann = SimplifiedAnnotationInterface(ref_ann) + simpl_ann.add( + { + "chebi": ["CHEBI:17234", "CHEBI:1723456", "CHEBI:172345"], + "eco": ["123"], + } + ) + assert s.metadata == ref_ann + + s.annotation.delete_annotation("CHEBI:172345") + assert len(s.annotation) == 2 + assert s.annotation.number_of_resources == 3 + with pytest.raises(ValueError): + s.annotation.delete_annotation("CHEBI:00000") + ref_ann = Metadata() + simpl_ann = SimplifiedAnnotationInterface(ref_ann) + simpl_ann.add( + { + "chebi": ["CHEBI:17234", "CHEBI:1723456"], + "eco": ["123"], + } + ) + assert s.metadata == ref_ann + + print(s.annotation.to_dict()) + del s.annotation["chebi"] + print(s.annotation.to_dict()) + assert len(s.annotation) == 1 + assert s.annotation.number_of_resources == 1 + + s.annotation.add({"chebi": "CHEBI:17234"}) + s.annotation.add({"chebi": ["CHEBI:1723456", "CHEBI:172345"]}) + assert len(s.annotation) == 2 + assert s.annotation.number_of_resources == 4 + s.annotation["chebi"] = ["CHEBI:123", "CHEBI:1234"] + assert len(s.annotation) == 2 + assert s.annotation.number_of_resources == 3 + ref_ann = Metadata() + simpl_ann = SimplifiedAnnotationInterface(ref_ann) + simpl_ann.add({"chebi": ["CHEBI:123", "CHEBI:1234"], "eco": ["123"]}) + assert s.metadata == ref_ann + + assert len(s.annotation.keys()) == 2 + + s.annotation["chebi"] = [] + assert s.annotation.number_of_resources == 1 + + s.annotation.clear() + + assert len(s.annotation.keys()) == 0 + + s.annotation = {"chebi": ["CHEBI:123", "CHEBI:1234"], "eco": ["123"]} + assert s.annotation.number_of_resources == 3 + s.annotation = { + "chebi": ["CHEBI:123", "CHEBI:1234"], + "eco": ["123"], + "sbo": ["SBO:0000123"], + } + assert s.annotation.number_of_resources == 4 + + simpl_ann = SimplifiedAnnotationInterface(Metadata()) + simpl_ann.add( + { + "chebi": ["CHEBI:17234", "CHEBI:1723456"], + "eco": ["123"], + } + ) + s.annotation.add(simpl_ann) + assert len(s.annotation) == 3 + assert s.annotation.number_of_resources == 6 + + with pytest.raises(TypeError): + s.annotation.add(1) + with pytest.raises(TypeError): + s.annotation.add([1]) + with pytest.raises(ValueError): + s.annotation.add([("chebi",)]) + with pytest.raises(ValueError): + s.annotation.add( + ["https://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:11881"] + ) + with pytest.raises(TypeError): + _ = s.annotation[1] + with pytest.raises(TypeError): + del s.annotation[1] + with pytest.raises(TypeError): + s.annotation[1] = "CHEBI:17234" + assert s.annotation != 1 + + s.metadata.standardized.add( + "https://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:11881" + ) + assert len(s.annotation) == 3 + assert s.annotation.number_of_resources == 6 + assert "CHEBI:1723456" in [idf for v in s.annotation.values() for idf in v] + assert ("chebi", "CHEBI:1723456") in s.annotation.tuples() + + ann_copy = s.annotation.copy() + assert ann_copy == s.annotation + assert ann_copy is not s.annotation + assert isinstance(ann_copy, dict) + + +def test_nested_annotation(data_directory: Path) -> None: + """Test reading annotation from JSON, including nested data. + + Parameters + ---------- + data_directory: Path + """ + # testing via standardized + with data_directory.joinpath("cvterms_nested.json").open("r") as f_cvterms: + cvterms_data = json.load(f_cvterms) + + s = Species() + s.metadata.add_standardized(cvterms_data) + # assert s.annotation == { + # "chebi": ["CHEBI:17627"], + # "eco": ["000000"], + # "kegg.compound": ["C00032"], + # "pubmed": ["1111111"], + # "uniprot": ["P68871", "P69905"], + # } + # check standardized + main_cvt = [ + { + "resources": [ + "https://identifiers.org/uniprot/P69905", + "https://identifiers.org/uniprot/P68871", + "https://identifiers.org/kegg.compound/C00032", + ], + "qualifier": "bqb_hasPart", + }, + { + "qualifier": "bqb_hasPart", + "resources": [ + "https://identifiers.org/uniprot/P69905", + "https://www.uniprot.org/uniprot/P68871", + "https://identifiers.org/chebi/CHEBI:17627", + ], + "annotations": [ + { + "qualifier": "bqb_isDescribedBy", + "resources": [ + PUBMED_EXAMPLE, + "https://identifiers.org/eco/000000", + ], + } + ], + }, + ] + nested_cvt = [ + { + "qualifier": "bqb_isDescribedBy", + "resources": [PUBMED_EXAMPLE, "https://identifiers.org/eco/000000"], + } + ] + assert s.metadata.standardized == main_cvt + nested_data = s.metadata.standardized[1].annotations + assert nested_data == nested_cvt + + additional_cvt = { + "qualifier": "bqm_is", + "resources": ["https://identifiers.org/bigg.metabolite/hemoglobin"], + } + s.metadata.standardized.add(additional_cvt) + assert ( + len( + s.metadata.standardized.resources_for( + qualifier=Qualifier.Biological_hasPart, + ) + ) + == 6 + ) + assert ( + len( + s.metadata.standardized.resources_for( + qualifier=Qualifier.Biological_hasPart, namespace=["uniprot"] + ) + ) + == 3 + ) + assert ( + len( + s.metadata.standardized.resources_for( + qualifier=[Qualifier.Biological_hasPart], + nested=True, + ) + ) + == 8 + ) + assert ( + len( + s.metadata.standardized.resources_for( + qualifier=Qualifier.Biological_hasPart, + namespace="pubmed", + nested=True, + ) + ) + == 1 + ) + assert ( + len( + s.metadata.standardized.resources_for( + qualifier=QualifiersAlias.Any_is, + nested=True, + ) + ) + == 1 + ) + + +def test_cvterms_from_ecoli_xml(annotation_model: Model) -> None: + """Test the new and old style annotations of an ecoli model.""" + qualifier_set = { + Qualifier(qual) for qual in ["bqb_hasTaxon", "bqm_is", "bqm_isDescribedBy"] + } + nested_cvt = [ + { + "qualifier": "bqb_isDescribedBy", + "resources": [PUBMED_EXAMPLE], + }, + { + "qualifier": "bqb_isDescribedBy", + "resources": [ECO_EXAMPLE], + }, + ] + ecoli_model_cvterm = StandardizedAnnotationStore.from_data(ECOLI_MODEL_ANNOTATIONS) + print(ecoli_model_cvterm.to_list_of_dicts()) + print(annotation_model.metadata.standardized.to_list_of_dicts()) + xml_model_cvterms = annotation_model.metadata.standardized + model_cvterms_qualifier_set = xml_model_cvterms.qualifiers + assert qualifier_set == model_cvterms_qualifier_set + assert xml_model_cvterms == ecoli_model_cvterm + assert ( + len( + annotation_model.metadata.standardized.query( + "bqm_isDescribedBy", "qualifier" + ) + ) + == 2 + ) + nested_data = annotation_model.metadata.standardized.query("bqm_is", "qualifier")[ + 0 + ].annotations + assert nested_data == nested_cvt + + # check backwards compatibility + # assert annotation_model.annotation.metadata == { + # "bigg.model": ["e_coli_core"], + # "doi": ["10.1128/ecosalplus.10.2.1"], + # "eco": ["ECO:0000004"], + # "ncbiprotein": ["16128336"], + # "pubmed": ["1111111"], + # "taxonomy": ["511145"], + # } + # annotation_model.annotation.standardized.delete_annotation("coli") + # assert annotation_model.annotation.metadata == { + # "doi": ["10.1128/ecosalplus.10.2.1"], + # "eco": ["ECO:0000004"], + # "ncbiprotein": ["16128336"], + # "pubmed": ["1111111"], + # "taxonomy": ["511145"], + # } + + +def test_writing_xml(annotation_model: Model, tmp_path): + """Test writing a model with annotations to xml (SBML).""" + assert ( + write_sbml_model( + annotation_model, str(tmp_path.joinpath("e_coli_core_writing.xml")) + ) + is None + ) + # TODO: Add more tests here. + + +def test_read_write_json(annotation_model: Model, tmp_path: Path): + """Test writing a model with annotations to JSON.""" + json_path = tmp_path / "e_coli_core_json_writing.json" + print(json_path) + assert save_json_model(annotation_model, json_path, sort=False, pretty=True) is None + + model = load_json_model(json_path) + # Because of changes to eq, to compare using the old format, + # we need annotation.metadata. + # TODO: get comments from cdiener + # assert model.annotation.metadata == { + # "bigg.model": ["e_coli_core"], + # "doi": ["10.1128/ecosalplus.10.2.1"], + # "eco": ["ECO:0000004"], + # "ncbiprotein": ["16128336"], + # "pubmed": ["1111111"], + # "taxonomy": ["511145"], + # } + assert model.metadata.standardized == StandardizedAnnotationStore.from_data( + ECOLI_MODEL_ANNOTATIONS + ) + assert model.metadata.standardized == ECOLI_MODEL_ANNOTATIONS + + for met_id in model.metabolites.list_attr("id"): + original_met_annot = annotation_model.metabolites.get_by_id(met_id).metadata + new_met_annot = model.metabolites.get_by_id(met_id).metadata + assert original_met_annot == new_met_annot + + for rxn_id in model.reactions.list_attr("id"): + original_rxn_annot = annotation_model.reactions.get_by_id(rxn_id).metadata + new_rxn_annot = model.reactions.get_by_id(rxn_id).metadata + assert original_rxn_annot == new_rxn_annot + + +def test_read_write_sbml(annotation_model: Model, tmp_path: Path): + """Test annotation consistency when writing and reading an SBML file.""" + out_path = tmp_path / "e_coli_core_json_writing.sbml" + assert write_sbml_model(annotation_model, str(out_path)) is None + + model = read_sbml_model(str(out_path)) + # Because of changes to eq, to compare using the old format, + # we need annotation.metadata + # TODO: get comments from cdiener + # assert model.annotation.metadata == { + # "bigg.model": ["e_coli_core"], + # "doi": ["10.1128/ecosalplus.10.2.1"], + # "eco": ["ECO:0000004"], + # "ncbiprotein": ["16128336"], + # "pubmed": ["1111111"], + # "taxonomy": ["511145"], + # } + assert model.metadata.standardized == StandardizedAnnotationStore.from_data( + ECOLI_MODEL_ANNOTATIONS + ) + assert model.metadata.standardized == ECOLI_MODEL_ANNOTATIONS + + for met_id in model.metabolites.list_attr("id"): + original_met_annot = annotation_model.metabolites.get_by_id(met_id).metadata + new_met_annot = model.metabolites.get_by_id(met_id).metadata + assert original_met_annot == new_met_annot + + for rxn_id in model.reactions.list_attr("id"): + original_rxn_annot = annotation_model.reactions.get_by_id(rxn_id).metadata + new_rxn_annot = model.reactions.get_by_id(rxn_id).metadata + assert original_rxn_annot == new_rxn_annot + + +def test_read_old_json_model(data_directory): + """Test reading a schema v1 json model with old-style annotations.""" + model = load_json_model(Path(data_directory / "valid_annotation_format.json")) + meta = model.metabolites[0] + + assert meta.annotation["bigg.reaction"] == ["PFK26"] + assert meta.annotation["kegg.reaction"] == ["R02732"] + assert meta.annotation == { + "bigg.reaction": ["PFK26"], + "kegg.reaction": ["R02732"], + "rhea": ["15656"], + } + + +# TODO: Fix this test. The mini.json model is currently not in the old format. +# def test_read_old_json_model(data_directory): +# """Test reading the annotations of an old format JSON model.""" +# model = load_json_model(Path(data_directory) / "mini.json") +# meta = model.metabolites[0] +# # assert meta.annotation == { +# # "bigg.metabolite": ["13dpg"], +# # "biocyc": ["DPG"], +# # "chebi": [ +# # "CHEBI:11881", +# # "CHEBI:16001", +# # "CHEBI:1658", +# # "CHEBI:20189", +# # "CHEBI:57604", +# # ], +# # "hmdb": ["HMDB01270"], +# # "kegg.compound": ["C00236"], +# # "pubchem.substance": ["3535"], +# # "reactome": ["REACT_29800"], +# # "seed.compound": ["cpd00203"], +# # "unipathway.compound": ["UPC00236"], +# # } +# +# # testing standardized +# expected_cvterms = StandardizedAnnotationStore.from_data( +# [{"qualifier": "bqb_is", "resources": RESOURCE_LIST}] +# ) +# assert meta.metadata.standardized == expected_cvterms +# assert meta.metadata.standardized == [ +# {"qualifier": "bqb_is", "identifeirs": RESOURCE_LIST} +# ] +# + + +def test_cvtermlist_query(): + """Test the query functionality of StandardizedAnnotationStore.""" + resources = RESOURCE_LIST + resources.extend( + [ + "https://identifiers.org/uniprot/P69905", + "https://identifiers.org/uniprot/P68871", + "https://identifiers.org/kegg.compound/C00032", + "https://identifiers.org/chebi/CHEBI:17627", + "https://identifiers.org/chebi/CHEBI:43215", + "https://identifiers.org/CHebi/CHEBI:11881", + ] + ) + cvtermlist = StandardizedAnnotationStore() + for i, res in enumerate(resources): + cvtermlist.extend( + [ + StandardizedAnnotation( + qualifier=list(Qualifier._value2member_map_)[i], resources=res + ) + ] + ) + + cvtermlist.append( + StandardizedAnnotation( + resources=ECO_EXAMPLE, + annotations=[ + StandardizedAnnotation( + qualifier=Qualifier.Biological_isDescribedBy, + resources=PUBMED_EXAMPLE, + ) + ], + qualifier=list(Qualifier._value2member_map_)[19], + ) + ) + print(cvtermlist) + # assert isinstance( + # cvtermlist.query(search_function="bqm", attribute="qualifier"), + # StandardizedAnnotationStore, + # ) + # The result type is now just a list, since a StandardizedAnnotationStore should be + # used only for actual sets of annotations. This should maybe be a frozen variant of + # the StandardizedAnnotationStore, but for now it is a list. + assert isinstance( + cvtermlist.query(search_function="bqm", attribute="qualifier"), + StandardizedAnnotationList, + ) + assert len(cvtermlist.query(search_function="bqm", attribute="qualifier")) == 6 + assert ( + len(cvtermlist.query(search_function="Modelling", attribute="qualifier")) == 6 + ) + assert ( + len( + cvtermlist.query(search_function="bqb_isDescribedBy", attribute="qualifier") + ) + == 1 + ) + assert ( + len( + cvtermlist.query( + search_function="Biological_isDescribedBy", attribute="qualifier" + ) + ) + == 1 + ) + assert ( + len(cvtermlist.query(search_function=r"bqm_is\S+", attribute="qualifier")) == 3 + ) + assert ( + len( + cvtermlist.query( + search_function=lambda x: list(Qualifier._value2member_map_).index( + x.value + ) + > 18, + attribute="qualifier", + ) + ) + == 1 + ) + + # assert ( + # len( + # cvtermlist.query( + # search_function=lambda x: x.nested_data, + # attribute="external_resources" + # ) + # ) + # == 1 + # ) + # assert ( + # len(cvtermlist.query(search_function="chebi", attribute="external_resources")) + # == 7 + # ) + # + # assert len(cvtermlist.query(search_function="chebi", attribute="resources")) == 7 + # assert ( + # len(cvtermlist.query(search_function=r"[cC][hH]EBI", attribute="resources")) + # == 8 + # ) + # assert len(cvtermlist.query(search_function="pubmed", attribute="resources")) == 1 + # + assert ( + len(cvtermlist.query(search_function=lambda x: x.qualifier.value == "bqm_is")) + == 1 + ) + assert ( + len( + cvtermlist.query( + search_function=lambda x: x.qualifier.name == "Modelling_is" + ) + ) + == 1 + ) + + assert len(cvtermlist.query(search_function="chebi")) == 7 + assert len(cvtermlist.query(search_function=r"bqm_is\S+")) == 3 + + +def test_resource(): + """Test the behaviour of resource objects.""" + # ChEBI has the namespace integrated in the identifier. + resource = Resource("http://identifiers.org/chebi/CHEBI:11881") + different_resource = Resource("http://identifiers.org/chebi/CHEBI:16001") + + assert resource != different_resource + assert resource == ("chebi", "CHEBI:11881") + assert resource == "CHEBI:11881" + assert resource != ("chebi",) + assert resource == "http://identifiers.org/chebi/CHEBI:11881" + assert resource == "http://identifiers.org/CHEBI:11881" + assert resource == "https://identifiers.org/chebi/CHEBI:11881" + assert resource == "https://identifiers.org/CHEBI:11881" + assert resource == {"uri": "http://identifiers.org/chebi/CHEBI:11881"} + assert resource == {"namespace": "chebi", "identifier": "CHEBI:11881"} + assert resource != "https://identifiers.org/chebi/11881" + assert resource == ("CHEBI", "CHEBI:11881") + + # OBI is a standard identifier (no integrated namespace). + # It does have different providers that can be specified. + resource = Resource("https://identifiers.org/obi:OBI_0000070") + + assert resource != different_resource + assert resource == ("obi", "OBI_0000070") + assert resource != ("obi", "OBI_0000070", "obi") + assert resource == "http://identifiers.org/obi/OBI_0000070" + assert "http://identifiers.org/obi/OBI_0000070" == resource + assert resource == "http://identifiers.org/obi:OBI_0000070" + assert resource == "obi:OBI_0000070" + assert resource == "https://identifiers.org/obi:OBI_0000070" + assert resource == "https://identifiers.org/ols/obi:OBI_0000070" + assert resource == {"uri": "https://identifiers.org/obi:OBI_0000070"} + assert resource == {"uri": "obi:OBI_0000070"} + assert resource == {"namespace": "obi", "identifier": "OBI_0000070"} + assert resource != "https://identifiers.org/ols/OBI_0000070" + assert resource == ("OBI", "OBI_0000070") + + assert ( + len( + set( + [ + resource, + different_resource, + Resource("obi:OBI_0000070"), + Resource("https://www.uniprot.org/uniprotkb/A0JNW5", strict=False), + ] + ) + ) + == 3 + ) diff --git a/tests/test_core/test_metadata/test_new_style.py b/tests/test_core/test_metadata/test_new_style.py new file mode 100644 index 000000000..6b2965be3 --- /dev/null +++ b/tests/test_core/test_metadata/test_new_style.py @@ -0,0 +1,209 @@ +"""Tests for the metadata structures.""" + +from pathlib import Path +from pprint import pprint + +import pytest + +from cobra import Model +from cobra.core.metadata import Qualifier, StandardizedAnnotation +from cobra.core.metadata.custom import CustomAnnotation +from cobra.core.species import Species +from cobra.io import read_sbml_model, write_sbml_model + + +PUBMED_EXAMPLE = "https://identifiers.org/pubmed/1111111" +ECO_EXAMPLE = "https://identifiers.org/eco/ECO:0000004" +RESOURCE_LIST = [ + "http://identifiers.org/bigg.metabolite/13dpg", + "http://identifiers.org/biocyc/DPG", + "http://identifiers.org/chebi/CHEBI:11881", + "http://identifiers.org/chebi/CHEBI:16001", + "http://identifiers.org/chebi/CHEBI:1658", + "http://identifiers.org/chebi/CHEBI:20189", + "http://identifiers.org/chebi/CHEBI:57604", + "http://identifiers.org/hmdb/HMDB01270", + "http://identifiers.org/kegg.compound/C00236", + "http://identifiers.org/pubchem.substance/3535", + "http://identifiers.org/reactome/REACT_29800", + "http://identifiers.org/seed.compound/cpd00203", + "http://identifiers.org/unipathway.compound/UPC00236", +] + +ECOLI_MODEL_ANNOTATIONS = [ + { + "qualifier": "bqb_hasTaxon", + "resources": ["http://identifiers.org/tanomy/511145"], + }, + { + "qualifier": "bqm_is", + "resources": ["http://identifiers.org/bigg.model/e_coli_core"], + "annotations": [ + { + "qualifier": "bqb_isDescribedBy", + "resources": [PUBMED_EXAMPLE], + }, + { + "qualifier": "bqb_isDescribedBy", + "resources": [ECO_EXAMPLE], + }, + ], + }, + { + "qualifier": "bqm_isDescribedBy", + "resources": ["http://identifiers.org/doi/10.1128/ecosalplus.10.2.1"], + }, + { + "qualifier": "bqm_isDescribedBy", + "resources": ["http://identifiers.org/ncbiprotein/16128336"], + }, +] +COBRA_URL = "https://cobrapy.readthedocs.io/" + + +def test_annotation() -> None: + """Test creating an annotation manually.""" + s = Species() + + # assert s.annotations is None + annotation_1 = StandardizedAnnotation("https://identifiers.org/go/GO:0007268") + # Default qualifier should be bqb_is + assert annotation_1.qualifier == Qualifier.Biological_is + annotation_2 = StandardizedAnnotation( + [ + "https://identifiers.org/wikipathways/WP179", + "https://identifiers.org/reactome/REACT_152", + ], + qualifier=Qualifier.Biological_isVersionOf, + ) + assert len(annotation_2.resources) == 2 + nested_annotations = [ + StandardizedAnnotation( + "https://identifiers.org/pubmed/1111111", + qualifier=Qualifier.Biological_isDescribedBy, + ), + StandardizedAnnotation( + "https://identifiers.org/eco/ECO:0000004", + qualifier=Qualifier.Biological_isDescribedBy, + ), + ] + + annotation_3 = StandardizedAnnotation( + qualifier=Qualifier.Biological_occursIn, + resources=["https://identifiers.org/go/GO:0005764"], + annotations=nested_annotations, + ) + assert len(annotation_3.annotations) == 2 + s.add_annotations([annotation_1, annotation_2, annotation_3]) + # assert len(s.annotations) == 3 + assert len(s.metadata.standardized) == 3 + s.remove_annotations([annotation_2]) + assert len(s.metadata.standardized) == 2 + s.add_annotations(annotation_2) + assert len(s.metadata.standardized) == 3 + with pytest.raises(TypeError): + s.add_annotations([10]) + with pytest.raises(TypeError): + s.remove_annotations([10]) + with pytest.raises(TypeError): + s.metadata = 10 + annotation_2.remove_from_parent() + assert len(s.metadata.standardized) == 2 + # assert s.annotations.custom is None + # assert ( + # len( + # s.annotations.standardized.by_qualifier(Qualifier.Biological_is)[ + # 0 + # ].resources + # ) + # == 2 + # ) + custom_1 = CustomAnnotation(key="cobra_flag", value="starred") + custom_2 = CustomAnnotation(key="cobra_url", uri=COBRA_URL) + s.add_annotations([custom_1, custom_2]) + assert len(s.metadata.custom) == 2 + s.remove_annotations(custom_1) + assert len(s.metadata.custom) == 1 + assert s.metadata.custom["cobra_url"].uri == COBRA_URL + + +def test_read_write_sbml(annotation_model: Model, tmp_path: Path): + """Test annotation consistency when writing and reading an SBML file.""" + out_path = tmp_path / "e_coli_core_json_writing.sbml" + assert write_sbml_model(annotation_model, str(out_path)) is None + + model = read_sbml_model(str(out_path)) + print(model.metadata) + print(model.metadata.standardized) + for ann in model.metadata.standardized: + print(ann) + print(model.metadata.standardized.resources) + pprint(model.metadata.standardized.to_records()) + pprint(model.metadata.standardized.to_list_of_dicts()) + assert len(model.metadata.standardized) == 4 + ann_dict = [ + { + "resources": [ + "http://identifiers.org/taxonomy/511145", + ], + "qualifier": "bqb_hasTaxon", + }, + { + "annotations": [ + { + "resources": [ + "https://identifiers.org/pubmed/1111111", + ], + "qualifier": "bqb_isDescribedBy", + }, + { + "resources": [ + "https://identifiers.org/eco/ECO:0000004", + ], + "qualifier": "bqb_isDescribedBy", + }, + ], + "resources": [ + "http://identifiers.org/bigg.model/e_coli_core", + ], + "qualifier": "bqm_is", + }, + { + "resources": [ + "http://identifiers.org/doi/10.1128/ecosalplus.10.2.1", + ], + "qualifier": "bqm_isDescribedBy", + }, + { + "resources": [ + "http://identifiers.org/ncbiprotein/16128336", + ], + "qualifier": "bqm_isDescribedBy", + }, + ] + assert model.metadata.standardized == ann_dict + # Because of changes to eq, to compare using the old format, + # we need annotation.annotations + # TODO: get comments from cdiener + # assert model.annotation.annotations == { + # "bigg.model": ["e_coli_core"], + # "doi": ["10.1128/ecosalplus.10.2.1"], + # "eco": ["ECO:0000004"], + # "ncbiprotein": ["16128336"], + # "pubmed": ["1111111"], + # "taxonomy": ["511145"], + # } + # assert model.annotation.standardized == CustomAnnotationStore.from_data( + # ECOLI_MODEL_ANNOTATIONS + # ) + # assert model.annotation.standardized == ECOLI_MODEL_ANNOTATIONS + # + # for met_id in model.metabolites.list_attr("id"): + # original_met_annot = annotation_model.metabolites.get_by_id(met_id).annotation + # new_met_annot = model.metabolites.get_by_id(met_id).annotation + # assert original_met_annot == new_met_annot + # + # for rxn_id in model.reactions.list_attr("id"): + # original_rxn_annot = annotation_model.reactions.get_by_id(rxn_id).annotation + # new_rxn_annot = model.reactions.get_by_id(rxn_id).annotation + # assert original_rxn_annot == new_rxn_annot diff --git a/tests/test_core/test_metadata/test_notes.py b/tests/test_core/test_metadata/test_notes.py new file mode 100644 index 000000000..139760194 --- /dev/null +++ b/tests/test_core/test_metadata/test_notes.py @@ -0,0 +1,113 @@ +"""Test the 'notes' property of components.""" + +import os +from pathlib import Path + +from cobra import Metabolite, Model, Reaction +from cobra.io import load_json_model, read_sbml_model, save_json_model, write_sbml_model + + +def test_notes_io(tmp_path: Path) -> None: + """Test if model notes are written and read from/to SBML. + + Parameters + ---------- + tmp_path : pathlib.Path + The path to the temporary test assets store. + + """ + path_to_file = tmp_path / "model_notes.xml" + + # making a minimal cobra model to test notes + model = Model("e_coli_core") + model.notes = {"Remark": "...Model Notes..."} + met = Metabolite("pyr_c", compartment="c") + model.add_metabolites([met]) + met.notes = {"Remark": "Note with \n newline"} + rxn = Reaction("R_ATPM") + model.add_reactions([rxn]) + rxn.notes = {"Remark": "What about me?"} + model.objective_direction = "max" + model.objective = rxn + write_sbml_model(model, str(path_to_file.resolve())) + + # reading the model back + model_after_reading = read_sbml_model(str(path_to_file.resolve())) + met_after_reading = model_after_reading.metabolites.get_by_id("pyr_c") + reaction_after_reading = model_after_reading.reactions.get_by_id("R_ATPM") + + # checking if notes are written to model + assert model_after_reading.notes["Remark"] == "...Model Notes..." + + # checking notes for metabolite and reaction + assert met_after_reading.notes["Remark"] == "Note with \n newline" + assert reaction_after_reading.notes["Remark"] == "What about me?" + + +NEW_VALUE1 = "New Value 1" +NEW_VALUE3 = "New Value 3" + + +def test_notes(data_directory, tmp_path): + """Reading notes from SBML to cobra model.""" + model_path = os.path.join(data_directory, "e_coli_core_for_annotation.xml") + assert os.path.exists(model_path) + model = read_sbml_model(model_path) + rx1 = model.reactions[0] + # keys inside notes dict + list_of_keys = ["Key1", "Key2", "Key3"] + + for key in list_of_keys: + assert key in rx1.notes + + assert rx1.notes["Key1"] == "Value1" + assert rx1.notes["Key2"] == "Value2" + assert rx1.notes["Key3"] == "Value3" + + # modifying already present key-value + rx1.notes["Key1"] = NEW_VALUE1 + rx1.notes["Key3"] = NEW_VALUE3 + + # trying to insert a new key-value + rx1.notes["Key4"] = NEW_VALUE3 + + # checking modified notes dict and string + assert rx1.notes["Key1"] == NEW_VALUE1 + assert rx1.notes["Key2"] == "Value2" + assert rx1.notes["Key3"] == NEW_VALUE3 + assert rx1.notes["Key4"] == NEW_VALUE3 + + # writing and reading back the model + path_to_file = os.path.join(tmp_path, "model_notes.xml") + write_sbml_model(model, path_to_file) + + model_after_reading = read_sbml_model(path_to_file) + rx1_after_reading = model_after_reading.reactions[0] + + # checks after reading model back again + assert rx1_after_reading.notes["Key1"] == NEW_VALUE1 + assert rx1_after_reading.notes["Key2"] == "Value2" + assert rx1_after_reading.notes["Key3"] == NEW_VALUE3 + + +def test_reading_writing_notes(data_directory, tmp_path): + """Test consistency when reading and writing notes.""" + # reading model with notes + model = read_sbml_model( + os.path.join(data_directory, "e_coli_core_for_annotation.xml") + ) + + # checking notes data + rx1 = model.reactions[0] + assert rx1.notes["Key1"] == "Value1" + assert rx1.notes["Key2"] == "Value2" + assert rx1.notes["Key3"] == "Value3" + + # reading and writing in json format + path_to_json = os.path.join(str(tmp_path), "json_notes.json") + save_json_model(model, path_to_json) + model_from_json = load_json_model(path_to_json) + rx1_from_json = model_from_json.reactions[0] + assert rx1_from_json.notes["Key1"] == "Value1" + assert rx1_from_json.notes["Key2"] == "Value2" + assert rx1_from_json.notes["Key3"] == "Value3" diff --git a/tests/test_io/test_annotation.py b/tests/test_io/test_annotation.py index a1aca93bd..c977ad2fd 100644 --- a/tests/test_io/test_annotation.py +++ b/tests/test_io/test_annotation.py @@ -25,26 +25,32 @@ def _check_sbml_annotations(model: "Model") -> None: # {'bigg.model': 'e_coli_core', 'doi': '10.1128/ecosalplus.10.2.1', # 'taxonomy': '511145'} annotation = model.annotation + for x in annotation: + print(x) assert annotation is not None assert len(annotation) == 3 - for key in ["bigg.model", "doi", "taxonomy"]: - assert key in annotation - assert annotation["bigg.model"] == "e_coli_core" - assert annotation["doi"] == "10.1128/ecosalplus.10.2.1" - assert annotation["taxonomy"] == "511145" + assert set(annotation.keys()) == {"bigg.model", "doi", "taxonomy"} + assert annotation["bigg.model"] == ["e_coli_core"] + assert annotation["doi"] == ["10.1128/ecosalplus.10.2.1"] + assert annotation["taxonomy"] == ["511145"] # gene annotation # {'asap': 'ABE-0006162', 'ncbigene': '946368', 'uniprot': 'P33221', - # 'ncbiprotein': 'gi:16129802', 'ecogene': 'EG11809'} + # 'ncbiprotein': '16129802', 'ecogene': 'EG11809'} annotation = model.genes.G1.annotation assert len(annotation) == 5 - for key in ["asap", "ncbigene", "uniprot", "ncbiprotein", "ecogene"]: - assert key in annotation - assert annotation["asap"] == "ABE-0006162" - assert annotation["ncbigene"] == "946368" - assert annotation["uniprot"] == "P33221" - assert annotation["ncbiprotein"] == "16129802" - assert annotation["ecogene"] == "EG11809" + assert set(annotation.keys()) == { + "asap", + "ncbigene", + "uniprot", + "ncbiprotein", + "ecogene", + } + assert annotation["asap"] == ["ABE-0006162"] + assert annotation["ncbigene"] == ["946368"] + assert annotation["uniprot"] == ["P33221"] + assert annotation["ncbiprotein"] == ["16129802"] + assert annotation["ecogene"] == ["EG11809"] # compartment annotation # FIXME: add tests with first class compartment model @@ -63,7 +69,7 @@ def _check_sbml_annotations(model: "Model") -> None: # 'seed.compound': 'cpd00203', 'hmdb': ['HMDB62758', 'HMDB06213'], # 'biocyc': 'META:DPG'} annotation = model.metabolites.A.annotation - for key in [ + assert set(annotation.keys()) == { "inchi", "bigg.metabolite", "chebi", @@ -72,11 +78,10 @@ def _check_sbml_annotations(model: "Model") -> None: "seed.compound", "hmdb", "biocyc", - ]: - assert key in annotation - assert ( - annotation["inchi"] == "InChI=1S/C3H8O2/c1-3(5)2-4/h3-5H,2H2,1H3/t3-/m0/s1" - ) # noqa: E501 + } + assert annotation["inchi"] == [ + "InChI=1S/C3H8O2/c1-3(5)2-4/h3-5H,2H2,1H3/t3-/m0/s1" + ] # noqa: E501 # reaction annotation # {'kegg.reaction': 'R00228', 'sbo': 'SBO:0000375', @@ -84,7 +89,7 @@ def _check_sbml_annotations(model: "Model") -> None: # 'metanetx.reaction': 'MNXR95210', 'bigg.reaction': 'ACALD', # 'biocyc': 'META:ACETALD-DEHYDROG-RXN'} annotation = model.reactions.R1.annotation - for key in [ + assert set(annotation.keys()) == { "kegg.reaction", "sbo", "ec-code", @@ -92,9 +97,8 @@ def _check_sbml_annotations(model: "Model") -> None: "metanetx.reaction", "bigg.reaction", "biocyc", - ]: - assert key in annotation - assert annotation["biocyc"] == "META:ACETALD-DEHYDROG-RXN" + } + assert annotation["biocyc"] == ["META:ACETALD-DEHYDROG-RXN"] def test_read_sbml_annotations(data_directory: Path) -> None: diff --git a/tests/test_io/test_annotation_format.py b/tests/test_io/test_annotation_format.py index 9b9d039cd..0a678bc28 100644 --- a/tests/test_io/test_annotation_format.py +++ b/tests/test_io/test_annotation_format.py @@ -2,8 +2,6 @@ from pathlib import Path -import pytest - from cobra.io import load_json_model, write_sbml_model @@ -19,9 +17,9 @@ def test_load_json_model_valid(data_directory: Path, tmp_path: Path) -> None: path_to_file = data_directory / "valid_annotation_format.json" model = load_json_model(path_to_file) expected = { - "bigg.reaction": [["is", "PFK26"]], - "kegg.reaction": [["is", "R02732"]], - "rhea": [["is", "15656"]], + "bigg.reaction": ["PFK26"], + "kegg.reaction": ["R02732"], + "rhea": ["15656"], } for metabolite in model.metabolites: assert metabolite.annotation == expected @@ -37,5 +35,6 @@ def test_load_json_model_invalid(data_directory: Path) -> None: """ path = data_directory / "invalid_annotation_format.json" - with pytest.raises(TypeError): - load_json_model(path) + model = load_json_model(path) + anno = model.metabolites[0].annotation + assert anno == {"kegg.compound": ["C01468"], "chebi": ["CHEBI:11981"]} diff --git a/tests/test_io/test_json.py b/tests/test_io/test_json.py index 53d9e62fc..656cae00f 100644 --- a/tests/test_io/test_json.py +++ b/tests/test_io/test_json.py @@ -19,16 +19,21 @@ def json_schema_v1() -> Dict[str, Union[str, bool, Any]]: return schema_v1 -def test_validate_json( - cobra_data_directory: Path, json_schema_v1: Dict[str, Union[str, bool, Any]] -) -> None: +@pytest.fixture(scope="module") +def json_schema_v2() -> Dict[str, Union[str, bool, Any]]: + """Fixture for cobra JSON-schema.""" + with files(cio).joinpath("schema_v2.json").open("r") as handle: + schema_v2 = json.load(handle) + return schema_v2 + + +def test_validate_json(cobra_data_directory: Path) -> None: """Validate file according to JSON-schema.""" - jsonschema = pytest.importorskip("jsonschema") - with open( - cobra_data_directory.joinpath("mini.json"), "r", encoding="utf-8" - ) as infile: - loaded = json.load(infile) - assert jsonschema.validate(loaded, json_schema_v1) is None + + errors = cio.validate_json_model( + cobra_data_directory.joinpath("mini.json"), json_schema_version=2 + ) + assert next(iter(errors), None) is None def test_load_json_model( @@ -47,29 +52,25 @@ def test_load_json_model( def test_save_json_model( tmp_path: Path, mini_model: Model, - json_schema_v1: Dict[str, Union[str, bool, Any]], ) -> None: """Test the writing of JSON model.""" - jsonschema = pytest.importorskip("jsonschema") output_file = tmp_path.joinpath("mini.json") cio.save_json_model(mini_model, output_file, pretty=True) # validate against JSONSchema - with open(output_file, "r") as infile: - loaded = json.load(infile) - assert jsonschema.validate(loaded, json_schema_v1) is None + errors = cio.validate_json_model(output_file, json_schema_version=2) + assert next(iter(errors), None) is None output_file.unlink() cio.save_json_model(mini_model, str(output_file), pretty=True) # validate against JSONSchema - with open(output_file, "r") as infile: - loaded = json.load(infile) - assert jsonschema.validate(loaded, json_schema_v1) is None + errors = cio.validate_json_model(output_file, json_schema_version=2) + assert next(iter(errors), None) is None output_file.unlink() with output_file.open("w+") as json_outfile: cio.save_json_model(mini_model, json_outfile, pretty=True) # validate against JSONSchema json_outfile.seek(0, 0) - loaded = json.load(json_outfile) - assert jsonschema.validate(loaded, json_schema_v1) is None + errors = cio.validate_json_model(json_outfile, json_schema_version=2) + assert next(iter(errors), None) is None def test_reaction_bounds_json(data_directory: Path, tmp_path: Path) -> None: diff --git a/tests/test_io/test_mat.py b/tests/test_io/test_mat.py index e23529b99..af90760ea 100644 --- a/tests/test_io/test_mat.py +++ b/tests/test_io/test_mat.py @@ -311,7 +311,7 @@ def test_mat_model_wrong_caps( (data_directory / "mini_wrong_key_caps.mat").resolve() ) assert compare_models(mat_model, mat_wrong_caps_model) is None - assert mat_wrong_caps_model.reactions.get_by_id("LDH_D").annotation == { + EXPECTED_RXN_ANNOTATION = { "rhea": ["16369", "16370", "16371", "16372"], "metanetx.reaction": ["MNXR101037"], "kegg.reaction": ["R00704"], @@ -320,33 +320,55 @@ def test_mat_model_wrong_caps( "biocyc": ["META:DLACTDEHYDROGNAD-RXN"], "sbo": ["SBO:0000375"], } + actual_rxn_annotation = dict( + mat_wrong_caps_model.reactions.get_by_id("LDH_D").annotation + ) + expected_rxn_keys = EXPECTED_RXN_ANNOTATION.keys() + actual_rxn_keys = actual_rxn_annotation.keys() + assert expected_rxn_keys == actual_rxn_keys + for key in actual_rxn_keys: + assert EXPECTED_RXN_ANNOTATION[key] == actual_rxn_annotation[key] for rxn in mat_model.reactions.list_attr("id"): assert ( mat_wrong_caps_model.reactions.get_by_id(rxn).annotation == mat_model.reactions.get_by_id(rxn).annotation ) - assert mat_wrong_caps_model.metabolites.get_by_id("pyr_c").annotation == { + + EXPECTED_MAT_ANNOTATION = { "seed.compound": ["cpd00020"], "unipathway.compound": ["UPC00022"], "lipidmaps": ["LMFA01060077"], - "reactome": ["REACT_113557", "REACT_389680", "REACT_29398"], + "reactome": sorted(["REACT_113557", "REACT_389680", "REACT_29398"]), "biocyc": ["PYRUVATE"], - "chebi": [ - "CHEBI:15361", - "CHEBI:14987", - "CHEBI:8685", - "CHEBI:32816", - "CHEBI:45253", - "CHEBI:26466", - "CHEBI:26462", - ], + "chebi": sorted( + [ + "CHEBI:15361", + "CHEBI:14987", + "CHEBI:8685", + "CHEBI:32816", + "CHEBI:45253", + "CHEBI:26466", + "CHEBI:26462", + ] + ), "pubchem.substance": ["3324"], "bigg.metabolite": ["pyr"], "cas": ["127-17-3"], "hmdb": ["HMDB00243"], "kegg.compound": ["C00022"], } + actual_met_annotation = mat_wrong_caps_model.metabolites.get_by_id( + "pyr_c" + ).annotation + expected_met_keys = EXPECTED_MAT_ANNOTATION.keys() + actual_met_keys = actual_met_annotation.keys() + assert expected_met_keys == actual_met_keys + for key in actual_met_keys: + assert EXPECTED_MAT_ANNOTATION[key] == actual_met_annotation[key] for met in mat_model.metabolites.list_attr("id"): + print(met) + print(mat_wrong_caps_model.metabolites.get_by_id(met).annotation.to_dict()) + print(mat_model.metabolites.get_by_id(met).annotation.to_dict()) assert ( mat_wrong_caps_model.metabolites.get_by_id(met).annotation == mat_model.metabolites.get_by_id(met).annotation diff --git a/tests/test_io/test_notes.py b/tests/test_io/test_notes.py deleted file mode 100644 index da441e30c..000000000 --- a/tests/test_io/test_notes.py +++ /dev/null @@ -1,43 +0,0 @@ -"""Test proper reading of SBML notes.""" - -from pathlib import Path - -from cobra import Metabolite, Model, Reaction -from cobra.io import read_sbml_model, write_sbml_model - - -def test_notes(tmp_path: Path) -> None: - """Test if model notes are written in SBML. - - Parameters - ---------- - tmp_path : pathlib.Path - The path to the temporary test assets store. - - """ - path_to_file = tmp_path / "model_notes.xml" - - # making a minimal cobra model to test notes - model = Model("test_notes_model") - model.notes["Remark"] = "...Model Notes..." - met = Metabolite("pyr_c", compartment="c") - model.add_metabolites([met]) - met.notes["Remark"] = "Note with \n newline" - rxn = Reaction("R_ATPM") - model.add_reactions([rxn]) - rxn.notes["Remark"] = "What about me?" - model.objective_direction = "max" - model.objective = rxn - write_sbml_model(model, str(path_to_file.resolve())) - - # reading the model back - model_after_reading = read_sbml_model(str(path_to_file.resolve())) - met_after_reading = model_after_reading.metabolites.get_by_id("pyr_c") - reaction_after_reading = model_after_reading.reactions.get_by_id("R_ATPM") - - # checking if notes are written to model - assert model_after_reading.notes["Remark"] == "...Model Notes..." - - # checking notes for metabolite and reaction - assert met_after_reading.notes["Remark"] == "Note with \n newline" - assert reaction_after_reading.notes["Remark"] == "What about me?" diff --git a/tests/test_io/test_sbml.py b/tests/test_io/test_sbml.py index b68441150..000133da3 100644 --- a/tests/test_io/test_sbml.py +++ b/tests/test_io/test_sbml.py @@ -6,13 +6,14 @@ from pathlib import Path from pickle import load from tempfile import gettempdir -from typing import List, Tuple +from typing import Callable, List, Tuple import pytest from _pytest.fixtures import SubRequest import cobra from cobra import Model +from cobra.core.metadata import Metadata from cobra.io import read_sbml_model, validate_sbml_model, write_sbml_model @@ -38,6 +39,30 @@ ], ) trials: List[IOTrial] = [ + IOTrial( + "fbc3", + "mini.pickle", + "mini_fbc3.xml", + read_sbml_model, + write_sbml_model, + validate_sbml_model, + ), + IOTrial( + "fbc3Gz", + "mini.pickle", + "mini_fbc3.xml.gz", + read_sbml_model, + write_sbml_model, + None, # If None is replaced with validate_sbml_model, it seems to work + ), + IOTrial( + "fbc3Bz2", + "mini.pickle", + "mini_fbc3.xml.bz2", + read_sbml_model, + write_sbml_model, + None, + ), IOTrial( "fbc2", "mini.pickle", @@ -52,7 +77,7 @@ "mini_fbc2.xml.gz", read_sbml_model, write_sbml_model, - None, + None, # If None is replaced with validate_sbml_model, it seems to work ), IOTrial( "fbc2Bz2", @@ -271,6 +296,7 @@ def io_trial( # test writing the model within a context with a non-empty stack with test_model: test_model.objective = test_model.objective + test_model.id = f"{test_model.id}_mod" request.param.write_function(test_model, test_output_filename) reread_model = request.param.read_function(test_output_filename) unlink(test_output_filename) @@ -316,7 +342,63 @@ def test_from_sbml_string(data_directory: Path) -> None: TestCobraIO.compare_models(name="read from string", model1=model1, model2=model2) -@pytest.mark.skip(reason="Model history currently not written") +def test_document_history(tmp_path: Path) -> None: + """Testing reading and writing of ModelHistory for SBMLDocument. + + Parameters + ---------- + tmp_path: Path + Directory to use for temporary data. + """ + model = Model("test") + history = { + "creators": [ + { + "name": "Max Mustermann", + "organisation": "Muster University", + "email": "muster@university.com", + } + ], + "created_date": "2019-10-20T12:34:32Z", + "modified_dates": ["2019-10-20T12:35:32Z"], + } + metadata = Metadata(history=history) + model._sbml = {"metadata": metadata} + + sbml_path = join(str(tmp_path), "test.xml") + with open(sbml_path, "w") as f_out: + write_sbml_model(model, f_out) + + with open(sbml_path, "r") as f_in: + lines = f_in.readlines() + print("".join(lines)) + + with open(sbml_path, "r") as f_in: + model2 = read_sbml_model(f_in) + + print(model2._sbml) + print(model2._sbml["metadata"]) + print(model2._sbml["metadata"].history) + print(model2._sbml["metadata"].history.creators) + + assert "metadata" in model2._sbml + assert len(model2._sbml["metadata"].history.creators) == 1 + c = model2._sbml["metadata"].history.creators[0] + assert c.name == "Max Mustermann" + assert c.organisation == "Muster University" + assert c.email == "muster@university.com" + + assert ( + model2._sbml["metadata"].history.created_date.isoformat() + == "2019-10-20T12:34:32+00:00" + ) + assert len(model2._sbml["metadata"].history._modified_dates) == 1 + assert ( + model2._sbml["metadata"].history._modified_dates[0].isoformat() + == "2019-10-20T12:35:32+00:00" + ) + + def test_model_history(tmp_path: Path) -> None: """Testing reading and writing of ModelHistory. @@ -326,31 +408,45 @@ def test_model_history(tmp_path: Path) -> None: Directory to use for temporary data. """ model = Model("test") - model._sbml = { + history = { "creators": [ { - "familyName": "Mustermann", - "givenName": "Max", + "name": "Max Mustermann", "organisation": "Muster University", "email": "muster@university.com", } - ] + ], + "created_date": "2019-10-20T12:34:32Z", + "modified_dates": ["2019-10-20T12:35:32Z"], } + model.metadata = Metadata(history=history) + assert len(model.metadata.history.creators) == 1 sbml_path = tmp_path / "test.xml" with open(sbml_path, "w") as f_out: write_sbml_model(model, f_out) + with open(sbml_path, "r") as f_in: + lines = f_in.readlines() + print("".join(lines)) + with open(sbml_path, "r") as f_in: model2 = read_sbml_model(f_in) - assert "creators" in model2._sbml - assert len(model2._sbml["creators"]) == 1 - c = model2._sbml["creators"][0] - assert c["familyName"] == "Mustermann" - assert c["givenName"] == "Max" - assert c["organisation"] == "Muster University" - assert c["email"] == "muster@university.com" + assert len(model2.metadata.history.creators) == 1 + c = model2.metadata.history.creators[0] + assert c.name == "Max Mustermann" + assert c.organisation == "Muster University" + assert c.email == "muster@university.com" + + assert ( + model2.metadata.history.created_date.isoformat() == "2019-10-20T12:34:32+00:00" + ) + assert len(model2.metadata.history._modified_dates) == 1 + assert ( + model2.metadata.history._modified_dates[0].isoformat() + == "2019-10-20T12:35:32+00:00" + ) def test_groups(data_directory: Path, tmp_path: Path) -> None: @@ -579,7 +675,7 @@ def test_gprs(large_model: Model, tmp_path: Path) -> None: def test_identifiers_annotation() -> None: """Test annotation with identifiers.""" - from cobra.io.sbml import _parse_annotation_info + from cobra.core.metadata.resource import parse_identifiers_uri for uri in [ "http://identifiers.org/chebi/CHEBI:000123", @@ -587,7 +683,7 @@ def test_identifiers_annotation() -> None: "http://identifiers.org/CHEBI:000123", "https://identifiers.org/CHEBI:000123", ]: - data = _parse_annotation_info(uri) + data = parse_identifiers_uri(uri) assert data assert data[0] == "chebi" assert data[1] == "CHEBI:000123" @@ -598,7 +694,7 @@ def test_identifiers_annotation() -> None: "http://identifiers.org/taxonomy:9602", "https://identifiers.org/taxonomy:9602", ]: - data = _parse_annotation_info(uri) + data = parse_identifiers_uri(uri) assert data assert data[0] == "taxonomy" assert data[1] == "9602" @@ -607,7 +703,7 @@ def test_identifiers_annotation() -> None: "http://identifier.org/taxonomy/9602", "https://test.com", ]: - data = _parse_annotation_info(uri) + data = parse_identifiers_uri(uri) assert data is None @@ -618,8 +714,6 @@ def test_smbl_with_notes(data_directory: Path, tmp_path: Path) -> None: ---------- data_directory: Path Directory where the data is. - tmp_path: Path - Directory to use for temporary data. """ sbml_path = join(data_directory, "example_notes.xml") model = read_sbml_model(sbml_path) @@ -645,41 +739,45 @@ def test_smbl_with_notes(data_directory: Path, tmp_path: Path) -> None: } metabolite_annotations = { "2hb_e": { - "sbo": "SBO:0000247", - "inchi": "InChI=1S/C4H8O3/c1-2-3(5)4(6)7/h3,5H,2H2,1H3,(H,6,7)", - "chebi": "CHEBI:1148", + "sbo": ["SBO:0000247"], + "inchi": ["InChI=1S/C4H8O3/c1-2-3(5)4(6)7/h3,5H,2H2,1H3,(H,6,7)"], + "chebi": ["CHEBI:1148"], }, "nad_e": { - "sbo": "SBO:0000247", - "inchi": "InChI=1S/C21H27N7O14P2/c22-17-12-19(" - "25-7-24-17)28(8-26-12)21-16(32)14(30)11(" - "41-21)6-39-44(36,37)42-43(34,35)38-5-10-13(29)15(" - "31)20(40-10)27-3-1-2-9(4-27)18(" - "23)33/h1-4,7-8,10-11,13-16,20-21,29-32H,5-6H2," - "(H5-,22,23,24,25,33,34,35,36,37)/p-1/t10-," - "11-,13-,14-,15-,16-,20-,21-/m1/s1", - "chebi": "CHEBI:57540", + "sbo": ["SBO:0000247"], + "inchi": [ + "InChI=1S/C21H27N7O14P2/c22-17-12-19(" + "25-7-24-17)28(8-26-12)21-16(32)14(30)11(" + "41-21)6-39-44(36,37)42-43(34,35)38-5-10-13(29)15(" + "31)20(40-10)27-3-1-2-9(4-27)18(" + "23)33/h1-4,7-8,10-11,13-16,20-21,29-32H,5-6H2," + "(H5-,22,23,24,25,33,34,35,36,37)/p-1/t10-," + "11-,13-,14-,15-,16-,20-,21-/m1/s1" + ], + "chebi": ["CHEBI:57540"], }, "h_e": { - "sbo": "SBO:0000247", - "inchi": "InChI=1S/p+1/i/hH", - "chebi": "CHEBI:24636", + "sbo": ["SBO:0000247"], + "inchi": ["InChI=1S/p+1/i/hH"], + "chebi": ["CHEBI:24636"], }, "2obut_e": { - "sbo": "SBO:0000247", - "inchi": "InChI=1S/C4H6O3/c1-2-3(5)4(6)7/h2H2,1H3,(H,6,7)/p-1", - "chebi": "CHEBI:16763", + "sbo": ["SBO:0000247"], + "inchi": ["InChI=1S/C4H6O3/c1-2-3(5)4(6)7/h2H2,1H3,(H,6,7)/p-1"], + "chebi": ["CHEBI:16763"], }, "nadh_e": { - "sbo": "SBO:0000247", - "inchi": "InChI=1S/C21H29N7O14P2/c22-17-12-19(" - "25-7-24-17)28(8-26-12)21-16(32)14(30)11(" - "41-21)6-39-44(36,37)42-43(34,35)38-5-10-13(" - "29)15(31)20(40-10)27-3-1-2-9(4-27)18(" - "23)33/h1,3-4,7-8,10-11,13-16,20-21,29-32H,2," - "5-6H2,(H2,23,33)(H,34,35)(H,36,37)(H2,22,24," - "25)/p-2/t10-,11-,13-,14-,15-,16-,20-,21-/m1/s1", - "chebi": "CHEBI:57945", + "sbo": ["SBO:0000247"], + "inchi": [ + "InChI=1S/C21H29N7O14P2/c22-17-12-19(" + "25-7-24-17)28(8-26-12)21-16(32)14(30)11(" + "41-21)6-39-44(36,37)42-43(34,35)38-5-10-13(" + "29)15(31)20(40-10)27-3-1-2-9(4-27)18(" + "23)33/h1,3-4,7-8,10-11,13-16,20-21,29-32H,2," + "5-6H2,(H2,23,33)(H,34,35)(H,36,37)(H2,22,24," + "25)/p-2/t10-,11-,13-,14-,15-,16-,20-,21-/m1/s1" + ], + "chebi": ["CHEBI:57945"], }, } reaction_notes = { @@ -689,8 +787,8 @@ def test_smbl_with_notes(data_directory: Path, tmp_path: Path) -> None: "GENE_ASSOCIATION": "(HGNC:8546 and HGNC:8548) or (HGNC:8547 and HGNC:8548)", } reaction_annotations = { - "sbo": "SBO:0000176", - "ec-code": "1.1.1.27", + "sbo": ["SBO:0000176"], + "ec-code": ["1.1.1.27"], "pubmed": ["10108", "21765"], } @@ -745,6 +843,16 @@ def test_stable_gprs(data_directory: Path, tmp_path: Path) -> None: ) +def test_writing_xml_with_annotation( + compare_models: Callable, data_directory: Path, tmp_path: Path +): + """Test consistency when reading and writing models to SBML.""" + model = read_sbml_model(str(join(data_directory, "e_coli_core_for_annotation.xml"))) + write_sbml_model(model, str(join(tmp_path, "e_coli_core_writing.xml"))) + reread_model = read_sbml_model(str(join(tmp_path, "e_coli_core_writing.xml"))) + compare_models(model, reread_model) + + def test_history(data_directory: Path) -> None: """Test that the history is read from the model.""" mini = read_sbml_model(join(data_directory, "mini_history.xml")) diff --git a/tests/test_manipulation/test_annotate.py b/tests/test_manipulation/test_annotate.py index f1fa0d85e..c344d7255 100644 --- a/tests/test_manipulation/test_annotate.py +++ b/tests/test_manipulation/test_annotate.py @@ -7,7 +7,7 @@ def test_sbo_annotation(model: Model) -> None: """Test SBO annotation function.""" rxns = model.reactions - rxns.EX_o2_e.annotation.clear() + rxns.get_by_id("EX_o2_e").annotation.sbo = "" fake_DM = Reaction("DM_h_c") model.add_reactions([fake_DM]) fake_DM.add_metabolites({model.metabolites.get_by_id("h_c"): -1}) @@ -15,6 +15,6 @@ def test_sbo_annotation(model: Model) -> None: # an existing SBO annotation rxns.get_by_id("EX_h_e").annotation["sbo"] = "SBO:0000628" add_SBO(model) - assert rxns.EX_o2_e.annotation["sbo"] == "SBO:0000627" - assert rxns.DM_h_c.annotation["sbo"] == "SBO:0000628" - assert rxns.EX_h_e.annotation["sbo"] == "SBO:0000628" + assert rxns.EX_o2_e.annotation["sbo"] == ["SBO:0000627"] + assert rxns.DM_h_c.annotation["sbo"] == ["SBO:0000628"] + assert rxns.EX_h_e.annotation["sbo"] == ["SBO:0000628"] diff --git a/tests/test_manipulation/test_delete.py b/tests/test_manipulation/test_delete.py index c745a1efb..d79f48527 100644 --- a/tests/test_manipulation/test_delete.py +++ b/tests/test_manipulation/test_delete.py @@ -110,7 +110,7 @@ def test_gene_knockout(salmonella: Model) -> None: assert expected_reactions == knocked_out_reactions with salmonella: expected_reactions = [salmonella.reactions.get_by_id("4PEPTabcpp")] - knocked_out_reactions = knock_out_model_genes(salmonella, ["STM1746.S"]) + knocked_out_reactions = knock_out_model_genes(salmonella, ["STM1746_S"]) assert expected_reactions == knocked_out_reactions knocked_out_reactions = knock_out_model_genes(salmonella, gene_list) assert len(knocked_out_reactions) == 13 diff --git a/tox.ini b/tox.ini index 4e930f57f..f188e369a 100644 --- a/tox.ini +++ b/tox.ini @@ -39,14 +39,14 @@ commands = [testenv:isort] skip_install = True deps= - isort ==6.0.1 + isort >=5.13.2 commands= isort --check-only --diff {toxinidir}/src/cobra {toxinidir}/setup.py {toxinidir}/tests [testenv:black] skip_install = True deps= - black ==25.1.0 + black ==23.12.1 commands= black --check --diff {toxinidir}/src/cobra {toxinidir}/setup.py {toxinidir}/tests @@ -122,6 +122,7 @@ known_third_party = ruamel.yaml scipy swiglpk + jsonschema [flake8] exclude =
Reaction identifier{format_long_string( - self.id, 100)}Reaction identifier{ + format_long_string(self.id, 100)}
Name{format_long_string( - self.name, 100)}Name{ + format_long_string(self.name, 100)}
Memory address {f"{id(self):#x}"}
Stoichiometry -

{format_long_string( - self.build_reaction_string(), 200)}

-

{format_long_string( - self.build_reaction_string(True), 200)}

+

{ + format_long_string(self.build_reaction_string(), 200) + }

+

{ + format_long_string(self.build_reaction_string(True), 200)}

GPR{format_long_string( - self.gene_reaction_rule, 100)}GPR{ + format_long_string(self.gene_reaction_rule, 100)}
Lower bound{self.lower_bound}