From 57f82b080598123aed138ebf3e9001877a19449d Mon Sep 17 00:00:00 2001 From: "Documenter.jl" <documenter@juliadocs.github.io> Date: Wed, 28 Jul 2021 12:10:36 +0000 Subject: [PATCH] build based on 51f6f8f --- dev/advanced/1_variants/index.html | 2 +- dev/advanced/2_custom_model/index.html | 2 +- dev/advanced/index.html | 2 +- dev/functions/index.html | 156 +++++++++--------- dev/howToContribute/index.html | 2 +- dev/index.html | 2 +- .../1_loading_converting_saving.ipynb | Bin 25708 -> 25708 bytes .../1_loading_converting_saving/index.html | 2 +- dev/notebooks/2_finding_balance/index.html | 2 +- dev/notebooks/3_basic_stdmodel_usage.ipynb | Bin 22999 -> 22977 bytes .../3_basic_stdmodel_usage/index.html | 2 +- .../4_basic_core_coupled_usage/index.html | 2 +- .../5_basic_stdmodel_construction/index.html | 2 +- dev/notebooks/6_screening.ipynb | Bin 113179 -> 105927 bytes dev/notebooks/6_screening/index.html | 2 +- dev/notebooks/7_community_model/index.html | 2 +- dev/notebooks/8_custom_model/index.html | 2 +- dev/notebooks/index.html | 2 +- dev/search/index.html | 2 +- dev/tutorials/1_loading/index.html | 2 +- dev/tutorials/2_analysis/index.html | 2 +- dev/tutorials/3_hpc/index.html | 2 +- dev/tutorials/4_modifying/index.html | 2 +- dev/tutorials/index.html | 2 +- 24 files changed, 98 insertions(+), 98 deletions(-) diff --git a/dev/advanced/1_variants/index.html b/dev/advanced/1_variants/index.html index 11942588e..c302ac7f4 100644 --- a/dev/advanced/1_variants/index.html +++ b/dev/advanced/1_variants/index.html @@ -87,4 +87,4 @@ end</code></pre><p>In turn, these variants can be used in <a href="../../functio nothing nothing [7.47738193404817, 1.8840414375838503e-8, 4.860861010127701, -16.023526104614593, … ] - [7.47738193404817, 1.8840414375838503e-8, 4.860861010127701, -16.023526104614593, … ]</code></pre></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> + [7.47738193404817, 1.8840414375838503e-8, 4.860861010127701, -16.023526104614593, … ]</code></pre></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/advanced/2_custom_model/index.html b/dev/advanced/2_custom_model/index.html index 294da50d3..5b9061777 100644 --- a/dev/advanced/2_custom_model/index.html +++ b/dev/advanced/2_custom_model/index.html @@ -43,4 +43,4 @@ Dict{String, Float64} with 5 entries: "rxn4" => 1.0 </code></pre><h2 id="Writing-generic-model-modifications"><a class="docs-heading-anchor" href="#Writing-generic-model-modifications">Writing generic model modifications</a><a id="Writing-generic-model-modifications-1"></a><a class="docs-heading-anchor-permalink" href="#Writing-generic-model-modifications" title="Permalink"></a></h2><p>The custom model structure can also be made compatible with many of the existing variant-generating functions and analysis modifiers.</p><p>The functions prepared for use as "variants" in <a href="../../functions/#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>, usually prefixed by <code>with_</code>, have their generic variants that only call simpler, overloadable functions for each specific model. This choice is based on the overloading dispatch system of Julia. For example,<a href="../../functions/#COBREXA.with_removed_metabolites-Tuple"><code>with_removed_metabolites</code></a> is implemented very generically by reducing the problem to some specific <a href="../../functions/#COBREXA.remove_metabolites-Tuple{CoreModel, Any}"><code>remove_metabolites</code></a> functions selected by the dispatch, as follows:</p><pre><code class="language-julia">with_removed_metabolites(args...; kwargs...) = m -> remove_metabolites(m, args...; kwargs...)</code></pre><p>To be able to use <a href="../../functions/#COBREXA.with_removed_metabolites-Tuple"><code>with_removed_metabolites</code></a> in your model, we can just overload the actual inner function. For the simple circular model, the modification might as well look like this:</p><pre><code class="language-julia">COBREXA.remove_metabolites(m::CircularModel, n::Int) = - return CircularModel(m.size - n)</code></pre><div class="admonition is-danger"><header class="admonition-header">Functions that generate model variants must be pure</header><div class="admonition-body"><p>Notice that the function is "pure", i.e., does not make any in-place modifications to the original model structure. That property is required for <a href="../../functions/#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a> and other functions to properly and predictably apply the modifications to the model. To expose potential in-place modifications to your codebase, you should instead overload the "bang" counterpart of remove metabolites, called <a href="../../functions/#COBREXA.remove_metabolites!-Tuple{StandardModel, Vector{String}}"><code>remove_metabolites!</code></a>.</p></div></div></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> + return CircularModel(m.size - n)</code></pre><div class="admonition is-danger"><header class="admonition-header">Functions that generate model variants must be pure</header><div class="admonition-body"><p>Notice that the function is "pure", i.e., does not make any in-place modifications to the original model structure. That property is required for <a href="../../functions/#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a> and other functions to properly and predictably apply the modifications to the model. To expose potential in-place modifications to your codebase, you should instead overload the "bang" counterpart of remove metabolites, called <a href="../../functions/#COBREXA.remove_metabolites!-Tuple{StandardModel, Vector{String}}"><code>remove_metabolites!</code></a>.</p></div></div></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/advanced/index.html b/dev/advanced/index.html index 4856c71c1..f5aff3c49 100644 --- a/dev/advanced/index.html +++ b/dev/advanced/index.html @@ -1,2 +1,2 @@ <!DOCTYPE html> -<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Advanced tutorials · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../tutorials/">Quickstart tutorials</a></li><li class="is-active"><a class="tocitem" href>Advanced tutorials</a></li><li><a class="tocitem" href="../notebooks/">Examples and notebooks</a></li><li><a class="tocitem" href="../functions/">Function reference</a></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Advanced tutorials</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Advanced tutorials</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/master/docs/src/advanced.md" title="Edit on GitHub"><span class="docs-icon fab">ï‚›</span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="COBREXA-Advanced-tutorials"><a class="docs-heading-anchor" href="#COBREXA-Advanced-tutorials">COBREXA Advanced tutorials</a><a id="COBREXA-Advanced-tutorials-1"></a><a class="docs-heading-anchor-permalink" href="#COBREXA-Advanced-tutorials" title="Permalink"></a></h1><ul><li><a href="1_variants/#Exploring-many-model-variants">Exploring many model variants</a></li><ul><li><a href="1_variants/#Variant-specification">Variant specification</a></li><li><a href="1_variants/#Writing-custom-variant-functions">Writing custom variant functions</a></li><li><a href="1_variants/#Passing-extra-arguments-to-the-analysis-function">Passing extra arguments to the analysis function</a></li></ul><li><a href="2_custom_model/#Working-with-custom-models">Working with custom models</a></li><ul><li><a href="2_custom_model/#Writing-the-generic-accessors">Writing the generic accessors</a></li><li><a href="2_custom_model/#Writing-generic-model-modifications">Writing generic model modifications</a></li></ul></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../tutorials/">« Quickstart tutorials</a><a class="docs-footer-nextpage" href="../notebooks/">Examples and notebooks »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Advanced tutorials · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../tutorials/">Quickstart tutorials</a></li><li class="is-active"><a class="tocitem" href>Advanced tutorials</a></li><li><a class="tocitem" href="../notebooks/">Examples and notebooks</a></li><li><a class="tocitem" href="../functions/">Function reference</a></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Advanced tutorials</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Advanced tutorials</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/master/docs/src/advanced.md" title="Edit on GitHub"><span class="docs-icon fab">ï‚›</span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="COBREXA-Advanced-tutorials"><a class="docs-heading-anchor" href="#COBREXA-Advanced-tutorials">COBREXA Advanced tutorials</a><a id="COBREXA-Advanced-tutorials-1"></a><a class="docs-heading-anchor-permalink" href="#COBREXA-Advanced-tutorials" title="Permalink"></a></h1><ul><li><a href="1_variants/#Exploring-many-model-variants">Exploring many model variants</a></li><ul><li><a href="1_variants/#Variant-specification">Variant specification</a></li><li><a href="1_variants/#Writing-custom-variant-functions">Writing custom variant functions</a></li><li><a href="1_variants/#Passing-extra-arguments-to-the-analysis-function">Passing extra arguments to the analysis function</a></li></ul><li><a href="2_custom_model/#Working-with-custom-models">Working with custom models</a></li><ul><li><a href="2_custom_model/#Writing-the-generic-accessors">Writing the generic accessors</a></li><li><a href="2_custom_model/#Writing-generic-model-modifications">Writing generic model modifications</a></li></ul></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../tutorials/">« Quickstart tutorials</a><a class="docs-footer-nextpage" href="../notebooks/">Examples and notebooks »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/functions/index.html b/dev/functions/index.html index 5693ea331..b544fb22e 100644 --- a/dev/functions/index.html +++ b/dev/functions/index.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Function reference · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../tutorials/">Quickstart tutorials</a></li><li><a class="tocitem" href="../advanced/">Advanced tutorials</a></li><li><a class="tocitem" href="../notebooks/">Examples and notebooks</a></li><li class="is-active"><a class="tocitem" href>Function reference</a><ul class="internal"><li><a class="tocitem" href="#Base-Types"><span>Base Types</span></a></li><li><a class="tocitem" href="#Model-types-and-contents"><span>Model types and contents</span></a></li><li><a class="tocitem" href="#Base-functions"><span>Base functions</span></a></li><li><a class="tocitem" href="#File-I/O-and-serialization"><span>File I/O and serialization</span></a></li><li><a class="tocitem" href="#Model-reconstruction"><span>Model reconstruction</span></a></li><li><a class="tocitem" href="#Analysis-functions"><span>Analysis functions</span></a></li><li><a class="tocitem" href="#Miscellaneous-utilities"><span>Miscellaneous utilities</span></a></li></ul></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Function reference</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Function reference</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/master/docs/src/functions.md" title="Edit on GitHub"><span class="docs-icon fab">ï‚›</span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Functions"><a class="docs-heading-anchor" href="#Functions">Functions</a><a id="Functions-1"></a><a class="docs-heading-anchor-permalink" href="#Functions" title="Permalink"></a></h1><h2 id="Base-Types"><a class="docs-heading-anchor" href="#Base-Types">Base Types</a><a id="Base-Types-1"></a><a class="docs-heading-anchor-permalink" href="#Base-Types" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Maybe" href="#COBREXA.Maybe"><code>COBREXA.Maybe</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Maybe{T} = Union{Nothing, T}</code></pre><p>A nice name for "nullable" type.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/Maybe.jl#L2-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._default-Union{Tuple{T}, Tuple{T, Union{Nothing, T}}} where T" href="#COBREXA._default-Union{Tuple{T}, Tuple{T, Union{Nothing, T}}} where T"><code>COBREXA._default</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_default(d::T, x::Maybe{T})::T where {T}</code></pre><p>Fold the <code>Maybe{T}</code> down to <code>T</code> by defaulting.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/Maybe.jl#L9-L13">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._maybemap-Tuple{Any, Union{Nothing, T} where T}" href="#COBREXA._maybemap-Tuple{Any, Union{Nothing, T} where T}"><code>COBREXA._maybemap</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_maybemap(f, x::Maybe)::Maybe</code></pre><p>Apply a function to <code>x</code> only if it is not <code>nothing</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/Maybe.jl#L18-L22">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Annotations" href="#COBREXA.Annotations"><code>COBREXA.Annotations</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Annotations = Dict{String,Vector{String}}</code></pre><p>Dictionary used to store (possible multiple) standardized annotations of something, such as a <a href="#COBREXA.Metabolite"><code>Metabolite</code></a> and a <a href="#COBREXA.Reaction"><code>Reaction</code></a>.</p><p><strong>Example</strong></p><pre><code class="language-none">Annotations("PubChem" => ["CID12345", "CID54321"])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L39-L49">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.GeneAssociation" href="#COBREXA.GeneAssociation"><code>COBREXA.GeneAssociation</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">GeneAssociation = Vector{Vector{String}}</code></pre><p>An association to genes, represented as a logical formula in a positive disjunctive normal form (DNF). (The 2nd-level vectors of strings are connected by "and" to form conjunctions, and the 1st-level vectors of these conjunctions are connected by "or" to form the DNF.)</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L22-L29">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.MetabolicModel" href="#COBREXA.MetabolicModel"><code>COBREXA.MetabolicModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">abstract type MetabolicModel end</code></pre><p>A helper supertype that wraps everything usable as a linear-like model for COBREXA functions.</p><p>If you want your model type to work with COBREXA, add the <code>MetabolicModel</code> as its supertype, and implement the accessor functions. Accessors <a href="#COBREXA.reactions-Tuple{MetabolicModel}"><code>reactions</code></a>, <a href="#COBREXA.metabolites-Tuple{MetabolicModel}"><code>metabolites</code></a>, <a href="#COBREXA.stoichiometry-Tuple{MetabolicModel}"><code>stoichiometry</code></a>, <a href="#COBREXA.bounds-Tuple{MetabolicModel}"><code>bounds</code></a> and <a href="#COBREXA.objective-Tuple{MetabolicModel}"><code>objective</code></a> must be implemented; others are not mandatory and default to safe "empty" values.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L2-L13">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.MetaboliteFormula" href="#COBREXA.MetaboliteFormula"><code>COBREXA.MetaboliteFormula</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">MetaboliteFormula = Dict{String,Int}</code></pre><p>Dictionary of atoms and their abundances in a molecule.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L32-L36">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Notes" href="#COBREXA.Notes"><code>COBREXA.Notes</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Notes = Dict{String,Vector{String}}</code></pre><p>Free-form notes about something (e.g. a <a href="#COBREXA.Gene"><code>Gene</code></a>), categorized by "topic".</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L52-L57">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{MetabolicModel}" href="#COBREXA.balance-Tuple{MetabolicModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(a::MetabolicModel)::SparseVec</code></pre><p>Get the sparse balance vector of a model (ie. the <code>b</code> from <code>S x = b</code>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L116-L120">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{MetabolicModel}" href="#COBREXA.bounds-Tuple{MetabolicModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(a::MetabolicModel)::Tuple{SparseVec,SparseVec}</code></pre><p>Get the lower and upper flux bounds of a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L107-L111">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling-Tuple{MetabolicModel}" href="#COBREXA.coupling-Tuple{MetabolicModel}"><code>COBREXA.coupling</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling(a::MetabolicModel)::SparseMat</code></pre><p>Get a matrix of coupling constraint definitions of a model. By default, there is no coupling in the models.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L134-L139">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling_bounds-Tuple{MetabolicModel}" href="#COBREXA.coupling_bounds-Tuple{MetabolicModel}"><code>COBREXA.coupling_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling_bounds(a::MetabolicModel)::Tuple{SparseVec,SparseVec}</code></pre><p>Get the lower and upper bounds for each coupling bound in a model, as specified by <code>coupling</code>. By default, the model does not have any coupling bounds.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L153-L158">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_annotations-Tuple{MetabolicModel, String}" href="#COBREXA.gene_annotations-Tuple{MetabolicModel, String}"><code>COBREXA.gene_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_annotations(a::MetabolicModel, gene_id::String)::Annotations</code></pre><p>Return standardized names that identify the corresponding gene or product. The dictionary assigns vectors of possible identifiers to identifier system names, e.g. <code>"PDB" => ["PROT01"]</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L251-L257">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_notes-Tuple{MetabolicModel, String}" href="#COBREXA.gene_notes-Tuple{MetabolicModel, String}"><code>COBREXA.gene_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_notes(model::MetabolicModel, gene_id::String)::Notes</code></pre><p>Return the notes associated with the gene <code>gene_id</code> in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L280-L284">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{MetabolicModel}" href="#COBREXA.genes-Tuple{MetabolicModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(a::MetabolicModel)::Vector{String}</code></pre><p>Return identifiers of all genes contained in the model. By default, there are no genes.</p><p>In SBML, these are usually called "gene products" but we write <code>genes</code> for simplicity.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L163-L171">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_annotations-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_annotations-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_annotations(a::MetabolicModel, metabolite_id::String)::Annotations</code></pre><p>Return standardized names that may help to reliably identify the metabolite. The dictionary assigns vectors of possible identifiers to identifier system names, e.g. <code>"ChEMBL" => ["123"]</code> or <code>"PubChem" => ["CID123", "CID654645645"]</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L240-L246">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_charge-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><p>metabolite<em>charge(model::MetabolicModel, metabolite</em>id::String)::Maybe{Int}</p><p>Return the charge associated with metabolite <code>metabolite_id</code> in <code>model</code>. Returns <code>nothing</code> if charge not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L219-L224">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_compartment-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_compartment-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_compartment</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_compartment(model::MetabolicModel, metabolite_id::String)::Maybe{String}</code></pre><p>Return the compartment of metabolite <code>metabolite_id</code> in <code>model</code> if it is assigned. If not, return <code>nothing</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L289-L294">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_formula-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula( +<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Function reference · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../tutorials/">Quickstart tutorials</a></li><li><a class="tocitem" href="../advanced/">Advanced tutorials</a></li><li><a class="tocitem" href="../notebooks/">Examples and notebooks</a></li><li class="is-active"><a class="tocitem" href>Function reference</a><ul class="internal"><li><a class="tocitem" href="#Base-Types"><span>Base Types</span></a></li><li><a class="tocitem" href="#Model-types-and-contents"><span>Model types and contents</span></a></li><li><a class="tocitem" href="#Base-functions"><span>Base functions</span></a></li><li><a class="tocitem" href="#File-I/O-and-serialization"><span>File I/O and serialization</span></a></li><li><a class="tocitem" href="#Model-reconstruction"><span>Model reconstruction</span></a></li><li><a class="tocitem" href="#Analysis-functions"><span>Analysis functions</span></a></li><li><a class="tocitem" href="#Miscellaneous-utilities"><span>Miscellaneous utilities</span></a></li></ul></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Function reference</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Function reference</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/master/docs/src/functions.md" title="Edit on GitHub"><span class="docs-icon fab">ï‚›</span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Functions"><a class="docs-heading-anchor" href="#Functions">Functions</a><a id="Functions-1"></a><a class="docs-heading-anchor-permalink" href="#Functions" title="Permalink"></a></h1><h2 id="Base-Types"><a class="docs-heading-anchor" href="#Base-Types">Base Types</a><a id="Base-Types-1"></a><a class="docs-heading-anchor-permalink" href="#Base-Types" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Maybe" href="#COBREXA.Maybe"><code>COBREXA.Maybe</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Maybe{T} = Union{Nothing, T}</code></pre><p>A nice name for "nullable" type.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/Maybe.jl#L2-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._default-Union{Tuple{T}, Tuple{T, Union{Nothing, T}}} where T" href="#COBREXA._default-Union{Tuple{T}, Tuple{T, Union{Nothing, T}}} where T"><code>COBREXA._default</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_default(d::T, x::Maybe{T})::T where {T}</code></pre><p>Fold the <code>Maybe{T}</code> down to <code>T</code> by defaulting.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/Maybe.jl#L9-L13">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._maybemap-Tuple{Any, Union{Nothing, T} where T}" href="#COBREXA._maybemap-Tuple{Any, Union{Nothing, T} where T}"><code>COBREXA._maybemap</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_maybemap(f, x::Maybe)::Maybe</code></pre><p>Apply a function to <code>x</code> only if it is not <code>nothing</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/Maybe.jl#L18-L22">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Annotations" href="#COBREXA.Annotations"><code>COBREXA.Annotations</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Annotations = Dict{String,Vector{String}}</code></pre><p>Dictionary used to store (possible multiple) standardized annotations of something, such as a <a href="#COBREXA.Metabolite"><code>Metabolite</code></a> and a <a href="#COBREXA.Reaction"><code>Reaction</code></a>.</p><p><strong>Example</strong></p><pre><code class="language-none">Annotations("PubChem" => ["CID12345", "CID54321"])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L39-L49">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.GeneAssociation" href="#COBREXA.GeneAssociation"><code>COBREXA.GeneAssociation</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">GeneAssociation = Vector{Vector{String}}</code></pre><p>An association to genes, represented as a logical formula in a positive disjunctive normal form (DNF). (The 2nd-level vectors of strings are connected by "and" to form conjunctions, and the 1st-level vectors of these conjunctions are connected by "or" to form the DNF.)</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L22-L29">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.MetabolicModel" href="#COBREXA.MetabolicModel"><code>COBREXA.MetabolicModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">abstract type MetabolicModel end</code></pre><p>A helper supertype that wraps everything usable as a linear-like model for COBREXA functions.</p><p>If you want your model type to work with COBREXA, add the <code>MetabolicModel</code> as its supertype, and implement the accessor functions. Accessors <a href="#COBREXA.reactions-Tuple{MetabolicModel}"><code>reactions</code></a>, <a href="#COBREXA.metabolites-Tuple{MetabolicModel}"><code>metabolites</code></a>, <a href="#COBREXA.stoichiometry-Tuple{MetabolicModel}"><code>stoichiometry</code></a>, <a href="#COBREXA.bounds-Tuple{MetabolicModel}"><code>bounds</code></a> and <a href="#COBREXA.objective-Tuple{MetabolicModel}"><code>objective</code></a> must be implemented; others are not mandatory and default to safe "empty" values.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L2-L13">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.MetaboliteFormula" href="#COBREXA.MetaboliteFormula"><code>COBREXA.MetaboliteFormula</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">MetaboliteFormula = Dict{String,Int}</code></pre><p>Dictionary of atoms and their abundances in a molecule.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L32-L36">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Notes" href="#COBREXA.Notes"><code>COBREXA.Notes</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Notes = Dict{String,Vector{String}}</code></pre><p>Free-form notes about something (e.g. a <a href="#COBREXA.Gene"><code>Gene</code></a>), categorized by "topic".</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L52-L57">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{MetabolicModel}" href="#COBREXA.balance-Tuple{MetabolicModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(a::MetabolicModel)::SparseVec</code></pre><p>Get the sparse balance vector of a model (ie. the <code>b</code> from <code>S x = b</code>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L116-L120">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{MetabolicModel}" href="#COBREXA.bounds-Tuple{MetabolicModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(a::MetabolicModel)::Tuple{SparseVec,SparseVec}</code></pre><p>Get the lower and upper flux bounds of a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L107-L111">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling-Tuple{MetabolicModel}" href="#COBREXA.coupling-Tuple{MetabolicModel}"><code>COBREXA.coupling</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling(a::MetabolicModel)::SparseMat</code></pre><p>Get a matrix of coupling constraint definitions of a model. By default, there is no coupling in the models.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L134-L139">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling_bounds-Tuple{MetabolicModel}" href="#COBREXA.coupling_bounds-Tuple{MetabolicModel}"><code>COBREXA.coupling_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling_bounds(a::MetabolicModel)::Tuple{SparseVec,SparseVec}</code></pre><p>Get the lower and upper bounds for each coupling bound in a model, as specified by <code>coupling</code>. By default, the model does not have any coupling bounds.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L153-L158">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_annotations-Tuple{MetabolicModel, String}" href="#COBREXA.gene_annotations-Tuple{MetabolicModel, String}"><code>COBREXA.gene_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_annotations(a::MetabolicModel, gene_id::String)::Annotations</code></pre><p>Return standardized names that identify the corresponding gene or product. The dictionary assigns vectors of possible identifiers to identifier system names, e.g. <code>"PDB" => ["PROT01"]</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L251-L257">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_notes-Tuple{MetabolicModel, String}" href="#COBREXA.gene_notes-Tuple{MetabolicModel, String}"><code>COBREXA.gene_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_notes(model::MetabolicModel, gene_id::String)::Notes</code></pre><p>Return the notes associated with the gene <code>gene_id</code> in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L280-L284">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{MetabolicModel}" href="#COBREXA.genes-Tuple{MetabolicModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(a::MetabolicModel)::Vector{String}</code></pre><p>Return identifiers of all genes contained in the model. By default, there are no genes.</p><p>In SBML, these are usually called "gene products" but we write <code>genes</code> for simplicity.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L163-L171">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_annotations-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_annotations-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_annotations(a::MetabolicModel, metabolite_id::String)::Annotations</code></pre><p>Return standardized names that may help to reliably identify the metabolite. The dictionary assigns vectors of possible identifiers to identifier system names, e.g. <code>"ChEMBL" => ["123"]</code> or <code>"PubChem" => ["CID123", "CID654645645"]</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L240-L246">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_charge-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><p>metabolite<em>charge(model::MetabolicModel, metabolite</em>id::String)::Maybe{Int}</p><p>Return the charge associated with metabolite <code>metabolite_id</code> in <code>model</code>. Returns <code>nothing</code> if charge not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L219-L224">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_compartment-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_compartment-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_compartment</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_compartment(model::MetabolicModel, metabolite_id::String)::Maybe{String}</code></pre><p>Return the compartment of metabolite <code>metabolite_id</code> in <code>model</code> if it is assigned. If not, return <code>nothing</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L289-L294">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_formula-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula( a::MetabolicModel, metabolite_id::String, -)::Maybe{MetaboliteFormula}</code></pre><p>Return the formula of metabolite <code>metabolite_id</code> in <code>model</code>. Return <code>nothing</code> in case the formula is not known or irrelevant.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L203-L211">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_notes-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_notes-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_notes(model::MetabolicModel, metabolite_id::String)::Notes</code></pre><p>Return the notes associated with metabolite <code>reaction_id</code> in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L271-L275">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{MetabolicModel}" href="#COBREXA.metabolites-Tuple{MetabolicModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(a::MetabolicModel)::Vector{String}</code></pre><p>Return a vector of metabolite identifiers in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L71-L75">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_coupling_constraints-Tuple{MetabolicModel}" href="#COBREXA.n_coupling_constraints-Tuple{MetabolicModel}"><code>COBREXA.n_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_coupling_constraints(a::MetabolicModel)::Int</code></pre><p>Get the number of coupling constraints in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L144-L148">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_genes-Tuple{MetabolicModel}" href="#COBREXA.n_genes-Tuple{MetabolicModel}"><code>COBREXA.n_genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_genes(a::MetabolicModel)::Int</code></pre><p>Return the number of genes in the model (as returned by <a href="#COBREXA.genes-Tuple{MetabolicModel}"><code>genes</code></a>). If you just need the number of the genes, this may be much more efficient than calling <a href="#COBREXA.genes-Tuple{MetabolicModel}"><code>genes</code></a> and measuring the array.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L176-L182">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_metabolites-Tuple{MetabolicModel}" href="#COBREXA.n_metabolites-Tuple{MetabolicModel}"><code>COBREXA.n_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_metabolites(a::MetabolicModel)::Int</code></pre><p>Get the number of metabolites in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L89-L93">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_reactions-Tuple{MetabolicModel}" href="#COBREXA.n_reactions-Tuple{MetabolicModel}"><code>COBREXA.n_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_reactions(a::MetabolicModel)::Int</code></pre><p>Get the number of reactions in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L80-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{MetabolicModel}" href="#COBREXA.objective-Tuple{MetabolicModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(a::MetabolicModel)::SparseVec</code></pre><p>Get the objective vector of a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L125-L129">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.precache!-Tuple{MetabolicModel}" href="#COBREXA.precache!-Tuple{MetabolicModel}"><code>COBREXA.precache!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">precache!(a::MetabolicModel)::Nothing</code></pre><p>Do whatever is feasible to get the model into a state that can be read from as-quickly-as-possible. This may include e.g. generating helper index structures and loading delayed parts of the model from disk. The model should be modified "transparently" in-place. Analysis functions call this right before applying modifications or converting the model to the optimization model using <a href="#COBREXA.make_optimization_model-Tuple{MetabolicModel, Any}"><code>make_optimization_model</code></a>; usually on the same machine where the optimizers (and, generally, the core analysis algorithms) will run. The calls are done in a good hope that the performance will be improved.</p><p>By default, it should be safe to do nothing.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L323-L336">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_annotations-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_annotations-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_annotations(a::MetabolicModel, reaction_id::String)::Annotations</code></pre><p>Return standardized names that may help identifying the reaction. The dictionary assigns vectors of possible identifiers to identifier system names, e.g. <code>"Reactome" => ["reactomeID123"]</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L229-L235">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_gene_association-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_association(a::MetabolicModel, gene_id::String)::Maybe{GeneAssociation}</code></pre><p>Returns the sets of genes that need to be present so that the reaction can work (technically, a DNF on gene availability, with positive atoms only).</p><p>For simplicity, <code>nothing</code> may be returned, meaning that the reaction always takes place. (in DNF, that would be equivalent to returning <code>[[]]</code>.)</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L187-L195">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_notes-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_notes-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_notes(model::MetabolicModel, reaction_id::String)::Notes</code></pre><p>Return the notes associated with reaction <code>reaction_id</code> in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L262-L266">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::MetaboliteModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code> in the model. The dictionary maps the metabolite IDs to their stoichiometric coefficients.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L309-L314">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_subsystem-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_subsystem-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_subsystem</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_subsystem(model::MetabolicModel, reaction_id::String)::Maybe{String}</code></pre><p>Return the subsystem of reaction <code>reaction_id</code> in <code>model</code> if it is assigned. If not, return <code>nothing</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L299-L304">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{MetabolicModel}" href="#COBREXA.reactions-Tuple{MetabolicModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(a::MetabolicModel)::Vector{String}</code></pre><p>Return a vector of reaction identifiers in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L62-L66">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{MetabolicModel}" href="#COBREXA.stoichiometry-Tuple{MetabolicModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(a::MetabolicModel)::SparseMat</code></pre><p>Get the sparse stoichiometry matrix of a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/abstract/MetabolicModel.jl#L98-L102">source</a></section></article><h2 id="Model-types-and-contents"><a class="docs-heading-anchor" href="#Model-types-and-contents">Model types and contents</a><a id="Model-types-and-contents-1"></a><a class="docs-heading-anchor-permalink" href="#Model-types-and-contents" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.CoreModel" href="#COBREXA.CoreModel"><code>COBREXA.CoreModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct CoreModel <: MetabolicModel</code></pre><p>A "bare bones" core linear optimization problem of the form, with reaction and metabolite names.</p><pre><code class="language-none">min c^T x +)::Maybe{MetaboliteFormula}</code></pre><p>Return the formula of metabolite <code>metabolite_id</code> in <code>model</code>. Return <code>nothing</code> in case the formula is not known or irrelevant.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L203-L211">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_notes-Tuple{MetabolicModel, String}" href="#COBREXA.metabolite_notes-Tuple{MetabolicModel, String}"><code>COBREXA.metabolite_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_notes(model::MetabolicModel, metabolite_id::String)::Notes</code></pre><p>Return the notes associated with metabolite <code>reaction_id</code> in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L271-L275">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{MetabolicModel}" href="#COBREXA.metabolites-Tuple{MetabolicModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(a::MetabolicModel)::Vector{String}</code></pre><p>Return a vector of metabolite identifiers in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L71-L75">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_coupling_constraints-Tuple{MetabolicModel}" href="#COBREXA.n_coupling_constraints-Tuple{MetabolicModel}"><code>COBREXA.n_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_coupling_constraints(a::MetabolicModel)::Int</code></pre><p>Get the number of coupling constraints in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L144-L148">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_genes-Tuple{MetabolicModel}" href="#COBREXA.n_genes-Tuple{MetabolicModel}"><code>COBREXA.n_genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_genes(a::MetabolicModel)::Int</code></pre><p>Return the number of genes in the model (as returned by <a href="#COBREXA.genes-Tuple{MetabolicModel}"><code>genes</code></a>). If you just need the number of the genes, this may be much more efficient than calling <a href="#COBREXA.genes-Tuple{MetabolicModel}"><code>genes</code></a> and measuring the array.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L176-L182">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_metabolites-Tuple{MetabolicModel}" href="#COBREXA.n_metabolites-Tuple{MetabolicModel}"><code>COBREXA.n_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_metabolites(a::MetabolicModel)::Int</code></pre><p>Get the number of metabolites in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L89-L93">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_reactions-Tuple{MetabolicModel}" href="#COBREXA.n_reactions-Tuple{MetabolicModel}"><code>COBREXA.n_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_reactions(a::MetabolicModel)::Int</code></pre><p>Get the number of reactions in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L80-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{MetabolicModel}" href="#COBREXA.objective-Tuple{MetabolicModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(a::MetabolicModel)::SparseVec</code></pre><p>Get the objective vector of a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L125-L129">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.precache!-Tuple{MetabolicModel}" href="#COBREXA.precache!-Tuple{MetabolicModel}"><code>COBREXA.precache!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">precache!(a::MetabolicModel)::Nothing</code></pre><p>Do whatever is feasible to get the model into a state that can be read from as-quickly-as-possible. This may include e.g. generating helper index structures and loading delayed parts of the model from disk. The model should be modified "transparently" in-place. Analysis functions call this right before applying modifications or converting the model to the optimization model using <a href="#COBREXA.make_optimization_model-Tuple{MetabolicModel, Any}"><code>make_optimization_model</code></a>; usually on the same machine where the optimizers (and, generally, the core analysis algorithms) will run. The calls are done in a good hope that the performance will be improved.</p><p>By default, it should be safe to do nothing.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L323-L336">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_annotations-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_annotations-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_annotations(a::MetabolicModel, reaction_id::String)::Annotations</code></pre><p>Return standardized names that may help identifying the reaction. The dictionary assigns vectors of possible identifiers to identifier system names, e.g. <code>"Reactome" => ["reactomeID123"]</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L229-L235">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_gene_association-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_association(a::MetabolicModel, gene_id::String)::Maybe{GeneAssociation}</code></pre><p>Returns the sets of genes that need to be present so that the reaction can work (technically, a DNF on gene availability, with positive atoms only).</p><p>For simplicity, <code>nothing</code> may be returned, meaning that the reaction always takes place. (in DNF, that would be equivalent to returning <code>[[]]</code>.)</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L187-L195">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_notes-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_notes-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_notes(model::MetabolicModel, reaction_id::String)::Notes</code></pre><p>Return the notes associated with reaction <code>reaction_id</code> in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L262-L266">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::MetaboliteModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code> in the model. The dictionary maps the metabolite IDs to their stoichiometric coefficients.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L309-L314">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_subsystem-Tuple{MetabolicModel, String}" href="#COBREXA.reaction_subsystem-Tuple{MetabolicModel, String}"><code>COBREXA.reaction_subsystem</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_subsystem(model::MetabolicModel, reaction_id::String)::Maybe{String}</code></pre><p>Return the subsystem of reaction <code>reaction_id</code> in <code>model</code> if it is assigned. If not, return <code>nothing</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L299-L304">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{MetabolicModel}" href="#COBREXA.reactions-Tuple{MetabolicModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(a::MetabolicModel)::Vector{String}</code></pre><p>Return a vector of reaction identifiers in a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L62-L66">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{MetabolicModel}" href="#COBREXA.stoichiometry-Tuple{MetabolicModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(a::MetabolicModel)::SparseMat</code></pre><p>Get the sparse stoichiometry matrix of a model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/abstract/MetabolicModel.jl#L98-L102">source</a></section></article><h2 id="Model-types-and-contents"><a class="docs-heading-anchor" href="#Model-types-and-contents">Model types and contents</a><a id="Model-types-and-contents-1"></a><a class="docs-heading-anchor-permalink" href="#Model-types-and-contents" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.CoreModel" href="#COBREXA.CoreModel"><code>COBREXA.CoreModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct CoreModel <: MetabolicModel</code></pre><p>A "bare bones" core linear optimization problem of the form, with reaction and metabolite names.</p><pre><code class="language-none">min c^T x s.t. S x = b - xâ‚— ≤ x ≤ xᵤ</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L2-L12">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Union{Tuple{M}, Tuple{Type{CoreModel}, M}} where M<:MetabolicModel" href="#Base.convert-Union{Tuple{M}, Tuple{Type{CoreModel}, M}} where M<:MetabolicModel"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{CoreModel}, m::M) where {M <: MetabolicModel}</code></pre><p>Make a <code>CoreModel</code> out of any compatible model type.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L100-L104">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{CoreModel}" href="#COBREXA.balance-Tuple{CoreModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(a::CoreModel)::SparseVec</code></pre><p><code>CoreModel</code> target flux balance.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L70-L74">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{CoreModel}" href="#COBREXA.bounds-Tuple{CoreModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(a::CoreModel)::Tuple{SparseVec,SparseVec}</code></pre><p><code>CoreModel</code> flux bounds.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L63-L67">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{CoreModel}" href="#COBREXA.metabolites-Tuple{CoreModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(a::CoreModel)::Vector{String}</code></pre><p>Metabolites in a <code>CoreModel</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L49-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{CoreModel}" href="#COBREXA.objective-Tuple{CoreModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(a::CoreModel)::SparseVec</code></pre><p><code>CoreModel</code> objective vector.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L77-L81">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{CoreModel, Any}" href="#COBREXA.reaction_stoichiometry-Tuple{CoreModel, Any}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::CoreModel, ridx)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction at index <code>ridx</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L92-L96">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{CoreModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{CoreModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::CoreModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L84-L88">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{CoreModel}" href="#COBREXA.reactions-Tuple{CoreModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(a::CoreModel)::Vector{String}</code></pre><p>Get the reactions in a <code>CoreModel</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L42-L46">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{CoreModel}" href="#COBREXA.stoichiometry-Tuple{CoreModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(a::CoreModel)::SparseMat</code></pre><p><code>CoreModel</code> stoichiometry matrix.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModel.jl#L56-L60">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.CoreModelCoupled" href="#COBREXA.CoreModelCoupled"><code>COBREXA.CoreModelCoupled</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct CoreModelCoupled <: MetabolicModel</code></pre><p>The linear model with additional coupling constraints in the form</p><pre><code class="language-none"> câ‚— ≤ C x ≤ cᵤ</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L2-L9">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{CoreModelCoupled}, MetabolicModel}" href="#Base.convert-Tuple{Type{CoreModelCoupled}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{CoreModelCoupled}, mm::MetabolicModel)</code></pre><p>Make a <code>CoreModelCoupled</code> out of any compatible model type.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L117-L121">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{CoreModelCoupled}" href="#COBREXA.balance-Tuple{CoreModelCoupled}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(a::CoreModelCoupled)</code></pre><p>Extract balance from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L64-L69">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{CoreModelCoupled}" href="#COBREXA.bounds-Tuple{CoreModelCoupled}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(a::CoreModelCoupled)</code></pre><p>Extract bounds from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L56-L61">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling-Tuple{CoreModelCoupled}" href="#COBREXA.coupling-Tuple{CoreModelCoupled}"><code>COBREXA.coupling</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling(a::CoreModelCoupled)::SparseMat</code></pre><p>Coupling constraint matrix for a <code>CoreModelCoupled</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L80-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling_bounds-Tuple{CoreModelCoupled}" href="#COBREXA.coupling_bounds-Tuple{CoreModelCoupled}"><code>COBREXA.coupling_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling_bounds(a::CoreModelCoupled)::Tuple{SparseVec,SparseVec}</code></pre><p>Coupling bounds for a <code>CoreModelCoupled</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L94-L98">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{CoreModelCoupled}" href="#COBREXA.metabolites-Tuple{CoreModelCoupled}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(a::CoreModelCoupled)</code></pre><p>Extract metabolites from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L40-L45">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_coupling_constraints-Tuple{CoreModelCoupled}" href="#COBREXA.n_coupling_constraints-Tuple{CoreModelCoupled}"><code>COBREXA.n_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_coupling_constraints(a::CoreModelCoupled)::Int</code></pre><p>The number of coupling constraints in a <code>CoreModelCoupled</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L87-L91">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{CoreModelCoupled}" href="#COBREXA.objective-Tuple{CoreModelCoupled}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(a::CoreModelCoupled)</code></pre><p>Extract objective from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L72-L77">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{CoreModelCoupled, Any}" href="#COBREXA.reaction_stoichiometry-Tuple{CoreModelCoupled, Any}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::CoreModelCoupled, ridx)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction at index <code>ridx</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L108-L112">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{CoreModelCoupled, String}" href="#COBREXA.reaction_stoichiometry-Tuple{CoreModelCoupled, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::CoreModelCoupled, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L101-L105">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{CoreModelCoupled}" href="#COBREXA.reactions-Tuple{CoreModelCoupled}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(a::CoreModelCoupled)</code></pre><p>Extract reactions from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L32-L37">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{CoreModelCoupled}" href="#COBREXA.stoichiometry-Tuple{CoreModelCoupled}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(a::CoreModelCoupled)</code></pre><p>Extract stoichiometry from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/CoreModelCoupled.jl#L48-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.FluxSummary" href="#COBREXA.FluxSummary"><code>COBREXA.FluxSummary</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">FluxSummary</code></pre><p>A struct used to store summary information about the solution of a constraint based analysis result.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/FluxSummary.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_summary-Tuple{Dict{String, Float64}}" href="#COBREXA.flux_summary-Tuple{Dict{String, Float64}}"><code>COBREXA.flux_summary</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_summary(flux_result::Dict{String, Float64}; + xâ‚— ≤ x ≤ xᵤ</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L2-L12">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Union{Tuple{M}, Tuple{Type{CoreModel}, M}} where M<:MetabolicModel" href="#Base.convert-Union{Tuple{M}, Tuple{Type{CoreModel}, M}} where M<:MetabolicModel"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{CoreModel}, m::M) where {M <: MetabolicModel}</code></pre><p>Make a <code>CoreModel</code> out of any compatible model type.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L100-L104">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{CoreModel}" href="#COBREXA.balance-Tuple{CoreModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(a::CoreModel)::SparseVec</code></pre><p><code>CoreModel</code> target flux balance.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L70-L74">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{CoreModel}" href="#COBREXA.bounds-Tuple{CoreModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(a::CoreModel)::Tuple{SparseVec,SparseVec}</code></pre><p><code>CoreModel</code> flux bounds.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L63-L67">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{CoreModel}" href="#COBREXA.metabolites-Tuple{CoreModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(a::CoreModel)::Vector{String}</code></pre><p>Metabolites in a <code>CoreModel</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L49-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{CoreModel}" href="#COBREXA.objective-Tuple{CoreModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(a::CoreModel)::SparseVec</code></pre><p><code>CoreModel</code> objective vector.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L77-L81">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{CoreModel, Any}" href="#COBREXA.reaction_stoichiometry-Tuple{CoreModel, Any}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::CoreModel, ridx)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction at index <code>ridx</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L92-L96">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{CoreModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{CoreModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::CoreModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L84-L88">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{CoreModel}" href="#COBREXA.reactions-Tuple{CoreModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(a::CoreModel)::Vector{String}</code></pre><p>Get the reactions in a <code>CoreModel</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L42-L46">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{CoreModel}" href="#COBREXA.stoichiometry-Tuple{CoreModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(a::CoreModel)::SparseMat</code></pre><p><code>CoreModel</code> stoichiometry matrix.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModel.jl#L56-L60">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.CoreModelCoupled" href="#COBREXA.CoreModelCoupled"><code>COBREXA.CoreModelCoupled</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct CoreModelCoupled <: MetabolicModel</code></pre><p>The linear model with additional coupling constraints in the form</p><pre><code class="language-none"> câ‚— ≤ C x ≤ cᵤ</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L2-L9">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{CoreModelCoupled}, MetabolicModel}" href="#Base.convert-Tuple{Type{CoreModelCoupled}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{CoreModelCoupled}, mm::MetabolicModel)</code></pre><p>Make a <code>CoreModelCoupled</code> out of any compatible model type.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L117-L121">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{CoreModelCoupled}" href="#COBREXA.balance-Tuple{CoreModelCoupled}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(a::CoreModelCoupled)</code></pre><p>Extract balance from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L64-L69">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{CoreModelCoupled}" href="#COBREXA.bounds-Tuple{CoreModelCoupled}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(a::CoreModelCoupled)</code></pre><p>Extract bounds from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L56-L61">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling-Tuple{CoreModelCoupled}" href="#COBREXA.coupling-Tuple{CoreModelCoupled}"><code>COBREXA.coupling</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling(a::CoreModelCoupled)::SparseMat</code></pre><p>Coupling constraint matrix for a <code>CoreModelCoupled</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L80-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling_bounds-Tuple{CoreModelCoupled}" href="#COBREXA.coupling_bounds-Tuple{CoreModelCoupled}"><code>COBREXA.coupling_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling_bounds(a::CoreModelCoupled)::Tuple{SparseVec,SparseVec}</code></pre><p>Coupling bounds for a <code>CoreModelCoupled</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L94-L98">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{CoreModelCoupled}" href="#COBREXA.metabolites-Tuple{CoreModelCoupled}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(a::CoreModelCoupled)</code></pre><p>Extract metabolites from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L40-L45">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_coupling_constraints-Tuple{CoreModelCoupled}" href="#COBREXA.n_coupling_constraints-Tuple{CoreModelCoupled}"><code>COBREXA.n_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_coupling_constraints(a::CoreModelCoupled)::Int</code></pre><p>The number of coupling constraints in a <code>CoreModelCoupled</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L87-L91">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{CoreModelCoupled}" href="#COBREXA.objective-Tuple{CoreModelCoupled}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(a::CoreModelCoupled)</code></pre><p>Extract objective from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L72-L77">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{CoreModelCoupled, Any}" href="#COBREXA.reaction_stoichiometry-Tuple{CoreModelCoupled, Any}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::CoreModelCoupled, ridx)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction at index <code>ridx</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L108-L112">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{CoreModelCoupled, String}" href="#COBREXA.reaction_stoichiometry-Tuple{CoreModelCoupled, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::CoreModelCoupled, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L101-L105">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{CoreModelCoupled}" href="#COBREXA.reactions-Tuple{CoreModelCoupled}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(a::CoreModelCoupled)</code></pre><p>Extract reactions from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L32-L37">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{CoreModelCoupled}" href="#COBREXA.stoichiometry-Tuple{CoreModelCoupled}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(a::CoreModelCoupled)</code></pre><p>Extract stoichiometry from <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> (uses the internal <a href="#COBREXA.CoreModel"><code>CoreModel</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/CoreModelCoupled.jl#L48-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.FluxSummary" href="#COBREXA.FluxSummary"><code>COBREXA.FluxSummary</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">FluxSummary</code></pre><p>A struct used to store summary information about the solution of a constraint based analysis result.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/FluxSummary.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_summary-Tuple{Dict{String, Float64}}" href="#COBREXA.flux_summary-Tuple{Dict{String, Float64}}"><code>COBREXA.flux_summary</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_summary(flux_result::Dict{String, Float64}; exclude_exchanges = false, exchange_prefixes = _constants.exchange_prefixes, biomass_strings = _constants.biomass_strings, @@ -24,7 +24,7 @@ Import: Export: EX_h_e: 17.5309 EX_co2_e: 22.8098 - EX_h2o_e: 29.1758</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/FluxSummary.jl#L14-L50">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.FluxVariabilitySummary" href="#COBREXA.FluxVariabilitySummary"><code>COBREXA.FluxVariabilitySummary</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">FluxVariabilitySummary</code></pre><p>A struct used to store summary information about the solution of a flux variability analysis result.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/FluxVariabilitySummary.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_variability_summary-Tuple{Tuple{Dict{String, Dict{String, Float64}}, Dict{String, Dict{String, Float64}}}}" href="#COBREXA.flux_variability_summary-Tuple{Tuple{Dict{String, Dict{String, Float64}}, Dict{String, Dict{String, Float64}}}}"><code>COBREXA.flux_variability_summary</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_variability_summary(flux_result::Tuple{Dict{String, Dict{String, Float64}}, Dict{String, Dict{String, Float64}}}; + EX_h2o_e: 29.1758</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/FluxSummary.jl#L14-L50">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.FluxVariabilitySummary" href="#COBREXA.FluxVariabilitySummary"><code>COBREXA.FluxVariabilitySummary</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">FluxVariabilitySummary</code></pre><p>A struct used to store summary information about the solution of a flux variability analysis result.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/FluxVariabilitySummary.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_variability_summary-Tuple{Tuple{Dict{String, Dict{String, Float64}}, Dict{String, Dict{String, Float64}}}}" href="#COBREXA.flux_variability_summary-Tuple{Tuple{Dict{String, Dict{String, Float64}}, Dict{String, Dict{String, Float64}}}}"><code>COBREXA.flux_variability_summary</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_variability_summary(flux_result::Tuple{Dict{String, Dict{String, Float64}}, Dict{String, Dict{String, Float64}}}; exclude_exchanges = false, exchange_prefixes = _constants.exchange_prefixes, biomass_strings = _constants.biomass_strings, @@ -42,9 +42,9 @@ Exchange EX_nh4_e: -4.8448 -4.8448 EX_pi_e: -3.2149 -3.2149 EX_for_e: 0.0 0.0 - ... ... ...</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/FluxVariabilitySummary.jl#L12-L45">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Gene" href="#COBREXA.Gene"><code>COBREXA.Gene</code></a> — <span class="docstring-category">Type</span></header><section><div><p>Gene struct.</p><p><strong>Fields</strong></p><pre><code class="language-none">id :: String + ... ... ...</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/FluxVariabilitySummary.jl#L12-L45">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Gene" href="#COBREXA.Gene"><code>COBREXA.Gene</code></a> — <span class="docstring-category">Type</span></header><section><div><p>Gene struct.</p><p><strong>Fields</strong></p><pre><code class="language-none">id :: String notes :: Dict{String, Vector{String}} -annotation :: Dict{String, Union{Vector{String}, String}}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/Gene.jl#L1-L10">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.JSONModel" href="#COBREXA.JSONModel"><code>COBREXA.JSONModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct JSONModel <: MetabolicModel +annotation :: Dict{String, Union{Vector{String}, String}}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/Gene.jl#L1-L10">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.JSONModel" href="#COBREXA.JSONModel"><code>COBREXA.JSONModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct JSONModel <: MetabolicModel json::Dict{String,Any} rxn_index::Dict{String,Int} rxns::Vector{Any} @@ -54,12 +54,12 @@ annotation :: Dict{String, Union{Vector{String}, String}}</code></pre></div><a c genes::Vector{Any} end</code></pre><p>A struct used to store the contents of a JSON model, i.e. a model read from a file ending with <code>.json</code>. These model files typically store all the model data in arrays of JSON objects (represented in Julia as vectors of dictionaries).</p><p>Usually, not all of the fields of the input JSON can be easily represented when converting to other models, care should be taken to avoid losing information.</p><p>Direct work with the <code>json</code> structure is not very efficient; the model structure therefore caches some of the internal structure in the extra fields. The single-parameter <a href="#COBREXA.JSONModel"><code>JSONModel</code></a> constructor creates these caches correctly from the <code>json</code>. The model structure is designed as read-only, and changes in <code>json</code> invalidate the cache.</p><p><strong>Example</strong></p><pre><code class="language-none">model = load_json_model("some_model.json") model.json # see the actual underlying JSON -reactions(model) # see the list of reactions</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L1-L31">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{JSONModel}, MetabolicModel}" href="#Base.convert-Tuple{Type{JSONModel}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{JSONModel}, mm::MetabolicModel)</code></pre><p>Convert any <a href="#COBREXA.MetabolicModel"><code>MetabolicModel</code></a> to <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L255-L259">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{JSONModel}" href="#COBREXA.bounds-Tuple{JSONModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(model::JSONModel)</code></pre><p>Get the bounds for reactions, assuming the information is stored in <code>.lower_bound</code> and <code>.upper_bound</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L128-L133">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_annotations-Tuple{JSONModel, String}" href="#COBREXA.gene_annotations-Tuple{JSONModel, String}"><code>COBREXA.gene_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_annotations(model::JSONModel, gid::String)::Annotations</code></pre><p>Gene annotations from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L193-L197">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_notes-Tuple{JSONModel, String}" href="#COBREXA.gene_notes-Tuple{JSONModel, String}"><code>COBREXA.gene_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_notes(model::JSONModel, gid::String)::Notes</code></pre><p>Gene notes from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L203-L207">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{JSONModel}" href="#COBREXA.genes-Tuple{JSONModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(model::JSONModel)</code></pre><p>Extract gene names from a JSON model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L93-L97">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_annotations-Tuple{JSONModel, String}" href="#COBREXA.metabolite_annotations-Tuple{JSONModel, String}"><code>COBREXA.metabolite_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_annotations(model::JSONModel, mid::String)::Annotations</code></pre><p>Metabolite annotations from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L229-L233">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{JSONModel, String}" href="#COBREXA.metabolite_charge-Tuple{JSONModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_charge(model::JSONModel, mid::String)</code></pre><p>Return the metabolite <code>.charge</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L177-L181">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_compartment-Tuple{JSONModel, String}" href="#COBREXA.metabolite_compartment-Tuple{JSONModel, String}"><code>COBREXA.metabolite_compartment</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_compartment(model::JSONModel, mid::String)</code></pre><p>Return the metabolite <code>.compartment</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L185-L189">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{JSONModel, String}" href="#COBREXA.metabolite_formula-Tuple{JSONModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula(model::JSONModel, mid::String)</code></pre><p>Parse and return the metabolite <code>.formula</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L169-L173">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_notes-Tuple{JSONModel, String}" href="#COBREXA.metabolite_notes-Tuple{JSONModel, String}"><code>COBREXA.metabolite_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_notes(model::JSONModel, mid::String)::Notes</code></pre><p>Metabolite notes from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L239-L243">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{JSONModel}" href="#COBREXA.metabolites-Tuple{JSONModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(model::JSONModel)</code></pre><p>Extract metabolite names (stored as <code>.id</code>) from JSON model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L86-L90">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{JSONModel}" href="#COBREXA.objective-Tuple{JSONModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(model::JSONModel)</code></pre><p>Collect <code>.objective_coefficient</code> keys from model reactions.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L143-L147">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_annotations-Tuple{JSONModel, String}" href="#COBREXA.reaction_annotations-Tuple{JSONModel, String}"><code>COBREXA.reaction_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_annotations(model::JSONModel, rid::String)::Annotations</code></pre><p>Reaction annotations from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L211-L215">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{JSONModel, String}" href="#COBREXA.reaction_gene_association-Tuple{JSONModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_associaton(model::JSONModel, rid::String)</code></pre><p>Parses the <code>.gene_reaction_rule</code> from reactions.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L151-L155">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_notes-Tuple{JSONModel, String}" href="#COBREXA.reaction_notes-Tuple{JSONModel, String}"><code>COBREXA.reaction_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_notes(model::JSONModel, rid::String)::Notes</code></pre><p>Reaction notes from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L221-L225">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{JSONModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{JSONModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::JSONModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L247-L251">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_subsystem-Tuple{JSONModel, String}" href="#COBREXA.reaction_subsystem-Tuple{JSONModel, String}"><code>COBREXA.reaction_subsystem</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_subsystem(model::JSONModel, rid::String)</code></pre><p>Parses the <code>.subsystem</code> out from reactions.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L161-L165">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{JSONModel}" href="#COBREXA.reactions-Tuple{JSONModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(model::JSONModel)</code></pre><p>Extract reaction names (stored as <code>.id</code>) from JSON model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L79-L83">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{JSONModel}" href="#COBREXA.stoichiometry-Tuple{JSONModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(model::JSONModel)</code></pre><p>Get the stoichiometry. Assuming the information is stored in reaction object under key <code>.metabolites</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/JSONModel.jl#L100-L105">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.MATModel" href="#COBREXA.MATModel"><code>COBREXA.MATModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct MATModel</code></pre><p>Wrapper around the models loaded in dictionaries from the MATLAB representation.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L1-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{MATModel}, MetabolicModel}" href="#Base.convert-Tuple{Type{MATModel}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{MATModel}, m::MetabolicModel)</code></pre><p>Convert any metabolic model to <code>MATModel</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L198-L202">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._mat_has_squashed_coupling-Tuple{Any}" href="#COBREXA._mat_has_squashed_coupling-Tuple{Any}"><code>COBREXA._mat_has_squashed_coupling</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_mat_has_squashed_coupling(mat)</code></pre><p>Guesses whether C in the MAT file is stored in A=[S;C].</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L26-L30">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{MATModel}" href="#COBREXA.balance-Tuple{MATModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(m::MATModel)</code></pre><p>Extracts balance from the MAT model, defaulting to zeroes if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L66-L70">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{MATModel}" href="#COBREXA.bounds-Tuple{MATModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(m::MATModel)</code></pre><p>Extracts bounds from the MAT file, saved under <code>lb</code> and <code>ub</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L56-L60">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling-Tuple{MATModel}" href="#COBREXA.coupling-Tuple{MATModel}"><code>COBREXA.coupling</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling(m::MATModel)</code></pre><p>Extract coupling matrix stored, in <code>C</code> key.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L87-L91">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling_bounds-Tuple{MATModel}" href="#COBREXA.coupling_bounds-Tuple{MATModel}"><code>COBREXA.coupling_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling_bounds(m::MATModel)</code></pre><p>Extracts the coupling constraints. Currently, there are several accepted ways to store these in MATLAB models; this takes the constraints from vectors <code>cl</code> and <code>cu</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L96-L100">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{MATModel}" href="#COBREXA.genes-Tuple{MATModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(m::MATModel)</code></pre><p>Extracts the possible gene list from <code>genes</code> key.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L116-L120">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{MATModel, String}" href="#COBREXA.metabolite_charge-Tuple{MATModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_charge(m::MATModel, mid::String)</code></pre><p>Extract metabolite charge from <code>metCharge</code> or <code>metCharges</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L150-L154">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_compartment-Tuple{MATModel, String}" href="#COBREXA.metabolite_compartment-Tuple{MATModel, String}"><code>COBREXA.metabolite_compartment</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_compartment(m::MATModel, mid::String)</code></pre><p>Extract metabolite compartment from <code>metCompartment</code> or <code>metCompartments</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L160-L164">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{MATModel, String}" href="#COBREXA.metabolite_formula-Tuple{MATModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula(m::MATModel, mid::String)</code></pre><p>Extract metabolite formula from key <code>metFormula</code> or <code>metFormulas</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L140-L144">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{MATModel}" href="#COBREXA.metabolites-Tuple{MATModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(m::MATModel)::Vector{String}</code></pre><p>Extracts metabolite names from <code>mets</code> key in the MAT file.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L35-L39">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{MATModel}" href="#COBREXA.objective-Tuple{MATModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(m::MATModel)</code></pre><p>Extracts the objective from the MAT model (defaults to zeroes).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L79-L83">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{MATModel, String}" href="#COBREXA.reaction_gene_association-Tuple{MATModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_association(m::MATModel, rid::String)</code></pre><p>Extracts the associations from <code>grRules</code> key, if present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L126-L130">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{MATModel, Any}" href="#COBREXA.reaction_stoichiometry-Tuple{MATModel, Any}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::MATModel, ridx)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction at index <code>ridx</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L181-L185">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{MATModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{MATModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::MATModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L171-L175">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{MATModel}" href="#COBREXA.reactions-Tuple{MATModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(m::MATModel)::Vector{String}</code></pre><p>Extracts reaction names from <code>rxns</code> key in the MAT file.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L13-L17">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{MATModel}" href="#COBREXA.stoichiometry-Tuple{MATModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(m::MATModel)</code></pre><p>Extract the stoichiometry matrix, stored under key <code>S</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/MATModel.jl#L49-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Metabolite" href="#COBREXA.Metabolite"><code>COBREXA.Metabolite</code></a> — <span class="docstring-category">Type</span></header><section><div><p>Metabolite structure.</p><p><strong>Fields</strong></p><pre><code class="language-none">id :: String +reactions(model) # see the list of reactions</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L1-L31">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{JSONModel}, MetabolicModel}" href="#Base.convert-Tuple{Type{JSONModel}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{JSONModel}, mm::MetabolicModel)</code></pre><p>Convert any <a href="#COBREXA.MetabolicModel"><code>MetabolicModel</code></a> to <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L255-L259">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{JSONModel}" href="#COBREXA.bounds-Tuple{JSONModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(model::JSONModel)</code></pre><p>Get the bounds for reactions, assuming the information is stored in <code>.lower_bound</code> and <code>.upper_bound</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L128-L133">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_annotations-Tuple{JSONModel, String}" href="#COBREXA.gene_annotations-Tuple{JSONModel, String}"><code>COBREXA.gene_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_annotations(model::JSONModel, gid::String)::Annotations</code></pre><p>Gene annotations from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L193-L197">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_notes-Tuple{JSONModel, String}" href="#COBREXA.gene_notes-Tuple{JSONModel, String}"><code>COBREXA.gene_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_notes(model::JSONModel, gid::String)::Notes</code></pre><p>Gene notes from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L203-L207">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{JSONModel}" href="#COBREXA.genes-Tuple{JSONModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(model::JSONModel)</code></pre><p>Extract gene names from a JSON model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L93-L97">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_annotations-Tuple{JSONModel, String}" href="#COBREXA.metabolite_annotations-Tuple{JSONModel, String}"><code>COBREXA.metabolite_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_annotations(model::JSONModel, mid::String)::Annotations</code></pre><p>Metabolite annotations from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L229-L233">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{JSONModel, String}" href="#COBREXA.metabolite_charge-Tuple{JSONModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_charge(model::JSONModel, mid::String)</code></pre><p>Return the metabolite <code>.charge</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L177-L181">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_compartment-Tuple{JSONModel, String}" href="#COBREXA.metabolite_compartment-Tuple{JSONModel, String}"><code>COBREXA.metabolite_compartment</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_compartment(model::JSONModel, mid::String)</code></pre><p>Return the metabolite <code>.compartment</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L185-L189">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{JSONModel, String}" href="#COBREXA.metabolite_formula-Tuple{JSONModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula(model::JSONModel, mid::String)</code></pre><p>Parse and return the metabolite <code>.formula</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L169-L173">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_notes-Tuple{JSONModel, String}" href="#COBREXA.metabolite_notes-Tuple{JSONModel, String}"><code>COBREXA.metabolite_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_notes(model::JSONModel, mid::String)::Notes</code></pre><p>Metabolite notes from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L239-L243">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{JSONModel}" href="#COBREXA.metabolites-Tuple{JSONModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(model::JSONModel)</code></pre><p>Extract metabolite names (stored as <code>.id</code>) from JSON model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L86-L90">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{JSONModel}" href="#COBREXA.objective-Tuple{JSONModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(model::JSONModel)</code></pre><p>Collect <code>.objective_coefficient</code> keys from model reactions.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L143-L147">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_annotations-Tuple{JSONModel, String}" href="#COBREXA.reaction_annotations-Tuple{JSONModel, String}"><code>COBREXA.reaction_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_annotations(model::JSONModel, rid::String)::Annotations</code></pre><p>Reaction annotations from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L211-L215">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{JSONModel, String}" href="#COBREXA.reaction_gene_association-Tuple{JSONModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_associaton(model::JSONModel, rid::String)</code></pre><p>Parses the <code>.gene_reaction_rule</code> from reactions.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L151-L155">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_notes-Tuple{JSONModel, String}" href="#COBREXA.reaction_notes-Tuple{JSONModel, String}"><code>COBREXA.reaction_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_notes(model::JSONModel, rid::String)::Notes</code></pre><p>Reaction notes from the <a href="#COBREXA.JSONModel"><code>JSONModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L221-L225">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{JSONModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{JSONModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::JSONModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L247-L251">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_subsystem-Tuple{JSONModel, String}" href="#COBREXA.reaction_subsystem-Tuple{JSONModel, String}"><code>COBREXA.reaction_subsystem</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_subsystem(model::JSONModel, rid::String)</code></pre><p>Parses the <code>.subsystem</code> out from reactions.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L161-L165">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{JSONModel}" href="#COBREXA.reactions-Tuple{JSONModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(model::JSONModel)</code></pre><p>Extract reaction names (stored as <code>.id</code>) from JSON model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L79-L83">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{JSONModel}" href="#COBREXA.stoichiometry-Tuple{JSONModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(model::JSONModel)</code></pre><p>Get the stoichiometry. Assuming the information is stored in reaction object under key <code>.metabolites</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/JSONModel.jl#L100-L105">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.MATModel" href="#COBREXA.MATModel"><code>COBREXA.MATModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct MATModel</code></pre><p>Wrapper around the models loaded in dictionaries from the MATLAB representation.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L1-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{MATModel}, MetabolicModel}" href="#Base.convert-Tuple{Type{MATModel}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{MATModel}, m::MetabolicModel)</code></pre><p>Convert any metabolic model to <code>MATModel</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L198-L202">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._mat_has_squashed_coupling-Tuple{Any}" href="#COBREXA._mat_has_squashed_coupling-Tuple{Any}"><code>COBREXA._mat_has_squashed_coupling</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_mat_has_squashed_coupling(mat)</code></pre><p>Guesses whether C in the MAT file is stored in A=[S;C].</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L26-L30">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{MATModel}" href="#COBREXA.balance-Tuple{MATModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(m::MATModel)</code></pre><p>Extracts balance from the MAT model, defaulting to zeroes if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L66-L70">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{MATModel}" href="#COBREXA.bounds-Tuple{MATModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(m::MATModel)</code></pre><p>Extracts bounds from the MAT file, saved under <code>lb</code> and <code>ub</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L56-L60">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling-Tuple{MATModel}" href="#COBREXA.coupling-Tuple{MATModel}"><code>COBREXA.coupling</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling(m::MATModel)</code></pre><p>Extract coupling matrix stored, in <code>C</code> key.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L87-L91">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.coupling_bounds-Tuple{MATModel}" href="#COBREXA.coupling_bounds-Tuple{MATModel}"><code>COBREXA.coupling_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">coupling_bounds(m::MATModel)</code></pre><p>Extracts the coupling constraints. Currently, there are several accepted ways to store these in MATLAB models; this takes the constraints from vectors <code>cl</code> and <code>cu</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L96-L100">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{MATModel}" href="#COBREXA.genes-Tuple{MATModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(m::MATModel)</code></pre><p>Extracts the possible gene list from <code>genes</code> key.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L116-L120">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{MATModel, String}" href="#COBREXA.metabolite_charge-Tuple{MATModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_charge(m::MATModel, mid::String)</code></pre><p>Extract metabolite charge from <code>metCharge</code> or <code>metCharges</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L150-L154">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_compartment-Tuple{MATModel, String}" href="#COBREXA.metabolite_compartment-Tuple{MATModel, String}"><code>COBREXA.metabolite_compartment</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_compartment(m::MATModel, mid::String)</code></pre><p>Extract metabolite compartment from <code>metCompartment</code> or <code>metCompartments</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L160-L164">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{MATModel, String}" href="#COBREXA.metabolite_formula-Tuple{MATModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula(m::MATModel, mid::String)</code></pre><p>Extract metabolite formula from key <code>metFormula</code> or <code>metFormulas</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L140-L144">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{MATModel}" href="#COBREXA.metabolites-Tuple{MATModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(m::MATModel)::Vector{String}</code></pre><p>Extracts metabolite names from <code>mets</code> key in the MAT file.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L35-L39">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{MATModel}" href="#COBREXA.objective-Tuple{MATModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(m::MATModel)</code></pre><p>Extracts the objective from the MAT model (defaults to zeroes).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L79-L83">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{MATModel, String}" href="#COBREXA.reaction_gene_association-Tuple{MATModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_association(m::MATModel, rid::String)</code></pre><p>Extracts the associations from <code>grRules</code> key, if present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L126-L130">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{MATModel, Any}" href="#COBREXA.reaction_stoichiometry-Tuple{MATModel, Any}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::MATModel, ridx)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction at index <code>ridx</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L181-L185">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{MATModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{MATModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::MATModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L171-L175">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{MATModel}" href="#COBREXA.reactions-Tuple{MATModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(m::MATModel)::Vector{String}</code></pre><p>Extracts reaction names from <code>rxns</code> key in the MAT file.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L13-L17">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{MATModel}" href="#COBREXA.stoichiometry-Tuple{MATModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(m::MATModel)</code></pre><p>Extract the stoichiometry matrix, stored under key <code>S</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/MATModel.jl#L49-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Metabolite" href="#COBREXA.Metabolite"><code>COBREXA.Metabolite</code></a> — <span class="docstring-category">Type</span></header><section><div><p>Metabolite structure.</p><p><strong>Fields</strong></p><pre><code class="language-none">id :: String formula :: String charge :: Int compartment :: String notes :: Dict{String, Vector{String}} -annotation :: Dict{String, Union{Vector{String}, String}}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/Metabolite.jl#L1-L13">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Reaction" href="#COBREXA.Reaction"><code>COBREXA.Reaction</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">mutable struct Reaction +annotation :: Dict{String, Union{Vector{String}, String}}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/Metabolite.jl#L1-L13">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Reaction" href="#COBREXA.Reaction"><code>COBREXA.Reaction</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">mutable struct Reaction id::String metabolites::Dict{String,Float64} lb::Float64 @@ -69,7 +69,7 @@ annotation :: Dict{String, Union{Vector{String}, String}}</code></pre></div><a c notes::Notes annotations::Annotations objective_coefficient::Float64 -end</code></pre><p>A structure for representing a single reaction in a <a href="#COBREXA.StandardModel"><code>StandardModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/Reaction.jl#L1-L15">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Reaction" href="#COBREXA.Reaction"><code>COBREXA.Reaction</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Reaction( +end</code></pre><p>A structure for representing a single reaction in a <a href="#COBREXA.StandardModel"><code>StandardModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/Reaction.jl#L1-L15">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Reaction" href="#COBREXA.Reaction"><code>COBREXA.Reaction</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Reaction( id = ""; metabolites = Dict{String,Float64}(), lb = -_constants.default_reaction_bound, @@ -79,37 +79,37 @@ end</code></pre><p>A structure for representing a single reaction in a <a href=" notes = Notes(), annotations = Annotations(), objective_coefficient = 0.0, -)</code></pre><p>A constructor for Reaction that only takes a reaction <code>id</code> and assigns default/uninformative values to all the fields that are not explicitely assigned.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/Reaction.jl#L28-L44">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Reaction" href="#COBREXA.Reaction"><code>COBREXA.Reaction</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Reaction( +)</code></pre><p>A constructor for Reaction that only takes a reaction <code>id</code> and assigns default/uninformative values to all the fields that are not explicitely assigned.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/Reaction.jl#L28-L44">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Reaction" href="#COBREXA.Reaction"><code>COBREXA.Reaction</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">Reaction( id::String, metabolites::Dict{String,Union{Int, Float64}}, dir = :bidirectional; default_bound = _constants.default_reaction_bound, -)</code></pre><p>Convenience constructor for <code>Reaction</code>. The reaction equation is specified using <code>metabolites</code>, which is a dictionary mapping metabolite ids to stoichiometric coefficients. The direcion of the reaction is set through <code>dir</code> which can take <code>:bidirectional</code>, <code>:forward</code>, and <code>:reverse</code> as values. Finally, the <code>default_bound</code> is the value taken to mean infinity in the context of constraint based models, often this is set to a very high flux value like 1000.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/Reaction.jl#L70-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.ReactionStatus" href="#COBREXA.ReactionStatus"><code>COBREXA.ReactionStatus</code></a> — <span class="docstring-category">Type</span></header><section><div><p>Used for concise reporting of modeling results.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/ReactionStatus.jl#L1-L3">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.SBMLModel" href="#COBREXA.SBMLModel"><code>COBREXA.SBMLModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct SBMLModel</code></pre><p>Thin wrapper around the model from SBML.jl library. Allows easy conversion from SBML to any other model format.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{SBMLModel}, MetabolicModel}" href="#Base.convert-Tuple{Type{SBMLModel}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{SBMLModel}, mm::MetabolicModel)</code></pre><p>Convert any metabolic model to <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L146-L150">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{SBMLModel}" href="#COBREXA.balance-Tuple{SBMLModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(model::SBMLModel)::SparseVec</code></pre><p>Balance vector of a <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>. This is always zero.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L73-L77">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{SBMLModel}" href="#COBREXA.bounds-Tuple{SBMLModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(model::SBMLModel)::Tuple{SparseVec,SparseVec}</code></pre><p>Get the lower and upper flux bounds of model <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>. Throws <code>DomainError</code> in case if the SBML contains mismatching units.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L49-L54">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{SBMLModel}" href="#COBREXA.genes-Tuple{SBMLModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(model::SBMLModel)::Vector{String}</code></pre><p>Get genes of a <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L87-L91">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{SBMLModel, String}" href="#COBREXA.metabolite_charge-Tuple{SBMLModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_charge(model::SBMLModel, mid::String)::Maybe{Int}</code></pre><p>Get charge of a chosen metabolite from <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L117-L121">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{SBMLModel, String}" href="#COBREXA.metabolite_formula-Tuple{SBMLModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula(model::SBMLModel, mid::String)::Maybe{MetaboliteFormula}</code></pre><p>Get <a href="#COBREXA.MetaboliteFormula"><code>MetaboliteFormula</code></a> from a chosen metabolite from <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L109-L113">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{SBMLModel}" href="#COBREXA.metabolites-Tuple{SBMLModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(model::SBMLModel)::Vector{String}</code></pre><p>Get metabolites from a <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L18-L22">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_genes-Tuple{SBMLModel}" href="#COBREXA.n_genes-Tuple{SBMLModel}"><code>COBREXA.n_genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_genes(model::SBMLModel)::Int</code></pre><p>Get number of genes in <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L94-L98">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_metabolites-Tuple{SBMLModel}" href="#COBREXA.n_metabolites-Tuple{SBMLModel}"><code>COBREXA.n_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_metabolites(model::SBMLModel)::Int</code></pre><p>Efficient counting of metabolites in <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L32-L36">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_reactions-Tuple{SBMLModel}" href="#COBREXA.n_reactions-Tuple{SBMLModel}"><code>COBREXA.n_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_reactions(model::SBMLModel)::Int</code></pre><p>Efficient counting of reactions in <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L25-L29">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{SBMLModel}" href="#COBREXA.objective-Tuple{SBMLModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(model::SBMLModel)::SparseVec</code></pre><p>Objective of the <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L80-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{SBMLModel, String}" href="#COBREXA.reaction_gene_association-Tuple{SBMLModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_association(model::SBMLModel, rid::String)::Maybe{GeneAssociation}</code></pre><p>Retrieve the <a href="#COBREXA.GeneAssociation"><code>GeneAssociation</code></a> from <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L101-L105">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{SBMLModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{SBMLModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::SBMLModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L138-L142">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{SBMLModel}" href="#COBREXA.reactions-Tuple{SBMLModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(model::SBMLModel)::Vector{String}</code></pre><p>Get reactions from a <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L11-L15">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{SBMLModel}" href="#COBREXA.stoichiometry-Tuple{SBMLModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(model::SBMLModel)::SparseMat</code></pre><p>Recreate the stoichiometry matrix from the <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/SBMLModel.jl#L39-L43">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Serialized" href="#COBREXA.Serialized"><code>COBREXA.Serialized</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">mutable struct Serialized{M <: MetabolicModel} +)</code></pre><p>Convenience constructor for <code>Reaction</code>. The reaction equation is specified using <code>metabolites</code>, which is a dictionary mapping metabolite ids to stoichiometric coefficients. The direcion of the reaction is set through <code>dir</code> which can take <code>:bidirectional</code>, <code>:forward</code>, and <code>:reverse</code> as values. Finally, the <code>default_bound</code> is the value taken to mean infinity in the context of constraint based models, often this is set to a very high flux value like 1000.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/Reaction.jl#L70-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.ReactionStatus" href="#COBREXA.ReactionStatus"><code>COBREXA.ReactionStatus</code></a> — <span class="docstring-category">Type</span></header><section><div><p>Used for concise reporting of modeling results.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/ReactionStatus.jl#L1-L3">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.SBMLModel" href="#COBREXA.SBMLModel"><code>COBREXA.SBMLModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">struct SBMLModel</code></pre><p>Thin wrapper around the model from SBML.jl library. Allows easy conversion from SBML to any other model format.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{SBMLModel}, MetabolicModel}" href="#Base.convert-Tuple{Type{SBMLModel}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.convert(::Type{SBMLModel}, mm::MetabolicModel)</code></pre><p>Convert any metabolic model to <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L146-L150">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{SBMLModel}" href="#COBREXA.balance-Tuple{SBMLModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(model::SBMLModel)::SparseVec</code></pre><p>Balance vector of a <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>. This is always zero.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L73-L77">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{SBMLModel}" href="#COBREXA.bounds-Tuple{SBMLModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(model::SBMLModel)::Tuple{SparseVec,SparseVec}</code></pre><p>Get the lower and upper flux bounds of model <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>. Throws <code>DomainError</code> in case if the SBML contains mismatching units.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L49-L54">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{SBMLModel}" href="#COBREXA.genes-Tuple{SBMLModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(model::SBMLModel)::Vector{String}</code></pre><p>Get genes of a <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L87-L91">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{SBMLModel, String}" href="#COBREXA.metabolite_charge-Tuple{SBMLModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_charge(model::SBMLModel, mid::String)::Maybe{Int}</code></pre><p>Get charge of a chosen metabolite from <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L117-L121">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{SBMLModel, String}" href="#COBREXA.metabolite_formula-Tuple{SBMLModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula(model::SBMLModel, mid::String)::Maybe{MetaboliteFormula}</code></pre><p>Get <a href="#COBREXA.MetaboliteFormula"><code>MetaboliteFormula</code></a> from a chosen metabolite from <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L109-L113">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{SBMLModel}" href="#COBREXA.metabolites-Tuple{SBMLModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(model::SBMLModel)::Vector{String}</code></pre><p>Get metabolites from a <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L18-L22">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_genes-Tuple{SBMLModel}" href="#COBREXA.n_genes-Tuple{SBMLModel}"><code>COBREXA.n_genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_genes(model::SBMLModel)::Int</code></pre><p>Get number of genes in <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L94-L98">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_metabolites-Tuple{SBMLModel}" href="#COBREXA.n_metabolites-Tuple{SBMLModel}"><code>COBREXA.n_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_metabolites(model::SBMLModel)::Int</code></pre><p>Efficient counting of metabolites in <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L32-L36">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_reactions-Tuple{SBMLModel}" href="#COBREXA.n_reactions-Tuple{SBMLModel}"><code>COBREXA.n_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_reactions(model::SBMLModel)::Int</code></pre><p>Efficient counting of reactions in <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L25-L29">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{SBMLModel}" href="#COBREXA.objective-Tuple{SBMLModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(model::SBMLModel)::SparseVec</code></pre><p>Objective of the <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L80-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{SBMLModel, String}" href="#COBREXA.reaction_gene_association-Tuple{SBMLModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_association(model::SBMLModel, rid::String)::Maybe{GeneAssociation}</code></pre><p>Retrieve the <a href="#COBREXA.GeneAssociation"><code>GeneAssociation</code></a> from <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L101-L105">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{SBMLModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{SBMLModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::SBMLModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L138-L142">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{SBMLModel}" href="#COBREXA.reactions-Tuple{SBMLModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(model::SBMLModel)::Vector{String}</code></pre><p>Get reactions from a <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L11-L15">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{SBMLModel}" href="#COBREXA.stoichiometry-Tuple{SBMLModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(model::SBMLModel)::SparseMat</code></pre><p>Recreate the stoichiometry matrix from the <a href="#COBREXA.SBMLModel"><code>SBMLModel</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/SBMLModel.jl#L39-L43">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.Serialized" href="#COBREXA.Serialized"><code>COBREXA.Serialized</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">mutable struct Serialized{M <: MetabolicModel} m::Maybe{M} filename::String -end</code></pre><p>A meta-model that represents a model that is serialized on the disk. The internal model will be loaded on-demand by using any accessor, or by calling <a href="#COBREXA.precache!-Tuple{MetabolicModel}"><code>precache!</code></a> directly.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/Serialized.jl#L2-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.precache!-Tuple{Serialized}" href="#COBREXA.precache!-Tuple{Serialized}"><code>COBREXA.precache!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">precache!(model::Serialized{MetabolicModel})::Nothing</code></pre><p>Load the <code>Serialized</code> model from disk in case it's not alreadly loaded.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/Serialized.jl#L48-L52">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.StandardModel" href="#COBREXA.StandardModel"><code>COBREXA.StandardModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">mutable struct StandardModel</code></pre><p><code>StandardModel</code> is used to store a constraint based metabolic model with meta-information. Meta-information is defined as annotation details, which include gene-reaction-rules, formulas, etc.</p><p>This model type seeks to keep as much meta-information as possible, as opposed to <code>CoreModel</code> and <code>CoreModelCoupled</code>, which keep the bare neccessities only. When merging models and keeping meta-information is important, use this as the model type. If meta-information is not important, use the more efficient core model types. See <a href="#COBREXA.CoreModel"><code>CoreModel</code></a> and <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> for comparison.</p><p>In this model, reactions, metabolites, and genes are stored in ordered dictionaries indexed by each struct's <code>id</code> field. For example, <code>model.reactions["rxn1_id"]</code> returns a <code>Reaction</code> where the field <code>id</code> equals <code>"rxn1_id"</code>. This makes adding and removing reactions efficient.</p><p>Note that the stoichiometric matrix (or any other core data, e.g. flux bounds) is not stored directly as in <code>CoreModel</code>. When this model type is used in analysis functions, these core data structures are built from scratch each time an analysis function is called. This can cause performance issues if you run many small analysis functions sequentially. Consider using the core model types if performance is critical.</p><p>See also: <a href="#COBREXA.Reaction"><code>Reaction</code></a>, <a href="#COBREXA.Metabolite"><code>Metabolite</code></a>, <a href="#COBREXA.Gene"><code>Gene</code></a></p><p><strong>Fields</strong></p><pre><code class="language-none">id :: String +end</code></pre><p>A meta-model that represents a model that is serialized on the disk. The internal model will be loaded on-demand by using any accessor, or by calling <a href="#COBREXA.precache!-Tuple{MetabolicModel}"><code>precache!</code></a> directly.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/Serialized.jl#L2-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.precache!-Tuple{Serialized}" href="#COBREXA.precache!-Tuple{Serialized}"><code>COBREXA.precache!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">precache!(model::Serialized{MetabolicModel})::Nothing</code></pre><p>Load the <code>Serialized</code> model from disk in case it's not alreadly loaded.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/Serialized.jl#L48-L52">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.StandardModel" href="#COBREXA.StandardModel"><code>COBREXA.StandardModel</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">mutable struct StandardModel</code></pre><p><code>StandardModel</code> is used to store a constraint based metabolic model with meta-information. Meta-information is defined as annotation details, which include gene-reaction-rules, formulas, etc.</p><p>This model type seeks to keep as much meta-information as possible, as opposed to <code>CoreModel</code> and <code>CoreModelCoupled</code>, which keep the bare neccessities only. When merging models and keeping meta-information is important, use this as the model type. If meta-information is not important, use the more efficient core model types. See <a href="#COBREXA.CoreModel"><code>CoreModel</code></a> and <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> for comparison.</p><p>In this model, reactions, metabolites, and genes are stored in ordered dictionaries indexed by each struct's <code>id</code> field. For example, <code>model.reactions["rxn1_id"]</code> returns a <code>Reaction</code> where the field <code>id</code> equals <code>"rxn1_id"</code>. This makes adding and removing reactions efficient.</p><p>Note that the stoichiometric matrix (or any other core data, e.g. flux bounds) is not stored directly as in <code>CoreModel</code>. When this model type is used in analysis functions, these core data structures are built from scratch each time an analysis function is called. This can cause performance issues if you run many small analysis functions sequentially. Consider using the core model types if performance is critical.</p><p>See also: <a href="#COBREXA.Reaction"><code>Reaction</code></a>, <a href="#COBREXA.Metabolite"><code>Metabolite</code></a>, <a href="#COBREXA.Gene"><code>Gene</code></a></p><p><strong>Fields</strong></p><pre><code class="language-none">id :: String reactions :: OrderedDict{String, Reaction} metabolites :: OrderedDict{String, Metabolite} genes :: OrderedDict{String, Gene}</code></pre><p><strong>Example</strong></p><pre><code class="language-none">model = load_model(StandardModel, "my_model.json") -keys(model.reactions)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L1-L42">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{StandardModel}, MetabolicModel}" href="#Base.convert-Tuple{Type{StandardModel}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><p>Base.convert(::Type{StandardModel}, model::MetabolicModel)</p><p>Convert any <code>MetabolicModel</code> into a <code>StandardModel</code>. Note, some data loss may occur since only the generic interface is used during the conversion process.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L278-L284">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{StandardModel}" href="#COBREXA.balance-Tuple{StandardModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(model::StandardModel)</code></pre><p>Return the balance of the linear problem, i.e. b in Sv = 0 where S is the stoichiometric matrix and v is the flux vector.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L157-L162">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{StandardModel}" href="#COBREXA.bounds-Tuple{StandardModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(model::StandardModel)</code></pre><p>Return the lower and upper bounds, respectively, for reactions in <code>model</code>. Order matches that of the reaction ids returned in <code>reactions()</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L148-L153">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_annotations-Tuple{StandardModel, String}" href="#COBREXA.gene_annotations-Tuple{StandardModel, String}"><code>COBREXA.gene_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_annotations(model::StandardModel, id::String)::Annotations</code></pre><p>Return the annotation associated with gene <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L244-L249">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_notes-Tuple{StandardModel, String}" href="#COBREXA.gene_notes-Tuple{StandardModel, String}"><code>COBREXA.gene_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_notes(model::StandardModel, id::String)::Notes</code></pre><p>Return the notes associated with gene <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L236-L241">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{StandardModel}" href="#COBREXA.genes-Tuple{StandardModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(model::StandardModel)</code></pre><p>Return a vector of gene id strings in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L91-L95">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.lower_bounds-Tuple{StandardModel}" href="#COBREXA.lower_bounds-Tuple{StandardModel}"><code>COBREXA.lower_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">lower_bounds(model::StandardModel)</code></pre><p>Return the lower bounds for all reactions in <code>model</code> in sparse format.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L131-L135">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_annotations-Tuple{StandardModel, String}" href="#COBREXA.metabolite_annotations-Tuple{StandardModel, String}"><code>COBREXA.metabolite_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_annotations(model::StandardModel, id::String)::Annotations</code></pre><p>Return the annotation associated with metabolite <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L227-L232">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{StandardModel, String}" href="#COBREXA.metabolite_charge-Tuple{StandardModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_charge(model::StandardModel, id::String)</code></pre><p>Return the charge associated with metabolite <code>id</code> in <code>model</code>. Return nothing if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L191-L196">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_compartment-Tuple{StandardModel, String}" href="#COBREXA.metabolite_compartment-Tuple{StandardModel, String}"><code>COBREXA.metabolite_compartment</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_compartment(model::StandardModel, id::String)</code></pre><p>Return compartment associated with metabolite <code>id</code> in <code>model</code>. Return <code>nothing</code> if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L200-L205">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{StandardModel, String}" href="#COBREXA.metabolite_formula-Tuple{StandardModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula(model::StandardModel, id::String)</code></pre><p>Return the formula of reaction <code>id</code> in <code>model</code>. Return <code>nothing</code> if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L182-L187">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_notes-Tuple{StandardModel, String}" href="#COBREXA.metabolite_notes-Tuple{StandardModel, String}"><code>COBREXA.metabolite_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_notes(model::StandardModel, id::String)::Notes</code></pre><p>Return the notes associated with metabolite <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L218-L223">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{StandardModel}" href="#COBREXA.metabolites-Tuple{StandardModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(model::StandardModel)</code></pre><p>Return a vector of metabolite id strings contained in <code>model</code>. The order of metabolite strings returned here matches the order used to construct the stoichiometric matrix.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L75-L81">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_genes-Tuple{StandardModel}" href="#COBREXA.n_genes-Tuple{StandardModel}"><code>COBREXA.n_genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_genes(model::StandardModel)</code></pre><p>Return the number of genes in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L98-L102">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_metabolites-Tuple{StandardModel}" href="#COBREXA.n_metabolites-Tuple{StandardModel}"><code>COBREXA.n_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><p>n_metabolites(model::StandardModel)</p><p>Return the number of metabolites in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L84-L88">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_reactions-Tuple{StandardModel}" href="#COBREXA.n_reactions-Tuple{StandardModel}"><code>COBREXA.n_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_reactions(model::StandardModel)</code></pre><p>Return the number of reactions contained in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L67-L71">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{StandardModel}" href="#COBREXA.objective-Tuple{StandardModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(model::StandardModel)</code></pre><p>Return sparse objective vector for <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L165-L169">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_annotations-Tuple{StandardModel, String}" href="#COBREXA.reaction_annotations-Tuple{StandardModel, String}"><code>COBREXA.reaction_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_annotations(model::StandardModel, id::String)::Annotations</code></pre><p>Return the annotation associated with reaction <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L261-L266">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{StandardModel, String}" href="#COBREXA.reaction_gene_association-Tuple{StandardModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_association(model::StandardModel, id::String)</code></pre><p>Return the gene reaction rule in string format for reaction with <code>id</code> in <code>model</code>. Return <code>nothing</code> if not available.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L173-L178">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_notes-Tuple{StandardModel, String}" href="#COBREXA.reaction_notes-Tuple{StandardModel, String}"><code>COBREXA.reaction_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_notes(model::StandardModel, id::String)::Notes</code></pre><p>Return the notes associated with reaction <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L253-L258">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{StandardModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{StandardModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::StandardModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L270-L274">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_subsystem-Tuple{StandardModel, String}" href="#COBREXA.reaction_subsystem-Tuple{StandardModel, String}"><code>COBREXA.reaction_subsystem</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_subsystem(id::String, model::StandardModel)</code></pre><p>Return the subsystem associated with reaction <code>id</code> in <code>model</code>. Return <code>nothing</code> if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L209-L214">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{StandardModel}" href="#COBREXA.reactions-Tuple{StandardModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(model::StandardModel)</code></pre><p>Return a vector of reaction id strings contained in <code>model</code>. The order of reaction ids returned here matches the order used to construct the stoichiometric matrix.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L58-L64">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{StandardModel}" href="#COBREXA.stoichiometry-Tuple{StandardModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(model::StandardModel)</code></pre><p>Return the stoichiometric matrix associated with <code>model</code> in sparse format.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L105-L109">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.upper_bounds-Tuple{StandardModel}" href="#COBREXA.upper_bounds-Tuple{StandardModel}"><code>COBREXA.upper_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">upper_bounds(model::StandardModel)</code></pre><p>Return the upper bounds for all reactions in <code>model</code> in sparse format. Order matches that of the reaction ids returned in <code>reactions()</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/types/StandardModel.jl#L139-L144">source</a></section></article><h2 id="Base-functions"><a class="docs-heading-anchor" href="#Base-functions">Base functions</a><a id="Base-functions-1"></a><a class="docs-heading-anchor-permalink" href="#Base-functions" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA._constants" href="#COBREXA._constants"><code>COBREXA._constants</code></a> — <span class="docstring-category">Constant</span></header><section><div><p>A named tuple that contains the magic values that are used globally for whatever purposes.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/constants.jl#L2-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.get_optmodel_bounds-Tuple{Any}" href="#COBREXA.get_optmodel_bounds-Tuple{Any}"><code>COBREXA.get_optmodel_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">get_optmodel_bounds(opt_model)</code></pre><p>Returns vectors of the lower and upper bounds of <code>opt_model</code> constraints, where <code>opt_model</code> is a JuMP model constructed by e.g. <a href="#COBREXA.make_optimization_model-Tuple{MetabolicModel, Any}"><code>make_optimization_model</code></a> or <a href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>flux_balance_analysis</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/solver.jl#L62-L68">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.is_solved-Tuple{Any}" href="#COBREXA.is_solved-Tuple{Any}"><code>COBREXA.is_solved</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">is_solved(optmodel)</code></pre><p>Return <code>true</code> if <code>optmodel</code> solved successfully (solution is optimal or locally optimal). Return <code>false</code> if any other termination status is reached. Termination status is defined in the documentation of <code>JuMP</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/solver.jl#L50-L56">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.make_optimization_model-Tuple{MetabolicModel, Any}" href="#COBREXA.make_optimization_model-Tuple{MetabolicModel, Any}"><code>COBREXA.make_optimization_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">make_optimization_model( +keys(model.reactions)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L1-L42">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.convert-Tuple{Type{StandardModel}, MetabolicModel}" href="#Base.convert-Tuple{Type{StandardModel}, MetabolicModel}"><code>Base.convert</code></a> — <span class="docstring-category">Method</span></header><section><div><p>Base.convert(::Type{StandardModel}, model::MetabolicModel)</p><p>Convert any <code>MetabolicModel</code> into a <code>StandardModel</code>. Note, some data loss may occur since only the generic interface is used during the conversion process.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L278-L284">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.balance-Tuple{StandardModel}" href="#COBREXA.balance-Tuple{StandardModel}"><code>COBREXA.balance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">balance(model::StandardModel)</code></pre><p>Return the balance of the linear problem, i.e. b in Sv = 0 where S is the stoichiometric matrix and v is the flux vector.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L157-L162">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.bounds-Tuple{StandardModel}" href="#COBREXA.bounds-Tuple{StandardModel}"><code>COBREXA.bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bounds(model::StandardModel)</code></pre><p>Return the lower and upper bounds, respectively, for reactions in <code>model</code>. Order matches that of the reaction ids returned in <code>reactions()</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L148-L153">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_annotations-Tuple{StandardModel, String}" href="#COBREXA.gene_annotations-Tuple{StandardModel, String}"><code>COBREXA.gene_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_annotations(model::StandardModel, id::String)::Annotations</code></pre><p>Return the annotation associated with gene <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L244-L249">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gene_notes-Tuple{StandardModel, String}" href="#COBREXA.gene_notes-Tuple{StandardModel, String}"><code>COBREXA.gene_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gene_notes(model::StandardModel, id::String)::Notes</code></pre><p>Return the notes associated with gene <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L236-L241">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.genes-Tuple{StandardModel}" href="#COBREXA.genes-Tuple{StandardModel}"><code>COBREXA.genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">genes(model::StandardModel)</code></pre><p>Return a vector of gene id strings in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L91-L95">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.lower_bounds-Tuple{StandardModel}" href="#COBREXA.lower_bounds-Tuple{StandardModel}"><code>COBREXA.lower_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">lower_bounds(model::StandardModel)</code></pre><p>Return the lower bounds for all reactions in <code>model</code> in sparse format.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L131-L135">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_annotations-Tuple{StandardModel, String}" href="#COBREXA.metabolite_annotations-Tuple{StandardModel, String}"><code>COBREXA.metabolite_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_annotations(model::StandardModel, id::String)::Annotations</code></pre><p>Return the annotation associated with metabolite <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L227-L232">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_charge-Tuple{StandardModel, String}" href="#COBREXA.metabolite_charge-Tuple{StandardModel, String}"><code>COBREXA.metabolite_charge</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_charge(model::StandardModel, id::String)</code></pre><p>Return the charge associated with metabolite <code>id</code> in <code>model</code>. Return nothing if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L191-L196">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_compartment-Tuple{StandardModel, String}" href="#COBREXA.metabolite_compartment-Tuple{StandardModel, String}"><code>COBREXA.metabolite_compartment</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_compartment(model::StandardModel, id::String)</code></pre><p>Return compartment associated with metabolite <code>id</code> in <code>model</code>. Return <code>nothing</code> if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L200-L205">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_formula-Tuple{StandardModel, String}" href="#COBREXA.metabolite_formula-Tuple{StandardModel, String}"><code>COBREXA.metabolite_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_formula(model::StandardModel, id::String)</code></pre><p>Return the formula of reaction <code>id</code> in <code>model</code>. Return <code>nothing</code> if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L182-L187">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_notes-Tuple{StandardModel, String}" href="#COBREXA.metabolite_notes-Tuple{StandardModel, String}"><code>COBREXA.metabolite_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_notes(model::StandardModel, id::String)::Notes</code></pre><p>Return the notes associated with metabolite <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L218-L223">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolites-Tuple{StandardModel}" href="#COBREXA.metabolites-Tuple{StandardModel}"><code>COBREXA.metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolites(model::StandardModel)</code></pre><p>Return a vector of metabolite id strings contained in <code>model</code>. The order of metabolite strings returned here matches the order used to construct the stoichiometric matrix.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L75-L81">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_genes-Tuple{StandardModel}" href="#COBREXA.n_genes-Tuple{StandardModel}"><code>COBREXA.n_genes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_genes(model::StandardModel)</code></pre><p>Return the number of genes in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L98-L102">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_metabolites-Tuple{StandardModel}" href="#COBREXA.n_metabolites-Tuple{StandardModel}"><code>COBREXA.n_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><p>n_metabolites(model::StandardModel)</p><p>Return the number of metabolites in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L84-L88">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.n_reactions-Tuple{StandardModel}" href="#COBREXA.n_reactions-Tuple{StandardModel}"><code>COBREXA.n_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">n_reactions(model::StandardModel)</code></pre><p>Return the number of reactions contained in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L67-L71">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective-Tuple{StandardModel}" href="#COBREXA.objective-Tuple{StandardModel}"><code>COBREXA.objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective(model::StandardModel)</code></pre><p>Return sparse objective vector for <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L165-L169">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_annotations-Tuple{StandardModel, String}" href="#COBREXA.reaction_annotations-Tuple{StandardModel, String}"><code>COBREXA.reaction_annotations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_annotations(model::StandardModel, id::String)::Annotations</code></pre><p>Return the annotation associated with reaction <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L261-L266">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_gene_association-Tuple{StandardModel, String}" href="#COBREXA.reaction_gene_association-Tuple{StandardModel, String}"><code>COBREXA.reaction_gene_association</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_gene_association(model::StandardModel, id::String)</code></pre><p>Return the gene reaction rule in string format for reaction with <code>id</code> in <code>model</code>. Return <code>nothing</code> if not available.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L173-L178">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_notes-Tuple{StandardModel, String}" href="#COBREXA.reaction_notes-Tuple{StandardModel, String}"><code>COBREXA.reaction_notes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_notes(model::StandardModel, id::String)::Notes</code></pre><p>Return the notes associated with reaction <code>id</code> in <code>model</code>. Return an empty Dict if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L253-L258">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_stoichiometry-Tuple{StandardModel, String}" href="#COBREXA.reaction_stoichiometry-Tuple{StandardModel, String}"><code>COBREXA.reaction_stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_stoichiometry(model::StandardModel, rid::String)::Dict{String, Float64}</code></pre><p>Return the stoichiometry of reaction with ID <code>rid</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L270-L274">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reaction_subsystem-Tuple{StandardModel, String}" href="#COBREXA.reaction_subsystem-Tuple{StandardModel, String}"><code>COBREXA.reaction_subsystem</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reaction_subsystem(id::String, model::StandardModel)</code></pre><p>Return the subsystem associated with reaction <code>id</code> in <code>model</code>. Return <code>nothing</code> if not present.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L209-L214">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.reactions-Tuple{StandardModel}" href="#COBREXA.reactions-Tuple{StandardModel}"><code>COBREXA.reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reactions(model::StandardModel)</code></pre><p>Return a vector of reaction id strings contained in <code>model</code>. The order of reaction ids returned here matches the order used to construct the stoichiometric matrix.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L58-L64">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.stoichiometry-Tuple{StandardModel}" href="#COBREXA.stoichiometry-Tuple{StandardModel}"><code>COBREXA.stoichiometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stoichiometry(model::StandardModel)</code></pre><p>Return the stoichiometric matrix associated with <code>model</code> in sparse format.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L105-L109">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.upper_bounds-Tuple{StandardModel}" href="#COBREXA.upper_bounds-Tuple{StandardModel}"><code>COBREXA.upper_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">upper_bounds(model::StandardModel)</code></pre><p>Return the upper bounds for all reactions in <code>model</code> in sparse format. Order matches that of the reaction ids returned in <code>reactions()</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/types/StandardModel.jl#L139-L144">source</a></section></article><h2 id="Base-functions"><a class="docs-heading-anchor" href="#Base-functions">Base functions</a><a id="Base-functions-1"></a><a class="docs-heading-anchor-permalink" href="#Base-functions" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA._constants" href="#COBREXA._constants"><code>COBREXA._constants</code></a> — <span class="docstring-category">Constant</span></header><section><div><p>A named tuple that contains the magic values that are used globally for whatever purposes.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/constants.jl#L2-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.get_optmodel_bounds-Tuple{Any}" href="#COBREXA.get_optmodel_bounds-Tuple{Any}"><code>COBREXA.get_optmodel_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">get_optmodel_bounds(opt_model)</code></pre><p>Returns vectors of the lower and upper bounds of <code>opt_model</code> constraints, where <code>opt_model</code> is a JuMP model constructed by e.g. <a href="#COBREXA.make_optimization_model-Tuple{MetabolicModel, Any}"><code>make_optimization_model</code></a> or <a href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>flux_balance_analysis</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/solver.jl#L62-L68">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.is_solved-Tuple{Any}" href="#COBREXA.is_solved-Tuple{Any}"><code>COBREXA.is_solved</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">is_solved(optmodel)</code></pre><p>Return <code>true</code> if <code>optmodel</code> solved successfully (solution is optimal or locally optimal). Return <code>false</code> if any other termination status is reached. Termination status is defined in the documentation of <code>JuMP</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/solver.jl#L50-L56">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.make_optimization_model-Tuple{MetabolicModel, Any}" href="#COBREXA.make_optimization_model-Tuple{MetabolicModel, Any}"><code>COBREXA.make_optimization_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">make_optimization_model( model::MetabolicModel, optimizer; sense = MOI.MAX_SENSE, -)</code></pre><p>Convert <code>MetabolicModel</code>s to a JuMP model, place objectives and the equality constraint.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/solver.jl#L2-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.optimize_model-Tuple{MetabolicModel, Any}" href="#COBREXA.optimize_model-Tuple{MetabolicModel, Any}"><code>COBREXA.optimize_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">optimize_model( +)</code></pre><p>Convert <code>MetabolicModel</code>s to a JuMP model, place objectives and the equality constraint.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/solver.jl#L2-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.optimize_model-Tuple{MetabolicModel, Any}" href="#COBREXA.optimize_model-Tuple{MetabolicModel, Any}"><code>COBREXA.optimize_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">optimize_model( model::MetabolicModel, optimizer; sense = MOI.MIN_SENSE, -)</code></pre><p>Use JuMP to solve an instance of CoreModel</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/solver.jl#L34-L42">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.set_optmodel_bound!-Tuple{Any, Any}" href="#COBREXA.set_optmodel_bound!-Tuple{Any, Any}"><code>COBREXA.set_optmodel_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">set_optmodel_bound!(index, optimization_model; +)</code></pre><p>Use JuMP to solve an instance of CoreModel</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/solver.jl#L34-L42">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.set_optmodel_bound!-Tuple{Any, Any}" href="#COBREXA.set_optmodel_bound!-Tuple{Any, Any}"><code>COBREXA.set_optmodel_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">set_optmodel_bound!(index, optimization_model; ub=_constants.default_reaction_rate, - lb=-_constants.default_reaction_rate)</code></pre><p>Helper function to set the bounds of variables. The JuMP <code>set_normalized_rhs</code> function is a little confusing, so this function simplifies setting constraints. In short, JuMP uses a normalized right hand side representation of constraints, which means that lower bounds have their sign flipped. This function does this for you, so you don't have to remember to do this whenever you change the constraints.</p><p>Just supply the constraint <code>index</code> and the JuMP model (<code>opt_model</code>) that will be solved, and the variable's bounds will be set to <code>ub</code> and <code>lb</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/solver.jl#L74-L89">source</a></section></article><h2 id="File-I/O-and-serialization"><a class="docs-heading-anchor" href="#File-I/O-and-serialization">File I/O and serialization</a><a id="File-I/O-and-serialization-1"></a><a class="docs-heading-anchor-permalink" href="#File-I/O-and-serialization" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_model-Tuple{String}" href="#COBREXA.load_model-Tuple{String}"><code>COBREXA.load_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_model(file_name::String)::MetabolicModel</code></pre><p>Generic function for loading models that chooses a specific loader function from the <code>file_name</code> extension, or throws an error.</p><p>Currently, these model types are supported:</p><ul><li>SBML models (<code>*.xml</code>, loaded with <a href="#COBREXA.load_sbml_model-Tuple{String}"><code>load_sbml_model</code></a>)</li><li>JSON models (<code>*.json</code>, loaded with <a href="#COBREXA.load_json_model-Tuple{String}"><code>load_json_model</code></a>)</li><li>MATLAB models (<code>*.mat</code>, loaded with <a href="#COBREXA.load_mat_model-Tuple{String}"><code>load_mat_model</code></a>)</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/io.jl#L2-L13">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_model-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:MetabolicModel" href="#COBREXA.load_model-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:MetabolicModel"><code>COBREXA.load_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_model(type::Type{T}, file_name::String)::T where T</code></pre><p>Helper function tht loads the model using <a href="#COBREXA.load_model-Tuple{String}"><code>load_model</code></a> and return it converted to <code>type</code>.</p><p><strong>Example:</strong></p><pre><code class="language-none">load_model(CoreModel, "mySBMLModel.xml")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/io.jl#L27-L36">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.save_model-Tuple{MetabolicModel, String}" href="#COBREXA.save_model-Tuple{MetabolicModel, String}"><code>COBREXA.save_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">save_model(model::MetabolicModel, file_name::String)</code></pre><p>Generic function for saving models that chooses a specific writer function from the <code>file_name</code> extension, or throws an error.</p><p>Currently, these model types are supported:</p><ul><li>JSON models (<code>*.json</code>, loaded with <a href="#COBREXA.save_json_model-Tuple{MetabolicModel, String}"><code>save_json_model</code></a>)</li><li>MATLAB models (<code>*.mat</code>, loaded with <a href="#COBREXA.save_mat_model-Tuple{MetabolicModel, String}"><code>save_mat_model</code></a>)</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/io.jl#L41-L51">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_json_model-Tuple{String}" href="#COBREXA.load_json_model-Tuple{String}"><code>COBREXA.load_json_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_json_model(filename::String)::JSONModel</code></pre><p>Load and return a JSON-formatted model that is stored in <code>file_name</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/json.jl#L1-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.save_json_model-Tuple{MetabolicModel, String}" href="#COBREXA.save_json_model-Tuple{MetabolicModel, String}"><code>COBREXA.save_json_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">save_json_model(model::MetabolicModel, file_name::String)</code></pre><p>Save a <a href="#COBREXA.JSONModel"><code>JSONModel</code></a> in <code>model</code> to a JSON file <code>file_name</code>.</p><p>In case the <code>model</code> is not <code>JSONModel</code>, it will be converted automatically.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/json.jl#L10-L16">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_mat_model-Tuple{String}" href="#COBREXA.load_mat_model-Tuple{String}"><code>COBREXA.load_mat_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_mat_model(file_name::String)</code></pre><p>Load and return a MATLAB file <code>file_name</code> that contains a COBRA-compatible model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/mat.jl#L2-L7">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.save_mat_model-Tuple{MetabolicModel, String}" href="#COBREXA.save_mat_model-Tuple{MetabolicModel, String}"><code>COBREXA.save_mat_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">save_mat_model(model::MetabolicModel, file_name::String; model_name::String="model")</code></pre><p>Save a <a href="#COBREXA.MATModel"><code>MATModel</code></a> in <code>model</code> to a MATLAB file <code>file_name</code> in a format compatible with other MATLAB-based COBRA software.</p><p>In case the <code>model</code> is not <code>MATModel</code>, it will be converted automatically.</p><p><code>model_name</code> is the identifier name for the whole model written to the MATLAB file; defaults to just "model".</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/mat.jl#L14-L24">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_sbml_model-Tuple{String}" href="#COBREXA.load_sbml_model-Tuple{String}"><code>COBREXA.load_sbml_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_sbml_model(file_name::String)::SBMLModel</code></pre><p>Load and return a SBML XML model in <code>file_name</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/sbml.jl#L2-L6">source</a></section></article><h3 id="Pretty-printing"><a class="docs-heading-anchor" href="#Pretty-printing">Pretty printing</a><a id="Pretty-printing-1"></a><a class="docs-heading-anchor-permalink" href="#Pretty-printing" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="Base.show-Tuple{IO, MIME{Symbol("text/plain")}, MetabolicModel}" href="#Base.show-Tuple{IO, MIME{Symbol("text/plain")}, MetabolicModel}"><code>Base.show</code></a> — <span class="docstring-category">Method</span></header><section><div><p>Pretty printing of everything metabolic-modelish.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/show/MetabolicModel.jl#L1-L3">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._pretty_substances-Tuple{Vector{String}}" href="#COBREXA._pretty_substances-Tuple{Vector{String}}"><code>COBREXA._pretty_substances</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_pretty_substances(ss::Vector{String})::String</code></pre><p>Nicely format a substance list.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/show/Reaction.jl#L2-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.show-Union{Tuple{M}, Tuple{IO, MIME{Symbol("text/plain")}, Serialized{M}}} where M" href="#Base.show-Union{Tuple{M}, Tuple{IO, MIME{Symbol("text/plain")}, Serialized{M}}} where M"><code>Base.show</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.show(io::IO, ::MIME"text/plain", m::Serialized{M}) where {M}</code></pre><p>Show the <a href="#COBREXA.Serialized"><code>Serialized</code></a> model without unnecessarily loading it.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/show/Serialized.jl#L2-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._pretty_print_keyvals-Tuple{Any, String, Any}" href="#COBREXA._pretty_print_keyvals-Tuple{Any, String, Any}"><code>COBREXA._pretty_print_keyvals</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_pretty_print_keyvals(io, def::String, payload; kwargs...)</code></pre><p>Nicely prints keys and values.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/show/pretty_printing.jl#L1-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._pretty_print_keyvals-Tuple{Any, String, Dict}" href="#COBREXA._pretty_print_keyvals-Tuple{Any, String, Dict}"><code>COBREXA._pretty_print_keyvals</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_pretty_print_keyvals( + lb=-_constants.default_reaction_rate)</code></pre><p>Helper function to set the bounds of variables. The JuMP <code>set_normalized_rhs</code> function is a little confusing, so this function simplifies setting constraints. In short, JuMP uses a normalized right hand side representation of constraints, which means that lower bounds have their sign flipped. This function does this for you, so you don't have to remember to do this whenever you change the constraints.</p><p>Just supply the constraint <code>index</code> and the JuMP model (<code>opt_model</code>) that will be solved, and the variable's bounds will be set to <code>ub</code> and <code>lb</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/solver.jl#L74-L89">source</a></section></article><h2 id="File-I/O-and-serialization"><a class="docs-heading-anchor" href="#File-I/O-and-serialization">File I/O and serialization</a><a id="File-I/O-and-serialization-1"></a><a class="docs-heading-anchor-permalink" href="#File-I/O-and-serialization" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_model-Tuple{String}" href="#COBREXA.load_model-Tuple{String}"><code>COBREXA.load_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_model(file_name::String)::MetabolicModel</code></pre><p>Generic function for loading models that chooses a specific loader function from the <code>file_name</code> extension, or throws an error.</p><p>Currently, these model types are supported:</p><ul><li>SBML models (<code>*.xml</code>, loaded with <a href="#COBREXA.load_sbml_model-Tuple{String}"><code>load_sbml_model</code></a>)</li><li>JSON models (<code>*.json</code>, loaded with <a href="#COBREXA.load_json_model-Tuple{String}"><code>load_json_model</code></a>)</li><li>MATLAB models (<code>*.mat</code>, loaded with <a href="#COBREXA.load_mat_model-Tuple{String}"><code>load_mat_model</code></a>)</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/io.jl#L2-L13">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_model-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:MetabolicModel" href="#COBREXA.load_model-Union{Tuple{T}, Tuple{Type{T}, String}} where T<:MetabolicModel"><code>COBREXA.load_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_model(type::Type{T}, file_name::String)::T where T</code></pre><p>Helper function tht loads the model using <a href="#COBREXA.load_model-Tuple{String}"><code>load_model</code></a> and return it converted to <code>type</code>.</p><p><strong>Example:</strong></p><pre><code class="language-none">load_model(CoreModel, "mySBMLModel.xml")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/io.jl#L27-L36">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.save_model-Tuple{MetabolicModel, String}" href="#COBREXA.save_model-Tuple{MetabolicModel, String}"><code>COBREXA.save_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">save_model(model::MetabolicModel, file_name::String)</code></pre><p>Generic function for saving models that chooses a specific writer function from the <code>file_name</code> extension, or throws an error.</p><p>Currently, these model types are supported:</p><ul><li>JSON models (<code>*.json</code>, loaded with <a href="#COBREXA.save_json_model-Tuple{MetabolicModel, String}"><code>save_json_model</code></a>)</li><li>MATLAB models (<code>*.mat</code>, loaded with <a href="#COBREXA.save_mat_model-Tuple{MetabolicModel, String}"><code>save_mat_model</code></a>)</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/io.jl#L41-L51">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_json_model-Tuple{String}" href="#COBREXA.load_json_model-Tuple{String}"><code>COBREXA.load_json_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_json_model(filename::String)::JSONModel</code></pre><p>Load and return a JSON-formatted model that is stored in <code>file_name</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/json.jl#L1-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.save_json_model-Tuple{MetabolicModel, String}" href="#COBREXA.save_json_model-Tuple{MetabolicModel, String}"><code>COBREXA.save_json_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">save_json_model(model::MetabolicModel, file_name::String)</code></pre><p>Save a <a href="#COBREXA.JSONModel"><code>JSONModel</code></a> in <code>model</code> to a JSON file <code>file_name</code>.</p><p>In case the <code>model</code> is not <code>JSONModel</code>, it will be converted automatically.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/json.jl#L10-L16">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_mat_model-Tuple{String}" href="#COBREXA.load_mat_model-Tuple{String}"><code>COBREXA.load_mat_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_mat_model(file_name::String)</code></pre><p>Load and return a MATLAB file <code>file_name</code> that contains a COBRA-compatible model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/mat.jl#L2-L7">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.save_mat_model-Tuple{MetabolicModel, String}" href="#COBREXA.save_mat_model-Tuple{MetabolicModel, String}"><code>COBREXA.save_mat_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">save_mat_model(model::MetabolicModel, file_name::String; model_name::String="model")</code></pre><p>Save a <a href="#COBREXA.MATModel"><code>MATModel</code></a> in <code>model</code> to a MATLAB file <code>file_name</code> in a format compatible with other MATLAB-based COBRA software.</p><p>In case the <code>model</code> is not <code>MATModel</code>, it will be converted automatically.</p><p><code>model_name</code> is the identifier name for the whole model written to the MATLAB file; defaults to just "model".</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/mat.jl#L14-L24">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.load_sbml_model-Tuple{String}" href="#COBREXA.load_sbml_model-Tuple{String}"><code>COBREXA.load_sbml_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">load_sbml_model(file_name::String)::SBMLModel</code></pre><p>Load and return a SBML XML model in <code>file_name</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/sbml.jl#L2-L6">source</a></section></article><h3 id="Pretty-printing"><a class="docs-heading-anchor" href="#Pretty-printing">Pretty printing</a><a id="Pretty-printing-1"></a><a class="docs-heading-anchor-permalink" href="#Pretty-printing" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="Base.show-Tuple{IO, MIME{Symbol("text/plain")}, MetabolicModel}" href="#Base.show-Tuple{IO, MIME{Symbol("text/plain")}, MetabolicModel}"><code>Base.show</code></a> — <span class="docstring-category">Method</span></header><section><div><p>Pretty printing of everything metabolic-modelish.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/show/MetabolicModel.jl#L1-L3">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._pretty_substances-Tuple{Vector{String}}" href="#COBREXA._pretty_substances-Tuple{Vector{String}}"><code>COBREXA._pretty_substances</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_pretty_substances(ss::Vector{String})::String</code></pre><p>Nicely format a substance list.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/show/Reaction.jl#L2-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.show-Union{Tuple{M}, Tuple{IO, MIME{Symbol("text/plain")}, Serialized{M}}} where M" href="#Base.show-Union{Tuple{M}, Tuple{IO, MIME{Symbol("text/plain")}, Serialized{M}}} where M"><code>Base.show</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.show(io::IO, ::MIME"text/plain", m::Serialized{M}) where {M}</code></pre><p>Show the <a href="#COBREXA.Serialized"><code>Serialized</code></a> model without unnecessarily loading it.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/show/Serialized.jl#L2-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._pretty_print_keyvals-Tuple{Any, String, Any}" href="#COBREXA._pretty_print_keyvals-Tuple{Any, String, Any}"><code>COBREXA._pretty_print_keyvals</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_pretty_print_keyvals(io, def::String, payload; kwargs...)</code></pre><p>Nicely prints keys and values.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/show/pretty_printing.jl#L1-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._pretty_print_keyvals-Tuple{Any, String, Dict}" href="#COBREXA._pretty_print_keyvals-Tuple{Any, String, Dict}"><code>COBREXA._pretty_print_keyvals</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_pretty_print_keyvals( io, def::String, payload::Dict -)</code></pre><p>Specialization of <code>_pretty_print_keyvals</code> for dictionaries.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/show/pretty_printing.jl#L27-L35">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._pretty_print_keyvals-Tuple{Any, String, String}" href="#COBREXA._pretty_print_keyvals-Tuple{Any, String, String}"><code>COBREXA._pretty_print_keyvals</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_pretty_print_keyvals( +)</code></pre><p>Specialization of <code>_pretty_print_keyvals</code> for dictionaries.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/show/pretty_printing.jl#L27-L35">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._pretty_print_keyvals-Tuple{Any, String, String}" href="#COBREXA._pretty_print_keyvals-Tuple{Any, String, String}"><code>COBREXA._pretty_print_keyvals</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_pretty_print_keyvals( io, def::String, payload::String -)</code></pre><p>Specialization of <code>_pretty_print_keyvals</code> for plain strings.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/io/show/pretty_printing.jl#L9-L17">source</a></section></article><h2 id="Model-reconstruction"><a class="docs-heading-anchor" href="#Model-reconstruction">Model reconstruction</a><a id="Model-reconstruction-1"></a><a class="docs-heading-anchor-permalink" href="#Model-reconstruction" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Tuple{CoreModel, CoreModel}" href="#COBREXA.add_reactions-Tuple{CoreModel, CoreModel}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions(m1::CoreModel, m2::CoreModel; check_consistency = false)</code></pre><p>Add all reactions from <code>m2</code> to <code>m1</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L109-L114">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{K}, Tuple{V2}, Tuple{V1}, Tuple{CoreModel, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat, String, K}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.add_reactions-Union{Tuple{K}, Tuple{V2}, Tuple{V1}, Tuple{CoreModel, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat, String, K}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( +)</code></pre><p>Specialization of <code>_pretty_print_keyvals</code> for plain strings.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/io/show/pretty_printing.jl#L9-L17">source</a></section></article><h2 id="Model-reconstruction"><a class="docs-heading-anchor" href="#Model-reconstruction">Model reconstruction</a><a id="Model-reconstruction-1"></a><a class="docs-heading-anchor-permalink" href="#Model-reconstruction" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Tuple{CoreModel, CoreModel}" href="#COBREXA.add_reactions-Tuple{CoreModel, CoreModel}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions(m1::CoreModel, m2::CoreModel; check_consistency = false)</code></pre><p>Add all reactions from <code>m2</code> to <code>m1</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L109-L114">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{K}, Tuple{V2}, Tuple{V1}, Tuple{CoreModel, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat, String, K}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.add_reactions-Union{Tuple{K}, Tuple{V2}, Tuple{V1}, Tuple{CoreModel, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat, String, K}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( m::CoreModel, s::V1, b::V2, @@ -119,7 +119,7 @@ keys(model.reactions)</code></pre></div><a class="docs-sourcelink" target="_blan rxn::String, mets::K; check_consistency = false, -) where {V1<:VecType,V2<:VecType,K<:StringVecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L35-L48">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V, K, K}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.add_reactions-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V, K, K}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( +) where {V1<:VecType,V2<:VecType,K<:StringVecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L35-L48">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V, K, K}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.add_reactions-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V, K, K}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( m::CoreModel, Sp::M, b::V, @@ -129,7 +129,7 @@ keys(model.reactions)</code></pre></div><a class="docs-sourcelink" target="_blan rxns::K, mets::K; check_consistency = false, -) where {M<:MatType,V<:VecType,K<:StringVecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L129-L142">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{V2}, Tuple{V1}, Tuple{CoreModel, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}}" href="#COBREXA.add_reactions-Union{Tuple{V2}, Tuple{V1}, Tuple{CoreModel, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( +) where {M<:MatType,V<:VecType,K<:StringVecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L129-L142">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{V2}, Tuple{V1}, Tuple{CoreModel, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}}" href="#COBREXA.add_reactions-Union{Tuple{V2}, Tuple{V1}, Tuple{CoreModel, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( m::CoreModel, s::V1, b::V2, @@ -137,7 +137,7 @@ keys(model.reactions)</code></pre></div><a class="docs-sourcelink" target="_blan xl::AbstractFloat, xu::AbstractFloat; check_consistency = false, -) where {V1<:VecType,V2<:VecType}</code></pre><p>Add reaction(s) to a <code>CoreModel</code> model <code>m</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L1-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}}" href="#COBREXA.add_reactions-Union{Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( +) where {V1<:VecType,V2<:VecType}</code></pre><p>Add reaction(s) to a <code>CoreModel</code> model <code>m</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L1-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}}" href="#COBREXA.add_reactions-Union{Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( m::CoreModel, Sp::M, b::V, @@ -145,12 +145,12 @@ keys(model.reactions)</code></pre></div><a class="docs-sourcelink" target="_blan xl::V, xu::V; check_consistency = false, -) where {M<:MatType,V<:VecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L73-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_metabolites-Tuple{CoreModel, Any}" href="#COBREXA.remove_metabolites-Tuple{CoreModel, Any}"><code>COBREXA.remove_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_metabolites(model::CoreModel, metabolites)</code></pre><p>Removes a set of <code>metabolites</code> from the <code>model</code> of type <code>CoreModel</code> and returns a new <code>CoreModel</code> without those metabolites. Here, <code>metabolites</code> can be either a string, a vector of strings, an index or a vector of indices. Also removes any reactions that have no associated metabolites after the metabolites have been removed.</p><p><strong>Example</strong></p><pre><code class="language-none">model = load_model(CoreModel, "e_coli_core.json") +) where {M<:MatType,V<:VecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L73-L84">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_metabolites-Tuple{CoreModel, Any}" href="#COBREXA.remove_metabolites-Tuple{CoreModel, Any}"><code>COBREXA.remove_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_metabolites(model::CoreModel, metabolites)</code></pre><p>Removes a set of <code>metabolites</code> from the <code>model</code> of type <code>CoreModel</code> and returns a new <code>CoreModel</code> without those metabolites. Here, <code>metabolites</code> can be either a string, a vector of strings, an index or a vector of indices. Also removes any reactions that have no associated metabolites after the metabolites have been removed.</p><p><strong>Example</strong></p><pre><code class="language-none">model = load_model(CoreModel, "e_coli_core.json") m1 = remove_metabolites(model, ["glc__D_e", "for_c"]) m2 = remove_metabolites(model, "glc__D_e") m3 = remove_metabolites(model, indexin(["glc__D_e", "for_c"], metabolites(model))) -m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites(model))))</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L273-L291">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModel, Int64}" href="#COBREXA.remove_reactions-Tuple{CoreModel, Int64}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModel, rxn::Int)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L351-L354">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModel, String}" href="#COBREXA.remove_reactions-Tuple{CoreModel, String}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModel, rxn::String)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L359-L362">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModel, Vector{Int64}}" href="#COBREXA.remove_reactions-Tuple{CoreModel, Vector{Int64}}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModel, rxns::Vector{Int})</code></pre><p>Removes a set of reactions from a CoreModel. Also removes the metabolites not involved in any reaction.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L327-L332">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModel, Vector{String}}" href="#COBREXA.remove_reactions-Tuple{CoreModel, Vector{String}}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModel, rxns::Vector{String})</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L367-L370">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.verify_consistency-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V, K, K, Any, Any}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.verify_consistency-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V, K, K, Any, Any}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.verify_consistency</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">verify_consistency( +m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites(model))))</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L273-L291">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModel, Int64}" href="#COBREXA.remove_reactions-Tuple{CoreModel, Int64}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModel, rxn::Int)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L351-L354">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModel, String}" href="#COBREXA.remove_reactions-Tuple{CoreModel, String}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModel, rxn::String)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L359-L362">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModel, Vector{Int64}}" href="#COBREXA.remove_reactions-Tuple{CoreModel, Vector{Int64}}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModel, rxns::Vector{Int})</code></pre><p>Removes a set of reactions from a CoreModel. Also removes the metabolites not involved in any reaction.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L327-L332">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModel, Vector{String}}" href="#COBREXA.remove_reactions-Tuple{CoreModel, Vector{String}}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModel, rxns::Vector{String})</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L367-L370">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.verify_consistency-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V, K, K, Any, Any}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.verify_consistency-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModel, M, V, V, V, V, K, K, Any, Any}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.verify_consistency</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">verify_consistency( m::CoreModel, Sp::M, b::V, @@ -161,17 +161,17 @@ m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites mets::K, new_reactions, new_metabolites, -) where {M<:MatType,V<:VecType,K<:StringVecType}</code></pre><p>Check the consistency of given reactions with existing reactions in <code>m</code>.</p><p>TODO: work in progress, doesn't return consistency status.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModel.jl#L214-L232">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_coupling_constraints!-Tuple{CoreModelCoupled, AbstractVector{Float64}, AbstractFloat, AbstractFloat}" href="#COBREXA.add_coupling_constraints!-Tuple{CoreModelCoupled, AbstractVector{Float64}, AbstractFloat, AbstractFloat}"><code>COBREXA.add_coupling_constraints!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_coupling_constraints!( +) where {M<:MatType,V<:VecType,K<:StringVecType}</code></pre><p>Check the consistency of given reactions with existing reactions in <code>m</code>.</p><p>TODO: work in progress, doesn't return consistency status.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModel.jl#L214-L232">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_coupling_constraints!-Tuple{CoreModelCoupled, AbstractVector{Float64}, AbstractFloat, AbstractFloat}" href="#COBREXA.add_coupling_constraints!-Tuple{CoreModelCoupled, AbstractVector{Float64}, AbstractFloat, AbstractFloat}"><code>COBREXA.add_coupling_constraints!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_coupling_constraints!( m::CoreModelCoupled, c::VecType, cl::AbstractFloat, cu::AbstractFloat, -)</code></pre><p>Overload for adding a single coupling constraint.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L235-L244">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_coupling_constraints!-Union{Tuple{V}, Tuple{CoreModelCoupled, AbstractMatrix{Float64}, V, V}} where V<:AbstractVector{Float64}" href="#COBREXA.add_coupling_constraints!-Union{Tuple{V}, Tuple{CoreModelCoupled, AbstractMatrix{Float64}, V, V}} where V<:AbstractVector{Float64}"><code>COBREXA.add_coupling_constraints!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_coupling_constraints!( +)</code></pre><p>Overload for adding a single coupling constraint.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L235-L244">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_coupling_constraints!-Union{Tuple{V}, Tuple{CoreModelCoupled, AbstractMatrix{Float64}, V, V}} where V<:AbstractVector{Float64}" href="#COBREXA.add_coupling_constraints!-Union{Tuple{V}, Tuple{CoreModelCoupled, AbstractMatrix{Float64}, V, V}} where V<:AbstractVector{Float64}"><code>COBREXA.add_coupling_constraints!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_coupling_constraints!( m::CoreModelCoupled, C::MatType, cl::V, cu::V, -) where {V<:VecType}</code></pre><p>In-place add a single coupling constraint in form</p><pre><code class="language-none"> câ‚— ≤ C x ≤ cᵤ</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L260-L272">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_coupling_constraints-Tuple{CoreModel, Vararg{Any, N} where N}" href="#COBREXA.add_coupling_constraints-Tuple{CoreModel, Vararg{Any, N} where N}"><code>COBREXA.add_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_coupling_constraints(m::CoreModel, args...)</code></pre><p>Add coupling constraints to a plain <a href="#COBREXA.CoreModel"><code>CoreModel</code></a> (returns a <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L226-L231">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_coupling_constraints-Tuple{CoreModelCoupled, Vararg{Any, N} where N}" href="#COBREXA.add_coupling_constraints-Tuple{CoreModelCoupled, Vararg{Any, N} where N}"><code>COBREXA.add_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><p>Add constraints of the following form to a CoreModelCoupled and return a modified one.</p><p>Add constraints to a <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> and return a modified one.</p><p>The arguments are same as for in-place <a href="#COBREXA.add_coupling_constraints!-Tuple{CoreModelCoupled, AbstractVector{Float64}, AbstractFloat, AbstractFloat}"><code>add_coupling_constraints!</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L213-L219">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Tuple{CoreModelCoupled, CoreModel}" href="#COBREXA.add_reactions-Tuple{CoreModelCoupled, CoreModel}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions(m1::CoreModelCoupled, m2::CoreModel; check_consistency = false)</code></pre><p>Add all reactions from <code>m2</code> to <code>m1</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L107-L112">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{K}, Tuple{V2}, Tuple{V1}, Tuple{CoreModelCoupled, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat, String, K}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.add_reactions-Union{Tuple{K}, Tuple{V2}, Tuple{V1}, Tuple{CoreModelCoupled, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat, String, K}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( +) where {V<:VecType}</code></pre><p>In-place add a single coupling constraint in form</p><pre><code class="language-none"> câ‚— ≤ C x ≤ cᵤ</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L260-L272">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_coupling_constraints-Tuple{CoreModel, Vararg{Any, N} where N}" href="#COBREXA.add_coupling_constraints-Tuple{CoreModel, Vararg{Any, N} where N}"><code>COBREXA.add_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_coupling_constraints(m::CoreModel, args...)</code></pre><p>Add coupling constraints to a plain <a href="#COBREXA.CoreModel"><code>CoreModel</code></a> (returns a <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a>).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L226-L231">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_coupling_constraints-Tuple{CoreModelCoupled, Vararg{Any, N} where N}" href="#COBREXA.add_coupling_constraints-Tuple{CoreModelCoupled, Vararg{Any, N} where N}"><code>COBREXA.add_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><p>Add constraints of the following form to a CoreModelCoupled and return a modified one.</p><p>Add constraints to a <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> and return a modified one.</p><p>The arguments are same as for in-place <a href="#COBREXA.add_coupling_constraints!-Tuple{CoreModelCoupled, AbstractVector{Float64}, AbstractFloat, AbstractFloat}"><code>add_coupling_constraints!</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L213-L219">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Tuple{CoreModelCoupled, CoreModel}" href="#COBREXA.add_reactions-Tuple{CoreModelCoupled, CoreModel}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions(m1::CoreModelCoupled, m2::CoreModel; check_consistency = false)</code></pre><p>Add all reactions from <code>m2</code> to <code>m1</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L107-L112">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{K}, Tuple{V2}, Tuple{V1}, Tuple{CoreModelCoupled, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat, String, K}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.add_reactions-Union{Tuple{K}, Tuple{V2}, Tuple{V1}, Tuple{CoreModelCoupled, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat, String, K}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( m::CoreModelCoupled, s::V1, b::V2, @@ -181,7 +181,7 @@ m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites rxn::String, mets::K; check_consistency = false, -) where {V1<:VecType,V2<:VecType,K<:StringVecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L33-L46">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModelCoupled, M, V, V, V, V, K, K}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.add_reactions-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModelCoupled, M, V, V, V, V, K, K}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( +) where {V1<:VecType,V2<:VecType,K<:StringVecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L33-L46">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModelCoupled, M, V, V, V, V, K, K}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}" href="#COBREXA.add_reactions-Union{Tuple{K}, Tuple{V}, Tuple{M}, Tuple{CoreModelCoupled, M, V, V, V, V, K, K}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}, K<:AbstractVector{String}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( m::CoreModelCoupled, Sp::M, b::V, @@ -191,7 +191,7 @@ m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites rxns::K, mets::K; check_consistency = false, -) where {M<:MatType,V<:VecType,K<:StringVecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L123-L136">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{V2}, Tuple{V1}, Tuple{CoreModelCoupled, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}}" href="#COBREXA.add_reactions-Union{Tuple{V2}, Tuple{V1}, Tuple{CoreModelCoupled, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( +) where {M<:MatType,V<:VecType,K<:StringVecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L123-L136">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{V2}, Tuple{V1}, Tuple{CoreModelCoupled, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}}" href="#COBREXA.add_reactions-Union{Tuple{V2}, Tuple{V1}, Tuple{CoreModelCoupled, V1, V2, AbstractFloat, AbstractFloat, AbstractFloat}} where {V1<:AbstractVector{Float64}, V2<:AbstractVector{Float64}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( m::CoreModelCoupled, s::V1, b::V2, @@ -199,7 +199,7 @@ m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites xl::AbstractFloat, xu::AbstractFloat; check_consistency = false, -) where {V1<:VecType,V2<:VecType}</code></pre><p>Add reaction(s) to a <code>CoreModelCoupled</code> model <code>m</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L1-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{V}, Tuple{M}, Tuple{CoreModelCoupled, M, V, V, V, V}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}}" href="#COBREXA.add_reactions-Union{Tuple{V}, Tuple{M}, Tuple{CoreModelCoupled, M, V, V, V, V}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( +) where {V1<:VecType,V2<:VecType}</code></pre><p>Add reaction(s) to a <code>CoreModelCoupled</code> model <code>m</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L1-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions-Union{Tuple{V}, Tuple{M}, Tuple{CoreModelCoupled, M, V, V, V, V}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}}" href="#COBREXA.add_reactions-Union{Tuple{V}, Tuple{M}, Tuple{CoreModelCoupled, M, V, V, V, V}} where {M<:AbstractMatrix{Float64}, V<:AbstractVector{Float64}}"><code>COBREXA.add_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions( m::CoreModelCoupled, Sp::M, b::V, @@ -207,12 +207,12 @@ m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites xl::V, xu::V; check_consistency = false, -) where {M<:MatType,V<:VecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L77-L88">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_coupling_bounds!-Union{Tuple{V}, Tuple{CoreModelCoupled, Vector{Int64}}} where V<:AbstractVector{Float64}" href="#COBREXA.change_coupling_bounds!-Union{Tuple{V}, Tuple{CoreModelCoupled, Vector{Int64}}} where V<:AbstractVector{Float64}"><code>COBREXA.change_coupling_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_coupling_bounds!( +) where {M<:MatType,V<:VecType}</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L77-L88">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_coupling_bounds!-Union{Tuple{V}, Tuple{CoreModelCoupled, Vector{Int64}}} where V<:AbstractVector{Float64}" href="#COBREXA.change_coupling_bounds!-Union{Tuple{V}, Tuple{CoreModelCoupled, Vector{Int64}}} where V<:AbstractVector{Float64}"><code>COBREXA.change_coupling_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_coupling_bounds!( model::CoreModelCoupled, constraints::Vector{Int}; cl::V = Float64[], cu::V = Float64[], -) where {V<:VecType}</code></pre><p>Change the lower and/or upper bounds (<code>cl</code> and <code>cu</code>) for the given list of coupling constraints.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L329-L339">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Int64}" href="#COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Int64}"><code>COBREXA.remove_coupling_constraints!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_coupling_constraints!(m::CoreModelCoupled, constraint::Int)</code></pre><p>Removes a single coupling constraints from a <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> in-place.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L305-L310">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Vector{Int64}}" href="#COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Vector{Int64}}"><code>COBREXA.remove_coupling_constraints!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_coupling_constraints!(m::CoreModelCoupled, constraints::Vector{Int})</code></pre><p>Removes a set of coupling constraints from a <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> in-place.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L315-L320">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_coupling_constraints-Tuple{CoreModelCoupled, Vararg{Any, N} where N}" href="#COBREXA.remove_coupling_constraints-Tuple{CoreModelCoupled, Vararg{Any, N} where N}"><code>COBREXA.remove_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_coupling_constraints(m::CoreModelCoupled, args...)</code></pre><p>Remove coupling constraints from the linear model, and return the modified model. Arguments are the same as for in-place version <a href="#COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Int64}"><code>remove_coupling_constraints!</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L291-L297">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModelCoupled, Int64}" href="#COBREXA.remove_reactions-Tuple{CoreModelCoupled, Int64}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModelCoupled, rxn::Int)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L184-L187">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModelCoupled, String}" href="#COBREXA.remove_reactions-Tuple{CoreModelCoupled, String}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModelCoupled, rxn::String)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L192-L195">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModelCoupled, Vector{Int64}}" href="#COBREXA.remove_reactions-Tuple{CoreModelCoupled, Vector{Int64}}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModelCoupled, rxns::Vector{Int})</code></pre><p>Remove reaction(s) from a <code>CoreModelCoupled</code>.</p><p>Also removes any metabolites not involved in any reaction after the deletion.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L167-L174">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModelCoupled, Vector{String}}" href="#COBREXA.remove_reactions-Tuple{CoreModelCoupled, Vector{String}}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModelCoupled, rxns::Vector{String})</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/CoreModelCoupled.jl#L200-L203">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.:⟵-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}" href="#COBREXA.:⟵-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}"><code>COBREXA.:⟵</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">⟵( +) where {V<:VecType}</code></pre><p>Change the lower and/or upper bounds (<code>cl</code> and <code>cu</code>) for the given list of coupling constraints.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L329-L339">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Int64}" href="#COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Int64}"><code>COBREXA.remove_coupling_constraints!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_coupling_constraints!(m::CoreModelCoupled, constraint::Int)</code></pre><p>Removes a single coupling constraints from a <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> in-place.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L305-L310">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Vector{Int64}}" href="#COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Vector{Int64}}"><code>COBREXA.remove_coupling_constraints!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_coupling_constraints!(m::CoreModelCoupled, constraints::Vector{Int})</code></pre><p>Removes a set of coupling constraints from a <a href="#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a> in-place.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L315-L320">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_coupling_constraints-Tuple{CoreModelCoupled, Vararg{Any, N} where N}" href="#COBREXA.remove_coupling_constraints-Tuple{CoreModelCoupled, Vararg{Any, N} where N}"><code>COBREXA.remove_coupling_constraints</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_coupling_constraints(m::CoreModelCoupled, args...)</code></pre><p>Remove coupling constraints from the linear model, and return the modified model. Arguments are the same as for in-place version <a href="#COBREXA.remove_coupling_constraints!-Tuple{CoreModelCoupled, Int64}"><code>remove_coupling_constraints!</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L291-L297">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModelCoupled, Int64}" href="#COBREXA.remove_reactions-Tuple{CoreModelCoupled, Int64}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModelCoupled, rxn::Int)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L184-L187">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModelCoupled, String}" href="#COBREXA.remove_reactions-Tuple{CoreModelCoupled, String}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModelCoupled, rxn::String)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L192-L195">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModelCoupled, Vector{Int64}}" href="#COBREXA.remove_reactions-Tuple{CoreModelCoupled, Vector{Int64}}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModelCoupled, rxns::Vector{Int})</code></pre><p>Remove reaction(s) from a <code>CoreModelCoupled</code>.</p><p>Also removes any metabolites not involved in any reaction after the deletion.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L167-L174">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions-Tuple{CoreModelCoupled, Vector{String}}" href="#COBREXA.remove_reactions-Tuple{CoreModelCoupled, Vector{String}}"><code>COBREXA.remove_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions(m::CoreModelCoupled, rxns::Vector{String})</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/CoreModelCoupled.jl#L200-L203">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.:⟵-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}" href="#COBREXA.:⟵-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}"><code>COBREXA.:⟵</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">⟵( substrates::Union{ Nothing, Metabolite, @@ -225,7 +225,7 @@ m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient} }, -)</code></pre><p>Make a reverse-only <a href="#COBREXA.Reaction"><code>Reaction</code></a> from <code>substrates</code> and <code>products</code>. An equivalent alternative is <code>â†</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/Reaction.jl#L102-L120">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.:⟶-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}" href="#COBREXA.:⟶-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}"><code>COBREXA.:⟶</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">⟶( +)</code></pre><p>Make a reverse-only <a href="#COBREXA.Reaction"><code>Reaction</code></a> from <code>substrates</code> and <code>products</code>. An equivalent alternative is <code>â†</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/Reaction.jl#L102-L120">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.:⟶-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}" href="#COBREXA.:⟶-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}"><code>COBREXA.:⟶</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">⟶( substrates::Union{ Nothing, Metabolite, @@ -238,7 +238,7 @@ m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient} }, -)</code></pre><p>Make a forward-only <a href="#COBREXA.Reaction"><code>Reaction</code></a> from <code>substrates</code> and <code>products</code>. An equivalent alternative is <code>→</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/Reaction.jl#L64-L82">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.:⟷-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}" href="#COBREXA.:⟷-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}"><code>COBREXA.:⟷</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">⟷( +)</code></pre><p>Make a forward-only <a href="#COBREXA.Reaction"><code>Reaction</code></a> from <code>substrates</code> and <code>products</code>. An equivalent alternative is <code>→</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/Reaction.jl#L64-L82">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.:⟷-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}" href="#COBREXA.:⟷-Tuple{Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}, Union{Nothing, Metabolite, MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient}}}"><code>COBREXA.:⟷</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">⟷( substrates::Union{ Nothing, Metabolite, @@ -251,15 +251,15 @@ m4 = remove_metabolites(model, first(indexin(["glc__D_e"], metabolites MetaboliteWithCoefficient, Vector{MetaboliteWithCoefficient} }, -)</code></pre><p>Make a bidirectional (reversible) <a href="#COBREXA.Reaction"><code>Reaction</code></a> from <code>substrates</code> and <code>products</code>. An equivalent alternative is <code>↔</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/Reaction.jl#L140-L158">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_gene!-Tuple{StandardModel, Gene}" href="#COBREXA.add_gene!-Tuple{StandardModel, Gene}"><code>COBREXA.add_gene!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_gene!(model::StandardModel, genes::Gene)</code></pre><p>Add <code>gene</code> to <code>model</code> based on gene <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L48-L52">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_genes!-Tuple{StandardModel, Vector{Gene}}" href="#COBREXA.add_genes!-Tuple{StandardModel, Vector{Gene}}"><code>COBREXA.add_genes!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_genes!(model::StandardModel, genes::Vector{Gene})</code></pre><p>Add <code>genes</code> to <code>model</code> based on gene <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L37-L41">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_metabolite!-Tuple{StandardModel, Metabolite}" href="#COBREXA.add_metabolite!-Tuple{StandardModel, Metabolite}"><code>COBREXA.add_metabolite!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_metabolite!(model::StandardModel, met::Metabolite)</code></pre><p>Add <code>met</code> to <code>model</code> based on metabolite <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L30-L34">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_metabolites!-Tuple{StandardModel, Vector{Metabolite}}" href="#COBREXA.add_metabolites!-Tuple{StandardModel, Vector{Metabolite}}"><code>COBREXA.add_metabolites!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_metabolites!(model::StandardModel, mets::Vector{Metabolite})</code></pre><p>Add <code>mets</code> to <code>model</code> based on metabolite <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L19-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reaction!-Tuple{StandardModel, Reaction}" href="#COBREXA.add_reaction!-Tuple{StandardModel, Reaction}"><code>COBREXA.add_reaction!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reaction!(model::StandardModel, rxn::Reaction)</code></pre><p>Add <code>rxn</code> to <code>model</code> based on reaction <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L12-L16">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions!-Tuple{StandardModel, Vector{Reaction}}" href="#COBREXA.add_reactions!-Tuple{StandardModel, Vector{Reaction}}"><code>COBREXA.add_reactions!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions!(model::StandardModel, rxns::Vector{Reaction})</code></pre><p>Add <code>rxns</code> to <code>model</code> based on reaction <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L1-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_gene!-Tuple{StandardModel, String}" href="#COBREXA.remove_gene!-Tuple{StandardModel, String}"><code>COBREXA.remove_gene!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_gene!( +)</code></pre><p>Make a bidirectional (reversible) <a href="#COBREXA.Reaction"><code>Reaction</code></a> from <code>substrates</code> and <code>products</code>. An equivalent alternative is <code>↔</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/Reaction.jl#L140-L158">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_gene!-Tuple{StandardModel, Gene}" href="#COBREXA.add_gene!-Tuple{StandardModel, Gene}"><code>COBREXA.add_gene!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_gene!(model::StandardModel, genes::Gene)</code></pre><p>Add <code>gene</code> to <code>model</code> based on gene <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L48-L52">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_genes!-Tuple{StandardModel, Vector{Gene}}" href="#COBREXA.add_genes!-Tuple{StandardModel, Vector{Gene}}"><code>COBREXA.add_genes!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_genes!(model::StandardModel, genes::Vector{Gene})</code></pre><p>Add <code>genes</code> to <code>model</code> based on gene <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L37-L41">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_metabolite!-Tuple{StandardModel, Metabolite}" href="#COBREXA.add_metabolite!-Tuple{StandardModel, Metabolite}"><code>COBREXA.add_metabolite!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_metabolite!(model::StandardModel, met::Metabolite)</code></pre><p>Add <code>met</code> to <code>model</code> based on metabolite <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L30-L34">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_metabolites!-Tuple{StandardModel, Vector{Metabolite}}" href="#COBREXA.add_metabolites!-Tuple{StandardModel, Vector{Metabolite}}"><code>COBREXA.add_metabolites!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_metabolites!(model::StandardModel, mets::Vector{Metabolite})</code></pre><p>Add <code>mets</code> to <code>model</code> based on metabolite <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L19-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reaction!-Tuple{StandardModel, Reaction}" href="#COBREXA.add_reaction!-Tuple{StandardModel, Reaction}"><code>COBREXA.add_reaction!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reaction!(model::StandardModel, rxn::Reaction)</code></pre><p>Add <code>rxn</code> to <code>model</code> based on reaction <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L12-L16">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_reactions!-Tuple{StandardModel, Vector{Reaction}}" href="#COBREXA.add_reactions!-Tuple{StandardModel, Vector{Reaction}}"><code>COBREXA.add_reactions!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_reactions!(model::StandardModel, rxns::Vector{Reaction})</code></pre><p>Add <code>rxns</code> to <code>model</code> based on reaction <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L1-L5">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_gene!-Tuple{StandardModel, String}" href="#COBREXA.remove_gene!-Tuple{StandardModel, String}"><code>COBREXA.remove_gene!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_gene!( model::StandardModel, id::Vector{String}; knockout_reactions::Bool = false, -)</code></pre><p>Remove gene with <code>id</code> from <code>model</code>. If <code>knockout_reactions</code> is true, then also constrain reactions that require the genes to function to carry zero flux.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_gene!(model, "g1")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L198-L212">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_genes!-Tuple{StandardModel, Vector{String}}" href="#COBREXA.remove_genes!-Tuple{StandardModel, Vector{String}}"><code>COBREXA.remove_genes!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_genes!( +)</code></pre><p>Remove gene with <code>id</code> from <code>model</code>. If <code>knockout_reactions</code> is true, then also constrain reactions that require the genes to function to carry zero flux.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_gene!(model, "g1")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L198-L212">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_genes!-Tuple{StandardModel, Vector{String}}" href="#COBREXA.remove_genes!-Tuple{StandardModel, Vector{String}}"><code>COBREXA.remove_genes!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_genes!( model::StandardModel, ids::Vector{String}; knockout_reactions::Bool = false, -)</code></pre><p>Remove all genes with <code>ids</code> from <code>model</code>. If <code>knockout_reactions</code> is true, then also constrain reactions that require the genes to function to carry zero flux.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_genes!(model, ["g1", "g2"])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L165-L179">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_metabolite!-Tuple{StandardModel, String}" href="#COBREXA.remove_metabolite!-Tuple{StandardModel, String}"><code>COBREXA.remove_metabolite!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_metabolite!(model::StandardModel, id::String)</code></pre><p>Remove metabolite with <code>id</code> from <code>model</code>. Warning, this could leave the model inconsistent, e.g. a reaction might require the deleted metabolite, in which case analysis functions will error.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_metabolite!(model, "atp_c")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L151-L162">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_metabolites!-Tuple{StandardModel, Vector{String}}" href="#COBREXA.remove_metabolites!-Tuple{StandardModel, Vector{String}}"><code>COBREXA.remove_metabolites!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_metabolites!(model::StandardModel, ids::Vector{String})</code></pre><p>Remove all metabolites with <code>ids</code> from <code>model</code>. Warning, this could leave the model inconsistent, e.g. a reaction might require the deleted metabolite, in which case analysis functions will error.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_metabolites!(model, ["atp_c", "adp_c"])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L135-L146">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reaction!-Tuple{StandardModel, String}" href="#COBREXA.remove_reaction!-Tuple{StandardModel, String}"><code>COBREXA.remove_reaction!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reaction!(model::StandardModel, id::String)</code></pre><p>Remove reaction with <code>id</code> from <code>model</code>. Note, may result in orphan metabolites.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_reaction!(model, "EX_glc__D_e")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L123-L132">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions!-Tuple{StandardModel, Vector{String}}" href="#COBREXA.remove_reactions!-Tuple{StandardModel, Vector{String}}"><code>COBREXA.remove_reactions!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions!(model::StandardModel, ids::Vector{String})</code></pre><p>Remove all reactions with <code>ids</code> from <code>model</code>. Note, may result in orphan metabolites.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_reactions!(model, ["EX_glc__D_e", "fba"])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L109-L118">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.@add_reactions!-Tuple{Symbol, Expr}" href="#COBREXA.@add_reactions!-Tuple{Symbol, Expr}"><code>COBREXA.@add_reactions!</code></a> — <span class="docstring-category">Macro</span></header><section><div><pre><code class="language-julia">@add_reactions!(model::Symbol, ex::Expr)</code></pre><p>Shortcut to add multiple reactions and their lower and upper bounds</p><p><strong>Call variants</strong></p><pre><code class="language-none">@add_reactions! model begin +)</code></pre><p>Remove all genes with <code>ids</code> from <code>model</code>. If <code>knockout_reactions</code> is true, then also constrain reactions that require the genes to function to carry zero flux.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_genes!(model, ["g1", "g2"])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L165-L179">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_metabolite!-Tuple{StandardModel, String}" href="#COBREXA.remove_metabolite!-Tuple{StandardModel, String}"><code>COBREXA.remove_metabolite!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_metabolite!(model::StandardModel, id::String)</code></pre><p>Remove metabolite with <code>id</code> from <code>model</code>. Warning, this could leave the model inconsistent, e.g. a reaction might require the deleted metabolite, in which case analysis functions will error.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_metabolite!(model, "atp_c")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L151-L162">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_metabolites!-Tuple{StandardModel, Vector{String}}" href="#COBREXA.remove_metabolites!-Tuple{StandardModel, Vector{String}}"><code>COBREXA.remove_metabolites!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_metabolites!(model::StandardModel, ids::Vector{String})</code></pre><p>Remove all metabolites with <code>ids</code> from <code>model</code>. Warning, this could leave the model inconsistent, e.g. a reaction might require the deleted metabolite, in which case analysis functions will error.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_metabolites!(model, ["atp_c", "adp_c"])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L135-L146">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reaction!-Tuple{StandardModel, String}" href="#COBREXA.remove_reaction!-Tuple{StandardModel, String}"><code>COBREXA.remove_reaction!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reaction!(model::StandardModel, id::String)</code></pre><p>Remove reaction with <code>id</code> from <code>model</code>. Note, may result in orphan metabolites.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_reaction!(model, "EX_glc__D_e")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L123-L132">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.remove_reactions!-Tuple{StandardModel, Vector{String}}" href="#COBREXA.remove_reactions!-Tuple{StandardModel, Vector{String}}"><code>COBREXA.remove_reactions!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">remove_reactions!(model::StandardModel, ids::Vector{String})</code></pre><p>Remove all reactions with <code>ids</code> from <code>model</code>. Note, may result in orphan metabolites.</p><p><strong>Example</strong></p><pre><code class="language-none">remove_reactions!(model, ["EX_glc__D_e", "fba"])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L109-L118">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.@add_reactions!-Tuple{Symbol, Expr}" href="#COBREXA.@add_reactions!-Tuple{Symbol, Expr}"><code>COBREXA.@add_reactions!</code></a> — <span class="docstring-category">Macro</span></header><section><div><pre><code class="language-julia">@add_reactions!(model::Symbol, ex::Expr)</code></pre><p>Shortcut to add multiple reactions and their lower and upper bounds</p><p><strong>Call variants</strong></p><pre><code class="language-none">@add_reactions! model begin reaction_name, reaction end @@ -273,21 +273,21 @@ end</code></pre><p><strong>Examples</strong></p><pre><code class="language-none" "v1", nothing ⟶ A, 0, 500 "v2", A ⟷ B + C, -500 "v3", B + C ⟶ nothing -end</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/StandardModel.jl#L55-L85">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_model_with_exchanges-Tuple{CoreModel, MetabolicModel, Vector{String}, Vector{String}}" href="#COBREXA.add_model_with_exchanges-Tuple{CoreModel, MetabolicModel, Vector{String}, Vector{String}}"><code>COBREXA.add_model_with_exchanges</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_model_with_exchanges( +end</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/StandardModel.jl#L55-L85">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_model_with_exchanges-Tuple{CoreModel, MetabolicModel, Vector{String}, Vector{String}}" href="#COBREXA.add_model_with_exchanges-Tuple{CoreModel, MetabolicModel, Vector{String}, Vector{String}}"><code>COBREXA.add_model_with_exchanges</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_model_with_exchanges( community::CoreModel, model::MetabolicModel, exchange_rxn_ids::Vector{String}, exchange_met_ids::Vector{String}; model_name = "unknown_species", biomass_id = nothing, -)::CoreModel</code></pre><p>Add <code>model</code> to <code>community</code>, which is a pre-existing community model with <code>exchange_rxn_ids</code> and <code>exchange_met_ids</code>. The <code>model_name</code> is appended to each reaction and metabolite, see <a href="#COBREXA.join_with_exchanges-Union{Tuple{M}, Tuple{Vector{M}, Vector{String}, Vector{String}}} where M<:MetabolicModel"><code>join_with_exchanges</code></a>. If <code>biomass_id</code> is specified then a biomass metabolite for <code>model</code> is also added to the resulting model. The column corresponding to the <code>biomass_id</code> reaction then produces this new biomass metabolite with unit coefficient. Note, <code>exchange_rxn_ids</code> and <code>exchange_met_ids</code> must already exist in the <code>community</code> model.</p><p><strong>Example</strong></p><pre><code class="language-none">community = add_model_with_exchanges(community, model, exchange_rxn_ids, exchange_met_ids; model_name="species_2", biomass_id="BIOMASS_Ecoli_core_w_GAM")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/community.jl#L62-L85">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_objective!-Tuple{CoreModel, Vector{String}}" href="#COBREXA.add_objective!-Tuple{CoreModel, Vector{String}}"><code>COBREXA.add_objective!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_objective!( +)::CoreModel</code></pre><p>Add <code>model</code> to <code>community</code>, which is a pre-existing community model with <code>exchange_rxn_ids</code> and <code>exchange_met_ids</code>. The <code>model_name</code> is appended to each reaction and metabolite, see <a href="#COBREXA.join_with_exchanges-Union{Tuple{M}, Tuple{Vector{M}, Vector{String}, Vector{String}}} where M<:MetabolicModel"><code>join_with_exchanges</code></a>. If <code>biomass_id</code> is specified then a biomass metabolite for <code>model</code> is also added to the resulting model. The column corresponding to the <code>biomass_id</code> reaction then produces this new biomass metabolite with unit coefficient. Note, <code>exchange_rxn_ids</code> and <code>exchange_met_ids</code> must already exist in the <code>community</code> model.</p><p><strong>Example</strong></p><pre><code class="language-none">community = add_model_with_exchanges(community, model, exchange_rxn_ids, exchange_met_ids; model_name="species_2", biomass_id="BIOMASS_Ecoli_core_w_GAM")</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/community.jl#L62-L85">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.add_objective!-Tuple{CoreModel, Vector{String}}" href="#COBREXA.add_objective!-Tuple{CoreModel, Vector{String}}"><code>COBREXA.add_objective!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">add_objective!( community::CoreModel, objective_mets::Vector{String}; objective_weights = Float64[], objective_column_index = 0, )</code></pre><p>Add an objective to the <code>community</code> model. Supply the string names of the objective metabolites in <code>objective_mets</code>. Optionally specify the weight to assign each metabolite in the objective function, if unassigned then equal weight is assumed. Also, optionally specify whether the objective already exists in the model by assigning <code>objective_column_index</code>. If unassigned then an objective column will be added, otherwise the column at <code>objective_column_index</code> will be updated.</p><p>Note, the weights are negated inside the function so that the objective metabolites are seen as reagents/substrates, not products in the reaction equation.</p><p><strong>Example</strong></p><pre><code class="language-none">add_objective!(model, ["met1", "met2"]) # adds a new column with weights = [1,1] add_objective!(model, ["met1", "met2"]; objective_weights=[0.1, 0.9]) # adds a new column -add_objective!(model, ["met1", "met2"]; objective_weights=[0.1, 0.9], objective_column_index=10) # updates column 10</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/community.jl#L1-L26">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.join_with_exchanges-Union{Tuple{M}, Tuple{Vector{M}, Vector{String}, Vector{String}}} where M<:MetabolicModel" href="#COBREXA.join_with_exchanges-Union{Tuple{M}, Tuple{Vector{M}, Vector{String}, Vector{String}}} where M<:MetabolicModel"><code>COBREXA.join_with_exchanges</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">join_with_exchanges(models::Vector{M}, +add_objective!(model, ["met1", "met2"]; objective_weights=[0.1, 0.9], objective_column_index=10) # updates column 10</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/community.jl#L1-L26">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.join_with_exchanges-Union{Tuple{M}, Tuple{Vector{M}, Vector{String}, Vector{String}}} where M<:MetabolicModel" href="#COBREXA.join_with_exchanges-Union{Tuple{M}, Tuple{Vector{M}, Vector{String}, Vector{String}}} where M<:MetabolicModel"><code>COBREXA.join_with_exchanges</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">join_with_exchanges(models::Vector{M}, exchange_rxn_ids::Vector{String}, exchange_met_ids::Vector{String}; add_biomass_objective=false, @@ -317,7 +317,7 @@ community = join_with_exchanges( exchange_met_ids; add_biomass_objective = true, biomass_ids = biomass_ids, -)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/community.jl#L172-L243">source</a></section></article><h3 id="Model-variant-specifications"><a class="docs-heading-anchor" href="#Model-variant-specifications">Model variant specifications</a><a id="Model-variant-specifications-1"></a><a class="docs-heading-anchor-permalink" href="#Model-variant-specifications" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_added_reactions-Tuple" href="#COBREXA.with_added_reactions-Tuple"><code>COBREXA.with_added_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_added_reactions(args...; kwargs...)</code></pre><p>Specifies a model variant with reactions added. Forwards the arguments to <a href="#COBREXA.add_reactions-Tuple{CoreModel, CoreModel}"><code>add_reactions</code></a>. Intended to be used with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/modifications/generic.jl#L27-L32">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_changed_bound-Tuple" href="#COBREXA.with_changed_bound-Tuple"><code>COBREXA.with_changed_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_changed_bound(args...; kwargs...)</code></pre><p>Specifies a model variant that has a new bound set. Forwards arguments to <a href="#COBREXA.change_bound-Tuple{CoreModel, Int64}"><code>change_bound</code></a>. Intended for usage with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/modifications/generic.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_changed_bounds-Tuple" href="#COBREXA.with_changed_bounds-Tuple"><code>COBREXA.with_changed_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_changed_bounds(args...; kwargs...)</code></pre><p>Specifies a model variant that has new bounds set. Forwards arguments to <a href="#COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{Int64}}"><code>change_bounds</code></a>. Intended for usage with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/modifications/generic.jl#L9-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_removed_metabolites-Tuple" href="#COBREXA.with_removed_metabolites-Tuple"><code>COBREXA.with_removed_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_removed_metabolites(args...; kwargs...)</code></pre><p>Specifies a model variant without specified metabolites. Forwards arguments to <a href="#COBREXA.remove_metabolites-Tuple{CoreModel, Any}"><code>remove_metabolites</code></a>. Intended to be used with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/modifications/generic.jl#L17-L22">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_removed_reactions-Tuple" href="#COBREXA.with_removed_reactions-Tuple"><code>COBREXA.with_removed_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_removed_reactions(args...; kwargs...)</code></pre><p>Specifies a model variant with specified reactions removed. Forwards arguments to <a href="#COBREXA.remove_reactions-Tuple{CoreModel, Int64}"><code>remove_reactions</code></a>. Intended to be used with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/reconstruction/modifications/generic.jl#L35-L40">source</a></section></article><h2 id="Analysis-functions"><a class="docs-heading-anchor" href="#Analysis-functions">Analysis functions</a><a id="Analysis-functions-1"></a><a class="docs-heading-anchor-permalink" href="#Analysis-functions" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel" href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>COBREXA.flux_balance_analysis</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_balance_analysis( +)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/community.jl#L172-L243">source</a></section></article><h3 id="Model-variant-specifications"><a class="docs-heading-anchor" href="#Model-variant-specifications">Model variant specifications</a><a id="Model-variant-specifications-1"></a><a class="docs-heading-anchor-permalink" href="#Model-variant-specifications" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_added_reactions-Tuple" href="#COBREXA.with_added_reactions-Tuple"><code>COBREXA.with_added_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_added_reactions(args...; kwargs...)</code></pre><p>Specifies a model variant with reactions added. Forwards the arguments to <a href="#COBREXA.add_reactions-Tuple{CoreModel, CoreModel}"><code>add_reactions</code></a>. Intended to be used with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/modifications/generic.jl#L27-L32">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_changed_bound-Tuple" href="#COBREXA.with_changed_bound-Tuple"><code>COBREXA.with_changed_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_changed_bound(args...; kwargs...)</code></pre><p>Specifies a model variant that has a new bound set. Forwards arguments to <a href="#COBREXA.change_bound-Tuple{CoreModel, Int64}"><code>change_bound</code></a>. Intended for usage with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/modifications/generic.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_changed_bounds-Tuple" href="#COBREXA.with_changed_bounds-Tuple"><code>COBREXA.with_changed_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_changed_bounds(args...; kwargs...)</code></pre><p>Specifies a model variant that has new bounds set. Forwards arguments to <a href="#COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{Int64}}"><code>change_bounds</code></a>. Intended for usage with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/modifications/generic.jl#L9-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_removed_metabolites-Tuple" href="#COBREXA.with_removed_metabolites-Tuple"><code>COBREXA.with_removed_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_removed_metabolites(args...; kwargs...)</code></pre><p>Specifies a model variant without specified metabolites. Forwards arguments to <a href="#COBREXA.remove_metabolites-Tuple{CoreModel, Any}"><code>remove_metabolites</code></a>. Intended to be used with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/modifications/generic.jl#L17-L22">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.with_removed_reactions-Tuple" href="#COBREXA.with_removed_reactions-Tuple"><code>COBREXA.with_removed_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">with_removed_reactions(args...; kwargs...)</code></pre><p>Specifies a model variant with specified reactions removed. Forwards arguments to <a href="#COBREXA.remove_reactions-Tuple{CoreModel, Int64}"><code>remove_reactions</code></a>. Intended to be used with <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/reconstruction/modifications/generic.jl#L35-L40">source</a></section></article><h2 id="Analysis-functions"><a class="docs-heading-anchor" href="#Analysis-functions">Analysis functions</a><a id="Analysis-functions-1"></a><a class="docs-heading-anchor-permalink" href="#Analysis-functions" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel" href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>COBREXA.flux_balance_analysis</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_balance_analysis( model::M, optimizer; modifications = [], @@ -330,11 +330,11 @@ value.(solution[:x]) # extract flux steady state from the optimizer biomass_reaction_id = findfirst(model.reactions, "BIOMASS_Ecoli_core_w_GAM") modified_solution = flux_balance_analysis(model, GLPK.optimizer; - modifications=[change_objective(biomass_reaction_id)])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/flux_balance_analysis.jl#L31-L70">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_balance_analysis_dict-Tuple{MetabolicModel, Vararg{Any, N} where N}" href="#COBREXA.flux_balance_analysis_dict-Tuple{MetabolicModel, Vararg{Any, N} where N}"><code>COBREXA.flux_balance_analysis_dict</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_balance_analysis_dict(model::MetabolicModel, args...)::Union{Dict{String, Float64},Nothing}</code></pre><p>A variant of FBA that returns a dictionary assigning fluxes to reactions, if the solution is found. Arguments are passed to <a href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>flux_balance_analysis</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/flux_balance_analysis.jl#L15-L20">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_balance_analysis_vec-Tuple" href="#COBREXA.flux_balance_analysis_vec-Tuple"><code>COBREXA.flux_balance_analysis_vec</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_balance_analysis_vec(args...)::Union{Vector{Float64},Nothing}</code></pre><p>A variant of FBA that returns a vector of fluxes in the same order as reactions of the model, if the solution is found.</p><p>Arguments are passed to <a href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>flux_balance_analysis</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/flux_balance_analysis.jl#L1-L8">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._FVA_add_constraint-NTuple{4, Any}" href="#COBREXA._FVA_add_constraint-NTuple{4, Any}"><code>COBREXA._FVA_add_constraint</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_FVA_add_constraint(model, c, x, Z)</code></pre><p>Internal helper function for adding constraints to a model. Exists mainly because for avoiding namespace problems on remote workers.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/flux_variability_analysis.jl#L154-L159">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._FVA_optimize_reaction-Tuple{Any, Any, Any}" href="#COBREXA._FVA_optimize_reaction-Tuple{Any, Any, Any}"><code>COBREXA._FVA_optimize_reaction</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_FVA_get_opt(model, rid)</code></pre><p>Internal helper for creating the optimized model on a remote worker, for avoiding namespace problems.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/flux_variability_analysis.jl#L165-L170">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}" href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}"><code>COBREXA.flux_variability_analysis</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_variability_analysis( + modifications=[change_objective(biomass_reaction_id)])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/flux_balance_analysis.jl#L31-L70">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_balance_analysis_dict-Tuple{MetabolicModel, Vararg{Any, N} where N}" href="#COBREXA.flux_balance_analysis_dict-Tuple{MetabolicModel, Vararg{Any, N} where N}"><code>COBREXA.flux_balance_analysis_dict</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_balance_analysis_dict(model::MetabolicModel, args...)::Union{Dict{String, Float64},Nothing}</code></pre><p>A variant of FBA that returns a dictionary assigning fluxes to reactions, if the solution is found. Arguments are passed to <a href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>flux_balance_analysis</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/flux_balance_analysis.jl#L15-L20">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_balance_analysis_vec-Tuple" href="#COBREXA.flux_balance_analysis_vec-Tuple"><code>COBREXA.flux_balance_analysis_vec</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_balance_analysis_vec(args...)::Union{Vector{Float64},Nothing}</code></pre><p>A variant of FBA that returns a vector of fluxes in the same order as reactions of the model, if the solution is found.</p><p>Arguments are passed to <a href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>flux_balance_analysis</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/flux_balance_analysis.jl#L1-L8">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._FVA_add_constraint-NTuple{4, Any}" href="#COBREXA._FVA_add_constraint-NTuple{4, Any}"><code>COBREXA._FVA_add_constraint</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_FVA_add_constraint(model, c, x, Z)</code></pre><p>Internal helper function for adding constraints to a model. Exists mainly because for avoiding namespace problems on remote workers.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/flux_variability_analysis.jl#L154-L159">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._FVA_optimize_reaction-Tuple{Any, Any, Any}" href="#COBREXA._FVA_optimize_reaction-Tuple{Any, Any, Any}"><code>COBREXA._FVA_optimize_reaction</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_FVA_get_opt(model, rid)</code></pre><p>Internal helper for creating the optimized model on a remote worker, for avoiding namespace problems.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/flux_variability_analysis.jl#L165-L170">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}" href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}"><code>COBREXA.flux_variability_analysis</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_variability_analysis( model::MetabolicModel, optimizer; kwargs... -)</code></pre><p>A simpler version of <a href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}"><code>flux_variability_analysis</code></a> that maximizes and minimizes all reactions in the model. Arguments are forwarded.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/flux_variability_analysis.jl#L99-L108">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Vector{Int64}, Any}" href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Vector{Int64}, Any}"><code>COBREXA.flux_variability_analysis</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_variability_analysis( +)</code></pre><p>A simpler version of <a href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}"><code>flux_variability_analysis</code></a> that maximizes and minimizes all reactions in the model. Arguments are forwarded.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/flux_variability_analysis.jl#L99-L108">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Vector{Int64}, Any}" href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Vector{Int64}, Any}"><code>COBREXA.flux_variability_analysis</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_variability_analysis( model::MetabolicModel, reactions::Vector{Int}, optimizer; @@ -347,7 +347,7 @@ s.t. S x = b xâ‚— ≤ x ≤ xᵤ cáµ€x ≥ bounds(Zâ‚€)[1] cáµ€x ≤ bounds(Zâ‚€)[2]</code></pre><p>where Zâ‚€:= cáµ€xâ‚€ is the objective value of an optimal solution of the associated FBA problem (see <a href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>flux_balance_analysis</code></a> for a related analysis, also for explanation of the <code>modifications</code> argument).</p><p>The <code>bounds</code> is a user-supplied function that specifies the objective bounds for the variability optimizations, by default it restricts the flux objective value to the precise optimum reached in FBA. It can return <code>-Inf</code> and <code>Inf</code> in first and second pair to remove the limit. Use <a href="#COBREXA.gamma_bounds-Tuple{Any}"><code>gamma_bounds</code></a> and <a href="#COBREXA.objective_bounds-Tuple{Any}"><code>objective_bounds</code></a> for simple bounds.</p><p><code>optimizer</code> must be set to a <code>JuMP</code>-compatible optimizer. The computation of the individual optimization problems is transparently distributed to <code>workers</code> (see <code>Distributed.workers()</code>).</p><p><code>ret</code> is a function used to extract results from optimized JuMP models of the individual reactions. By default, it calls and returns the value of <code>JuMP.objective_value</code>. More information can be extracted e.g. by setting it to a function that returns a more elaborate data structure; such as <code>m -> (JuMP.objective_value(m), JuMP.value.(m[:x]))</code>.</p><p>Returns a matrix of extracted <code>ret</code> values for minima and maxima, of total size (<code>length(reactions)</code>,2). The optimizer result status is checked with <a href="#COBREXA.is_solved-Tuple{Any}"><code>is_solved</code></a>; <code>nothing</code> is returned if the optimization failed for any reason.</p><p><strong>Example</strong></p><pre><code class="language-none">model = load_model("e_coli_core.json") -flux_variability_analysis(model, [1, 2, 3, 42], GLPK.optimizer)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/flux_variability_analysis.jl#L1-L51">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_variability_analysis_dict-Tuple{MetabolicModel, Any}" href="#COBREXA.flux_variability_analysis_dict-Tuple{MetabolicModel, Any}"><code>COBREXA.flux_variability_analysis_dict</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_variability_analysis_dict( +flux_variability_analysis(model, [1, 2, 3, 42], GLPK.optimizer)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/flux_variability_analysis.jl#L1-L51">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.flux_variability_analysis_dict-Tuple{MetabolicModel, Any}" href="#COBREXA.flux_variability_analysis_dict-Tuple{MetabolicModel, Any}"><code>COBREXA.flux_variability_analysis_dict</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">flux_variability_analysis_dict( model::MetabolicModel, optimizer; kwargs... @@ -360,7 +360,7 @@ flux_variability_analysis(model, [1, 2, 3, 42], GLPK.optimizer)</code></pre></di change_constraint("EX_glc__D_e", -10, -10), change_constraint("EX_o2_e", 0.0, 0.0), ], -)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/flux_variability_analysis.jl#L114-L138">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}" href="#COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}"><code>COBREXA.parsimonious_flux_balance_analysis</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">parsimonious_flux_balance_analysis( +)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/flux_variability_analysis.jl#L114-L138">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}" href="#COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}"><code>COBREXA.parsimonious_flux_balance_analysis</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">parsimonious_flux_balance_analysis( model::MetabolicModel, optimizer; modifications = [], @@ -373,7 +373,7 @@ s.t. S x = b xâ‚— ≤ x ≤ xᵤ μ = μâ°</code></pre><p>Where the optimal solution of the FBA problem, μâ°, has been added as an additional constraint. See "Lewis, Nathan E, Hixson, Kim K, Conrad, Tom M, Lerman, Joshua A, Charusanti, Pep, Polpitiya, Ashoka D, Adkins, Joshua N, Schramm, Gunnar, Purvine, Samuel O, Lopezâ€Ferrer, Daniel, Weitz, Karl K, Eils, Roland, König, Rainer, Smith, Richard D, Palsson, Bernhard Ø, (2010) Omic data from evolved E. coli are consistent with computed optimal growth from genomeâ€scale models. Molecular Systems Biology, 6. 390. doi: accession:10.1038/msb.2010.47" for more details.</p><p>pFBA gets the model optimum by standard FBA (using <a href="#COBREXA.flux_balance_analysis-Union{Tuple{M}, Tuple{M, Any}} where M<:MetabolicModel"><code>flux_balance_analysis</code></a> with <code>optimizer</code> and <code>modifications</code>), then finds a minimal total flux through the model that still satisfies the (slightly relaxed) optimum. This is done using a quadratic problem optimizer. If the original optimizer does not support quadratic optimization, it can be changed using the callback in <code>qp_modifications</code>, which are applied after the FBA. See the documentation of flux<em>balance</em>analysis for usage examples of modifications.</p><p>Thhe optimum relaxation sequence can be specified in <code>relax</code> parameter, it defaults to multiplicative range of <code>[1.0, 0.999999, ..., 0.99]</code> of the original bound.</p><p>Returns an optimized model that contains the pFBA solution; or <code>nothing</code> if the optimization failed.</p><p><strong>Example</strong></p><pre><code class="language-none">model = load_model("e_coli_core.json") optmodel = parsimonious_flux_balance_analysis(model, biomass, Gurobi.Optimizer) -value.(solution[:x]) # extract the flux from the optimizer</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/parsimonious_flux_balance_analysis.jl#L1-L54">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.parsimonious_flux_balance_analysis_dict-Tuple{MetabolicModel, Vararg{Any, N} where N}" href="#COBREXA.parsimonious_flux_balance_analysis_dict-Tuple{MetabolicModel, Vararg{Any, N} where N}"><code>COBREXA.parsimonious_flux_balance_analysis_dict</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">parsimonious_flux_balance_analysis_dict(model::MetabolicModel, args...; kwargs...)</code></pre><p>Perform parsimonious flux balance analysis on <code>model</code> using <code>optimizer</code>. Returns a dictionary mapping the reaction IDs to fluxes. Arguments are forwarded to <a href="#COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}"><code>parsimonious_flux_balance_analysis</code></a> internally.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/parsimonious_flux_balance_analysis.jl#L112-L118">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.parsimonious_flux_balance_analysis_vec-Tuple" href="#COBREXA.parsimonious_flux_balance_analysis_vec-Tuple"><code>COBREXA.parsimonious_flux_balance_analysis_vec</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">parsimonious_flux_balance_analysis_vec(args...; kwargs...)</code></pre><p>Perform parsimonious flux balance analysis on <code>model</code> using <code>optimizer</code>. Returns a vector of fluxes in the same order as the reactions in <code>model</code>. Arguments are forwarded to <a href="#COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}"><code>parsimonious_flux_balance_analysis</code></a> internally.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/parsimonious_flux_balance_analysis.jl#L96-L103">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}" href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>COBREXA.screen</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">function screen( +value.(solution[:x]) # extract the flux from the optimizer</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/parsimonious_flux_balance_analysis.jl#L1-L54">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.parsimonious_flux_balance_analysis_dict-Tuple{MetabolicModel, Vararg{Any, N} where N}" href="#COBREXA.parsimonious_flux_balance_analysis_dict-Tuple{MetabolicModel, Vararg{Any, N} where N}"><code>COBREXA.parsimonious_flux_balance_analysis_dict</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">parsimonious_flux_balance_analysis_dict(model::MetabolicModel, args...; kwargs...)</code></pre><p>Perform parsimonious flux balance analysis on <code>model</code> using <code>optimizer</code>. Returns a dictionary mapping the reaction IDs to fluxes. Arguments are forwarded to <a href="#COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}"><code>parsimonious_flux_balance_analysis</code></a> internally.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/parsimonious_flux_balance_analysis.jl#L112-L118">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.parsimonious_flux_balance_analysis_vec-Tuple" href="#COBREXA.parsimonious_flux_balance_analysis_vec-Tuple"><code>COBREXA.parsimonious_flux_balance_analysis_vec</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">parsimonious_flux_balance_analysis_vec(args...; kwargs...)</code></pre><p>Perform parsimonious flux balance analysis on <code>model</code> using <code>optimizer</code>. Returns a vector of fluxes in the same order as the reactions in <code>model</code>. Arguments are forwarded to <a href="#COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}"><code>parsimonious_flux_balance_analysis</code></a> internally.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/parsimonious_flux_balance_analysis.jl#L96-L103">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}" href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>COBREXA.screen</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">function screen( model::MetabolicModel; variants::Maybe{Array{V,N}} = nothing, analysis, @@ -401,7 +401,7 @@ screen_variants(m, [reverse_reaction(5)], [reverse_reaction(3), reverse_reaction(6)] ], - mod -> flux_balance_analysis_vec(mod, GLPK.Optimizer)) # run analysis</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/screening.jl#L2-L70">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.screen_variant" href="#COBREXA.screen_variant"><code>COBREXA.screen_variant</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">screen_variant(model::MetabolicModel, variant::Vector, analysis, args = ())</code></pre><p>Helper function for <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a> that applies all single-argument functions in <code>variant</code> to the <code>model</code> (in order from "first" to "last"), and executes <code>analysis</code> on the result.</p><p>Can be used to test model variants locally.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/screening.jl#L123-L131">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.screen_variants-Tuple{Any, Any, Any}" href="#COBREXA.screen_variants-Tuple{Any, Any, Any}"><code>COBREXA.screen_variants</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">screen_variants(model, variants, analysis; workers=[myid()])</code></pre><p>A shortcut for <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a> that only works with model variants.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/screening.jl#L139-L143">source</a></section></article><h3 id="Analysis-modifications"><a class="docs-heading-anchor" href="#Analysis-modifications">Analysis modifications</a><a id="Analysis-modifications-1"></a><a class="docs-heading-anchor-permalink" href="#Analysis-modifications" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="COBREXA._do_knockout-Tuple{MetabolicModel, Any, Vector{String}}" href="#COBREXA._do_knockout-Tuple{MetabolicModel, Any, Vector{String}}"><code>COBREXA._do_knockout</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_do_knockout(model::MetabolicModel, opt_model)</code></pre><p>Internal helper for knockouts on generic MetabolicModels. This can be overloaded so that the knockouts may work differently (more efficiently) with other models.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/modifications/knockout.jl#L17-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.knockout-Tuple{String}" href="#COBREXA.knockout-Tuple{String}"><code>COBREXA.knockout</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">knockout(gene_id::String)</code></pre><p>A helper variant of <a href="#COBREXA.knockout-Tuple{String}"><code>knockout</code></a> for a single gene.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/modifications/knockout.jl#L10-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.knockout-Tuple{Vector{String}}" href="#COBREXA.knockout-Tuple{Vector{String}}"><code>COBREXA.knockout</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">knockout(gene_ids::Vector{String})</code></pre><p>A modification that zeroes the bounds of all reactions that would be knocked out by the specified genes (effectively disables the reactions).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/modifications/knockout.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_constraint-Tuple{String, Any, Any}" href="#COBREXA.change_constraint-Tuple{String, Any, Any}"><code>COBREXA.change_constraint</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_constraint(id::String, lb, ub)</code></pre><p>Change the lower and upper bounds (<code>lb</code> and <code>ub</code> respectively) of reaction <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/modifications/optimizer.jl#L54-L58">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_objective-Tuple{Union{String, Vector{String}}}" href="#COBREXA.change_objective-Tuple{Union{String, Vector{String}}}"><code>COBREXA.change_objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_objective(new_objective::Union{String,Vector{String}}; weights=[], sense=MOI.MAX_SENSE)</code></pre><p>Modification that changes the objective function used in a constraint based analysis function. <code>new_objective</code> can be a single reaction identifier, or an array of reactions identifiers.</p><p>Optionally, the objective can be weighted by a vector of <code>weights</code>, and a optimization <code>sense</code> can be set.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/modifications/optimizer.jl#L67-L76">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_optimizer-Tuple{Any}" href="#COBREXA.change_optimizer-Tuple{Any}"><code>COBREXA.change_optimizer</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_optimizer(optimizer)</code></pre><p>Change the JuMP optimizer used to run the optimization.</p><p>This may be used to try different approaches for reaching the optimum, and in problems that may require different optimizers for different parts, such as the <a href="#COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}"><code>parsimonious_flux_balance_analysis</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/modifications/optimizer.jl#L15-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_optimizer_attribute-Tuple{Any, Any}" href="#COBREXA.change_optimizer_attribute-Tuple{Any, Any}"><code>COBREXA.change_optimizer_attribute</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_optimizer_attribute(attribute_key, value)</code></pre><p>Change a JuMP optimizer attribute. The attributes are optimizer-specific, refer to the JuMP documentation and the documentation of the specific optimizer for usable keys and values.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/modifications/optimizer.jl#L28-L34">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_sense-Tuple{Any}" href="#COBREXA.change_sense-Tuple{Any}"><code>COBREXA.change_sense</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_sense(objective_sense)</code></pre><p>Change the objective sense of optimization. Possible arguments are <code>MOI.MAX_SENSE</code> and <code>MOI.MIN_SENSE</code>.</p><p>If you want to change the objective and sense at the same time, use <a href="#COBREXA.change_objective-Tuple{Union{String, Vector{String}}}"><code>change_objective</code></a> instead to do both at once.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/modifications/optimizer.jl#L2-L10">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.constrain_objective_value-Tuple{Any}" href="#COBREXA.constrain_objective_value-Tuple{Any}"><code>COBREXA.constrain_objective_value</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">constrain_objective_value(tolerance)</code></pre><p>Limit the objective value to <code>tolerance</code>-times the current objective value, as with <a href="#COBREXA.objective_bounds-Tuple{Any}"><code>objective_bounds</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/modifications/optimizer.jl#L40-L45">source</a></section></article><h3 id="Flux-sampling"><a class="docs-heading-anchor" href="#Flux-sampling">Flux sampling</a><a id="Flux-sampling-1"></a><a class="docs-heading-anchor-permalink" href="#Flux-sampling" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="COBREXA._affine_hit_and_run_chain-NTuple{5, Any}" href="#COBREXA._affine_hit_and_run_chain-NTuple{5, Any}"><code>COBREXA._affine_hit_and_run_chain</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_affine_hit_and_run_chain(warmup, lbs, ubs, iters, chain)</code></pre><p>Internal helper function for computing a single affine hit-and-run chain. The number of the chain is passed for possible future initialization of stable RNGs.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/sampling/affine_hit_and_run.jl#L73-L79">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.affine_hit_and_run-Tuple{Matrix{Float64}, Vector{Float64}, Vector{Float64}}" href="#COBREXA.affine_hit_and_run-Tuple{Matrix{Float64}, Vector{Float64}, Vector{Float64}}"><code>COBREXA.affine_hit_and_run</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">function affine_hit_and_run( + mod -> flux_balance_analysis_vec(mod, GLPK.Optimizer)) # run analysis</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/screening.jl#L2-L70">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.screen_variant" href="#COBREXA.screen_variant"><code>COBREXA.screen_variant</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">screen_variant(model::MetabolicModel, variant::Vector, analysis, args = ())</code></pre><p>Helper function for <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a> that applies all single-argument functions in <code>variant</code> to the <code>model</code> (in order from "first" to "last"), and executes <code>analysis</code> on the result.</p><p>Can be used to test model variants locally.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/screening.jl#L123-L131">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.screen_variants-Tuple{Any, Any, Any}" href="#COBREXA.screen_variants-Tuple{Any, Any, Any}"><code>COBREXA.screen_variants</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">screen_variants(model, variants, analysis; workers=[myid()])</code></pre><p>A shortcut for <a href="#COBREXA.screen-Union{Tuple{MetabolicModel}, Tuple{N}, Tuple{T}, Tuple{V}} where {V<:(AbstractVector{T} where T), T<:Tuple, N}"><code>screen</code></a> that only works with model variants.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/screening.jl#L139-L143">source</a></section></article><h3 id="Analysis-modifications"><a class="docs-heading-anchor" href="#Analysis-modifications">Analysis modifications</a><a id="Analysis-modifications-1"></a><a class="docs-heading-anchor-permalink" href="#Analysis-modifications" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="COBREXA._do_knockout-Tuple{MetabolicModel, Any, Vector{String}}" href="#COBREXA._do_knockout-Tuple{MetabolicModel, Any, Vector{String}}"><code>COBREXA._do_knockout</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_do_knockout(model::MetabolicModel, opt_model)</code></pre><p>Internal helper for knockouts on generic MetabolicModels. This can be overloaded so that the knockouts may work differently (more efficiently) with other models.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/modifications/knockout.jl#L17-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.knockout-Tuple{String}" href="#COBREXA.knockout-Tuple{String}"><code>COBREXA.knockout</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">knockout(gene_id::String)</code></pre><p>A helper variant of <a href="#COBREXA.knockout-Tuple{String}"><code>knockout</code></a> for a single gene.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/modifications/knockout.jl#L10-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.knockout-Tuple{Vector{String}}" href="#COBREXA.knockout-Tuple{Vector{String}}"><code>COBREXA.knockout</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">knockout(gene_ids::Vector{String})</code></pre><p>A modification that zeroes the bounds of all reactions that would be knocked out by the specified genes (effectively disables the reactions).</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/modifications/knockout.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_constraint-Tuple{String, Any, Any}" href="#COBREXA.change_constraint-Tuple{String, Any, Any}"><code>COBREXA.change_constraint</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_constraint(id::String, lb, ub)</code></pre><p>Change the lower and upper bounds (<code>lb</code> and <code>ub</code> respectively) of reaction <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/modifications/optimizer.jl#L54-L58">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_objective-Tuple{Union{String, Vector{String}}}" href="#COBREXA.change_objective-Tuple{Union{String, Vector{String}}}"><code>COBREXA.change_objective</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_objective(new_objective::Union{String,Vector{String}}; weights=[], sense=MOI.MAX_SENSE)</code></pre><p>Modification that changes the objective function used in a constraint based analysis function. <code>new_objective</code> can be a single reaction identifier, or an array of reactions identifiers.</p><p>Optionally, the objective can be weighted by a vector of <code>weights</code>, and a optimization <code>sense</code> can be set.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/modifications/optimizer.jl#L67-L76">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_optimizer-Tuple{Any}" href="#COBREXA.change_optimizer-Tuple{Any}"><code>COBREXA.change_optimizer</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_optimizer(optimizer)</code></pre><p>Change the JuMP optimizer used to run the optimization.</p><p>This may be used to try different approaches for reaching the optimum, and in problems that may require different optimizers for different parts, such as the <a href="#COBREXA.parsimonious_flux_balance_analysis-Tuple{MetabolicModel, Any}"><code>parsimonious_flux_balance_analysis</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/modifications/optimizer.jl#L15-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_optimizer_attribute-Tuple{Any, Any}" href="#COBREXA.change_optimizer_attribute-Tuple{Any, Any}"><code>COBREXA.change_optimizer_attribute</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_optimizer_attribute(attribute_key, value)</code></pre><p>Change a JuMP optimizer attribute. The attributes are optimizer-specific, refer to the JuMP documentation and the documentation of the specific optimizer for usable keys and values.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/modifications/optimizer.jl#L28-L34">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_sense-Tuple{Any}" href="#COBREXA.change_sense-Tuple{Any}"><code>COBREXA.change_sense</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_sense(objective_sense)</code></pre><p>Change the objective sense of optimization. Possible arguments are <code>MOI.MAX_SENSE</code> and <code>MOI.MIN_SENSE</code>.</p><p>If you want to change the objective and sense at the same time, use <a href="#COBREXA.change_objective-Tuple{Union{String, Vector{String}}}"><code>change_objective</code></a> instead to do both at once.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/modifications/optimizer.jl#L2-L10">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.constrain_objective_value-Tuple{Any}" href="#COBREXA.constrain_objective_value-Tuple{Any}"><code>COBREXA.constrain_objective_value</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">constrain_objective_value(tolerance)</code></pre><p>Limit the objective value to <code>tolerance</code>-times the current objective value, as with <a href="#COBREXA.objective_bounds-Tuple{Any}"><code>objective_bounds</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/modifications/optimizer.jl#L40-L45">source</a></section></article><h3 id="Flux-sampling"><a class="docs-heading-anchor" href="#Flux-sampling">Flux sampling</a><a id="Flux-sampling-1"></a><a class="docs-heading-anchor-permalink" href="#Flux-sampling" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="COBREXA._affine_hit_and_run_chain-NTuple{5, Any}" href="#COBREXA._affine_hit_and_run_chain-NTuple{5, Any}"><code>COBREXA._affine_hit_and_run_chain</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_affine_hit_and_run_chain(warmup, lbs, ubs, iters, chain)</code></pre><p>Internal helper function for computing a single affine hit-and-run chain. The number of the chain is passed for possible future initialization of stable RNGs.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/sampling/affine_hit_and_run.jl#L73-L79">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.affine_hit_and_run-Tuple{Matrix{Float64}, Vector{Float64}, Vector{Float64}}" href="#COBREXA.affine_hit_and_run-Tuple{Matrix{Float64}, Vector{Float64}, Vector{Float64}}"><code>COBREXA.affine_hit_and_run</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">function affine_hit_and_run( warmup_points::Matrix{Float64}, lbs::Vector{Float64}, ubs::Vector{Float64}; @@ -414,39 +414,39 @@ using Tulip model = load_model(StandardModel, model_path) warmup, lbs, ubs = warmup_from_variability(model, Tulip.Optimizer, 100) -samples = affine_hit_and_run(warmup, lbs, ubs, sample_iters = 1:3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/sampling/affine_hit_and_run.jl#L1-L41">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.warmup_from_variability" href="#COBREXA.warmup_from_variability"><code>COBREXA.warmup_from_variability</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">function warmup_from_variability( +samples = affine_hit_and_run(warmup, lbs, ubs, sample_iters = 1:3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/sampling/affine_hit_and_run.jl#L1-L41">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.warmup_from_variability" href="#COBREXA.warmup_from_variability"><code>COBREXA.warmup_from_variability</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">function warmup_from_variability( model::MetabolicModel, optimizer, min_reactions::Vector{Int}=1:n_reactions(model), max_reactions::Vector{Int}=1:n_reactions(model); modifications = [], workers::Vector{Int} = [myid()], -)::Tuple{Matrix{Float64}, Vector{Float64}, Vector{Float64}}</code></pre><p>Generate FVA-like warmup points for samplers, by minimizing and maximizing the specified reactions. The result is returned as a matrix, each point occupies as single column in the result.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/sampling/warmup_variability.jl#L33-L46">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.warmup_from_variability-Tuple{MetabolicModel, Any, Int64}" href="#COBREXA.warmup_from_variability-Tuple{MetabolicModel, Any, Int64}"><code>COBREXA.warmup_from_variability</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">warmup_from_variability( +)::Tuple{Matrix{Float64}, Vector{Float64}, Vector{Float64}}</code></pre><p>Generate FVA-like warmup points for samplers, by minimizing and maximizing the specified reactions. The result is returned as a matrix, each point occupies as single column in the result.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/sampling/warmup_variability.jl#L33-L46">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.warmup_from_variability-Tuple{MetabolicModel, Any, Int64}" href="#COBREXA.warmup_from_variability-Tuple{MetabolicModel, Any, Int64}"><code>COBREXA.warmup_from_variability</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">warmup_from_variability( model::MetabolicModel, optimizer, n_points::Int; kwargs... -)</code></pre><p>Generates FVA-like warmup points for samplers, by selecting random points by minimizing and maximizing reactions. Can not return more than 2 times the number of reactions in the model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/analysis/sampling/warmup_variability.jl#L1-L12">source</a></section></article><h2 id="Miscellaneous-utilities"><a class="docs-heading-anchor" href="#Miscellaneous-utilities">Miscellaneous utilities</a><a id="Miscellaneous-utilities-1"></a><a class="docs-heading-anchor-permalink" href="#Miscellaneous-utilities" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.ambiguously_identified_items-Tuple{Dict{String, Dict{String, Set{String}}}}" href="#COBREXA.ambiguously_identified_items-Tuple{Dict{String, Dict{String, Set{String}}}}"><code>COBREXA.ambiguously_identified_items</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">ambiguously_identified_items( +)</code></pre><p>Generates FVA-like warmup points for samplers, by selecting random points by minimizing and maximizing reactions. Can not return more than 2 times the number of reactions in the model.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/analysis/sampling/warmup_variability.jl#L1-L12">source</a></section></article><h2 id="Miscellaneous-utilities"><a class="docs-heading-anchor" href="#Miscellaneous-utilities">Miscellaneous utilities</a><a id="Miscellaneous-utilities-1"></a><a class="docs-heading-anchor-permalink" href="#Miscellaneous-utilities" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="COBREXA.ambiguously_identified_items-Tuple{Dict{String, Dict{String, Set{String}}}}" href="#COBREXA.ambiguously_identified_items-Tuple{Dict{String, Dict{String, Set{String}}}}"><code>COBREXA.ambiguously_identified_items</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">ambiguously_identified_items( index::Dict{String,Dict{String,[String]}}, -)::Vector{String}</code></pre><p>Find items (genes, metabolites, ...) from the annotation index that are identified non-uniquely by at least one of their annotations.</p><p>This often indicates that the items are duplicate or miscategorized.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/Annotation.jl#L44-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.annotation_index-Tuple{AbstractDict{String, V} where V}" href="#COBREXA.annotation_index-Tuple{AbstractDict{String, V} where V}"><code>COBREXA.annotation_index</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">annotation_index( +)::Vector{String}</code></pre><p>Find items (genes, metabolites, ...) from the annotation index that are identified non-uniquely by at least one of their annotations.</p><p>This often indicates that the items are duplicate or miscategorized.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/Annotation.jl#L44-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.annotation_index-Tuple{AbstractDict{String, V} where V}" href="#COBREXA.annotation_index-Tuple{AbstractDict{String, V} where V}"><code>COBREXA.annotation_index</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">annotation_index( xs::AbstractDict{String}; annotations = _annotations, -)::Dict{String,Dict{String,[String]}}</code></pre><p>Extract annotations from a dictionary of items <code>xs</code> and build an index that maps annotation "kinds" (e.g. <code>"PubChem"</code>) to the mapping from the annotations (e.g. <code>"COMPOUND_12345"</code>) to item IDs that carry the annotations.</p><p>Function <code>annotations</code> is used to access the <code>Annotations</code> object in the dictionary values.</p><p>This is extremely useful for finding items by annotation data.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/Annotation.jl#L6-L20">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.get_atoms-Tuple{Metabolite}" href="#COBREXA.get_atoms-Tuple{Metabolite}"><code>COBREXA.get_atoms</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">get_atoms(met::Metabolite)::MetaboliteFormula</code></pre><p>Simple wrapper for getting the atom dictionary count out of a <code>Metabolite</code>.</p><p>See also: <a href="#COBREXA.metabolite_formula-Tuple{MetabolicModel, String}"><code>metabolite_formula</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/Metabolite.jl#L1-L7">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.check_duplicate_reaction-Tuple{Reaction, OrderedCollections.OrderedDict{String, Reaction}}" href="#COBREXA.check_duplicate_reaction-Tuple{Reaction, OrderedCollections.OrderedDict{String, Reaction}}"><code>COBREXA.check_duplicate_reaction</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">check_duplicate_reaction(rxn::Reaction, rxns::Dict{String, Reaction}; only_metabolites=true)</code></pre><p>Check if <code>rxn</code> already exists in <code>rxns</code> but has another <code>id</code>. If <code>only_metabolites</code> is <code>true</code> then only the metabolite <code>id</code>s are checked. Otherwise, compares metabolite <code>id</code>s and the absolute value of their stoichiometric coefficients to those of <code>rxn</code>. If <code>rxn</code> has the same reaction equation as another reaction in <code>rxns</code>, the return the <code>id</code>. Otherwise return <code>nothing</code>.</p><p>See also: <a href="#COBREXA.is_mass_balanced-Tuple{StandardModel, Reaction}"><code>is_mass_balanced</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/Reaction.jl#L1-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.is_boundary-Tuple{Reaction}" href="#COBREXA.is_boundary-Tuple{Reaction}"><code>COBREXA.is_boundary</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">is_boundary(rxn::Reaction)</code></pre><p>Return true if reaction is a boundary reaction, otherwise return false. Checks if boundary by inspecting number of metabolites in reaction equation. Boundary reactions have only one metabolite, e.g. an exchange reaction, or a sink/demand reaction.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/Reaction.jl#L41-L47">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.is_mass_balanced-Tuple{StandardModel, Reaction}" href="#COBREXA.is_mass_balanced-Tuple{StandardModel, Reaction}"><code>COBREXA.is_mass_balanced</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">is_mass_balanced(model::StandardModel, rxn::Reaction)</code></pre><p>Checks if <code>rxn</code> is atom balanced. Returns a boolean for whether the reaction is balanced, and the associated balance of atoms for convenience (useful if not balanced).</p><p>See also: <a href="#COBREXA.get_atoms-Tuple{Metabolite}"><code>get_atoms</code></a>, <a href="#COBREXA.check_duplicate_reaction-Tuple{Reaction, OrderedCollections.OrderedDict{String, Reaction}}"><code>check_duplicate_reaction</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/Reaction.jl#L52-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.serialize_model-Tuple{Serialized, String}" href="#COBREXA.serialize_model-Tuple{Serialized, String}"><code>COBREXA.serialize_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">serialize_model(model::Serialized, filename::String)::Serialized</code></pre><p>Specialization of <a href="#COBREXA.serialize_model-Tuple{Serialized, String}"><code>serialize_model</code></a> that prevents nested serialization of already-serialized models.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/Serialized.jl#L17-L22">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.serialize_model-Union{Tuple{MM}, Tuple{MM, String}} where MM<:MetabolicModel" href="#COBREXA.serialize_model-Union{Tuple{MM}, Tuple{MM, String}} where MM<:MetabolicModel"><code>COBREXA.serialize_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">serialize_model(model::MM, filename::String)::Serialized{MM} where {MM<:MetabolicModel}</code></pre><p>Serialize the <code>model</code> to file <code>filename</code>, returning a <a href="#COBREXA.Serialized"><code>Serialized</code></a> model that is able to load itself back automatically upon precaching by <a href="#COBREXA.precache!-Tuple{MetabolicModel}"><code>precache!</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/Serialized.jl#L2-L8">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.copy-Tuple{Gene}" href="#Base.copy-Tuple{Gene}"><code>Base.copy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.copy(g::Gene)</code></pre><p>Shallow copy of a <a href="#COBREXA.Gene"><code>Gene</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/StandardModel.jl#L45-L49">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.copy-Tuple{Metabolite}" href="#Base.copy-Tuple{Metabolite}"><code>Base.copy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.copy(m::Metabolite)</code></pre><p>Shallow copy of a <a href="#COBREXA.Metabolite"><code>Metabolite</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/StandardModel.jl#L31-L35">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.copy-Tuple{Reaction}" href="#Base.copy-Tuple{Reaction}"><code>Base.copy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.copy(r::Reaction)</code></pre><p>Shallow copy of a <a href="#COBREXA.Reaction"><code>Reaction</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/StandardModel.jl#L14-L18">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.copy-Tuple{StandardModel}" href="#Base.copy-Tuple{StandardModel}"><code>Base.copy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.copy(m::StandardModel)</code></pre><p>Shallow copy of a <a href="#COBREXA.StandardModel"><code>StandardModel</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/StandardModel.jl#L2-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.atom_exchange-Tuple{StandardModel, String}" href="#COBREXA.atom_exchange-Tuple{StandardModel, String}"><code>COBREXA.atom_exchange</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">atom_exchange(model::StandardModel, rxn_id::String)</code></pre><p>Specialized version of <a href="#COBREXA.atom_exchange-Tuple{StandardModel, String}"><code>atom_exchange</code></a> for <a href="#COBREXA.StandardModel"><code>StandardModel</code></a> that quickly returns a dictionary mapping the flux-relative stoichiometry of atoms through a single reaction in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/StandardModel.jl#L52-L58">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.atom_exchange-Tuple{MetabolicModel, Dict{String, Float64}}" href="#COBREXA.atom_exchange-Tuple{MetabolicModel, Dict{String, Float64}}"><code>COBREXA.atom_exchange</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">atom_exchange(model::MetabolicModel, flux_dict::Dict{String, Float64})</code></pre><p>Return a dictionary mapping the flux of atoms across the boundary of the model given <code>flux_dict</code> (the solution of a constraint based analysis) of reactions in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/atom_exchange.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gamma_bounds-Tuple{Any}" href="#COBREXA.gamma_bounds-Tuple{Any}"><code>COBREXA.gamma_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gamma_bounds(gamma)</code></pre><p>A bounds-generating function for <a href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}"><code>flux_variability_analysis</code></a> that limits the objective value to be at least <code>gamma*Zâ‚€</code>, as usual in COBRA packages. Use as the <code>bounds</code> argument:</p><pre><code class="language-none">flux_variability_analysis(model, some_optimizer; bounds = gamma_bounds(0.9))</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/bounds.jl#L1-L10">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective_bounds-Tuple{Any}" href="#COBREXA.objective_bounds-Tuple{Any}"><code>COBREXA.objective_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective_bounds(tolerance)</code></pre><p>A bounds-generating function for <a href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}"><code>flux_variability_analysis</code></a> that limits the objective value to a small multiple of Zâ‚€. Use as <code>bounds</code> argument, similarly to <a href="#COBREXA.gamma_bounds-Tuple{Any}"><code>gamma_bounds</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/bounds.jl#L13-L19">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._parse_formula-Tuple{String}" href="#COBREXA._parse_formula-Tuple{String}"><code>COBREXA._parse_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_parse_formula(f::String)::MetaboliteFormula</code></pre><p>Parse a formula in format <code>C2H6O</code> into a <a href="#COBREXA.MetaboliteFormula"><code>MetaboliteFormula</code></a>, which is basically a dictionary of atom counts in the molecule.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/chemical_formulas.jl#L2-L7">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._unparse_formula-Tuple{Dict{String, Int64}}" href="#COBREXA._unparse_formula-Tuple{Dict{String, Int64}}"><code>COBREXA._unparse_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_unparse_formula(f::MetaboliteFormula)::String</code></pre><p>Format <a href="#COBREXA.MetaboliteFormula"><code>MetaboliteFormula</code></a> to <code>String</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/chemical_formulas.jl#L19-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_fluxes-Tuple{MetabolicModel, Dict{String, Float64}}" href="#COBREXA.metabolite_fluxes-Tuple{MetabolicModel, Dict{String, Float64}}"><code>COBREXA.metabolite_fluxes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_fluxes(model::MetabolicModel, flux_dict::Dict{String, Float64})</code></pre><p>Return two dictionaries of metabolite <code>id</code>s mapped to reactions that consume or produce them, given the flux distribution supplied in <code>flux_dict</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/fluxes.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._parse_grr-Tuple{SBML.GeneProductAssociation}" href="#COBREXA._parse_grr-Tuple{SBML.GeneProductAssociation}"><code>COBREXA._parse_grr</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_parse_grr(gpa::SBML.GeneProductAssociation)::GeneAssociation</code></pre><p>Parse <code>SBML.GeneProductAssociation</code> structure to the simpler GeneAssociation. The input must be (implicitly) in a positive DNF.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/gene_associations.jl#L2-L7">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._parse_grr-Tuple{String}" href="#COBREXA._parse_grr-Tuple{String}"><code>COBREXA._parse_grr</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_parse_grr(s::String)::GeneAssociation</code></pre><p>Parse a DNF gene association rule in format <code>(YIL010W and YLR043C) or (YIL010W and YGR209C)</code> to <code>GeneAssociation. Also accepts</code>OR<code>,</code>|<code>,</code>||<code>,</code>AND<code>,</code>&<code>, and</code>&&`.</p><p><strong>Example</strong></p><pre><code class="language-none">julia> _parse_grr("(YIL010W and YLR043C) or (YIL010W and YGR209C)") +)::Dict{String,Dict{String,[String]}}</code></pre><p>Extract annotations from a dictionary of items <code>xs</code> and build an index that maps annotation "kinds" (e.g. <code>"PubChem"</code>) to the mapping from the annotations (e.g. <code>"COMPOUND_12345"</code>) to item IDs that carry the annotations.</p><p>Function <code>annotations</code> is used to access the <code>Annotations</code> object in the dictionary values.</p><p>This is extremely useful for finding items by annotation data.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/Annotation.jl#L6-L20">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.get_atoms-Tuple{Metabolite}" href="#COBREXA.get_atoms-Tuple{Metabolite}"><code>COBREXA.get_atoms</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">get_atoms(met::Metabolite)::MetaboliteFormula</code></pre><p>Simple wrapper for getting the atom dictionary count out of a <code>Metabolite</code>.</p><p>See also: <a href="#COBREXA.metabolite_formula-Tuple{MetabolicModel, String}"><code>metabolite_formula</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/Metabolite.jl#L1-L7">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.check_duplicate_reaction-Tuple{Reaction, OrderedCollections.OrderedDict{String, Reaction}}" href="#COBREXA.check_duplicate_reaction-Tuple{Reaction, OrderedCollections.OrderedDict{String, Reaction}}"><code>COBREXA.check_duplicate_reaction</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">check_duplicate_reaction(rxn::Reaction, rxns::Dict{String, Reaction}; only_metabolites=true)</code></pre><p>Check if <code>rxn</code> already exists in <code>rxns</code> but has another <code>id</code>. If <code>only_metabolites</code> is <code>true</code> then only the metabolite <code>id</code>s are checked. Otherwise, compares metabolite <code>id</code>s and the absolute value of their stoichiometric coefficients to those of <code>rxn</code>. If <code>rxn</code> has the same reaction equation as another reaction in <code>rxns</code>, the return the <code>id</code>. Otherwise return <code>nothing</code>.</p><p>See also: <a href="#COBREXA.is_mass_balanced-Tuple{StandardModel, Reaction}"><code>is_mass_balanced</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/Reaction.jl#L1-L11">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.is_boundary-Tuple{Reaction}" href="#COBREXA.is_boundary-Tuple{Reaction}"><code>COBREXA.is_boundary</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">is_boundary(rxn::Reaction)</code></pre><p>Return true if reaction is a boundary reaction, otherwise return false. Checks if boundary by inspecting number of metabolites in reaction equation. Boundary reactions have only one metabolite, e.g. an exchange reaction, or a sink/demand reaction.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/Reaction.jl#L41-L47">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.is_mass_balanced-Tuple{StandardModel, Reaction}" href="#COBREXA.is_mass_balanced-Tuple{StandardModel, Reaction}"><code>COBREXA.is_mass_balanced</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">is_mass_balanced(model::StandardModel, rxn::Reaction)</code></pre><p>Checks if <code>rxn</code> is atom balanced. Returns a boolean for whether the reaction is balanced, and the associated balance of atoms for convenience (useful if not balanced).</p><p>See also: <a href="#COBREXA.get_atoms-Tuple{Metabolite}"><code>get_atoms</code></a>, <a href="#COBREXA.check_duplicate_reaction-Tuple{Reaction, OrderedCollections.OrderedDict{String, Reaction}}"><code>check_duplicate_reaction</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/Reaction.jl#L52-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.serialize_model-Tuple{Serialized, String}" href="#COBREXA.serialize_model-Tuple{Serialized, String}"><code>COBREXA.serialize_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">serialize_model(model::Serialized, filename::String)::Serialized</code></pre><p>Specialization of <a href="#COBREXA.serialize_model-Tuple{Serialized, String}"><code>serialize_model</code></a> that prevents nested serialization of already-serialized models.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/Serialized.jl#L17-L22">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.serialize_model-Union{Tuple{MM}, Tuple{MM, String}} where MM<:MetabolicModel" href="#COBREXA.serialize_model-Union{Tuple{MM}, Tuple{MM, String}} where MM<:MetabolicModel"><code>COBREXA.serialize_model</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">serialize_model(model::MM, filename::String)::Serialized{MM} where {MM<:MetabolicModel}</code></pre><p>Serialize the <code>model</code> to file <code>filename</code>, returning a <a href="#COBREXA.Serialized"><code>Serialized</code></a> model that is able to load itself back automatically upon precaching by <a href="#COBREXA.precache!-Tuple{MetabolicModel}"><code>precache!</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/Serialized.jl#L2-L8">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.copy-Tuple{Gene}" href="#Base.copy-Tuple{Gene}"><code>Base.copy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.copy(g::Gene)</code></pre><p>Shallow copy of a <a href="#COBREXA.Gene"><code>Gene</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/StandardModel.jl#L45-L49">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.copy-Tuple{Metabolite}" href="#Base.copy-Tuple{Metabolite}"><code>Base.copy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.copy(m::Metabolite)</code></pre><p>Shallow copy of a <a href="#COBREXA.Metabolite"><code>Metabolite</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/StandardModel.jl#L31-L35">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.copy-Tuple{Reaction}" href="#Base.copy-Tuple{Reaction}"><code>Base.copy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.copy(r::Reaction)</code></pre><p>Shallow copy of a <a href="#COBREXA.Reaction"><code>Reaction</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/StandardModel.jl#L14-L18">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.copy-Tuple{StandardModel}" href="#Base.copy-Tuple{StandardModel}"><code>Base.copy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.copy(m::StandardModel)</code></pre><p>Shallow copy of a <a href="#COBREXA.StandardModel"><code>StandardModel</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/StandardModel.jl#L2-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.atom_exchange-Tuple{StandardModel, String}" href="#COBREXA.atom_exchange-Tuple{StandardModel, String}"><code>COBREXA.atom_exchange</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">atom_exchange(model::StandardModel, rxn_id::String)</code></pre><p>Specialized version of <a href="#COBREXA.atom_exchange-Tuple{StandardModel, String}"><code>atom_exchange</code></a> for <a href="#COBREXA.StandardModel"><code>StandardModel</code></a> that quickly returns a dictionary mapping the flux-relative stoichiometry of atoms through a single reaction in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/StandardModel.jl#L52-L58">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.atom_exchange-Tuple{MetabolicModel, Dict{String, Float64}}" href="#COBREXA.atom_exchange-Tuple{MetabolicModel, Dict{String, Float64}}"><code>COBREXA.atom_exchange</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">atom_exchange(model::MetabolicModel, flux_dict::Dict{String, Float64})</code></pre><p>Return a dictionary mapping the flux of atoms across the boundary of the model given <code>flux_dict</code> (the solution of a constraint based analysis) of reactions in <code>model</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/atom_exchange.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.gamma_bounds-Tuple{Any}" href="#COBREXA.gamma_bounds-Tuple{Any}"><code>COBREXA.gamma_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gamma_bounds(gamma)</code></pre><p>A bounds-generating function for <a href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}"><code>flux_variability_analysis</code></a> that limits the objective value to be at least <code>gamma*Zâ‚€</code>, as usual in COBRA packages. Use as the <code>bounds</code> argument:</p><pre><code class="language-none">flux_variability_analysis(model, some_optimizer; bounds = gamma_bounds(0.9))</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/bounds.jl#L1-L10">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.objective_bounds-Tuple{Any}" href="#COBREXA.objective_bounds-Tuple{Any}"><code>COBREXA.objective_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">objective_bounds(tolerance)</code></pre><p>A bounds-generating function for <a href="#COBREXA.flux_variability_analysis-Tuple{MetabolicModel, Any}"><code>flux_variability_analysis</code></a> that limits the objective value to a small multiple of Zâ‚€. Use as <code>bounds</code> argument, similarly to <a href="#COBREXA.gamma_bounds-Tuple{Any}"><code>gamma_bounds</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/bounds.jl#L13-L19">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._parse_formula-Tuple{String}" href="#COBREXA._parse_formula-Tuple{String}"><code>COBREXA._parse_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_parse_formula(f::String)::MetaboliteFormula</code></pre><p>Parse a formula in format <code>C2H6O</code> into a <a href="#COBREXA.MetaboliteFormula"><code>MetaboliteFormula</code></a>, which is basically a dictionary of atom counts in the molecule.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/chemical_formulas.jl#L2-L7">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._unparse_formula-Tuple{Dict{String, Int64}}" href="#COBREXA._unparse_formula-Tuple{Dict{String, Int64}}"><code>COBREXA._unparse_formula</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_unparse_formula(f::MetaboliteFormula)::String</code></pre><p>Format <a href="#COBREXA.MetaboliteFormula"><code>MetaboliteFormula</code></a> to <code>String</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/chemical_formulas.jl#L19-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.metabolite_fluxes-Tuple{MetabolicModel, Dict{String, Float64}}" href="#COBREXA.metabolite_fluxes-Tuple{MetabolicModel, Dict{String, Float64}}"><code>COBREXA.metabolite_fluxes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">metabolite_fluxes(model::MetabolicModel, flux_dict::Dict{String, Float64})</code></pre><p>Return two dictionaries of metabolite <code>id</code>s mapped to reactions that consume or produce them, given the flux distribution supplied in <code>flux_dict</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/fluxes.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._parse_grr-Tuple{SBML.GeneProductAssociation}" href="#COBREXA._parse_grr-Tuple{SBML.GeneProductAssociation}"><code>COBREXA._parse_grr</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_parse_grr(gpa::SBML.GeneProductAssociation)::GeneAssociation</code></pre><p>Parse <code>SBML.GeneProductAssociation</code> structure to the simpler GeneAssociation. The input must be (implicitly) in a positive DNF.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/gene_associations.jl#L2-L7">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._parse_grr-Tuple{String}" href="#COBREXA._parse_grr-Tuple{String}"><code>COBREXA._parse_grr</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_parse_grr(s::String)::GeneAssociation</code></pre><p>Parse a DNF gene association rule in format <code>(YIL010W and YLR043C) or (YIL010W and YGR209C)</code> to <code>GeneAssociation. Also accepts</code>OR<code>,</code>|<code>,</code>||<code>,</code>AND<code>,</code>&<code>, and</code>&&`.</p><p><strong>Example</strong></p><pre><code class="language-none">julia> _parse_grr("(YIL010W and YLR043C) or (YIL010W and YGR209C)") 2-element Array{Array{String,1},1}: ["YIL010W", "YLR043C"] - ["YIL010W", "YGR209C"]</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/gene_associations.jl#L37-L51">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._unparse_grr-Tuple{Type{SBML.GeneProductAssociation}, Vector{Vector{String}}}" href="#COBREXA._unparse_grr-Tuple{Type{SBML.GeneProductAssociation}, Vector{Vector{String}}}"><code>COBREXA._unparse_grr</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_unparse_grr( + ["YIL010W", "YGR209C"]</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/gene_associations.jl#L37-L51">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._unparse_grr-Tuple{Type{SBML.GeneProductAssociation}, Vector{Vector{String}}}" href="#COBREXA._unparse_grr-Tuple{Type{SBML.GeneProductAssociation}, Vector{Vector{String}}}"><code>COBREXA._unparse_grr</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_unparse_grr( ::Type{SBML.GeneProductAssociation}, x::GeneAssociation, -)::SBML.GeneAssociation</code></pre><p>Convert a GeneAssociation to the corresponding <code>SBML.jl</code> structure.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/gene_associations.jl#L22-L29">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._unparse_grr-Tuple{Type{String}, Vector{Vector{String}}}" href="#COBREXA._unparse_grr-Tuple{Type{String}, Vector{Vector{String}}}"><code>COBREXA._unparse_grr</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">unparse_grr(grr::Vector{Vector{Gene}}</code></pre><p>Converts a nested string gene reaction array back into a gene reaction rule string.</p><p><strong>Example</strong></p><pre><code class="language-none">julia> _unparse_grr(String, [["YIL010W", "YLR043C"], ["YIL010W", "YGR209C"]]) -"(YIL010W and YLR043C) or (YIL010W and YGR209C)"</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/gene_associations.jl#L63-L74">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._guesskey-Tuple{Any, Any}" href="#COBREXA._guesskey-Tuple{Any, Any}"><code>COBREXA._guesskey</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_guesskey(ks, possibilities)</code></pre><p>Unfortunately, many model types that contain dictionares do not have standardized field names, so we need to try a few possibilities and guess the best one. The keys used to look for valid field names should be ideally specified as constants in <code>src/base/constants.jl</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/guesskey.jl#L2-L9">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_biomass_reaction_ids-Tuple{MetabolicModel}" href="#COBREXA.find_biomass_reaction_ids-Tuple{MetabolicModel}"><code>COBREXA.find_biomass_reaction_ids</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_biomass_reaction_ids(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding biomass reaction identifiers in a model; arguments are forwarded to <a href="#COBREXA.looks_like_biomass_reaction-Tuple{String}"><code>looks_like_biomass_reaction</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/looks_like.jl#L91-L96">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_biomass_reactions-Tuple{MetabolicModel}" href="#COBREXA.find_biomass_reactions-Tuple{MetabolicModel}"><code>COBREXA.find_biomass_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_biomass_reactions(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding biomass reaction indexes in a model; arguments are forwarded to <a href="#COBREXA.looks_like_biomass_reaction-Tuple{String}"><code>looks_like_biomass_reaction</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/looks_like.jl#L82-L87">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_exchange_metabolite_ids-Tuple{MetabolicModel}" href="#COBREXA.find_exchange_metabolite_ids-Tuple{MetabolicModel}"><code>COBREXA.find_exchange_metabolite_ids</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_exchange_metabolite_ids(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding exchange metabolite identifiers in a model; arguments are forwarded to <a href="#COBREXA.looks_like_exchange_metabolite-Tuple{String}"><code>looks_like_exchange_metabolite</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/looks_like.jl#L131-L136">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_exchange_metabolites-Tuple{MetabolicModel}" href="#COBREXA.find_exchange_metabolites-Tuple{MetabolicModel}"><code>COBREXA.find_exchange_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_exchange_metabolites(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding exchange metabolite indexes in a model; arguments are forwarded to <a href="#COBREXA.looks_like_exchange_metabolite-Tuple{String}"><code>looks_like_exchange_metabolite</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/looks_like.jl#L123-L128">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_exchange_reaction_ids-Tuple{MetabolicModel}" href="#COBREXA.find_exchange_reaction_ids-Tuple{MetabolicModel}"><code>COBREXA.find_exchange_reaction_ids</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_exchange_reaction_ids(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding exchange reaction identifiers in a model; arguments are forwarded to <a href="#COBREXA.looks_like_exchange_reaction-Tuple{String}"><code>looks_like_exchange_reaction</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/looks_like.jl#L46-L51">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_exchange_reactions-Tuple{MetabolicModel}" href="#COBREXA.find_exchange_reactions-Tuple{MetabolicModel}"><code>COBREXA.find_exchange_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_exchange_reactions(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding exchange reaction indexes in a model; arguments are forwarded to <a href="#COBREXA.looks_like_exchange_reaction-Tuple{String}"><code>looks_like_exchange_reaction</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/looks_like.jl#L37-L42">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.looks_like_biomass_reaction-Tuple{String}" href="#COBREXA.looks_like_biomass_reaction-Tuple{String}"><code>COBREXA.looks_like_biomass_reaction</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">looks_like_biomass_reaction(rxn_id::String; +)::SBML.GeneAssociation</code></pre><p>Convert a GeneAssociation to the corresponding <code>SBML.jl</code> structure.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/gene_associations.jl#L22-L29">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._unparse_grr-Tuple{Type{String}, Vector{Vector{String}}}" href="#COBREXA._unparse_grr-Tuple{Type{String}, Vector{Vector{String}}}"><code>COBREXA._unparse_grr</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">unparse_grr(grr::Vector{Vector{Gene}}</code></pre><p>Converts a nested string gene reaction array back into a gene reaction rule string.</p><p><strong>Example</strong></p><pre><code class="language-none">julia> _unparse_grr(String, [["YIL010W", "YLR043C"], ["YIL010W", "YGR209C"]]) +"(YIL010W and YLR043C) or (YIL010W and YGR209C)"</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/gene_associations.jl#L63-L74">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA._guesskey-Tuple{Any, Any}" href="#COBREXA._guesskey-Tuple{Any, Any}"><code>COBREXA._guesskey</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">_guesskey(ks, possibilities)</code></pre><p>Unfortunately, many model types that contain dictionares do not have standardized field names, so we need to try a few possibilities and guess the best one. The keys used to look for valid field names should be ideally specified as constants in <code>src/base/constants.jl</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/guesskey.jl#L2-L9">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_biomass_reaction_ids-Tuple{MetabolicModel}" href="#COBREXA.find_biomass_reaction_ids-Tuple{MetabolicModel}"><code>COBREXA.find_biomass_reaction_ids</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_biomass_reaction_ids(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding biomass reaction identifiers in a model; arguments are forwarded to <a href="#COBREXA.looks_like_biomass_reaction-Tuple{String}"><code>looks_like_biomass_reaction</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/looks_like.jl#L91-L96">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_biomass_reactions-Tuple{MetabolicModel}" href="#COBREXA.find_biomass_reactions-Tuple{MetabolicModel}"><code>COBREXA.find_biomass_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_biomass_reactions(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding biomass reaction indexes in a model; arguments are forwarded to <a href="#COBREXA.looks_like_biomass_reaction-Tuple{String}"><code>looks_like_biomass_reaction</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/looks_like.jl#L82-L87">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_exchange_metabolite_ids-Tuple{MetabolicModel}" href="#COBREXA.find_exchange_metabolite_ids-Tuple{MetabolicModel}"><code>COBREXA.find_exchange_metabolite_ids</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_exchange_metabolite_ids(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding exchange metabolite identifiers in a model; arguments are forwarded to <a href="#COBREXA.looks_like_exchange_metabolite-Tuple{String}"><code>looks_like_exchange_metabolite</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/looks_like.jl#L131-L136">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_exchange_metabolites-Tuple{MetabolicModel}" href="#COBREXA.find_exchange_metabolites-Tuple{MetabolicModel}"><code>COBREXA.find_exchange_metabolites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_exchange_metabolites(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding exchange metabolite indexes in a model; arguments are forwarded to <a href="#COBREXA.looks_like_exchange_metabolite-Tuple{String}"><code>looks_like_exchange_metabolite</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/looks_like.jl#L123-L128">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_exchange_reaction_ids-Tuple{MetabolicModel}" href="#COBREXA.find_exchange_reaction_ids-Tuple{MetabolicModel}"><code>COBREXA.find_exchange_reaction_ids</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_exchange_reaction_ids(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding exchange reaction identifiers in a model; arguments are forwarded to <a href="#COBREXA.looks_like_exchange_reaction-Tuple{String}"><code>looks_like_exchange_reaction</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/looks_like.jl#L46-L51">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.find_exchange_reactions-Tuple{MetabolicModel}" href="#COBREXA.find_exchange_reactions-Tuple{MetabolicModel}"><code>COBREXA.find_exchange_reactions</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">find_exchange_reactions(m::MetabolicModel; kwargs...)</code></pre><p>Shortcut for finding exchange reaction indexes in a model; arguments are forwarded to <a href="#COBREXA.looks_like_exchange_reaction-Tuple{String}"><code>looks_like_exchange_reaction</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/looks_like.jl#L37-L42">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.looks_like_biomass_reaction-Tuple{String}" href="#COBREXA.looks_like_biomass_reaction-Tuple{String}"><code>COBREXA.looks_like_biomass_reaction</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">looks_like_biomass_reaction(rxn_id::String; exclude_exchanges = false, exchange_prefixes = _constants.exchange_prefixes, biomass_strings = _constants.biomass_strings, )::Bool</code></pre><p>A predicate that matches reaction identifiers that look like biomass reactions. Biomass reactions are identified by looking for occurences of <code>biomass_strings</code> in the reaction id. If <code>exclude_exchanges</code> is set, the strings that look like exchanges (from <a href="#COBREXA.looks_like_exchange_reaction-Tuple{String}"><code>looks_like_exchange_reaction</code></a>) will not match.</p><p><strong>Example</strong></p><pre><code class="language-none">filter(looks_like_biomass_reaction, reactions(model)) # returns strings -findall(looks_like_biomass_reaction, reactions(model)) # returns indices</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/looks_like.jl#L55-L72">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.looks_like_exchange_metabolite-Tuple{String}" href="#COBREXA.looks_like_exchange_metabolite-Tuple{String}"><code>COBREXA.looks_like_exchange_metabolite</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">looks_like_exchange_metabolite(rxn_id::String; +findall(looks_like_biomass_reaction, reactions(model)) # returns indices</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/looks_like.jl#L55-L72">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.looks_like_exchange_metabolite-Tuple{String}" href="#COBREXA.looks_like_exchange_metabolite-Tuple{String}"><code>COBREXA.looks_like_exchange_metabolite</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">looks_like_exchange_metabolite(rxn_id::String; exchange_suffixes = _constants.exchange_suffixes, )::Bool</code></pre><p>A predicate that matches metabolite identifiers that look like involved in exchange reactions. Exchange metabolites are identified by <code>exchange_suffixes</code> at the end of the metabolite id.</p><p><strong>Example</strong></p><pre><code class="language-none">filter(looks_like_exchange_metabolite, metabolites(model)) # returns strings -findall(looks_like_exchange_metabolite, metabolites(model)) # returns indices</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/looks_like.jl#L101-L115">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.looks_like_exchange_reaction-Tuple{String}" href="#COBREXA.looks_like_exchange_reaction-Tuple{String}"><code>COBREXA.looks_like_exchange_reaction</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">looks_like_exchange_reaction(rxn_id::String; +findall(looks_like_exchange_metabolite, metabolites(model)) # returns indices</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/looks_like.jl#L101-L115">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.looks_like_exchange_reaction-Tuple{String}" href="#COBREXA.looks_like_exchange_reaction-Tuple{String}"><code>COBREXA.looks_like_exchange_reaction</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">looks_like_exchange_reaction(rxn_id::String; exclude_biomass = false, biomass_strings = _constants.biomass_strings, exchange_prefixes = _constants.exchange_prefixes, @@ -456,105 +456,105 @@ filter(looks_like_exchange_reaction, reactions(model)) # returns Strings # to use the optional arguments you need to expand the function's arguments # using an anonymous function findall(x -> looks_like_exchange_reaction(x; exclude_biomass=true), reactions(model)) # returns indices -filter(x -> looks_like_exchange_reaction(x; exclude_biomass=true), reactions(model)) # returns Strings</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/utils/looks_like.jl#L1-L26">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{CoreModel, Int64}" href="#COBREXA.change_bound!-Tuple{CoreModel, Int64}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( +filter(x -> looks_like_exchange_reaction(x; exclude_biomass=true), reactions(model)) # returns Strings</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/utils/looks_like.jl#L1-L26">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{CoreModel, Int64}" href="#COBREXA.change_bound!-Tuple{CoreModel, Int64}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( model::CoreModel, rxn_idx::Int; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, 123, lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{CoreModel, String}" href="#COBREXA.change_bound!-Tuple{CoreModel, String}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( +)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, 123, lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{CoreModel, String}" href="#COBREXA.change_bound!-Tuple{CoreModel, String}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( model::CoreModel, rxn_id::String; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{CoreModelCoupled, Int64}" href="#COBREXA.change_bound!-Tuple{CoreModelCoupled, Int64}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( +)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{CoreModelCoupled, Int64}" href="#COBREXA.change_bound!-Tuple{CoreModelCoupled, Int64}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( model::CoreModelCoupled, rxn_idx::Int; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, 123, lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{CoreModelCoupled, String}" href="#COBREXA.change_bound!-Tuple{CoreModelCoupled, String}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( +)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, 123, lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{CoreModelCoupled, String}" href="#COBREXA.change_bound!-Tuple{CoreModelCoupled, String}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( model::CoreModelCoupled, rxn_id::String; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{StandardModel, String}" href="#COBREXA.change_bound!-Tuple{StandardModel, String}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( +)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound!-Tuple{StandardModel, String}" href="#COBREXA.change_bound!-Tuple{StandardModel, String}"><code>COBREXA.change_bound!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound!( model::StandardModel, rxn_id::String; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{CoreModel, Int64}" href="#COBREXA.change_bound-Tuple{CoreModel, Int64}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( +)</code></pre><p>Change the specified reaction flux bound in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bound!(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{CoreModel, Int64}" href="#COBREXA.change_bound-Tuple{CoreModel, Int64}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( model::CoreModel, rxn_idx::Int; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, 123, lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{CoreModel, String}" href="#COBREXA.change_bound-Tuple{CoreModel, String}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( +)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, 123, lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{CoreModel, String}" href="#COBREXA.change_bound-Tuple{CoreModel, String}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( model::CoreModel, rxn_id::String; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{CoreModelCoupled, Int64}" href="#COBREXA.change_bound-Tuple{CoreModelCoupled, Int64}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( +)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{CoreModelCoupled, Int64}" href="#COBREXA.change_bound-Tuple{CoreModelCoupled, Int64}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( model::CoreModelCoupled, rxn_idx::Int; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, 123, lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{CoreModelCoupled, String}" href="#COBREXA.change_bound-Tuple{CoreModelCoupled, String}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( +)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, 123, lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{CoreModelCoupled, String}" href="#COBREXA.change_bound-Tuple{CoreModelCoupled, String}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( model::CoreModelCoupled, rxn_id::String; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{StandardModel, String}" href="#COBREXA.change_bound-Tuple{StandardModel, String}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( +)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bound-Tuple{StandardModel, String}" href="#COBREXA.change_bound-Tuple{StandardModel, String}"><code>COBREXA.change_bound</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bound( model::StandardModel, rxn_id::String; lower = nothing, upper = nothing, -)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{CoreModel, AbstractVector{Int64}}" href="#COBREXA.change_bounds!-Tuple{CoreModel, AbstractVector{Int64}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( +)</code></pre><p>Change the specified reaction flux bound in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bound(model, "ReactionB", lower=-21.15, upper=42.3)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{CoreModel, AbstractVector{Int64}}" href="#COBREXA.change_bounds!-Tuple{CoreModel, AbstractVector{Int64}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( model::CoreModel, rxn_idxs::AbstractVector{Int64}; lower = (nothing for _ = rxn_idxs), upper = (nothing for _ = rxn_idxs), -)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, [123, 234], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{CoreModel, AbstractVector{String}}" href="#COBREXA.change_bounds!-Tuple{CoreModel, AbstractVector{String}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( +)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, [123, 234], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{CoreModel, AbstractVector{String}}" href="#COBREXA.change_bounds!-Tuple{CoreModel, AbstractVector{String}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( model::CoreModel, rxn_ids::AbstractVector{String}; lower = (nothing for _ = rxn_ids), upper = (nothing for _ = rxn_ids), -)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{CoreModelCoupled, AbstractVector{Int64}}" href="#COBREXA.change_bounds!-Tuple{CoreModelCoupled, AbstractVector{Int64}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( +)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{CoreModelCoupled, AbstractVector{Int64}}" href="#COBREXA.change_bounds!-Tuple{CoreModelCoupled, AbstractVector{Int64}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( model::CoreModelCoupled, rxn_idxs::AbstractVector{Int64}; lower = (nothing for _ = rxn_idxs), upper = (nothing for _ = rxn_idxs), -)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, [123, 234], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{CoreModelCoupled, AbstractVector{String}}" href="#COBREXA.change_bounds!-Tuple{CoreModelCoupled, AbstractVector{String}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( +)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, [123, 234], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{CoreModelCoupled, AbstractVector{String}}" href="#COBREXA.change_bounds!-Tuple{CoreModelCoupled, AbstractVector{String}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( model::CoreModelCoupled, rxn_ids::AbstractVector{String}; lower = (nothing for _ = rxn_ids), upper = (nothing for _ = rxn_ids), -)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{StandardModel, AbstractVector{String}}" href="#COBREXA.change_bounds!-Tuple{StandardModel, AbstractVector{String}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( +)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds!-Tuple{StandardModel, AbstractVector{String}}" href="#COBREXA.change_bounds!-Tuple{StandardModel, AbstractVector{String}}"><code>COBREXA.change_bounds!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds!( model::StandardModel, rxn_ids::AbstractVector{String}; lower = (nothing for _ = rxn_ids), upper = (nothing for _ = rxn_ids), -)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{Int64}}" href="#COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{Int64}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( +)</code></pre><p>Change the specified reaction flux bounds in the model in-place.</p><p><strong>Example</strong></p><pre><code class="language-none">new_model = change_bounds!(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{Int64}}" href="#COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{Int64}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( model::CoreModel, rxn_idxs::AbstractVector{Int64}; lower = (nothing for _ = rxn_idxs), upper = (nothing for _ = rxn_idxs), -)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, [123, 234], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{String}}" href="#COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{String}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( +)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, [123, 234], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{String}}" href="#COBREXA.change_bounds-Tuple{CoreModel, AbstractVector{String}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( model::CoreModel, rxn_ids::AbstractVector{String}; lower = (nothing for _ = rxn_ids), upper = (nothing for _ = rxn_ids), -)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{CoreModelCoupled, AbstractVector{Int64}}" href="#COBREXA.change_bounds-Tuple{CoreModelCoupled, AbstractVector{Int64}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( +)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{CoreModelCoupled, AbstractVector{Int64}}" href="#COBREXA.change_bounds-Tuple{CoreModelCoupled, AbstractVector{Int64}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( model::CoreModelCoupled, rxn_idxs::AbstractVector{Int64}; lower = (nothing for _ = rxn_idxs), upper = (nothing for _ = rxn_idxs), -)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, [123, 234], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{CoreModelCoupled, AbstractVector{String}}" href="#COBREXA.change_bounds-Tuple{CoreModelCoupled, AbstractVector{String}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( +)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, [123, 234], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{CoreModelCoupled, AbstractVector{String}}" href="#COBREXA.change_bounds-Tuple{CoreModelCoupled, AbstractVector{String}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( model::CoreModelCoupled, rxn_ids::AbstractVector{String}; lower = (nothing for _ = rxn_ids), upper = (nothing for _ = rxn_ids), -)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{StandardModel, AbstractVector{String}}" href="#COBREXA.change_bounds-Tuple{StandardModel, AbstractVector{String}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( +)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.change_bounds-Tuple{StandardModel, AbstractVector{String}}" href="#COBREXA.change_bounds-Tuple{StandardModel, AbstractVector{String}}"><code>COBREXA.change_bounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">change_bounds( model::StandardModel, rxn_ids::AbstractVector{String}; lower = (nothing for _ = rxn_ids), upper = (nothing for _ = rxn_ids), -)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><h3 id="Logging-and-debugging-helpers"><a class="docs-heading-anchor" href="#Logging-and-debugging-helpers">Logging and debugging helpers</a><a id="Logging-and-debugging-helpers-1"></a><a class="docs-heading-anchor-permalink" href="#Logging-and-debugging-helpers" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="COBREXA.log_io" href="#COBREXA.log_io"><code>COBREXA.log_io</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">log_io(enable::Bool=true)</code></pre><p>Enable (default) or disable (by passing <code>false</code>) output of messages and warnings from model input/output.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/logging/log.jl#L40-L44">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.log_models" href="#COBREXA.log_models"><code>COBREXA.log_models</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">log_models(enable::Bool=true)</code></pre><p>Enable (default) or disable (by passing <code>false</code>) output of model-related messages.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/logging/log.jl#L40-L44">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.log_perf" href="#COBREXA.log_perf"><code>COBREXA.log_perf</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">log_perf(enable::Bool=true)</code></pre><p>Enable (default) or disable (by passing <code>false</code>) output of performance-related tracing information.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/logging/log.jl#L40-L44">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.@_make_logging_tag-Tuple{Symbol, String}" href="#COBREXA.@_make_logging_tag-Tuple{Symbol, String}"><code>COBREXA.@_make_logging_tag</code></a> — <span class="docstring-category">Macro</span></header><section><div><pre><code class="language-julia">macro _make_logging_group(sym::Symbol, doc::String)</code></pre><p>This creates a group of functions that allow masking out topic-related logging actions. A call that goes as follows:</p><pre><code class="language-none">@_make_logging_tag XYZ</code></pre><p>creates the following tools:</p><ul><li>global variable <code>_XYZ_log_enabled</code> defaulted to false</li><li>function <code>log_XYZ</code> that can be called to turn the logging on/off</li><li>a masking macro <code>@_XYZ_log</code> that can be prepended to commands that should only happen if the logging of tag XYZ is enabled.</li></ul><p>The masking macro is then used as follows:</p><pre><code class="language-none">@_XYZ_log @info "This is the extra verbose information you wanted!" a b c</code></pre><p>The user can direct logging with these:</p><pre><code class="language-none">log_XYZ() -log_XYZ(false)</code></pre><p><code>doc</code> should be a name of the stuff that is being printed if the corresponding log_XYZ() is enabled – it is used to create a friendly documentation for the logging switch. In this case it could say <code>"X, Y and Z-related messages"</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/9a2b22ee65c0a72859f667f4a0042a47ae4b39cd/src/base/logging/log.jl#L2-L29">source</a></section></article></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../notebooks/">« Examples and notebooks</a><a class="docs-footer-nextpage" href="../howToContribute/">How to contribute »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +)</code></pre><p>Change the specified reaction flux bounds in the model and return the modified model.</p><p><strong>Example</strong></p><pre><code class="language-none">change_bounds(model, ["ReactionA", "ReactionC"], lower=[-2.1, -50.05], upper=[4.2, 100.1])</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/macros/change_bounds.jl#L44-L59">source</a></section></article><h3 id="Logging-and-debugging-helpers"><a class="docs-heading-anchor" href="#Logging-and-debugging-helpers">Logging and debugging helpers</a><a id="Logging-and-debugging-helpers-1"></a><a class="docs-heading-anchor-permalink" href="#Logging-and-debugging-helpers" title="Permalink"></a></h3><article class="docstring"><header><a class="docstring-binding" id="COBREXA.log_io" href="#COBREXA.log_io"><code>COBREXA.log_io</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">log_io(enable::Bool=true)</code></pre><p>Enable (default) or disable (by passing <code>false</code>) output of messages and warnings from model input/output.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/logging/log.jl#L40-L44">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.log_models" href="#COBREXA.log_models"><code>COBREXA.log_models</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">log_models(enable::Bool=true)</code></pre><p>Enable (default) or disable (by passing <code>false</code>) output of model-related messages.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/logging/log.jl#L40-L44">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.log_perf" href="#COBREXA.log_perf"><code>COBREXA.log_perf</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">log_perf(enable::Bool=true)</code></pre><p>Enable (default) or disable (by passing <code>false</code>) output of performance-related tracing information.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/logging/log.jl#L40-L44">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="COBREXA.@_make_logging_tag-Tuple{Symbol, String}" href="#COBREXA.@_make_logging_tag-Tuple{Symbol, String}"><code>COBREXA.@_make_logging_tag</code></a> — <span class="docstring-category">Macro</span></header><section><div><pre><code class="language-julia">macro _make_logging_group(sym::Symbol, doc::String)</code></pre><p>This creates a group of functions that allow masking out topic-related logging actions. A call that goes as follows:</p><pre><code class="language-none">@_make_logging_tag XYZ</code></pre><p>creates the following tools:</p><ul><li>global variable <code>_XYZ_log_enabled</code> defaulted to false</li><li>function <code>log_XYZ</code> that can be called to turn the logging on/off</li><li>a masking macro <code>@_XYZ_log</code> that can be prepended to commands that should only happen if the logging of tag XYZ is enabled.</li></ul><p>The masking macro is then used as follows:</p><pre><code class="language-none">@_XYZ_log @info "This is the extra verbose information you wanted!" a b c</code></pre><p>The user can direct logging with these:</p><pre><code class="language-none">log_XYZ() +log_XYZ(false)</code></pre><p><code>doc</code> should be a name of the stuff that is being printed if the corresponding log_XYZ() is enabled – it is used to create a friendly documentation for the logging switch. In this case it could say <code>"X, Y and Z-related messages"</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/51f6f8f37a3fae91b2090cf899378607dbb393ce/src/base/logging/log.jl#L2-L29">source</a></section></article></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../notebooks/">« Examples and notebooks</a><a class="docs-footer-nextpage" href="../howToContribute/">How to contribute »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/howToContribute/index.html b/dev/howToContribute/index.html index c20158c2f..bbdc76650 100644 --- a/dev/howToContribute/index.html +++ b/dev/howToContribute/index.html @@ -5,4 +5,4 @@ $ julia</code></pre><p>With Julia, you can install the development version of the package from the directory as follows:</p><pre><code class="language-julia">(v1.6) pkg> add .</code></pre><p>(press <code>]</code> to get into the packaging environment)</p><p>This adds the <code>COBREXA.jl</code> package and all its dependencies. You can verify that the installation worked by typing:</p><pre><code class="language-julia">(v1.6) pkg> status</code></pre><p>If you are planning to develop the package, it is often easier to install the package in development mode, with <code>dev</code> command:</p><pre><code class="language-julia">(v1.6) pkg> dev .</code></pre><p>That causes the package to always load with whatever code changes that you added to the source directory.</p><h4 id="Finally:-load-COBREXA.jl"><a class="docs-heading-anchor" href="#Finally:-load-COBREXA.jl">Finally: load COBREXA.jl</a><a id="Finally:-load-COBREXA.jl-1"></a><a class="docs-heading-anchor-permalink" href="#Finally:-load-COBREXA.jl" title="Permalink"></a></h4><p>With both of above options, you should get COBREXA.jl installed, which means that the following command should, without errors, load the package and make COBREXA.jl functions available for testing:</p><pre><code class="language-julia">julia> using COBREXA</code></pre><p>You may now freely modify the code and test the result.</p><p>Remember that if you want to work in the environment of the package, you need to <em>activate</em> it. That causes, among other, that the additional dependencies specified with packaging <code>add</code> command will be written automaticaly to <code>Project.toml</code> file of your local COBREXA.jl clone, not to your global environment. Activation is simple: when in the directory of the package, just type the command into the packaging shell:</p><pre><code class="language-julia">(v1.6) pkg> activate</code></pre><h3 id="Step-2:-Publish-your-changes"><a class="docs-heading-anchor" href="#Step-2:-Publish-your-changes">Step 2: Publish your changes</a><a id="Step-2:-Publish-your-changes-1"></a><a class="docs-heading-anchor-permalink" href="#Step-2:-Publish-your-changes" title="Permalink"></a></h3><p>You are expected to make a fork of the main COBREXA.jl repository, and open a pull request from that one to the <code>master</code> branch of the main repository. For creating the fork, just hit the "Fork" button on GitHub.</p><p>After that, change the directory to your repository and adjust the remotes:</p><pre><code class="language-bash">$ cd ~/.julia/dev/COBREXA # or any other directory, as needed $ git remote rename origin upstream # renames the origin (the main COBREXA.jl repo) to upstream $ git remote add origin git@github.com:yourUsername/COBREXA.jl.git # adds the link to your clone as new origin -$ git fetch origin # fetches the refs from your repo</code></pre><p>In the above code, change <code>yourUsername</code> is your GitHub username.</p><p>When the renaming is done, start a new branch at <code>upstream/master</code>. In the code snippet, substitute <code>yn</code> for your initials (Your Name here) and give the new feature a better name than <code>somefeature</code>:</p><pre><code class="language-bash">$ git checkout -b yn-somefeature origin/master</code></pre><p>Commit any changes and features that you like to the new branch. When the commits look complete to you, push the branch to your repository fork:</p><pre><code class="language-bash">$ git push -u origin yn-somefeature</code></pre><p>This makes your changes visible in your repository. After that, you can navigate to <a href="https://github.com/LCSB-BioCore/COBREXA.jl/pulls">GitHub's pull request page</a>, where you should immediately see a big green button that helps you to create a pull request for this branch. Read the section below for precise details and guidelines on submitting the pull requests.</p><h2 id="How-to-submit-a-pull-request-(PR)-with-your-modification/enhancement?"><a class="docs-heading-anchor" href="#How-to-submit-a-pull-request-(PR)-with-your-modification/enhancement?">How to submit a pull request (PR) with your modification/enhancement?</a><a id="How-to-submit-a-pull-request-(PR)-with-your-modification/enhancement?-1"></a><a class="docs-heading-anchor-permalink" href="#How-to-submit-a-pull-request-(PR)-with-your-modification/enhancement?" title="Permalink"></a></h2><ol><li><strong>Make a fork of the repository</strong>, commit the modifications in a <strong>separate branch</strong> and push the branch to your fork.</li><li>Make a pull request where you describe the motivation and expected outcome for the users. Specifically, consider any possible incompatibilities, and the necessity to increment the version number after your changes are applied. Label your pull request with a <a href="https://gitmoji.dev/">semantic emoji</a> in the title to indicate what it addresses.</li><li>After submitting the pull request, verify that all status checks (tests, documentation) are passing. Make sure any new contribution is properly documented and tested (you may want to check with coverage tools, using <code>test --coverage</code> from the Julia packaging shell)</li></ol><p>After you submitted a pull request, a label might be assigned that allows us to track and manage issues and pull requests.</p><h3 id="Code-culture-and-style-recommendations"><a class="docs-heading-anchor" href="#Code-culture-and-style-recommendations">Code culture and style recommendations</a><a id="Code-culture-and-style-recommendations-1"></a><a class="docs-heading-anchor-permalink" href="#Code-culture-and-style-recommendations" title="Permalink"></a></h3><p>Follow basic rules for software maintainability and extensibility:</p><ul><li>Do not reimplement functionality that is available in other packages, unless the reimplementation is either trivial and short, or there is a grave need to do so because the other implementations are deficient in some manner.</li><li>Try to keep the function names and interfaces consistent with ecosystem standards and the other functions in the package. Consistency reduces the amount of surprise on the user side, thus lowers the need to reach for documentation, and in turn makes the software much easier and faster to use.</li><li>Code less. Shorter code is almost always better unless demonstrated otherwise, e.g. with a benchmark. Avoid repetitive boilerplate (there should be ways to generate it, if needed).</li><li>Keep the functionality "open" and composable. In particular, avoid all unnecessarily opaque and leaky abstractions (common in object-oriented programming).</li><li>Avoid producing lots of "informative" text side-output by default, unless that is what the user asked for.</li><li>Adhere to the code formatting rules defined by <a href="https://github.com/domluna/JuliaFormatter.jl">JuliaFormatter</a>. We usually have a bot running that checks all PRs and reports whether the code is properly formatted.</li></ul><p>Follow the common rules for making easily mergable and reviewable PRs:</p><ul><li>Create one PR for each logical "feature" you want to merge. If your change is more complex and contains multiple "stages", open multiple PRs.</li><li>Keep the test coverage reasonably high.</li><li>If you commit many small, partial changes in a PR, you may help us save energy by prefixing your commit names with <code>[skip ci]</code>, which deactivates the CI trigger on that commit. With each skipped CI, you save a few watt-hours of energy. Testing just the "final" commit of the pull-request branch is sufficient.</li></ul><h2 id="For-developers:-What-is-the-expected-branch-management/workflow?"><a class="docs-heading-anchor" href="#For-developers:-What-is-the-expected-branch-management/workflow?">For developers: What is the expected branch management/workflow?</a><a id="For-developers:-What-is-the-expected-branch-management/workflow?-1"></a><a class="docs-heading-anchor-permalink" href="#For-developers:-What-is-the-expected-branch-management/workflow?" title="Permalink"></a></h2><p>The workflow is based on <a href="https://docs.gitlab.com/ee/topics/gitlab_flow.html">GitLab flow</a>, i.e., a <code>master</code> branch with <code>feature</code> branches being merged into the <code>master</code> branch. Depending on your access rights, you may open the <code>feature</code> branch in this repository, on in your fork.</p><p>The guidelines can be summarized as such:</p><ul><li>when making a contribution, create one new branch and open one new PR for each new independent feature or bugfix</li><li>do not push to another branch unless it is your own</li><li>try to get a review before merging unless the change is trivial and non-impacting</li><li>consider prefixing your branch names with your initials, so that one can easily see who owns which branch (e.g. <code>ad-somefeature</code> would be committed by Arthur Dent)</li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../functions/">« Function reference</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +$ git fetch origin # fetches the refs from your repo</code></pre><p>In the above code, change <code>yourUsername</code> is your GitHub username.</p><p>When the renaming is done, start a new branch at <code>upstream/master</code>. In the code snippet, substitute <code>yn</code> for your initials (Your Name here) and give the new feature a better name than <code>somefeature</code>:</p><pre><code class="language-bash">$ git checkout -b yn-somefeature origin/master</code></pre><p>Commit any changes and features that you like to the new branch. When the commits look complete to you, push the branch to your repository fork:</p><pre><code class="language-bash">$ git push -u origin yn-somefeature</code></pre><p>This makes your changes visible in your repository. After that, you can navigate to <a href="https://github.com/LCSB-BioCore/COBREXA.jl/pulls">GitHub's pull request page</a>, where you should immediately see a big green button that helps you to create a pull request for this branch. Read the section below for precise details and guidelines on submitting the pull requests.</p><h2 id="How-to-submit-a-pull-request-(PR)-with-your-modification/enhancement?"><a class="docs-heading-anchor" href="#How-to-submit-a-pull-request-(PR)-with-your-modification/enhancement?">How to submit a pull request (PR) with your modification/enhancement?</a><a id="How-to-submit-a-pull-request-(PR)-with-your-modification/enhancement?-1"></a><a class="docs-heading-anchor-permalink" href="#How-to-submit-a-pull-request-(PR)-with-your-modification/enhancement?" title="Permalink"></a></h2><ol><li><strong>Make a fork of the repository</strong>, commit the modifications in a <strong>separate branch</strong> and push the branch to your fork.</li><li>Make a pull request where you describe the motivation and expected outcome for the users. Specifically, consider any possible incompatibilities, and the necessity to increment the version number after your changes are applied. Label your pull request with a <a href="https://gitmoji.dev/">semantic emoji</a> in the title to indicate what it addresses.</li><li>After submitting the pull request, verify that all status checks (tests, documentation) are passing. Make sure any new contribution is properly documented and tested (you may want to check with coverage tools, using <code>test --coverage</code> from the Julia packaging shell)</li></ol><p>After you submitted a pull request, a label might be assigned that allows us to track and manage issues and pull requests.</p><h3 id="Code-culture-and-style-recommendations"><a class="docs-heading-anchor" href="#Code-culture-and-style-recommendations">Code culture and style recommendations</a><a id="Code-culture-and-style-recommendations-1"></a><a class="docs-heading-anchor-permalink" href="#Code-culture-and-style-recommendations" title="Permalink"></a></h3><p>Follow basic rules for software maintainability and extensibility:</p><ul><li>Do not reimplement functionality that is available in other packages, unless the reimplementation is either trivial and short, or there is a grave need to do so because the other implementations are deficient in some manner.</li><li>Try to keep the function names and interfaces consistent with ecosystem standards and the other functions in the package. Consistency reduces the amount of surprise on the user side, thus lowers the need to reach for documentation, and in turn makes the software much easier and faster to use.</li><li>Code less. Shorter code is almost always better unless demonstrated otherwise, e.g. with a benchmark. Avoid repetitive boilerplate (there should be ways to generate it, if needed).</li><li>Keep the functionality "open" and composable. In particular, avoid all unnecessarily opaque and leaky abstractions (common in object-oriented programming).</li><li>Avoid producing lots of "informative" text side-output by default, unless that is what the user asked for.</li><li>Adhere to the code formatting rules defined by <a href="https://github.com/domluna/JuliaFormatter.jl">JuliaFormatter</a>. We usually have a bot running that checks all PRs and reports whether the code is properly formatted.</li></ul><p>Follow the common rules for making easily mergable and reviewable PRs:</p><ul><li>Create one PR for each logical "feature" you want to merge. If your change is more complex and contains multiple "stages", open multiple PRs.</li><li>Keep the test coverage reasonably high.</li><li>If you commit many small, partial changes in a PR, you may help us save energy by prefixing your commit names with <code>[skip ci]</code>, which deactivates the CI trigger on that commit. With each skipped CI, you save a few watt-hours of energy. Testing just the "final" commit of the pull-request branch is sufficient.</li></ul><h2 id="For-developers:-What-is-the-expected-branch-management/workflow?"><a class="docs-heading-anchor" href="#For-developers:-What-is-the-expected-branch-management/workflow?">For developers: What is the expected branch management/workflow?</a><a id="For-developers:-What-is-the-expected-branch-management/workflow?-1"></a><a class="docs-heading-anchor-permalink" href="#For-developers:-What-is-the-expected-branch-management/workflow?" title="Permalink"></a></h2><p>The workflow is based on <a href="https://docs.gitlab.com/ee/topics/gitlab_flow.html">GitLab flow</a>, i.e., a <code>master</code> branch with <code>feature</code> branches being merged into the <code>master</code> branch. Depending on your access rights, you may open the <code>feature</code> branch in this repository, on in your fork.</p><p>The guidelines can be summarized as such:</p><ul><li>when making a contribution, create one new branch and open one new PR for each new independent feature or bugfix</li><li>do not push to another branch unless it is your own</li><li>try to get a review before merging unless the change is trivial and non-impacting</li><li>consider prefixing your branch names with your initials, so that one can easily see who owns which branch (e.g. <code>ad-somefeature</code> would be committed by Arthur Dent)</li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../functions/">« Function reference</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/index.html b/dev/index.html index 65f210741..d79004269 100644 --- a/dev/index.html +++ b/dev/index.html @@ -28,4 +28,4 @@ fluxes = flux_balance_analysis_dict(model, Tulip.Optimizer)</code></pre><p>The v "R_O2t" => 21.7995 "R_G6PDH2r" => 4.95999 "R_TALA" => 1.49698 - â‹® => â‹®</code></pre><h2 id="Basic-and-quick-start-tutorials"><a class="docs-heading-anchor" href="#Basic-and-quick-start-tutorials">Basic and quick-start tutorials</a><a id="Basic-and-quick-start-tutorials-1"></a><a class="docs-heading-anchor-permalink" href="#Basic-and-quick-start-tutorials" title="Permalink"></a></h2><p>Detailed tutorial content is <a href="tutorials/">available here</a>.</p><ul><li><a href="tutorials/1_loading/#Loading-and-converting-model-data">Loading and converting model data</a></li><li><a href="tutorials/2_analysis/#Basic-analysis-of-constraint-based-models">Basic analysis of constraint-based models</a></li><li><a href="tutorials/3_hpc/#Distributed-processing-and-HPC-environments">Distributed processing and HPC environments</a></li><li><a href="tutorials/4_modifying/#Modifying-and-saving-the-models">Modifying and saving the models</a></li></ul><h2 id="Advanced-tutorials"><a class="docs-heading-anchor" href="#Advanced-tutorials">Advanced tutorials</a><a id="Advanced-tutorials-1"></a><a class="docs-heading-anchor-permalink" href="#Advanced-tutorials" title="Permalink"></a></h2><p>Detailed listing of advanced tutorials is <a href="advanced/">available here</a>.</p><ul><li><a href="advanced/1_variants/#Exploring-many-model-variants">Exploring many model variants</a></li><li><a href="advanced/2_custom_model/#Working-with-custom-models">Working with custom models</a></li></ul><h2 id="Example-notebooks-and-workflows"><a class="docs-heading-anchor" href="#Example-notebooks-and-workflows">Example notebooks and workflows</a><a id="Example-notebooks-and-workflows-1"></a><a class="docs-heading-anchor-permalink" href="#Example-notebooks-and-workflows" title="Permalink"></a></h2><p>Detailed notebook content is <a href="notebooks/">available here</a>.</p><ul><li><a href="notebooks/1_loading_converting_saving/#Loading,-converting,-and-saving-models">Loading, converting, and saving models</a></li><li><a href="notebooks/2_finding_balance/#Finding-balance-and-variability-of-constraint-based-models">Finding balance and variability of constraint-based models</a></li><li><a href="notebooks/3_basic_stdmodel_usage/#Basic-usage-of-StandardModel">Basic usage of <code>StandardModel</code></a></li><li><a href="notebooks/4_basic_core_coupled_usage/#Basic-usage-of-CoreModel-and-CoreModelCoupled">Basic usage of <code>CoreModel</code> and <code>CoreModelCoupled</code></a></li><li><a href="notebooks/5_basic_stdmodel_construction/#Model-construction-and-modification">Model construction and modification</a></li><li><a href="notebooks/6_screening/#Exploring-model-variants-with-screen">Exploring model variants with <code>screen</code></a></li><li><a href="notebooks/7_community_model/#Building-and-analysing-a-small-community-model">Building and analysing a small community model</a></li><li><a href="notebooks/8_custom_model/#Using-a-custom-model-data-structure">Using a custom model data structure</a></li></ul><h2 id="Functions-reference"><a class="docs-heading-anchor" href="#Functions-reference">Functions reference</a><a id="Functions-reference-1"></a><a class="docs-heading-anchor-permalink" href="#Functions-reference" title="Permalink"></a></h2><ul><li><a href="functions/#Functions">Functions</a></li><ul><li><a href="functions/#Base-Types">Base Types</a></li><li><a href="functions/#Model-types-and-contents">Model types and contents</a></li><li><a href="functions/#Base-functions">Base functions</a></li><li><a href="functions/#File-I/O-and-serialization">File I/O and serialization</a></li><li><a href="functions/#Model-reconstruction">Model reconstruction</a></li><li><a href="functions/#Analysis-functions">Analysis functions</a></li><li><a href="functions/#Miscellaneous-utilities">Miscellaneous utilities</a></li></ul></ul><h2 id="Contribution-guide"><a class="docs-heading-anchor" href="#Contribution-guide">Contribution guide</a><a id="Contribution-guide-1"></a><a class="docs-heading-anchor-permalink" href="#Contribution-guide" title="Permalink"></a></h2><p>If you wish to contribute code, patches or improvements to <code>COBREXA.jl</code>, please read the basic <a href="howToContribute/">contribution guidelines and hints.</a>.</p><h2 id="Acknowledgements"><a class="docs-heading-anchor" href="#Acknowledgements">Acknowledgements</a><a id="Acknowledgements-1"></a><a class="docs-heading-anchor-permalink" href="#Acknowledgements" title="Permalink"></a></h2><p><code>COBREXA.jl</code> is developed at the Luxembourg Centre for Systems Biomedicine of the University of Luxembourg (<a href="https://wwwen.uni.lu/lcsb">uni.lu/lcsb</a>), cooperating with the Institute for Quantitative and Theoretical Biology at the Heinrich Heine University in Düsseldorf (<a href="https://www.qtb.hhu.de/">qtb.hhu.de</a>).</p><p>The development was supported by European Union's Horizon 2020 Programme under PerMedCoE project (<a href="https://permedcoe.eu/">permedcoe.eu</a>) agreement no. 951773.</p><img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/cobrexa.svg" alt="COBREXA logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/unilu.svg" alt="Uni.lu logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/lcsb.svg" alt="LCSB logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/hhu.svg" alt="HHU logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/qtb.svg" alt="QTB logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/permedcoe.svg" alt="PerMedCoE logo" height="64px" style="height:64px; width:auto"></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="tutorials/">Quickstart tutorials »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> + â‹® => â‹®</code></pre><h2 id="Basic-and-quick-start-tutorials"><a class="docs-heading-anchor" href="#Basic-and-quick-start-tutorials">Basic and quick-start tutorials</a><a id="Basic-and-quick-start-tutorials-1"></a><a class="docs-heading-anchor-permalink" href="#Basic-and-quick-start-tutorials" title="Permalink"></a></h2><p>Detailed tutorial content is <a href="tutorials/">available here</a>.</p><ul><li><a href="tutorials/1_loading/#Loading-and-converting-model-data">Loading and converting model data</a></li><li><a href="tutorials/2_analysis/#Basic-analysis-of-constraint-based-models">Basic analysis of constraint-based models</a></li><li><a href="tutorials/3_hpc/#Distributed-processing-and-HPC-environments">Distributed processing and HPC environments</a></li><li><a href="tutorials/4_modifying/#Modifying-and-saving-the-models">Modifying and saving the models</a></li></ul><h2 id="Advanced-tutorials"><a class="docs-heading-anchor" href="#Advanced-tutorials">Advanced tutorials</a><a id="Advanced-tutorials-1"></a><a class="docs-heading-anchor-permalink" href="#Advanced-tutorials" title="Permalink"></a></h2><p>Detailed listing of advanced tutorials is <a href="advanced/">available here</a>.</p><ul><li><a href="advanced/1_variants/#Exploring-many-model-variants">Exploring many model variants</a></li><li><a href="advanced/2_custom_model/#Working-with-custom-models">Working with custom models</a></li></ul><h2 id="Example-notebooks-and-workflows"><a class="docs-heading-anchor" href="#Example-notebooks-and-workflows">Example notebooks and workflows</a><a id="Example-notebooks-and-workflows-1"></a><a class="docs-heading-anchor-permalink" href="#Example-notebooks-and-workflows" title="Permalink"></a></h2><p>Detailed notebook content is <a href="notebooks/">available here</a>.</p><ul><li><a href="notebooks/1_loading_converting_saving/#Loading,-converting,-and-saving-models">Loading, converting, and saving models</a></li><li><a href="notebooks/2_finding_balance/#Finding-balance-and-variability-of-constraint-based-models">Finding balance and variability of constraint-based models</a></li><li><a href="notebooks/3_basic_stdmodel_usage/#Basic-usage-of-StandardModel">Basic usage of <code>StandardModel</code></a></li><li><a href="notebooks/4_basic_core_coupled_usage/#Basic-usage-of-CoreModel-and-CoreModelCoupled">Basic usage of <code>CoreModel</code> and <code>CoreModelCoupled</code></a></li><li><a href="notebooks/5_basic_stdmodel_construction/#Model-construction-and-modification">Model construction and modification</a></li><li><a href="notebooks/6_screening/#Exploring-model-variants-with-screen">Exploring model variants with <code>screen</code></a></li><li><a href="notebooks/7_community_model/#Building-and-analysing-a-small-community-model">Building and analysing a small community model</a></li><li><a href="notebooks/8_custom_model/#Using-a-custom-model-data-structure">Using a custom model data structure</a></li></ul><h2 id="Functions-reference"><a class="docs-heading-anchor" href="#Functions-reference">Functions reference</a><a id="Functions-reference-1"></a><a class="docs-heading-anchor-permalink" href="#Functions-reference" title="Permalink"></a></h2><ul><li><a href="functions/#Functions">Functions</a></li><ul><li><a href="functions/#Base-Types">Base Types</a></li><li><a href="functions/#Model-types-and-contents">Model types and contents</a></li><li><a href="functions/#Base-functions">Base functions</a></li><li><a href="functions/#File-I/O-and-serialization">File I/O and serialization</a></li><li><a href="functions/#Model-reconstruction">Model reconstruction</a></li><li><a href="functions/#Analysis-functions">Analysis functions</a></li><li><a href="functions/#Miscellaneous-utilities">Miscellaneous utilities</a></li></ul></ul><h2 id="Contribution-guide"><a class="docs-heading-anchor" href="#Contribution-guide">Contribution guide</a><a id="Contribution-guide-1"></a><a class="docs-heading-anchor-permalink" href="#Contribution-guide" title="Permalink"></a></h2><p>If you wish to contribute code, patches or improvements to <code>COBREXA.jl</code>, please read the basic <a href="howToContribute/">contribution guidelines and hints.</a>.</p><h2 id="Acknowledgements"><a class="docs-heading-anchor" href="#Acknowledgements">Acknowledgements</a><a id="Acknowledgements-1"></a><a class="docs-heading-anchor-permalink" href="#Acknowledgements" title="Permalink"></a></h2><p><code>COBREXA.jl</code> is developed at the Luxembourg Centre for Systems Biomedicine of the University of Luxembourg (<a href="https://wwwen.uni.lu/lcsb">uni.lu/lcsb</a>), cooperating with the Institute for Quantitative and Theoretical Biology at the Heinrich Heine University in Düsseldorf (<a href="https://www.qtb.hhu.de/">qtb.hhu.de</a>).</p><p>The development was supported by European Union's Horizon 2020 Programme under PerMedCoE project (<a href="https://permedcoe.eu/">permedcoe.eu</a>) agreement no. 951773.</p><img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/cobrexa.svg" alt="COBREXA logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/unilu.svg" alt="Uni.lu logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/lcsb.svg" alt="LCSB logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/hhu.svg" alt="HHU logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/qtb.svg" alt="QTB logo" height="64px" style="height:64px; width:auto">   <img src="https://lcsb-biocore.github.io/COBREXA.jl/stable/assets/permedcoe.svg" alt="PerMedCoE logo" height="64px" style="height:64px; width:auto"></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="tutorials/">Quickstart tutorials »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/notebooks/1_loading_converting_saving.ipynb b/dev/notebooks/1_loading_converting_saving.ipynb index 48d0d5274c72b4748d558c301fc92b1bf7c94974..13bf300d291825c6da7ba522521328b14e1b60ca 100644 GIT binary patch delta 21 ccmaEJg7M7>#tlLVY=(wLMkdCaB@#kd0AVNxLjV8( delta 21 ccmaEJg7M7>#tlLVY(|ELCI*I^B@#kd0AUgbKL7v# diff --git a/dev/notebooks/1_loading_converting_saving/index.html b/dev/notebooks/1_loading_converting_saving/index.html index c3342c150..fee149973 100644 --- a/dev/notebooks/1_loading_converting_saving/index.html +++ b/dev/notebooks/1_loading_converting_saving/index.html @@ -223,4 +223,4 @@ sm = convert(StandardModel, m) open(f -> serialize(f, sm), "myModel.stdmodel", "w")</code></pre><p>The models can then be loaded back using <code>deserialize</code>:</p><pre><code class="language-julia">sm2 = deserialize("myModel.stdmodel") issetequal(metabolites(sm), metabolites(sm2))</code></pre><pre class="documenter-example-output">true</pre><p>This form of loading operation is usually pretty quick:</p><pre><code class="language-julia">t = @elapsed deserialize("myModel.stdmodel") -@info "Deserialization took $t seconds"</code></pre><pre class="documenter-example-output">[ Info: Deserialization took 0.002217501 seconds</pre><p>Notably, large and complicated models with thousands of reactions and annotations can take seconds to decode properly. Serialization allows you to almost completely remove this overhead, and scales well to tens of millions of reactions.</p><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +@info "Deserialization took $t seconds"</code></pre><pre class="documenter-example-output">[ Info: Deserialization took 0.002114359 seconds</pre><p>Notably, large and complicated models with thousands of reactions and annotations can take seconds to decode properly. Serialization allows you to almost completely remove this overhead, and scales well to tens of millions of reactions.</p><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/notebooks/2_finding_balance/index.html b/dev/notebooks/2_finding_balance/index.html index fc93a6a82..34577a94b 100644 --- a/dev/notebooks/2_finding_balance/index.html +++ b/dev/notebooks/2_finding_balance/index.html @@ -170,4 +170,4 @@ Number of metabolites: 72 -25.642083259145206 0.0161569956400718 0.004729690379188246 - 3.8887743479784547</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> + 3.8887743479784547</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/notebooks/3_basic_stdmodel_usage.ipynb b/dev/notebooks/3_basic_stdmodel_usage.ipynb index 7c82535dfe1c7a259351366f63245e350892b444..3a365b29416ef497ea4d245a4f9c4f16514e9196 100644 GIT binary patch delta 843 zcmY*X%WB&|6vb|{^{U0t)MaoMp~Mz5(n!|$QLy7@;#X{kCRD-5(!>(BB-f9Hq0m3* zW}u61vgi*K3|$tw?xu8;ZRozxPv}^djk~*Z@40u*J?Gx9Lf==RFUR;XQc?;#!7n$# z6)rw1Du~_TXi9}xi{EIjHg}DIJ)|y8gEv~7U<IYfe#Q3lNI@b|B$55WvCXiE9BoaO zqjG@NXZplP<_o1Hgiux>3`$daJEL#=v!&~~OUDP5PR}_tQHv*l7C(E96h+}+_CUz$ zvkbz}>KmHdpmTlTjqN!VZoR3q80%?JMgQduOP>xoa~4w1LKbVPN0FI6u)XQX|3)J0 zlNt-FkTr8r_EUWZ+nrXg)eMLk79H^QPOGItEiKC`P5?m=5<vpN6viw{Uc5&E-gXVk z?vLm)4Jz$Uy<2HDuP<ty@_F*IS}vD)?^;jGF$ezd)kd)(6Pcufb}sW!aCS@i7%QmF zC^ZGcb0*%xHT{Y)F}aKiZ%+6&O{s3oJ%{e0L=KQJ30O-hQATL>Kt6^JD)r0mlD*43 zuerK8;c9{tfCLDJW4GV0@1FW-xQo}I-*;aD5PjTYAGaRD?lYN)Bq9;$t_cP_lGulA z^hssBnCp%{r(o;X%wgZMiGai3EIRbrY!}_LM<JLU=Z@k~BwLB67UeD@S%y-u);bp1 zMeb>spR$#UaaB|~7&f9@QC}F_bA8o15F)g_Y<>vF(ny0wsh3Z461{vQ-z#;mo5{{q dU=}r!hG%YW9|>4M0+RS}_M_cj9lZK=_zyUc1n~d> delta 897 zcmY+DO;6N77{`O4N4W_HmQ3Ja2yD}NX*(?tv&#a@ChQ_6f?Bib%g{Ek(`CCD_rw?Q zHXndbV4`l~T|a<Vug1F{z=OtVx1GeEe)By4JTL#5ewogFpU!=FOcn^jNNkdg8Jv^W zylrD~N0ux^vAg!#<?fgVeiAXx9Pr9rvkA3~|1wDthbF{GH;DK}YO`Vwjitj2e^?gr zGH+N28_oT?u0u=-DpMnNk+JK3HsL9s3>?roBhZFhK-07>a1jn&E}pJh)At6rH_yFL ze6yC<_Ymw_C#a3g9waV5W@FD!uaYs-g4i2Ha@M-|V|5CBo33wMvMAER(M?p$(9-2s zwa+|1Nk^AO0$XB2YxnhhL6MS2;v-$IcN?v8(jaEOTz9X%-#l_Gf>1f+EP!lkTH-fd zy``l-;X$1AFWJNa&Bob5=dkng@M!;_aa!+oU-Zu9g1Nu(AoPpw?c-Kc*KIYKv^~-W zYPCWm4JeCejD=c|4u<Is4~twd4D-dXRw_o!3&!a{dZJX=Kp5-g*vQ7FF5QLCsrcb6 zd~(j`9>`_e&=h}rD^IRzKLDG6XgY`sf|6wa{P6ScGXUke$l*f8q&|;c(-?`b+uOGY zStjs!2z*JFBC5!)i0X=<BBTf_B8m(}ss~j)DBW<mb(&j{q+H8x{A`kqnS5Wpw@K)Y zlQ#^U#A!B+)6wKgo>T7fN-iK-tE`B2V1?72^;JksQr&=`7QR1g_MF^!NDZ;LTdPsq YsvZ{$>OmULejTWpnxReK?HVip07!ulX8-^I diff --git a/dev/notebooks/3_basic_stdmodel_usage/index.html b/dev/notebooks/3_basic_stdmodel_usage/index.html index 7b04f18a8..905cfa85e 100644 --- a/dev/notebooks/3_basic_stdmodel_usage/index.html +++ b/dev/notebooks/3_basic_stdmodel_usage/index.html @@ -178,4 +178,4 @@ Reaction.notes: --- Reaction.annotations: --- Reaction.objective_coefficient: 0.0 </pre><pre><code class="language-julia">check_duplicate_reaction(pgm_duplicate, model.reactions; only_metabolites = false) # can also just check if only the metabolites are the same but different stoichiometry is used</code></pre><pre class="documenter-example-output">"PGM"</pre><h2 id="Checking-the-internals-of-StandardModels:-is_mass_balanced"><a class="docs-heading-anchor" href="#Checking-the-internals-of-StandardModels:-is_mass_balanced">Checking the internals of <code>StandardModel</code>s: <code>is_mass_balanced</code></a><a id="Checking-the-internals-of-StandardModels:-is_mass_balanced-1"></a><a class="docs-heading-anchor-permalink" href="#Checking-the-internals-of-StandardModels:-is_mass_balanced" title="Permalink"></a></h2><p>Finally, <a href="../../functions/#COBREXA.is_mass_balanced-Tuple{StandardModel, Reaction}"><code>is_mass_balanced</code></a> can be used to check if a reaction is mass balanced based on the formulas of the reaction equation.</p><pre><code class="language-julia">pgm_duplicate.metabolites = Dict{String,Float64}("3pg_c" => 1, "2pg_c" => -1, "h2o_c" => 1) # not mass balanced now -is_bal, extra_atoms = is_mass_balanced(model, pgm_duplicate) # extra_atoms shows which atoms are in excess/deficit</code></pre><pre class="documenter-example-output">(false, Dict("C" => 0.0, "P" => 0.0, "H" => 2.0, "O" => 1.0))</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +is_bal, extra_atoms = is_mass_balanced(model, pgm_duplicate) # extra_atoms shows which atoms are in excess/deficit</code></pre><pre class="documenter-example-output">(false, Dict("C" => 0.0, "P" => 0.0, "H" => 2.0, "O" => 1.0))</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/notebooks/4_basic_core_coupled_usage/index.html b/dev/notebooks/4_basic_core_coupled_usage/index.html index d25e135c2..1a0e0deb2 100644 --- a/dev/notebooks/4_basic_core_coupled_usage/index.html +++ b/dev/notebooks/4_basic_core_coupled_usage/index.html @@ -105,4 +105,4 @@ Number of reactions: 95 Number of metabolites: 72 </pre><pre><code class="language-julia">d = flux_balance_analysis_dict(model, Tulip.Optimizer) d["R_BIOMASS_Ecoli_core_w_GAM"]</code></pre><pre class="documenter-example-output">0.8739215022661532</pre><pre><code class="language-julia">dc = flux_balance_analysis_dict(cmodel, Tulip.Optimizer) -dc["R_BIOMASS_Ecoli_core_w_GAM"]</code></pre><pre class="documenter-example-output">0.6655856992982552</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +dc["R_BIOMASS_Ecoli_core_w_GAM"]</code></pre><pre class="documenter-example-output">0.6655856992982552</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/notebooks/5_basic_stdmodel_construction/index.html b/dev/notebooks/5_basic_stdmodel_construction/index.html index 3fa791411..cf9cc586d 100644 --- a/dev/notebooks/5_basic_stdmodel_construction/index.html +++ b/dev/notebooks/5_basic_stdmodel_construction/index.html @@ -58,4 +58,4 @@ model</code></pre><pre class="documenter-example-output">Metabolic model of type â‹… â‹… â‹… â‹… 1.0 â‹… -1.0 -1.0 Number of reactions: 8 Number of metabolites: 4 -</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/notebooks/6_screening.ipynb b/dev/notebooks/6_screening.ipynb index 8e5946e8fd8e6147b3e81ff31f1d49acac933ba5..7329a1b1213e07d309d4f271d0c56a7a46bfb822 100644 GIT binary patch literal 105927 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	K$ddURbWQaJC%M`17 zxbh<J3KSCfj9_fgp!>_xbrhlJl}x_=5^JtuBRA-w!OOt3wdBwved{tqX@dLb2483d zF@PBc@5B%0w$}RHZ$Y1}kTCTwZFmo$meAk&pzPa4H5Ci^<)9`b(&-#Nc*^4lx~-}} zsg1%kc99)|L7J&vxDL?(+x~fOQp|B%*ZL4{i9LPOOdiiO4oO&UBU#9Pzl0I(|MDUB zVT5XVm^r=CmwDt>B&8_JTo#hk*P!jmBW9f;M;d;<w5J@AErDUL1C$<IRR*cexR2w> zq`G<$aDVqT6{zt703}*oW4707ulwnJbXD(vbB<*8%PXdr_@hkLI_wA$5Z*0rnSLEV z*;R_;<jF|By09)$f}L;}4Chx*7W65<d$JtdPj4Vp^8Sz)(#j|T%iO2!37kZ4;mHPH zXHaH<Hwgj+S4L{T_=yReUu$1lY!u{K{(8Ouc{@E(`heS6Nj};Djay;d3j&kJcD2&O zWL17I;c>9vEe=RCoPkJ@L2C(S%k!*g??jyL(j@DRo@cM!HUL<QUue31%|2EBlzm!t zVB99fYnzutS5(p}r~Y4_?dr>`zFfk~`Eh4lA8uA!84hP4^fNkZVg?@y&v&r<yw~PQ zb5*}A6-a?M=PSHe&E)O+%8s9$_aL1WU?y9mS?qekb$C}j7^x0=w^?^e9PK3c((p0* z`D3wcP8hIH^xc-9dCaf=&eb0n^={Z+01dj&^MQ0i#}q#C9D0Q%Od^2QjbspJK0J2C zU4|_|JXd^&_k?i^%HaxrV4rSM?YF`M5FzkYZr37Lt#!Ovg{5-C^%gLWk}mjMt42<= zez5!-59T4bgS3Bm=ZuPynY()H_t`}Q7K7XY^DP6jt#2S%Tc&|fS{)gp;D4Tt-4s5h zlTj)XJ)lDP5_I?xBh@z^T;n}@II%j#=Oa5i0i1ys_!&c26Z6&8ikok9V~cA`^;!es zmALZneUT_$b)@;<JmcivcW3AIe2hcuIgZYY0|sJ$r-$=K#WvdSLimf;WJf?gY}EDi z(`!|o&aMKlE9`YhusUQCIB}2q#ElWZKp%9Kw8QrE0H`{(;W0?hTqS%R_O}*#%VYzr z&k6VwHmopY$598&5ok!*BF~q2ZK=29cE)-!xxk_b#s(Qm7_0{R*5g<nwp>I@8u;Jv z<>AnY=e){@ytRlPLi9>&F0_5V&q+`G)323FiNnbNb84V@xD9TSF94J4md(A$^Y)N9 z2bhWC*TcGL%-T>(be4KdsLnES2|C}8v4g$(!|r|}59Q^VJY}>ovgjnjSBX1il)`r~ zh7uL?$QQ`(z*mv}$<2Tzet9Z^Y}M25>0zM6rnfMCy7XZVne_tOQzOij=;NsbdOEHh zPzm$H<Z0&GuIx;+)kA_)3a~5>sNd`wzz5I;sQj?h2ul-tZuq%dlx2CjLOp)bh3DuC z+z~hXC7^?}W?1)d-NnZuPv!J@2d4`$so2C*d{P;EP0YXKa`ZHA!h<=0^D0KN#cBAE z0z8E$40<K-BgtR$GD5_%4u%~tJO(+;y1t{j9IFJ4lT!^+5ZYX$z5Bfh3`cCsNmy~O zerXtYc5(1KVNhkeT_Lq&{PE#EC*m9^3s~C9@ME?`=6Jz*H3ym1g@*uE3A~3Ys3W81 zjCb2lNK;5>tc>6w08*!X1g+^&XDp!QC?F4ulQ6<&u$S|YVUV~oJ1vAK+oj}l#*7LC zs(^fev^do``Wx)m2{f1a6Vupg+|AxbM(3y&jGQH&Av<nLKL<#)xoz>|>l|!qeXC1z zajp5}zcuZB=->ga<KMJib(?}QR!QdzWW?SG->KYUBC&zycXGzngVzi^p`aK2;(0d% zZp`uL@mciaV%^YVhStAhck}r+b0XlU(20b18baTQ{|p8;5Tb>vutZ><d8RzU5bm%~ zz*|(oebFLtXYy$btOurpcyK?0-i~9c_6TnP$9{bs3yp+y=X^j@Yr;r;Tm46Tv=Z`F zx5Unmx|j91&$c4h2^eIE<jc;$;tKC&cl>EzYKYmDyu)o3yQ~1)rX6_Vck<{4{~C@F z5Z5S=*94h36J!ROz(3hr{YI1+N=)7zF5^AChwy70j~XyIk)xHkHu#8FhF??82K?vb zd;6JW;{uz}7}|6rk)la|Uvtx)3oiQ`f=1X@(Dshb@pw(W6nknF#0PMAI;5jbMu7=~ zKD+s>ae~liI)6?fket<^%z5S*jnu{oH3r!A%+$vSok|N2kRXh&Zngjer39_D{g`%w zqN2B>@Ys{T2Ay?k?xOdu`}8;YCag+1rOz=_{_x$=pIyTy>#L2jIXEEjIf@%Lg!dti zl2B954_Hlj9qOTAS+4a3^2rb^2;whv6?Fs8TUQur9piCl_S|kqiYXpt^8qijyEBUg zkSWpLQNDA7!63d|agm8}isj2>m*MIv1xSDb53c_Z;HZ?K8ObMTA4%-mxMrl)e-}gj zy*Bw1uKGWH?ch1CJ`PMFjCasD6!8d;vX}zR!`MSyKH-;fSdX`aw~-E#W-O#RnYt|o z&LU}o^nf{m8!UgO4*aMQfVHIgn!W%S(asA1B}@n{^yHwp*x7cu9xl(@<t9?=4mnL4 z_|X@O`2fX{Mm0n&w|dR;2cn@tXLKL~eOSq~92EPCiy=ePtYF;EO40lI%}dp`#%<w$ zMQT3xd@c8v!wYjK^g|*}7kCsRV-mffh6!24V=97u+R-imOY0+vvc}@R!i7c9TwW9m z7lAK_MSEC!tGYbK^f`93pej1dZ$Z5xK0|^5ONe{+JztQTsG*EtcM;inxC;r+6iC7? zI4~Whz#UM@uJ-#qKu^MLY{dnRG7BwU^k3hAs~fVzfyF@bFlrBEm2yUYvoNxEuq}RX z<2z=i$VhQG=1zY9Iz)WHqF@LPQ3Nyq`<faA*nq#1eUCkUy+~t3cj9aV{)4mB#pRUX zjU$ROIx@rHUGT`y5k2}aZ6uBFD;l|o-JqPS+H1jl^Wf)(a|LgSWe~&6xf|3f#9HPg z<=JS7%LT9$#V>n*Kc^-(ePE@;v9JTVuQ%Yed)W0-NZ2ypb|YboCyyn3#3|;-!h@&s zunJ$USrlR`+%>@~Pt;3s;PAWJe6~AX%GCq>zt`5g;Bc1o^JI;1Fz|o)tAW1vv-8(b z)1P0+vb&8ztK-QFw!u8HpRj-i(WiVa1xFh9TTS-?Gs@=xe|xGST6?KBmrn?I>S3$! zL=f+o|C|=mC4JsqiPO%8=4lR2_*|@Kpjq4LL<xDtKKG#Fy)cis9}mDe-(c|D%R&iA z&w(CFlEK%3Ej#=>Jpft-txvhNh8EtQsT3b5OMG-sChaQ68=Ooj|CnZ-x9M0kY~;RT zv3a7tqku>HFN!a^WtCE*48(07Pum-!Q&7;s4*<Saw@kL9i1dK)_EaB*`up`g#=Cuf zk2d5b6ebu`VKW{Hv+?sWz`>%rf;^A?wukNh$a=w$C9r>Dn@83c)5#N_IWjbA31P=X z(!BDkZ>k!r3GQLDdx2w$hMuqn97{c9$i(Z!D%pq^Zv);Bc@`p(${qsd{ua6Vt1r^( zWceqoa`h4}$^*99J>Cz9N&!)4CLA#AIb^=evpxNZ*94Uhyao^5>iDr?X3nhRM1Epj z)+kaipIUsmU<=ocRttWKBcgSVey(C9zb}$~fxwUVv0BkXhONXnXvS3AWDjJ&mGcSn zAzX0b;Sitv>gx_Ksb9U6wLkLA```SP|5vZ|pLh-F%|$H|%yA(|b=&u9(oV9is9<Wx z>~)g0s`Fi)oa;kAG~Pvi!<_IOLOr}(e4|*k!`<BYKj$-;<-Jm*-Ai()MmIY@R}OsM zZvcG6IUuQAMDvRKe{Cp71pXu=c}mY{eBSq0J>C<XeBq$7T?EvC&%AYwWb1xU{(Tr7 zwPFJr1mwo3xdrm*pe$<&p&E_ABbyxe#JOjD)Z97)zh|hUz*V)d%0nGFRD^L~3dB>7 zg^V!UjWUiB)jc^FpqCB+&IfQX%!;HC@FNUD0;FIZfi)wYp<TdT1Na~Lt4SsNnuPdu zXZX?~&hty+-YNAui>!l=$hcfEYlO~76+u#X9Y*9sEu>6uI=wNS$`}kEQrH}QId;q2 z=ZlN4?hiFpPgKdyJCIT~j&k9g4#W!$dO`qlucOWW%&uH-z{^^WW1Qa5VO0cG!F|j? zKS<#TyTgXPk0HxMAvA3%3uoB}W`OGJRw8`|d-+2#_wF{GWks}lL5>i<2uXB6mZ*WL zKcRCHbr4c)5LHlpVcoI9a|e1Z1tDCc0<}(#o${TJ54p9Xn-MtJesy-Z7xtL=a>WR4 z)(ghOGhZV$tI}YDL_PGfYv3o&n#tba#OO>2ArdcVu8C4-8!4GL&&Tf_tcg*{A5Fee z#bPF4-jNwNb5|OsD(b--)uw}<Z37MVXRE-|4H9l>=!l53gN@n)Q(?@J2(5;bse?ub z6#-N%nDc#{Nhw=z`BNM7q{OH#EsRojDtJ%^7=*Xa&E4k7I}d%1xq|{G0?7E}^oEN} zb~q%HRM19t?rAZJZ~b>ZdJ5&Hf$2yG$P{^`)Vuqzx3mEAeuLu8YWa~V8!Teu>6mJ4 z*@@+8(wrLh@$@5QjN?%@mcTF4icRY)PM$cT+yO*wt<TJ8tze|KnJ>=VG)#Ip^^zR} ziN=M?F!!qKi?gocEEObD3gew$zF79LME;47kW_Pkb^^R<4EcuyM3G^lA63i=SFHVY zJ6O!-sI}4*+T9g`l`wL_!VbvbgM7qLdp5hc1i$EgA}%`C8YU@AVjMt6*$JdW0hh7D zEZ#tFhzHM2%U>%U(K{O(xC^jrBRenqZjV6<dZ+eM5dZJ2qLEil{S?`%XrJQ?W-JD6 z81Nw{ERaNo2s0G?<Vyqz8o1>)C!OR{$ws#PGxj8CsBYcoQL#)Sj1FXn)k8*uM*xd> zJlv+>ec*Y7rqB63fA#h25PW9;k-z#{ZLEv#*gY=2^Z|qT^p>mI^lm0;z&49?KLKX| z;wZb4k;klJ1HU&k#+oVJ;kQiZKl2y<;52-aYEh(5K+^o926e;?W#+2nQ*Z<W%!+*g zQ^2zeag40X$MU{F>|&!p`-1cPlGh&7p1<=9Ul^yCOVZ+`c(2iUv(jvRA)38(Px>5F ztv(Xwo|mJiDFM}uYr>{h^`*ijz|%Be=LfCOd#b}vJL^E)T5y+N(o;d>>~O+Eidts= z&0U`9vtD5_<b-eb>M#kx-n<!bfnQ<HIPHN46`yM*dR?W??;vi$>VhZ%ot%B(><;&7 zSru-Vmutf(0d;BDImX=>&hVoL{En&G`8+>z#3SaC=XY<PD3Nx&VIJ{8_iS~TNu<bT z^3Mvn7V+T|RtsX-f<JsQP-xZqwuX^HH_}!=@6EVZHpg;~tzTJ+<{Pt%m-FSo!QtS3 zR+0+(zJb>64SZh9UMurCU~W8E?TWt{n0o*hAJcxA8RJhp+n4Zmop16byoK;H)h<&p z326|hy7my(bAd6W2|dHrQg6i3St=6CEKl0DNa;DFY)HTamHoy50vnG%y6K}38LHq| z_mG@8RPO5YE6q}f>s^BJEt0Nx+EzDAWnT~uQC@L|TlmG!=ffF>XqdYIm|ATn7dGI6 zn~k2<8o9u*;#(t`TqDWMqQhC)IxxA-UVAFD-~=v)@aActD|lT4=tL(|G|y0pIR2E< zP~kK4DfWz`Z!Hlsk#x0Mh>Dcy@Csougu%L!Fet&69-dUcuh&4#9IJ<=!)i1}^}Yhe zVCL#syl0yivc$3B_T<ZsiT&;n>#0aSo-l5|R&~%omYL{xgo+|pYhOj$R#Gv-z-@#b z6mgr?d3E!+2iTRk4|hcsZ5vXO%@VAu&30Ax?CE$ZJ+>Yq*FP9K`<AEchM(;d`JRA- z=UZy+nz#p`8mwNU<wJ;0i|!~S^nk%o$W}1O+bgp!xZ37>JU<{a_Kcti1Q6QLuG+GD zNr0J5P#0sQQE6L@fbR$?_WJl!*aoA1Kt%7dGsKCQ^C1h;y`{jTVDvnhM!k=jH`{G0 zJa@PA^_<+yPj!Y->v_qZLY#Bu9z*@rTlt=M3t%?4lQYDw3(vEzb|=MfOE^cjWltV! zv0!GGc{P^2I`k?CCeVAu0!*3#1HxZ>4wLQ?k9sK#Uj<Lvvw-*n1kV`bo*)_EB_Ezq zA~*VAb`2Aah9^SZ88Zr`5#du}pcK?M5MH3^0^iZtF2|E7L2G%dj+^BkB7-@Yr5n&X z5YnQ5rDw1tqglK+g73%uDJVx=Gk6d9)`%WK)H`q6--C>}-B6Au`RGt)@@E3RKe(CX z{|c2A&{SmfFuWL0KPH<V<b9*pW<{opeW-oF8-<HPa?y6VjRp*hm&bJETel4pUpKe) zeozsAJDSeiuLdGmN9S&|zOkzt!D`%H+LV~GMBA|+y5>ybhPk!8<Umj=2^H!p?_%LQ z8wY-p;EYuF_qDsb07Hr2u%Il{F~1reiob*5Zvb(9e^u2aek%%CY!c5EEfh5y%h4v= zZLNYfiE4D>9*S<R_DwLDLxCcwdnv_qi^`>Vu{9yA-+ftdRw(>rW<GJ&4K{y&gnBVJ zcP7|!Nqe-@p{cC$JjM|aI`VY*mG2gxdKdm@i>t_WJNJ$I^Q@X0&F%hrO5Wnd@+iWD znQ-lV^{Z##|Eli)-|Y|nkAK}l@9S=EYsa6KCz&=GtrG;mApaaGnt1f;oB!*K7#J4e z*s#+*d@(G@Az1=%!Ktz)Z~y$lVD5YPqANvjiJFuAy?2q*jc~xt>+K4>oDQrhm||4R zi?-Gwf>mb4p0^LM#IRl<DeuN0p2S;{o`BZULOZ_;H}9`rkhnrZHc=AN!r+{PNq(9< zw&4Wp1#0=G#OzgF@#|i$OY->J7M#MKP61ks+3GwFt;I9mq$nr#_m}JATbNCg_HT=4 zRLHQFkrCg(_2UA*68`_otB_y@7-%?1;A3#hpTz&O@d!_LS0n8<i<u0*<oX_AU-&NM z|9M}i===vWY?v6I4<{5-U@HLI!e`v;=IsFk`ixcP!=YQR;D25Ky<o^&Xh4SFYHhFq z5#V<UdaHSYb{NByXpdSG<c&qsy-aFcu}uvN?fhj$%wE4`Fs=T`VEUWakcI<|99;jA z87JTek%onQE?T~>r;J-Xu!{y;$APxCAz?y^>s+_kK1BSz;5F-cM6;Q6f<y6I2J_?9 zdOtr0ZihOC%LX&6Q?E84WaoIosDt$!j<|sAxR1Y9C-K<Hbre=O?cj;FTL8s`hitfo zF%{1f)^J0_s?o3KULmuq3I>O^1zg)ie6%ErbT;sZaS%cK2r4xEWVIb!$Wkl699T-> zK0I&6XyhEd6H$(-??ZblaZ~K0D@T77i>nhZz*oZ9pbnY&Y&&0dhde!h>J;fTi)Rl& zk8gN<$8|CmL3tlHQY)c}evbhf^<(wOa&SCOSY(Hsu%uhO{~Cw_IkZ5%xic-otj9@| z-jKa>Cu4)fED}t#0rIdeAj<^)?IU09CRgQtSwQ-YY?a#%Ly7vzz)J<K<??BsQi0o> zoUZfbtN?YIFtiuEN?fqf?>urPjGJ{Xw5zI}KyaLpuMJQ}U{vg)R=d<VbJYz=<{wTk zUU!&1eh?{yte1LeKb+0Ev`zj(mIORM3@6kk&Ipl2%AR-$;D+VrzONTJ?t$V=N#7sx zFg2;p=qfVgcr%P#NlsEPP6l#!p_^4<dIc{!(zaRI+>XUl+90F(3^`45rSV$5+AUsq zC-7nJD|C^)wo~&lRclE76d)s__j7}^L1=ie(UT+PI7aaMBf!2cXMMfgYwf7ihvm>) zI;#M|PaNXY@OR>hfeLr~fI1i4mgm&)$G{uz;uO{s(7Ph%9@R6Hu#=IA4rVl}v+_L2 zlQY~gQy7cD1I-|R02D8Xaj6`turLe+8M4v5-RseGk11@=FQJo4EcP87Iw3L%FMYVj z4P+Zu*i{XBwV<|h5Eq32mRpYp=W6V7cOAz9b}xq+!CM_Bc1XNRx(U)=*!AwpEskGq z>fnRfU?m-47&3#mL0n8Clf!gk+Hke%eO|iv0yPHa#N>4r!b52)5ls;dC3b@cO2qRM z^(Z2}#)<&o#17drAHuP{6SVZ=dbVd>oib1};to=8|3bIvrU2%<BC=11)3`r3+LMU- z=n1tY_voNbUv=L5EC7TUfuRo1BvAG^*xTzTcqLRwR)gsqW@8vpvwj|*`vN3y2MjA@ zux6CXNEyrIy;S1g<KsbLNK)ks?)M(|o4e2+r_SIL;=X`U%rcb3hsw1t+0pi<oP*p7 z4%eZl?5q&BG81kW9m+!!A5Msl55dWTJ4Lry1AGdThqRvqHCT;dkGovJJas*v_LK<& zf@43Z7<1b$u6Kzs_88TY27L@GTWDI|yCd)zf?)6MIznW!qaDz@kD+^lhY<LunD5ni z-T^#MN0YX_N6|UGWN~<%a+h6hC@g9};1lHkvr1kw7~LF0?g&U_j+w>sFgtN?XeLif z!KA#w)p5Vp78;k!eKw!p6B`k%r>l8~Mxng)3=-;U)SmlXLr9CTS!T$u^@<6wB1U>+ z#}a~(9Lmy4YyjJtd>g~F9*166vu@vp#JM6YE-1*CpCsJ3?edB}VkeC-Ls*@-ro4{e z%e#N(voWGY9(Y!GWJ>E048c=vV~zycr+cjY6qZnDnEV2tKCKFmIN*GV=bM>_l8yCu zbZyL~V*di0_~*DbAJ1hy7r{N_$Kx@SX7?x7blkzOi$!j3PQ49f$)Y^QfigMlGXRRg z?%ab6#qrYR@Z<*3z&yK(<Ad8mW;%N5+9gO<v#>O-*lkBw*e(Dh<aro{!3|B6ch|cH zqWpEwtzjX;OT#=E9mZFLa>Ix?2iOOlJ|%g;XgF-KoiCo+rq9pia0tO?UG6UL`gODU zDH7fAVOgH2A^r-Uw>7uJ{2rXy9c_`v-}h;Mu-FYWv;AX1klF1J_lGlb9F+c)W?o!C zVwRBW2TqQU)QC+)$IJrX)WSOE%8Br(qvgxc$LLGf80A8Z*7pdfW^Ra!+3vs@fzpV< zX#?$wbp3#Lp|H1j{xjEPRyfF<p`-rKx`U1X|LwKM0s&duXk++_d|1D+mq32xCY<HN zcf)P3y?EF@x#S)$bk@>)qUnbKv~kcltIKeb#b&4_ns+eLeEu1cf2!hZQU<RW78is( zU7i~MhU3jkJ==)!$~>g8A$9?|BF!6Ctd;Jn@ie4>JEq9Me}FD`f5M*aTxwlcfr)?% zyO=HL{2bpWY$4hA49FX{M(+x+QI9h2#<Di}8WHqZy@aedAwQ<~_ZJPI>`fS=1tWAy z%n@hy?g)!h;cC9M=W)5)xbBt{gUyQu{P6a-UjnGsW`dD4c@9la?gU&T;FhacPLae? zL;C|xjAw%k{vnTuH3Ssv@i96ZG4>W2eqx?)@vsTQWual(NdplNatqWF`m&&UXND?g zI3bJxQiq0|EWu+sKj)8mHn*}PB-ZB$QST5CqLnuhDrl_q+g(67{0n>y>#3*<1M-(@ zl;HW+<#og0Vouvh<y}`}6^jbaL93Ml9I#-;yG8kf$lAt%BGEpHLY}M7DzfnKo}lZ! z`r#TSES42KM9s--slV5-w=&BE3u0bR&w$3(J!Xsp(?HXPKA<hZ$wx3L)SvKIIth<1 z!;ZUx(;lS~i{x-JhNd!)kL2^_l=b+8;3PegQAcOzuXpEMd7Pv<HW8lxGIB64YL#pS zo=xr{NvOXX7}~6W1BcM5G~RT}Dv#L`J>z1})R^&6hD0!iPY%$dm%UuV7gLQe7$z)g zYcx)<WLw(O;Y9@PJo-|Q!^n*M1<!tS38*Ytla7QLAyejqI6pQ}4=1~oGkCKi#1**} zuxr4bKvwezUshsXjSnh^EBLpb+l9Gq$K?{f!3z#DmGyIi7N7VmL?9v$LK+r8_C1FB zE(*=@yv4>n!t^CLL6?^9F{^%jG7Qv51*D1bZb|bC;(X1)D#L;RM@O%Oc(j5}AX>m- z`~$5C!jO-2o@$qVqAxPs3hdJ?&$y4(Y(x8kW_76IF3I#hhGRkbiQLs9>d`PaHVqJ| z?gEIvvGOTH`|MM4AJ8_#*A!;y`eP4Izjp%N59Op#7Lq1Olk5qxe2V<)%avyCIIdy3 z;d0v-=^cy|Ge3}acp7{+&>~)MgpLsp0&0dWybIA_=?VD<0%KU=2EZNx{(07dP#)CG zP%O12)!E39*F9mhj`n+G^BrH21+Vg@V5rVbkjMUQb*<rDOP7W=T@nTPT}&JjmqtYL zZHCGdgyRT0u=#S6rR1>%t{=+BNnngp%0|Z0*~at9alzBzT1c@EkVsWIJi82BKs-sr zUxS+~WT<H=GeE;2{ZE*eM6)TA$Cwq`qYY&8-If4c%GWBVS1(L2qF5FXiNb%>kVch& zeT2$!nXae1|A4fU4Z2_o275nENq>b@O!T)I>suJtH{4v_$OrEMBoBCEM<XXW?QT>V zX;eQ$BDvygDa2}NMm~zD33}>wywpdTZouoyzB4e1!!TO!;1+<Bb7st&l`g>9I*xW` z0ska$cP>a1hxaEvZ>M1F;YlB?>iLK^5&Vx$xIoA7q24?BH4kkt(nNkQ5}4lcAQs(H zbb4nl0ah06QH<W`!IIx##9@>{Qz#tjvc5a{Pml8JPP0UytfMTJujBzlIy7&ar}K37 ziTtiBO-vgw<(X9$T-M!>ID^p!q=L*8O`^BV1C&MGe1?(2;<3|IJe+`MFLB&<Eo`%} zXP-YhVyN17Z4o9->+jaQ`Nee<g_mHb_cWkN5D-ZgI1^9R^Ea3*$ZHF2qM&1j=i>{| z#3VT<rUx)*OxA^;w&*q1L>qyNWWrE$h4p5!TkJ~-I2?tZ7{i^<bAe$ommL-+G@eZ6 zgeUO^Lq&I$$n0$OfLq-I)S@-sli$K`7JNTP|G-;wWLnVc-^Cocr2}SK=YF<lEcixE z`fW^{3;hY+@+Z!p(Vb*y5o}a^_#N5~2ZZ<yla|_9IJ!4~@+UaONabA$*YMh;nJiKv zMy&?_BorAm8(YEc?gs8qaWUUt-(4!acs8m;xwfSnw58+w7*e^7iD!ZTdcjRFd<mFV z)iZFj9}0)_7Isr2dV1o)=6-GWp3{>)CkS!A`5tVEX#;p)P(9HZK+gwyYwbnK32-#6 zay+hUPoKee-<IwThdc+OD1ALSfln{!dyj?shVDfj2WO4AuNbjz5rTJ7W%R1Z48nky ze79-#Mj{dIg5zupqa2v8Yrx|#4(wHk1P5Tr#}I@yV5i%Sozb^#BP}xgojUxi`edyt zMrMK<*Vq|k$sE^j;ev`{rqJ`E&kuy_lRBB6b=c^l`@*JQ;oxO#p~I}E7T`fBp(Dd# ze$KerW{LR<2?`-f%Wc;{zN~_x55)`=pK!ei!DU|@9v$%Uy+hg6E^5m}LHD~lKxNZ` z8g1c5Zc&9!!REH%*$S>B_$(Fq@>w|3sGA2;KQEfksh^4A>1nKPdP)O*&~kF59h`Q$ z7;R@*&)<8>SnOj1@|8e-UD^2U`Lnr=Io|9sx6iCMKfuJ#yw;e(pRf&(`wc|aG^-*G z%H0AE)Z?&RN0&Lc^pwZQ5j|)L{$&0vqdde@kO5T1&5PNkH#;`&Or3prbVVuOwC3kZ zj%-684`*;>f9jxZ$005p&2A4>xP~u85#lohrmdfjW*EE%c6`_8(%fxmW7TKC{o!p4 zd>yXw?N@VvENFg;a}Mi#ZI?}kd-i*%_)l#xmBTY_X)0eYNzB>4_1XW)*Q}a3sXKio z9~X8)K8=+7eK8L^Xr4Bk|N6`S^@D!>_rL!9|6kIu_5!c=e)*>#|Lyk|!%yfpHS`bv z=4Z{j#@|i8U;f|efB*ISPk-^l*X!TvJ`eG?zxY`Y{_^wnDg(KdUi|0pKlz2cCm%l) zFD^6Pd&c3vynlY-k6-@yT@Y9Kzm=bN_2a+(D7|;^7w(^?!e4)k*?;`;4?nW^tN%e? z@$!1S^!<V?{c(RapRoE-XFs4k4}VlhB>2<!zIkQ-%Id%T@iXXC=VcZ&K7Fw2pMU?E z|N7Uz{h}Z)!|&JN&HU5nKm4WliRn%Lhwn?@yRT#a`TaZYpT_K8f0Uv3^C$f!#l?C3 z<DY)uKmLbrO8*?Hwp;kZxBi!3RD7}@|D2}Ti+L<;Ci>TZ`Q`8YgZ__yaQO8{{n#x2 zhcEr}&-%yj&HwfO{f{^Pm%o48zpLWE(arqZd!BmbGswDMZ|5)n@xK4VKm6FeGyh3< zKWpmWug4EROK<Vp``(2=uKXXr+tfdBjoYy7e_&wN(;d#sFo$E{51_hb?BlLy_aC=7 zOTDW4^F94>FR?JZ*Xu`~RaJa@{b@neUG{(fc1wOd>5bt{RsZG3DZ_VthCkx^N1EYB z#P2#R!>Y#H{_Bq}{L#Vi0`I+|A6#QChWOckyw^GkfB#_LcSSGcSnEGLyutbh485zr ze%EM-cTeB{w|7R@1Xm)g{>y)QQ*g=uUtW7V{1Ie7-dRmo2iL3mUX<THe)S{5N2GW4 z{p9qP@ulG{%bxf!?;tGk;s5xI)Fb$D_^$u@<A(d#XUz}ad(*v%@nDu=n&I*Lc_DsY zB|Kh#{eh<#&tw<|-@p3xZT#^~oBYSmjRE%+Hw-KP_r-@F)6+lo<9knw=ij@me1>K9 z??1fq(WH1IKmJmMf4a3n=6_%QE-6|X|6ciJ7{34g$2}{51lZu>SM{H-{lC4;xGgyr z#_#*rcj05{|9t)T4e#f>4gU=*qj}Z8?r1-L`E4itZhiPyP*BtiHm>+hyQCUFnlk*$ zKmPXRKYoc*?-4Tj`$2ylU*_fkME%t_4r>N#X|()We)P17Z_y-w$14E#&To2Uo^And z?PpB4U}o0n(R$$tFQZfaQjRBYb3pWSuZu|2kj*B{4K@Fi>ujT_J&>^?w-4Iwa&y=H z5?s-?)VFFeK0>$-Jvdh`>|3-KtF_19)T@%%hHMAd=Ac!hw3FN{&zEM!ld;L@&7`Qm z9fLOvHe9gx=~%xH4txTcW+c5(D|=Ge#^NqdpI`WBrhlU1R()xOvpLkDzq)Nie~gXX z|6gB&{5<G%u?9U=G=R^`;I}V_U;(N2V>zj{ehLZF16N2K9V_>Ms!DlybM-Y4VT;5F zk-!h`M!C8$gu2~s41k&R&9my3-wQb(l>TQjEZ3zYEkeDYJ6FtMBFk%|J2%dTwX}PG z(st$cdxWH?mg$#?8R~<nX``_@(m$t@qaj>p+pH_A_@vv-2jhJ6DM_ob*k9hv1c?0p z@i-#*(IqBd@EFyXuw}Vmycb&bYPkcfB@IWxHy6Fnt>YuO_|?4!4dJ>rW3PLI$}zRf zE&oY(t<BrMd`*L~0Pe$NP-`#)u8EvZ81EP-(&V}k*VXM-sB=WJRE(Au^HArtz0rZr zOY3sBaS>ljYZWs0jl20$6BkQ%bKEMhExUsLQ*twZYHv=K!086S3Mg2npa;~vc--Bh ze8SuXF)p^C^|D#RL6)|IP0X{9hQ1#$@zTT;000R|sGl{Y02dZO;Tk4N5WNYPy{mC+ zuyoBEdi4*I&|bU=r0xV%<azuM7IEZKX9OiF-lCC>wrYaN4#eXiv%ED=&@F~7{`Co! zIJh|v;(yN0bN^}UAB-ax5lOo#g#9xg!Ak_t^{=u969oVq<Xn@7_Y9KC_RpO%S{dYy zL=XkKK0&leN)62n%mahNq<vb;BikBQH2$!#T$&>P@0q8e+FU(ngVT*D<mWAy09K>c ze0p!zvxptD7`e_faU3b}B-#v_X^(gw#M--NSfBOjDVY?v`*KqX%}^+V0$t3Dzr6;i zuOjG@kuAvq<jud-rrWBof?0})Z0=oF-SkVHQaI&NqyNup)fgo+6>-MV9PfP3=leJM z05F{j1{19Xpw|jKRDero&PsR08WLX9_Z8P$T74+hYp;ik`L4Q>T#vrb&-c<Yx9+|t z=p$yC?Ztw#nbE`A-%t<!mjdoZ@Wj#uV_V^Q+dE5D9<wXD7gK-Zm#dpQuBna2*NA7> z-1g||%|wUInYn%MC=?N-!70&QYA^-78=DgKyPiX<xx+<EQY);6xrj^%=K>GN?VBhk zr`oO^6X_ph<^S;!$BfwSTY%K<Z*(lu{~&WCDgqa5O<I3Op~0V*MM(OwTpc@Gl+jI( zN#=m|Fax!KY|ZD0PJNQ?cTb~*Gh%b_Ddt%=%$LXYLtdk;M&hVaz+!8CaM1`hU_Su= z0PqpsL9Yql)e+7%)lL0i(t^m%XwFJU>^yprK3Mu*wfZiIh&FpHRQ5P=HzqTGY@(ko z4zSVMJk>(r#xRe)?Q;)$i~X0Vr>y>f@3DW-H<&3acR%^EWAr7=RM(ugdj~M+Tb#=U zYO-Nr+^S&(d^FTQ_5R@WQ1U$=y9(S`8Zm8lC>Od*u<b0?K8ygf8$r9};ZJ|xVD6K( z`R<eIp6AES0HL}4u-gm)U)E|V=W#yL%5hu>PorO54k!4}vd%GJww5n=(p5?o@W=3L zGmn0wd}4q3+U3)0DZI7luao)mP+<06Gxh2)k8cPiw}Y*VU|bR{6frS)At;b0vip@+ z5=;oedrh9)1e=i$Gj6dLK$SDdm>SOT7$FIgCSKVRpeyK-GAu+C!R9Ez4K%}ta#$mi z_~h>3Y_io?5Tlfcd}`aV{TY8((PbPA>T`sQo8+6dBQO|4O&tJ=0LV2J7(zsr^CU6d zX23zU_|T7>oddgG7?u-#g=~p^5VwIF#)qe^CN5)%!M&aY9l1cv;SmP=OqiEVRXjuI z3n^D=;)OVKxCeT8U^TSWor@TGz*f^cB>tNJ_<%O2?DvWV7%z}7EF?Z6MMzT~(3DiD zaB=i^a}ezi@nS$~)Po&Ok^p5E6!X*e`!fK!cML@FxPptl>^H~FboT^oc>_)i%G=|% za~4}r^WZ@V7eB-{chy3P&dcba0!AVx>ZF7({26r5q&W7JqJ~EsFyB4Ktpa7v1+qT^ z?M$Z~`2+*x&&bSW<4eu=mSv$H*!x93m=(o+y%!i0V!rXfco05t&@sZPVvL9Bx*I6M zgN6vOAC_1fLrf7Tc($3WXFy1YgMlP>+j!*$uT<%&w3gns9Lx9R7Qrc*hOB5AwT>0x zaxWJ*7**zWp1p*A6{iC8bY35yB2v}_ubvI(!h-?;hJ#ddW%fpnaONf17^0Ap$4-96 zo)dMF@%RY2SY07FeY_o3R9A<ic>>J8L?-6~Q3PURy(PJ^;`3R7_vS9%PnT6LP$mQr zq1y@chwBqiqX@n>VkeAMd?3dva?s5ocGEh!3y@3%qxt59vuC+jLsEYeM{u7s;HWso z7=yHsvX8i}D~sKGLb9(+xU{^MM3aV0FrmP@!pt7%Gg1E%K#KP2_Jl5&Wmab|!N5yT z0U^zo$swA5&lF-P((6@<=j8c>mz*ZAgEee2G6LX%A!)GTIKX01<X3w{1RXK*O?H?0 zemnpDJo>QHqq(|~U3ajak-Z3*NywT3qKW9HD`LqZ1u<|-J>1nV&AqTK7#)U4BgS(0 ze<*viHD$4FUH5`K5G?Uf6e}zNK|KRSQ9%I(i>u#nGcs4sd9c@hc0A)BBgdZ+hC-+J z*1q-?%a}~!=7TZpX&Ww~1OPRKJ*~{uT`@0iucdnuNrWcUWr=Zm>#_yi>w(%7c2NNd zF^ag`twos+uzxXie-8(ONCx=+iO|oste$9mW42cY1^f1HR<(%<eO#37SlP`WZsK|` z@i0RH)bTbVSdwo$o-cx@Q*2(i5azuJxqopzE48?%)a}g_uB2VbPd!(R_FlNOt(16~ zl~Q*Y*D;RHzSI)Lxsl^X@-(V2p;-&vnzbee;GmbdOMBe-(MMq_MXSzcj0J5&2@9C{ zD>xXH#2&8~7!ZTPs!XX@N}iJ#@Q7jP3w+%Kf)txK<{FJ7@<0AMuN@&mI36Cj52491 zD-nV7O{tOTx-pn>ukHjN5KF_Df#u>3NydunNsatF#>&&r>~xBTQI4a=TJ4jKBu>y` z>$c(hWmMKaVzSS(h4az)I&~HM)x6ZUPCh4c=hPaF)q1bF0n1OCicxa>u4s|s=>j@Q zP8{sGxiMvQ-l{D1h+48ei8>gXDb3e9ojaR4dS7Cmm`)bV_;#2?l-KTQJm$bve>~2z z7EEHO3u>RIAu~n5e!AC)a8KH@wb6FjBSU$L_YH{rm$O2jOvVI%98s+>3^~@n+TAoy z?&!tgYW6OLNFARx5~%Qqa=9};jQ#i;U5RAn;<npT6tYi4O7`Lnf_Rxdrghj|Pn-P7 z+lb9Og<aS#f*S)yZuA;1(if^v(#F<~XhdB*-d<2Mim(6Nmu!I}*2A7T)ehcCYmRu@ z+Egw@I~R_fxm=bRzFq{F&mxTO%zij|vw&J;5LXSvvzWxMf8r4@BW$XQ4Mp~`rjfY# z_OC7YDd7pLmm>K#9_v(E4|)#BO^q6{2x6Q17~FBmD2}%Sy0|yp>WTTwpj9O8bv^xb zZ(i{Ubi@!W<XpA$+>jCy`iOIJcM0P(Id=IovLha^+Pc2S!$=gYTyBrU0qc<Qr?D|x zjj}bjWZWR*q<RZB=cTDZX2#n73ft3_b82+aPZ4z8Yb+lS9$z{AT9NUI7v*?0mhx-5 z`WSQzN|b&^52cu6@zZ>~g*QP!lRaLlRH?Gb%z(s$rS*|<9jftVYKIDgjrxTx=BOl{ zyvaKT#^>v$pZ#^uZ1&q=&7lk<8$yZN7dI=#lq)34r4&ogoY=IXh2vkp6|iRv*E{Q4 z9DQsy@SP!vOV*%R;)yH=T^nUA()te2xxGB3*uMWsQS|Pxg?4#!lMyE8Gh}k7^eACu z0CMZzM_r;P8T0YEv<9yn%!r&pMLRWm%yb`8yDwm}*4ljT+Ot0N-;Avg`S3yJ_jdQS z!1Yrhdv1Cjmvj5Rg<+;G4(@!_`$+@&xY0Sd-onRyKJc5&t9z*zsMf%OG-co{P}=+b zYv}5u;pqL^y2`cwcx1&DcdDGW^QM1i+wV6~?fNWl=eG7eL|W7JZGBU{6uU<+>1v4Y zU(LL7bT_MK<2!7xL-jIhG%f>Re4RY^n{&`H$6WpPiYWiMH7tk{W%-94pq3eBuXn#c z`K9ds@0#(i{>4?yvCme0u8`By>Z_ZkdX8EoE~IAbsSafgWx!4CwTgbba=a-ogYor} zI6LZ{ieJolw3w507bnev+BLC@=Am=a(%Gz%(BCnMCRl~X5lKf;u`j#f5{XEb$$hvz z)C2_?h6A38pm@LY8`Q47E-p1vQ++C8l_cw5n1FX;o5(*^;{54J-M)xU*xGj-=&W@j zB~NwMA_J)YmKfp#<YPF<sKiI77ZpsC<8VV<+6W~r<@WiDg!%b~<JaPd^VC=V8xb7N z+h}!gtm!wK^`~Fk)EBIfh&33Q6Zyej&tR{XI6d)Q>Xec9!*B2k8b+;C{QEhqRJLhh z@N<9lz-(y*k;B|go}DY}bAU7O$?L0{oSpo+W}7`xUB-5?^&P2Ud&-Djx(B5}N*iXz zR6q)I_{!BBa>kB`7p%02wyUWRT%TI;otf<(Pn%_W{n;aqi&?pnr@N~Rh?pa~eI?>D zjvcYby*|A6ftXu+b+&fxtW}+dK96{_9M`8!XIhohvTN#vJ=MoFvvbZC`xgTlgw0}l z+AlZRI!#Oe?3z1Yq`v(u4AazI)k8~bT}G>HcJPL2*1BWQ@@1Bej9Qv@8H+Mi)z6vS z<Np0RjC!9<axYrz3@g7W8p=TnW(=MSO~ON#BAF2O`?5Q}?-&i6fl#Bro1b)fakPeZ z*j(1jnzKy*>W2;@BJj3y!^9xXM~&)$VPIU2H_B5!(xFeV-#;|1fp@cN1C5Yr*Z7ke z_hyDQ%;KlND%%rt2><!tKI%Vzrta)N`=kEs58LSv&;3I?&MO}~D)6#Bzf{a*Tm97j z*6?P7>Nk5AD`R91y#6e_R*jLa`ER^+ZrKC>=uNdaoz?bm+}XYBk+F(fvxd_R*YC~o zi?aGM9BaF%ZteP?Wb)W(W8>Yf1UKbzXk2z2EQe_Q8LU&;!aupD75B^Yar*z!*FI|L zKubth&f}ZkUbjb~qYJIi+~yyxx^PS!`zzRSE-8jqg9)e;4kPr8@=O#EY)Jq8FjswY zdzaETO8>Z0mVLNOx9D!u2_J9BBe6XnSwn~E`vfVe(h8R-=nnd<KE8uZMMSFUYs=V= zG|bC5ldQ?y92omZJA`JjzaamnGIP=VbUL+HZSkcvr*6#L1MdbJ4i?n&(VP~QM?frZ zv4E+JJ{7TXh_v~H*eLNPr5PY-=hhUey6p8%;b4!3b!*Gomz#|2q;<`oFHk*Kvkh{u zsn}P$%jky?DE+1y5p9w-JC!Uu-{DO_F>3I%J*Od&x?-2R0Bh?*A#cMn)V_c&Y!;g- zu2dlw*<eor!By1k_qD&=1|uvTa^j4sFU5{x2yK<LUE}L*mqW~0WPB_qr}Sy)zaQ(l z>j)kN`I?Ll;W?ihA~CCA0ZdQmi-l4;H(K)jQd3LuFVDu5au@v!<G%0q6%JlYf?W5_ zn;DSS)6jgv*s6$eavzMZBk^cL5q3)?Hhe8kzHdy@mD~q6e=Z-B|JxqAnWzREh46Y1 z?mdqPjnxj%<7N;+x7gLJYi*wUzC6e15B<X;DN$86pU?%Adq;lXs*C@7_6GXHs;%Qx zw5DG7kB8Dg-xq=+8n?I+>UvN1VTscVtMGd)+WqTg<B@4s-}m$`O5Js4eKU!8!&!Or zzT>zaYb`paN;H6S-Rzj><P9D6alZ+nfj?<efke|RHh#PM{_TEUFRWM8YQb1P9Lhc2 zJ}8&&XFMCo9Nc4Yq#UlCul0EwVSxf?N=o?q&V;sJb_dfn1p1?B*VXybxnks3Ded&` zLym(zIqVtO^3fYZLcTOWCm?`NQghk88z*S`-r{6#K5wOFPun*c4xE<$<+wS{>j7n| zSW-8~^(qwR<U-3JybSDl@|(?s<1!YSS#W4+9zlzGw>5$wesejG%-+qy9whd6Sb}hx z>_@kvS~wF!nT#p9J5BHVln4iXs1Xf|BQZQwu$1niV^%O3!`?6=O)t7<L;H{+nK>X$ z-<f_3yC3z7fF&HoSUHad1D<nb2ce51+*HHD9UP<^sb9vl2I&KC_q)-w8oV}4jd$O2 z`}H|CXx-hT^IXdY0!>(v6!Qvv1{%*1)IN7~cYy)MmMdQI^$&FMt&povv`+6aJyT2D z^zQhk?F_Sye@iE%aIx`pL>8_-QO68_Xjx0wIir)acN_1=J#4a9V%=>6axeQt<*p#) zIk;(7$pkzZGmO(|(TFCev-3(E*Sx$RY0#=LEe%E@HC*}(sE}z+znBYQ#t-MUQswfS zVc&RSBI6oQDj)GqA`PRBh7_!vxP(vTNEXoThgbIfN8R6(7z#X(KWe*Z7W-uVZQfN| z^cLTD%QWYFj<(bq^`8qtxm(zrSa`8DKr<e{o-pRrqxPv1Y@t`@jite;Mr4ol`$Ho- z0yd<!J6Ov;BNQWf#_>^oHHar7S3Af9>IYe8BR?Aj9ik^-T_@*eo<Uzi{_!4EzhVD{ zKL5~p^3>*dDc%SQOB_8qT`s#Y4Tr0ciBRqRnD*zWS9r0BsxOq5RM8~nDVE}{4!J$3 z?sn^%b+7$neW+is_nj>3xVch(%J+6L6#G9juVna#bD|qo+mEqv{;0}l<=0Zn)2gn& zx}K}Mi+?&_`W0II2A)LkQM!mv_x3l8JZ0Tl91hD~-gtJbA;Z-r9x%0Qk~fz7hPrMg z`cyghil(leTk~mIqe30cvuHUXn04G*2JgP2=zsWXuRGgV(=hM0_JhtQ(v-dI#ohU8 z@J|oWeSu;BhI->q<h3Ungyyljz5V7o=jGuNUs_0qL_9uxlWCc-=T@D4RRM`Dl<T^7 zCRdeAaPS|lZDMPgU=2dGgt~iqIw-2HFuZzLcRs2AE_!7kcz55Q%6rb%YP0`pX+1_Y z<@_Yh?oWLsi)yz9w|@%;FZO(xK=+g2RYv@CVZkt+pkbQACC6}(5*v*(=NYs<_7SnP z2yxjs60-P{Ya8!${))ZF_q6}s@2=S)VzY{GY_;j*kSFqumV7ROOAi}MnOr~H{i5GJ z9e_jzt`dvgGnNMGja;(+0R9w~Y6HeR=e#;uVSO)=uvetKBY1}L0wEfkY89uTa*#?a z#GbglyTvhnS}V`XHqmt(!1g!S5y^qrbvU~hNGYty=42)8R6bNoxhqj57B#?kJE<+k zdhMRg=Ohjh8CPMZP!1a#-9P9qxF?eju@PrGJ|BQ4s<jNSUd}KNTdIdQvfxv<O0rL| zEYTiJ>yPuK#jv!#6zg9es+^t~smU6nsy@%2ep33qA~buu#ShQv-}{CS0c+CSO^%hC zvQQUA<)%M~QHf`78Z7hU$B}O8P63a<iY$AI<>HdK`-`<7a^e@<F18=9*4!*wpWPn5 zvx-szwzjJtH(2V3{29NPy+*ywUisbTF2^EPNE4(cVqz&Y#p8UDICAD-x&9r-*7mR0 zEt9Bg-NTi(DD@y()Dr#k`1hQ`fy5*s)zW^^19!;;+78pt#Z(Wjt34^c*fF5;QaV;w zcf<J1rE%C2vuTZ?oRNnBtPY-9|3VC;+E6u4J1E8zN2!)7iL?dMPdQxYvELe|$LYvc z+rM=;ywq#gT2EbBAQIsIkW)E^Pz}wo7JYNr9N(tpPc6hCl>kY7&oqDsB#&$_QW^Ww zu0b3g8G{MZveoNln}FE+pA-=-T~nq@vTpWLqk$KEn_;n<FBPGZ^B{aLZ>8NNrexfU z>-!Pa>38Au)|>He?Xl^}9+17HK0P1F1*(A{-xRRaw$_}?MSQ|6&WrI7OvRd%jggX| z%<G^TDe0vg<^;yCAW;rqX|@|)lbMT+p|iSklIvMV*&)MGDPLv3zSUV{9{si^aiCqU z+fppK*N@Ti`@s-!H(EA7oqaLrw^m3k@TfFw=&i~`dM|-xddf0XlYY8oZ^H5<Q3JtZ zo~T~T57r3*wp~LkaIWd5sG~k%An?tx0p|V9joNh5vZvMKbUKCi+KJY;Rfpk$Na$Df zGG!3h4!@7%0!)SaKWA(cTrW(umJs9@7dfj7urB}XA4NiQ?<*_Cf3>b#f3Lr{e&B>M zMt<;$Tsy7!-ie9)KeI>#nCU%3o`!AI)t35}eT_9eA9A`LKCTB|zpvn*G8TGnw4Ou) zpRw!hZR0!+33+3(JQchFo4J{`*U#i~R=$(#S8l-10-xG_1J;RcU_yExnBwh>-P3aP zg5eKAwDZ!;UOXKsvVWK-^6R3xi7d6B6&EaU4Pn1t#ohn9;F%lryx#X`{~w><JHY|b zweVU@C6JR~<soTENJT1}^6m__SC?(2x+6;!khCS0Jf-B2g_Nb0i4CEj!Vz{sr8r%H zzvnz5Ty>(azSYhgE&$}C)fj62`z9Zlvm-^)C$s3tsk-%aGkTNN3sIQ`K#WW8d$@E* zXEw>wevbU3vzGlDD6b~7+(>Fsre*VuvJsi4&_@ZXy8VYq4s8R=ntA2Aa|M+n^|(9< z)j?Nu{C<A@@VH-tfE_$W?|Y=Gm>>N)49rYFOcQ!dLTj^Z-wyCW>k=ROB=G>xe2EcT z*H^zd=lcT7fZzGr|IhA=Xv;rLPLKM^r?&MD?r9E}p!-TZl0%ACw5h$W(?jldmxJc~ z{dEu7I4F;sixC=~tdc=npXp6J2Pfrac34M2cSDbHh`R0gFgf)b-_Zf;$P7XDzT@Y6 zGsx#|b1^y(`szMo!!I&y-UjFMkFC?|ZvWvrboKu%r?<Ov|3`lvzo>WYL%mxdM(VHp z#bM1LWl|oBv0=}~W26HcmG-2yuZu)e_y8(nGJ8#*v(&rwy~c0h=gyJe28RloJon}! zrO0e?t}}+6)2<ySRwcph6I(|jBE_;vjN3Gf0{g4R!cDMj;aOWvskQn;8uv}BQss{I zv5jeWj&)D@eUhixc{nc?Zz1Qg=Vn3i>v*TDT5)G>HrxsESyK*dT#Qh9vUd?#NU76b z)vnOQ?W28#uKzFgkq`-mg`6l3SG_)EGLz-tmo6Z2pcXXxxM{Z6zb4Czs0D^N3&#vO z2}wV6w=;&E?tm05VsnQF#<45!{m4hFNz8d`Wq*tTDE=Lr<PAi;&aBQni<>na2z?(5 zG$dq#am7mdap%9q*<E+xqsaQ7b+<%<U2keU*uMT|`>W~PAe{8lblc#g#ayr@Y}5At z+8oUgnz*NjCUL|IC*GxLf7Iw;%paa+ozIS#Sm|5C;lh<4?01J)wX_N^Jjr$YAqV~W zT`lbSZF9;uER5eT_#X?q`#&sAkr=Hni+1p+^h1oG^s}-qy=`p_4rt_qWH|(G^XkLx z%luk~!@~Y}y|Pu!FReqxuHEJXXZ4L%pZExM!BLL0sP)aJ7@O{*;V{o;@0R7x#>UOp zk6$LQZfLmZA_@p_#fpfxa}uv}CGA!B`COGqH9}1~5}~|7lRc|LyckH+r64Q#Oe#2V zX%8Zep!1`Im^U|LruXL;2wNgp-{MgA$4l$?9Iy1JD=|8#T{Mv(;Pn8c$>|99rgO9C zMWGrkl6LEcgwEOXGJuBV7Hh7IDEP3DJyG^M6}OT2%JVJPb!u56ZxT6lxxqd%#m&=3 z0tSX5kO}``s2V)|_|%+!sxk<z7r^|;x}l>T$=puVT~fsN)&58KsAa?vDGe+geo^pt zbubX8AWLx!>@GLf=MIDD0J<fE<l$wY=Z$~*6md%DyVl4E4rE&S=pzxe%09}aSdG_9 zTo1}p&Yvj7KW0i{j2#Wqwpv20lgJ(V7Go)-Y1P%M;@zK$;7nqV$&fCT@ipJ#3veqo zcPR9+tg9|#)sa~fE*5G-GyBm~(s^QrQR9|#BU<l9GOxs9mqoD<&`YXOv4BwLg2NF= zH6ePB#yOmg)(xruusHn9531vEd^N=`FKa(bKFR)Q2Mz`5coBVO*vOT!askt)cF^X? zM=l?-uGN;9CjF#*2<NLUauP&u@!Q;u>{tngphw0TJr};<JE_f7!pw1~+A@HAGF08f z6Ef#Jz&Y&C|8hPCqqG?U*3mT&FrAeYSGi=@ofL}GcjbE|B1Yc3t_BY29crhzrmc<B zKW2?#x*MMj8wFb4Dw#hz>FIT1>?Aee;eqRk%yaFrrF}Zay!Grjb;93}yw)&J7B(Y= zQ}5k#AM;x&ma6~~s_pNC3_9FZoKBco_j|x}f1D6;qI)xc{qlyr7%OzaPL$;W$)4KG z`~t#W8Nh{@-H*e^q~{M-_F%AnwaI(A!fCtUe~J?1bLhQwoAZ>Pw%3;K!uzw8dxBl= z9uIHkxuXjtvf*qVC1K!{jCJ6a>|Tq>S7apnH2uzZ2@u3!)T~S~eoZ*e!*SJy>vI{` z=I;<%!FqIV8#(5_pS`i1HZ*VfehVC9uu*f~-!Mrp#G~y9cD`@}*{+oCbuLo6Ic_~g z;UMSRGi>?ZWsSm*h-H%1j%fwb_X#_z0~K22*BIWjxbHE%L}62`-1kEN_zbN%t6q;_ zYRSL#D_+H)cu9cW)Kc0&;r$`{+pLdrMD+b(dQVWt#m&xuLCpNW+2rzln}s8a5JX{P z;hODh-t9(iF;UM$Fp6tz;%f2vi{9!~k2OEc?G0ed#9h14*$Nj8I`LahaFID7clbHO zK3HOFpx(TSY1B~s$v^-TneqFG0R;~;TT5I#+?6$$;cT-$d=E=!U%_g1&5DPu^r-`I zJvP9>K!47f26$@hWM&0kx3~ol%(X81yQ9rUo6MEDHTz-JUEc>HtCoU(gD>DidBjon zxox(Zu9W+>a$pc$e1*FdlUP`-h}|@Y+&O)&YU(rJhV(&rorneV&8pMskmB4ZW~nP3 z6@T#7Y)5+zZrw~2?kKok%m161_G7`M-&-v-pBfEz*C|_Z5y3N+r7rV)_B0Ga2poBx zSwtAFDS#t;%s(3&aI+;!^osh!c|8}8rrBz<slOuU-Sy5L_jMWs3?+s`>oO0_!#{Fh ziC++#o6EJaFwV!8$knukZgUdo)j{t`d=QViv6=X{oAg+dnj`yH3Y$u#<!9|xk|W;{ zgW&pmi#eoo(Z>Y>-oxmva35mqi9QdF<YM}{#`)@>Sqg7}(-t?Do85RW=NnO<b&e8$ z#Cn5I+KawsJhWcHoIU|;_oD+@e9P88;~ij*ac$q2@b(4?ZN9oPW$_GFjT4gOsf`mi zJcy!%%(Z&Z@#GT8a`}(rVQVumYw3nUEO_a@04;;YuRhR~nd2_iF;2{vT5#J=-D5jA zK^)M@6~NPsWHPashG<845p)8HbC6+(EX;7asbuzT*RD;$CGxlzJHoM(7#BY|{G2R) z+*DZ%Ci1xo1teKDQ>-#FBF06MFPUzWV0jg66M`B<9-MFB_@wjk4-@nUo%^b=jza=5 z&!6*sQ<jDF&>CHYNSOfzY#D|gH?&F2BeeQSlS6Vy{3!Ux)}Dt1Fu?8^^KZA~)hjWv z6Ne8~1AE5cj=<SYCFZnTeqXOwMaH2v(pJ=eHSS}*rL6Zy-(!+A5A<3df79x@s+@+5 z%4A;K8$UzZHvHL)&sN$nWxXAZ8eh+<dhlx+IP?np&v9GvgNwKS5i1N^$D0K6k$q6y zvtFd)UHAit_o+$NM9lya)8bQ5_WtQzo_hVc3;QJ_m63KOd@Dbcx7SpssQlH?+uGTe zD9+oqckNtng?0uZ8=QM;*uHHUK=XCqN{lQP&)0_W$J6ZJFS3O7tepJx%zV?U|KChe z8L#Y*Q~RFJyXVdyS#quAQU2Lc64|=J39@qA47%qjgva@%s6OMP<MuegKuYQt!#~!C zn%Z#8`?PvZ>-e>d-=k=TUR%@ac#NjYchYN$HFjuxv&gD$cB5M7Jc+FN6_&0ytY4!2 zg32WoKVen$$0Bo$H`OPih3NUSY1Xl7r^;$n$i1A_F?4xNirrt$XC4T@Y*m6eE&|Dn zZh%=lZ2d3m7NXtp$bLP!|Hp}Uwy~i-s=6P+H=i=+i?NyPRH!1f7In9}^-e`lJC?6- z`mOAy2ViKWWBAKauJVkx0O0otB6D=3VuQ^na$v#JC|96hV$Fi`o-^@yvkffm=VN9= znO#;2q>&m-J-Bw+SNZXn!{^XY(7{G(7KkumtoXCVh<n%F9}!6=kC!s*cR#Voz<o*Y zZ{QYk{mvE20eUYJTr%Q)v!|CahtclYi04F;Fo&ogn;<uwBrsMZfZ&}BzqBPa?9XPl zV`3rQ-?jx43vbQ6aOR&m4hvLb9+zAe(W={`HdgHonFZdm+HY>A9BeB15PY|eRyuhP zn~wquwYo2Yj4N~hy`|KWugd$u60EipKI~*eOdc^W*vv(fQ@N2}ft9yKfaek9#PW_m z-A!*rg@qj|z<_(ryvbs)#YcQBoVnIu<qdY8b-Lg+0ewwd0*Nk{yD)pz!VmbP<Y`J) zmRO1*#dmJ_gM;vFS1bC~I*#r?CC?L-^#(b#yz#8N&zjiNkRy}r?z78lXa2@ou!ouF zKkLMM0ZUH=`&8Lae0EXnriPTpTONB}|Hb1k4hX_zJ*R~f^{e@_r>J)4+}qslhvuYx zmrD<NDA+pj%-_Wgy4R6f_2+mgnC`B(ZICIg0W^EqPG}w)7f8V53d@z7GRHemHW-(M zd^{K+#9<p?;9rJ1sI-~aE~|CLsMc$}{HK;?xOlTC>u<;WS*q$&DXatd%p%7pY5Jb^ zBc5aHvoB4s=7KIEf3!o^^e!j9kf#n!0=VPVBNj~L@euuKl#ShAqwK8VNaXND&Yki3 zTul#q7rvHY;kHAIb4=HG6v&yh37(lE*#a$SV2k%_@kW_Y3Aw+WN!`GnS7<28+1*d$ zef$-itE+z`=4;btW>0*54`WpS42Mg=Q~l))9>GOBG$HS)tSh+G92tf_hXuOA(`exk zW2X=%8IS5!jZ7J;@I>BwwC_h;rcCx_?DH8^Uo3F<6^@tfa5g^w*&F~V%Q<!g;pE;7 zR{rYgVW6Z<x6~>Ay)zZQv)(;QEzflGaI7aujXmg|vHr`XwSb(kh^+S-R^sM<!~TY7 ziJJ6Y=c=|MBB{Eh-dTwLLb9>5-1_lD0&6}unppyIZCyJ!q;Gvmk*%G~8OY=<mnZ|l zbXU{<$<9rmOt(&G>K2e>V0s69YAZ;_)sS-WS9N6p?XS!{CYw&pvWDj`XM^-$Z8GS^ zF6ki=2_PzYyXvW({dcIpzmEx_ZU0~AzBGiP^Mtu{mfl8eQQY-mDp<sQxIsqV5_<qF z>ZwHI_k?qXXkKR`5#<la2uI}Zop-wEz+gr5!@zLRV3(fPFgtp(llnvvJzz$c!ahKO z(b;0P^m@(uumu*<dt+PE5}qnMhqHooNY6K|);Cf+vlf98B}<Teg)(559GZGqee^6J zuKMyF8uES24HH{OJ}^l7gUdUA3=eVyo4xr^NT<T(`c|7wea_4otCv0eNd-$I3_Y;e zxe?p(hc$Nl>b(~C&K3LM9lRtw<2+f8uT?i<ze{eiyktE7dJg}cH-1|a|LTP4;-Q20 zVp5Zd(>bA0Ee~=+8!s0dTh$KUliDGZ`R+)+{wdjMo5eOkRR2R-pgS6sU>z|B!StLO zLwA=t0WB}9H?`zCNK^9j^XwVSMTDpPn-OQV^yG5|v3Iyi!Opc3Pr*R!p4ey5G|=9j zG{eP~N8)#=8Nb+8%$C|ZH1FVib^24R<!RuFEb0%gAH6s9PI6QF-Ezn#bia;taqs=b zhdrKCUu6^*F!hzmuQ1(s6e)WQJY;oA;H!ngp%xfIhy^Mirbgcqa}3{_vZ4Jfd1$Vm zElJH}K+-m${yN^&DQwci%N|kD%JohL6$JC?cu82-J6VKBBpcf9(w(9~nOQ9-MT>R` zA<7$#`5>^q+h-U3%d)cRoOE<Bp6c#Dqvw1~fXC6LpmH6(8mZH~NRJ;Z^uE>c<8m}Z z!KoB#1%Eb+54S_-CHzeG2<*8P#zDH!I4WXUA?yF<V4aWM9c-8M;gLl6q*SJsvD>3l zuWT5-mBxx<f183sQMcYWAM{;0-{ng>SV~fzfEJz!!C>SpUw>Y|b8FQrN%Xyf(MQpa z)NR?*r)sT*&@Sl|SQ%CDcXCT$)V#J`)_FWCjK;Wzm;2lyQ<KR`SRSZTP;4!TSlgYX zM(im+GW@Teq8n*3%W=t*y>7?ieRgSb2lrzJ#Ge=YocX@LNQ!EGWgnZ`uZIg~O4e1k zcfWalKN1{+h0+<{Wza|cpJ(QQ^NlIgeTMa`Gu7$YTq<+gfUOb`&AZ=_qoe);qx5^; zLG!Al6`tW*r0d^(bq*4U<*MZ2q$|v~gT(2&n|+tO3sP+b*Q@%iufzvG9g}#nZ27Gm zoc=bd`;)CWaIoQl8TiG9_3lZ$fjDsU&Zfgg?esrq<Gah@12GqxkNAf0>&9HMOxI7s z{RLTmuL^hB<C+;g*|I_68!A(gXzUN~nMCI)A#)gVE|S&c)VaEA+CzzaA<uc->nhlv zEE96+#1GPiFMpSuHo-a*?;L_Q(R!XF+N!w5Kd&=?p49zpFuX|Qo)ngbr5%qIiI-vT zqKK<Z^(cZLyp?`NgD;{yOM7bJ61^>Ath+3BrCcPEazcsi4mMJ6`o})j;0cQ-*;H<Q z!LgvefPnWn6<V1MUGusy#Li0Ica7h%!e#QwzLUdSF;UNP<_=sQOAcoE`OQwj3LCd) z^WCBM<4{*BpRZ^hBWCO8Ye5f8#Y1p|SX|1iUUZOF&5vAoLgL+dj<|<Z)Onj77zB2l zQ`<HXeY84_c3Clc_>pm8Pi!Q0ji`5-HpGrHmt|)zHmtVrPj`TAB9X#iyhO~^@w?&p zyj}pCYZv9g!|-S`I%Exh9+xqGlAj5Y4RR(^*SyEQeizP;_wmR8=J-ibVb$-5TUx8B z&;n2@^rSYB9+HUaL@m47zD}V~IWA(*)D8uO_-`HPmzUI=oc&`$Fad)nlPa8mm1AxU zgI`;3J&NQn(j`LZ!flg1n3}J(9;JiJqm%G_r>SMEj6_qt#dKnO6~<!nVThl?ZW0+% z!chDuxa2;t;<<vY=ul{ePe#tWS+mJZ6dR_ASmVuSqgIOvOmW-f?_wa_Ug|jPBlA>S z<`sDPAAFSK+tD%Fsf;b=y+qmCUf3E~9j{$;m`TgbQfAT&e+~?r1C`=+NxdRbbeu}o z!=qM~)HY!1`FM?M=-SEQ@>~U9X%wWF!@TuA(hM0=6Pl5~hr!F%Z<Z6KMhG?<%k^YT zrAxIdp>y%%RfVLVZPz#f*WKMJA<`Mb{EQ9n@~U~^@e@>FL9_pU`P7NUGcdV*qxaw@ z>zR12byE71X$4E(PQp=4<NV&y{A=(kJgL7VZWrRq1%6YfLq^?;5yfLJ+!D0svlq5= zJk2G{mHiT=qM7}3F8b4CqAOpg+3x7!s$zbP=QyniFXcl{N?~gxVf}AhEVJ`z{|^mw z^SjSH>9Azj@)I@Bdazy`L!Om+kQXPZdG^>2AyzTsd;4XJaX$K%V>al$kCer3?A+>N z!z49OjeXRePR(rZz>RilXpp{IlpT%eKod*^YYvZ15aqeZ(&1ef$H}ao9a4xqOo&mc z@8N`R=CA#vw_c#7|17?1GC}vwEQ&2lgDXwRHNxVjP?F->1gcEc#<+hD>q?dkdtkuF zg+itYFboG?^5wfs>w2IyW@E#?swO_jtE_I5nR*s9U0;p$A#;<-a92*m=&v#McTuks z-kcpH>Z91>mEY@C5ya!n-pnYZhey?)wo0PGW}{|{cOK79<Qnycm!zYvc%Qv)GXke) z8FCC9Fj20zKb6jExSN{6X+g{`>KU1#v>S~^1<dx~xvqy8es&%U543WOu#Kl*|Jm1O z_1=yQi<5Ng_p1^6o3_f+z_?h3C`Qn(gQ?btD)Lm~OvM`e{3sMMBt%!@yC<U0Uz)^; zi$$XF*xc&|{G2$%iwO=5;cR^H2k-2eWodSQE`)oVKbmITNHohMCI?@=PVKQ7?2cSR z>ONCu24b~a4L;fh<-nw`Vf;va8F+IjF^&6!LC=|fxz^k#QkdhvR;ks+K1+1dV#~G} zZmnte$|-ZelBt9m0r#NY(j;1zs-Ew2k=rCYId`wu#{%3PA(KQyY2`z0{7&bmVf^}# zwP(jfQN14RWm}>w>u{|iX0KKDz&p@M{MN85??3a7)&1d?xMFD`yqUwDtKr;5-!c9y zF8wdFyczh$mo+;4p0l(E6u;lZ3fq0AitY5FzNx25w&o&RmI#7&dW~$pXZ>7idG$JZ zba)hw{pL|!Yd^qiYHvF8sQ3;D$02Q$1<~%j(4wj>H6ULaQe>H%?YeuJOoMf=fT2Zi zF#RMg<wG3|7iV~Vo-bsdpbqsL+sEMi5PlK*3BR?Xlzm>OjKZm-=YH)_>4fTvS>|kz zF(jo(g#!xmpkRe;zke|~-M13fce?U;dRy~*3<jpL)ODkXZR<~O;eJ<9+grtlrfc&$ zwtpBC@5Ah4m?q!J#quG}eFLIlmi<~M-ksF%V-VMVyGOUBUwD++0>9{4@K0!xsAUm5 zsNq^?)rgQ^-fp)#=MhYh#;m7{m1sRk)eQFRABL!R)Ax1<njs7-@bjwh$o7DY&B=#c zP+oW5NAy)Ln{wv=SzI=#He;+x{%U`7fGt;zdqu1C<YfPK?QCnXv3U%@w}Bj}^B1y& z0iQg(Hp`yq+fB1Vwq%}q$?np8A}nfucgx|riQmO{S2Qon-u8tc@zCGt)7vWdKSwZ0 zJUT8*4SS1KW71u}MwfYei~f2ZW`k^EJQu06zG@pyJ^Q6K+RXIq6It7jdd>WCb-^5? zzK#!#ggI%Im|t@2bDh=E<WD1xL}m-&?pdCWURgGrl^i6!(^wt~WaOV?ySmuH(XD7F zD#YmZMr(`t_v9bl|9!9w<X)iZm_nRwH1L6}|6+DI2jSU0O>mbF2b(qMl_f>-Yf~H4 zh>+idutE%k-U4@aW=4l;OhI#WzYSSH_@6M^8(kRGLXGY_iuiBjXp#ktN-kEah-GPu z@_KzIO1-sc-nxzHwwA(kQC0VFWKU?TxVRq42D^u5_$!(gXAOeAG4+$jQuL;|SHrOX z?com~wt*r}!rUqq09`EQ?P2AS8+y&!*~e4crM~j1q9Py(Y0Q*X%TrA&-nK=XRo!9y z^K6r)2{t&79k<HmoJl|&Wywu6(R4MK=fWLa-1;Zj+^g&I+c_@o)9k>&Mn3aTe|X$H ziE<?F#$!8V@R>D|XwY2~oOGj?dDzLwoW#E*vT1x)oib9NE=6M>F9%tx!mp=*tSILv zFk!4w^yU3~_%EjmQ$&eIf`XbNx7Zc8_i4)>*Xu$LWK4mIUJg_Ib+N1CtgT3--tf&x zByR4%2395dtR%4t_xyV2miFT3P^_qrY=w3GRRbO^+n1~KLbAWs1MZXX=M~6f4>x(# zOSN@z!3sVyv#<D?`_m!#{gQ$S-Xsr=aG*fl))a<~>&(SlI8(DLXrCCPupZmCn3JrM zVmh9vat7T>iEd+V(;i<Ys%q<i16LyAq}tVcACac@?`Ue+uRk3tdUQxhs5RGC<;SDy z8b>bHiKn<9L6N}Ra~%^Qm!VC7Iy}JwnYmccf(!e=ZH1}E>B3xN9MOd|87dm1pdSPv zHQn_XaSrK3^*Qbx%w|Lnt$hFYY_@&fGQa3469{dcovm5T=k7bGJ>*&mc7i=Jkpx%@ zhz;TUbr{iXF8y?C4mZbf{9!x_AM9`+5bFbR7EEW|V;(*e`(WH0IDbBs`DOg}@l}wK zN;y?3t(1S*=ycD*2cE9p_#S{saDb}9BWWHUtBVPFVR^o%_Ut+axcGm=JRx0J^IkgF zKL1;1VWlr-)yNT7i0g8Mb@BeXpRMEDpMJ)uuZ|rPcZbjZzFv&jnLZ0${9fy6%d1e2 z=jXhKLvLYDr|sr_KDWVd3wG7(d1KLG#yH*+$~-uMk&e6j!^l;Wmg;aOrrxMKBo>qB zv5N2paG2W&3xe2A+<mD4UsXDCg|YC?Th@m=Yp@`aaYP|;-n_%Cnh`+q>uFcP;aYJ? z`FRYoin;YqO>6#GV6*@2Fhg*p{{YjWG;@j?dc1~Ac+m^L1(WMLPaGk{>k=6gn7r^{ z!r`8iQtzJ5<25cD?RD=k7!EG>x@KfmXkNkCR3U3)n80P>jFld0rM_)1&RWus3cdlr zqT0nR0l{GmwWAjOLdteK{O|4@t#kdvLy0j*{6m_2&w2tLi6#_JmeFF_-(#St)Om;= z?CNmFud!mSB-U^`pw{QVzhy=3VQDTI5wzu=tiUWQ^Dm?jtmlb0qzt`XU>FGhO?|#( zTkc=saaZtpB<0B&yoLA^NR}*qCs!W~lfQ2?-CaIw?>5EDCuTu<$Xz!T+Aob<;a*7d zUFt2c$(g$Gj=cze4f6!^Cx8N9TtD2`Z949F3;KPG&jV-zbVJ5_N-f*8dD8e=C`)G> zjoaD$IqlooxiA{?`(Rx6g`=vIl6BFqUzu;LNr>1B-sn&oE|!SG=B6dl+3+UQYE853 zbM)`e%NmtF7lR{&`KX}SNyTCLoA_{7fw+kmoA=fi@rB@7>ba}$XclxAG5EV|PfC+o zRm-trkN4BGoVx@(%G+Hno~!q!yWf6_=A(0a^z)lOlh+{ip-~JuGy5!+6P$*NvCWNy z2<CeeH+fPDyl}K>vW1(I)Ze-FNUf}!gHyYwn1-5cn`zCrD&>CJ4yu0FykDl;H~f;= z{Kr*OE;AAg(#^_wsP4SK&>o|M_<2>j+G=%=PRkNf^f0x)Ax7h|sq~7V?9AtP>gN7| z2d>(zm-b~;A2b_DY+Q=B-4EV)ZQbwFXwh9e)7dT4&go$n$=c|hRHxe*nb11V?rvj2 z-{dI}J+N5&iWW7(H2GjkzOQ;#taES@PbzqgqX;h;(boWkx|6~9P<-4pTJPWPs`hf= zK!D%?2ULFrVn5^gTYS+_$e|?d2?tC|bh&rbg-vGW!B(fCcGeH^d~(nsUma~s9A{lS z4lNV0v4Xtv+SJ5vL*%cV>-2iz<F<_5BLTxtWIF5K4Wk6nxLNiN+j;b)eSvI*-;nNm zq6O(`KoX8!G}6kz3G5ke&N4J^1EE>Du{FNQra6lu$?%vCc#jQ0D%@Bap*Ox=C)a)T z=GUToK4^8k7%!>I^z*M>uxo$XKicAiB-2qB-BvOHobqDepM9R#C`icOSW5@W`)SWz zec6W3_Z16SA(8xa-jV*1r~m~A15Wg+Y+~up61>~J9mMLrKoAB7pWL?>^9DFOT)saG zGMB+2f(ng^#Lw8Yxre&j-lc2gsU=?W23}=H@%R@pga<pU4A32FwXow-6Tl~D{=7P! zr*FA$Og5e`ZQ2texEF6V?QD%ZFd!btr+4ONd}YRf6%_%XoA`U6hd8rWwOfK&QC01v zYC<ph7T=eeJpXtu#Q3I!4g(!&0LQ0v-SU;{2qF{fuM@~TYqV<%YKAgp*}+a=+&fqE zaN!D;HxxX#^1@i-V4u!uZobyX)*zE}_q#pu-ekUpNpxmX`&7*b(P$9uarD^N$3F21 zMH?<w2*s@-*lMG5I54QTn1<sIGd~dpXerWfINx^D8hmVK3(aG-tu+?<X>^BU6;tY3 zhoeOC?ut%B^kFcmxQ8z+nefD^kfkWmVa#q@;O4#%(A1;C>Jx8-pg6C;StlQkdT?d> z)bLM~2qH?uHr@^!CVp+^_c3ZoWYjxQ4JF4wP%x@z-Cj=wce2-_d$lK3$*ri$3`Axo zqCck7czBWB6dYf`ADY&(PTp9xj%8b<P8Q&w(%1LU#aF}OX!LP*19&)d$doec5)Lp0 zwJO@0I(|<vX+=VO4vF?wK4_}aa{!a)uGq82Vovhw6^Db1?8CSU?1HwhbC^OmfkI-* zb*ch!mD7DX8Z3AEqM$Zt0qs{R&SE6xshml{5X-u2Ue3Y+a*9xallSiSjF{4*s<zU# z*7Z5mnCQso0S%Pdilt7_crae(*{GMAdy}~K0qn7%^xtd;OEfypEOzGxxdbDsP*N1u z$wZu?qU~X%ltL*G?>8)*liujC^mqd3A3xD%^2TDz8;A8jFUGM3%MVO0LXi#Ql0Hz* z5Zo5ic7HsVf<b`0`}G^8Z25Uif0J0(p-2KY-~;Q!el!0{R0cj#1QgNO^tur#sV_~m z7Z@L5leJ+3csIAn8`Pw1Q<b+&s8_7HX7hu02Yx_N(-UZg_&AoTTeKbnii>Ogn6=oh zrarZW5Ua+Yb)N3S=(`b0m^`kP<ozKjE{dDa&JSQ1^bXP^$sA(-c;8}k@aU^PMW^CV z@1RP9)BWb61eAHV<WC*T$3y$!tYQ()T2*rA#d8kk&O6BZ-*)4K$I)81-CI*DkGr7X zIAXI1aek`OyJPW*CgqS$#T!NDWp{pbW5);=j-9qrg8fOTJ4xX41nsKrYZJe=OD4}n zf3j)J4LM)uFzcolurE}+U<47gl{PhjLMA}*IWAp#s&8w1XK-Opj*~S(A8egLQQrs$ zm8EgZ;@UYK)K<>4{se_ZZLqkC(E^-|Q+n1GwWi?HQm^)zZwlrZ({so?K_Wn;A)Hr% zt$21s11i1i6}`yh9GEgC-0d?kIq-^0J#T~tK5Pj&Nx7XG!bDDNpA^9A=D-z)aOYuf zfX<+Q1{Yg>E9<=Xk{O1i{#nLgU6ZqRx@r#$)f(s5Ws%;Bgbmn(m)2}k`xL?*FMe?* zqK)F7^o0eTwA()~oWX}E8X}Og=KBf0kT?XZ7r(kjE<MaL-&il~nUXGEtA_Zr2~TCa z2fo_LGRA$4YY93mdk<&w0H}FqUwscH6LMPSeJyCqpElz+nrw?@{GEeuIgs>(Rj$`J za42JmzW&nFEy0T36`9S(6o*QsIKXdxQUf!<euo>GrQDq8jZzBvWLIR;Ewuj1)Gcaq zo{CSxM9lNV*KuE~$*kfQ@Csbj8<DtUPp}OhN{_$qUGL@`qD5<O^KMu(I)(+SYh7lP z(z{m1%{egh=(76Eet`%dW<6nhdLx(X?kx$U!Dj&e@o9Q3XGC;uA6ws7lpS7Gf;$nR zs6Y*Cbp+y<0i4UMLhk*V&G>2JO)&R|KS83IG=C5TYkv$$a(<?_n{ys16vw}~0<@Dn zSBJ93-gT_LiRoIN+uf)^q-lSI+aEeAypSGc|AqA~QzU-LY@T%(FeA<uf4{$YzbiP$ z_f9;0uA1?WpeNjG!LWX@=UwWTl3Hx&Z+z=SD<b(`Skfv>jzSgg&^yJ03_OulN#S%Y zL_5>%R%aE?Vg%8Q>OYpuI)C*ElWo(-*F>WymW#<Oj4qXHlbNTx{>*9Bs3VzU%TXs@ znrq~!8>l>AV&>BIF>cPBi{@FL*<8QoeS6)XHz)r0jI-Q`Z3Mlf?M@)b*WP2czI0j< zV<V5T34T#OWf$9S*kEqMmIF*OCqswH<7h#|2)*bNc?e&FQGl-!WUXp4>gx&5D6a~o zwYAvR82aw<LmqP$T=aYC;_S3qWyVXen@L115x7s^dcAc#FK5Rg;+3VP8V`wj4xU<D zcxb5Fq~}uWB2WctQ#;1w=Xa${Pu_IX2S~+y>uCxH!i;}bV_72Y`|z`4iqAzue&(pe z<o1kC>+CJ@4eX5ooJFTsh2465<9^wW{K0EBaTE3Vizz!I#;TH0mpvx~d*SC>?C%bI z{7>glTvjrbK#aCDp_oEdUrL-DEW`cZjQ2e^=htVNm7pRo68HR0)!w1K#UJKT48m9S zlbpBjn-Fv5ZVBa6yBxgl4Ba28$Nqv@2li%z%Q!FW=d6ZD>D|=H{(0@t7*`N7IQdRL ziO0!(F`7*SVp1oc2)<)B8u45SsQT#?&x3gV=nC|Y#SUXf8?BLyI^z2GAUQG#vpcYm z@!ECzhi!wi``Zw21W_ZJLDyId83pXRBeQHZZEdZ^+6j7;JmVQ^D(*?UEnaj3FeC9g zT=cH8LpbRxFYAZdS@@T3aFMVctk&TA%wQd}23h9lix?D4;sxFYqFda~(1cWmIwU>j zlFUa0huh$TD83=`NA`JpSY0VkDC(<Oa61g+{&2H-S>v&eMnnn66JJ6+g+U%On>(yW zqx$E?-cp;Sm}>ELJ5X~tv!nO{;r~lYPqbqzvruVvUb~thANM=RfjsXm@%)1O-)e;) z6Uje)IjJ*?UV_=?!}MI#{Y-gITO^(@tTjfK%(R)*Zzc`e-ch7=o-vx;;JIz}bRd^r zzSvY#J8wkSDc0jw!|I2l#r8YWhnFb^-)Fcb=la`tHL~i>{k{n9dLGAnk{xgG&k8cA zy^{SNL~Tn1`|S>6rbTs+8-#Ua?N3C1$_`M=n&#^&X&*oD3dv3cb{PUv+KbNcUhR#+ z1}5>9%)O+8ZiV?dd2D$b@C=?cg+fCab;G4V^eE{D1}4tzHM@jZt|SX(ZpRd{O7HNd z)l@~VGdP_LfiZB&vLk%?611EFF(#lQ%n4uDLwg;2x(P9-fgKJ85tOOYAo5@|6ll@E z8)J|`i&Xg%DQ&elrE*5W%N+_g@N-Kb$2>RTEouNf^5eo8x+@RohvPEyE}oU{Q#1kK zz3A_$%LV@tJaAL5tB56^KfD3gSAk|Fx>0u<RWPK_wL^U$)CZfI#E0Rn+72lW2xuvp z*X<U(jB6K(^s1Dhmjn7B@@59_Wc$g2ZGU}TI)A#rMHB*ykM>sQxvf;roH=cZpkw*t zSW+J++Z@jHL=`@Y@JTs2TJ|yM7%PpLcBSdjv)o!H`9)f2>&H;)W?|op-yg%rsR%PZ zd(vB+fmO~jt(dm9;%SRve82gi45|`u6ke^mvAYNl2$x_ycSaVvMrNG-RrwrzMzwlh zxNFLD>By}1y(}xkb!sh4|FdsnIS18(@gWArHM$fpo3^XkI)2}SAr-BKkK*xJn`~z} zs0PYtk<odXOCfQSwZ<5Uc@fETB3-}PfcCBLPCP;0qjCY05?`Xxh0z%JP}OA3F(41x z9Wj9fPfnionp|N}Cw22!`t!#rT5pHauWBHSL%nzIIr<*nWHs#dVbE27vyT{>ccQM= z^PV?#OJjoKB^56Oi8!sc=s!DG6JAuC*t<wPPKP5?^ad%GtNe3cJfS>rB>Bzv(T<X9 zID4yB?fl09)^2z+;upga!RCx@qWkEHPam^%G%~Mw{5c=yNkN|J@?6jh0Mr5DuXx&c zFgxC}*)FGOo;%iH1QZ$Jy-gjt({5q?U+;(qb;<@^EUFNtRyL~AqmFwEM{IgDHTht3 zZVML!DvoGauc_f)v7+6ADrB0D2M)6V>E$=eTs^Bz6Fd3F_8>DBv2C+r@sL<v;L?`N zIciQk?<(zZiDIbBlq2;&#qsNP?je1Dw{yP>J{8_8>g-iB_YZKhGJsNmg1KXUC2p-H zwV^XX1p&zqSI<97+xusJvAo8U-s^Z@ty<e#Q)a?3tQ9;>Cz(VOVY<qBSs_x2I_P-5 zisl?2dH<*V*X^|ZfAhY5xc(0->fW92xS2Eu*(|jWr|JgG1W0C1^$34$RBt!NHr&GI z_9=YFW3{dVsRZ+;H_J)B9^9|1Qd!@zYHW=2?{$mM_kCk8o*rv~a!+GyTbYd<MV(!Z z#|9Xl{6kfI+bgZ%s=j$d`>~F{$b<9qYc_FDV9_imTn5(f<UaeaRz*24wW`Egetd%} zAKEp>y!*_hI$^Go4ukV`@iV4XJFB(X?>^V8gWk~SEb4))wS_&-LfXMMN+udhV+ogk zgA|}FoyNE~yb4AI5aG{a;<W-PgvYURMsVVf>UsL!+-K5l_D-enR3VGbP@Nlcwjbf2 z2Q#)3HfC?V?_Wc9aizgoXX@jz_~~LgM;4|Pi-wT6z0qe=ol0~W<{M1wa4Z9$s@HKF zy`$^A^`ee@ORw_V?mE55YO?XuTK`GP+xC`Z@N|q>5bSU#E;cJP2s7)bb{ytX)blgX zL`^t|J4@zPC04f2`ba(WE2XxqPC$to#eHog$UA#eJKmn>7<PO<OkT5=>dlx;5$;@U zYxva`@lbOLuOI|vgjefsa%k1IsoglQobZg1bvbJ{s+<a2VBPG{WYV&39T%<Y?f%$m z9aa6_7SC{|XrH#<YUfLgM@A~3Qi6O#Ki8`>?wk10IP2#`xb#P<G1*{fw#D(Znrf<W z)6h8h5+MHD<MgESJ8#DK)%kYZy3^|Nm|}GDnLQ5p{|U+Bd@1`ScoC9t{2QR4#a!Y6 zouK75I4Fnc4<$BClX~w^Y5(|g9~6+Afb}KrisBWPtTHK)>hy;5@A#v@Kcu9F_>w#} z`}evddo;ZI7EimrO6q_8eE*bL5#Dq=k4*u#B7p0UAI6+_Nn|Ahs+2gjf+`g7qxPk) z(e`vf+N2hnP`Fw<HuBT^AARyh$X#d<@+sy|g3X8r+_nPh_p*ce@cIGlKZ(!W8{f#u zc^zjP{kGSLf8N?Fi4^zPhkEqdETOJ4>!soN`BI_L$vkf)oaO0)(}nsIHjMvS+n*hN z1D!A24i2M&e7n!#F|9r9k^bH<w>2t+<4Cw6uc=nKeRJV+@0;)SM|@`4OPkH~S?*>T zRKBV4>0W<2>i*V)_2r8XtMrD$FQAU}a?;zS%4he0|K>i|HZ#YD^b(sXh06-=2?o*) zcXT}du*L3nZVs<@Y!&%{x#aNzPDh;RRZUQ1H^S-Jvj%8Tk&!9>cz`b$v!0P!x9AtT z`h0aRn~HKym*haa9%k>jk7p|cfDdb!tlxK{EwEL`N>sd0<a*=?!{wTth<(8~*)IbG zas&G?*c4e>OB%S*E*jCKnEb?u-R{@1$P~4hxiVD+yYSeU9B2UvEZOSOaU>ozV4%DS z)-`ukc}aBQV0T#G-fJ{Q!qJzWZVCWY&)bB#vINnH*W2R39pc><?m$A0xp3XxAYKl- zLpgJl?D(->`nEmorNv=d`vlNeg01y{&-ZzE-dM-F%hY;VrO{Z$ljG->m1cae2Q4C` z!t+62ZmdzO<`tH<NH%%v>yJ0*!08aR-f1SLs(fFE;%e>A)m6v+Hm^9f7SU&G6*I4= zMLV;5a@>*Wj6fQiC``u)?Sqt>!iTTYPDNZrrg%*g#TOunc&3T|FPqbwod#aMzy3Zu zaStXO^gyne_&j4&LMy;N7#D24*Op?r*0MQk%XM0f=N<&;A7=fp*P+ZOe?IV{@hz*J zb{!)yYo`BbFvF8N{SZ8e|BT?5)hE^|O?sE-@7`b-n2UD1P0XVmAD+euX9)K8o}WaM z$NYEpi$+Vd#GjVKOkp9s1YrFiA~|=1h~IM_%2s876EYnwnRCQWPy%PPNM6szck`lj zZtl~G(%Y_zON7J)%NhEsojI}?1z9qkI|PrTd`2P(6I_r8OAHK8uuyU|OQ)zurg@iZ zBzTP-GO6|YoeLr@#i#yipCAe)6S)?u_k>r;ou$VFhJhdeox8fpRKYi>Xka}ZI==(9 zzuwW{n0ctl`s9Dp5Rcz?ax~65(<E;7+<V}whGAv<K<m<m(Y?ncy?gqyOB0I#b^@1{ zJxsxMii^jWql!Kg^?iz6>Lts)iQ#{%z13@0j)JFTMh?ma-G0FOZmYHPk1w@yKckTx zRKjJIc~~XH@RG62D%}L{?!~Lt$!~n(H{y^nx*5Ss_7K=Ql;G65&1@)nL~u)6XU?*t ze;!WsG~TJ%_mMAzjm?Rlv+e!8R{2^DQPPsEJ&{J+6rI3;{>_|*KDcRqXijOgNy2RV zfqbGNT&3JbIxgBG(a&Ql;<#p0-@Z@P_4Bk{^xy+L&>8VU@aUwUSTQ6Qt-<q_smyR5 z1FIR2AVA>Avw43o#mgt3fK1z+Xk3i$L%4kmsCQ<r9oQ?Yl0y^LBfJjT3&A}77W0Wt zuu<RPYY*3aB+h}g_C#uio^wUHAp2aeTair+p*eG}GH7)^2((|jF6WaCy>H6c$iT%6 z>layXpOv+x(M_Mr{?h%e`)>S;L+*SwyiJN5!Son0IP=`@ug8z!3jauUwLUyL?m4*$ zd0GDXz9`0N(pk4ApET|6p4l?mx&zVAV|3p4+Ab4bGw30YoqKd9Q(^ox+rqo-j@+xv z08e>1=^77Lddk`Pr;`(T3e3mN-glqut*a>NBE&Af)MInCcKLDi?yhnnG3FG>On`X^ zj>*E#iC#&z>u`}8bHDg9@4Q4p`gAwP2qR6-gKn*cQb6$csg1!^yvsM6?fa#GSQ{RH zi;CDk_x3LSBSZ<`%%jY8!m)CB{c^_iCjd0MYr}uPUqaI9D#lJcWY6<$qx<)|%y7vW zf_B_tx?=?Tr`{9YFImeSr})~*CR>h@*W&c&k3OE9hI8~Q?i91A-y7(@E<@fZ_Y^#u zqrcUQTaFL&uDNQE@5z^U&6C>Z=#Drfl}{eN*ESs<|6(?=cBh7y9rjIc03NFkOKrUk z@sz}c7%t_#-aJZS!4+<b=ZaFHjPr;iZnY4Ym>|!IkPvFKlpKXG!A}#;Yr4&=H!X%5 zg{ICClByC_E`D^yzVo4?WZ&OY4>8FKrv~J?rI%ZGa=8&-V{$5aw2h*El51}E(4xW) zvGUCs{hQ$M+&j(+nfZbx5&bNAFA}?*!}Hx5v->~%A$BRzUnni{1xcJ^@|#*=!0xq? zrSdavGms3508njm#P$0DNdt<WKY*c%wx6uGzAio^awa^%S<iXxN7uLyhRXP%pS?l6 zlfL@HBes(nk&lCz)Pln8or@4H+@aO?@?#DJ!Q_#Z3BA6ZC2&z39Q6xZ@?gM7ng?wy zo-#KGXC(x%{Zd@I*g&|KXy-%^v?<}Sz~w*5v)fg0-5YpaN`rSev6fTeo1tOHV}?CI z=9j<@1L?b51+Izs2~(~^oppwy1G1^z#6y6&p-}nRF`id2D9Ml+4BaxoOUnza`;~Uv zJno;-MCZo0CZ+Lvj!vGHH%I0-YoiPB>D?6Hnjm@}3r9>i#JdM#dKN~DLW}g5iE(nv z@2t(3ROAmfj<JwYlrTtkn2yaTh@)*5b|H-SNI#KhX5Jk_uw1p9_Psuc()G3*U)K@3 zMsWsOf(l9~R)ZHAfgjWzFxyT$I35MF@^AS?d|idIE?A7n<`}+SWbgj-Q|q5*!+dR; z=>271{DdQ~6}}#G-9A^vSDb9CvFmN-t=&@>NN>kovnT9^zHlUq8k@8!h66)<<A_A& zIyzp5@Cfeq9{*?OReb~|jC6PolG`A&8fR9UCtH*E?ldaXbHPE0mS$i3B+Vah#_YeJ zy=hkn7uoshn2HMvhFQW^J<Po7Oi(h&Uq{)k<eZeTi(ge5N#?`Rnob$RDblCn_T6|a zX!!1E0c(x@v$ku5{pfI<w5u06Z%Hh;k36S7a8IHU6<)cVQ{ruNhmu~-gO<#_1^22m z=dx=QV7jWvTy8a8uF8?-PhTW&!QW){Fq7s2LR~m~XR*{0LSCVs7;<Ce{-W`SKP_sg z!{PZyby@eF!9qLUi>&YWSI6%8119q2!zmrL)jWJO>$j&1WWj&Zb#bf4*FLfHTTD5k zmx|yM2a9KxS3=>Ftokb1;+{d{_L96J(Z$B^{u!=2m*d+Io&_#Sn^==RnAv^dR|n(p zo*Ykt!&8WFK6Z#r<bJ5WFM^#_Z<W1JpTn<1))nU#iVprBY^u;P!VI$5`e}Z8uvaeE z?r%HpuP56S4vcbFy)zaLd{nvCLqo0Sy~$GhLY(9O<51fDC!g_T|MNZkT{HRHxA&%P zgxSGp?ziSxl^@`XlJ~bq_lU&!6{!5(WA<k_rFUoP`rBIL#dCXNId9eV<Pu?3;1Z8C zjP^Mm6+;2HY&;e=rchz!9R4CP6OSvw)+uT58#tSH(Uj~tZA%D$G6xmx%&lnQU@$6I z>^F0LhM#()`gP7RW|_mJ=c2)bf5vPStXXFp&&({lKCeET&5we|`f_d)VH?09*^dXK zcjYM9x9|WntX8Fd=~9&MN4uJMp!?Fh>{MkWdw$=>c5AmKm_*y7ms99Lvnml{1d3eq zb1=oHYCeQdXYhO__1)tEOK!K`y@(d~2SfmnV?|9d!?<e6PzU~Rxz1b+i*8fdFY<j? z_A$M?hZ}m**T)h4)A3lWu6nn<Xcq?lSy(V##x@@9=LWoNEz?q>tm{x~%jd@y{8#2} zWqAxkSs%Fv7sr{3$4cPgn?fYnzK*p5UglZ_BiH4i#%hz#wVLy}q&K$}v3Na=m7kv$ z><LbuxA=5ERN|%7dFL4XxD4y(do1}0f{_ZZMf}tPh9r}G;if1)INdND0(IafQ{ui~ zh4$k=TiJwjFiy)$Wqay)+xEPuJ0C2APAdcbn#^}4%L;6^2^(r|jL%nUd$ay*Rn)8G zV6}HhUUJUFr8LLxlhA->ow<7`m}cODMsA*^==^*Br3gAoJxaHY9++r<CA<o`M}}cC z^^<DreQiTUb{BO{d1mY=U|_h8&)sv=`y}S@GP$0OcO*i%Z@U9gr+H9!e>ndaXWB5( zg}76fGDPMD%`+Sp-q%IEbb#lII*z}C*Mn{FIqkvosL%7jI|8??pPcpkC)R$~-N+IS z&W^Z4|1dR#N0vUBGiyhDCE@_vkNbK(U1aT7DYxoANtEfMXX4Os6Z4O#J;S|`0f09W zA63H`U<ij7T!+gzdu*IXPqai3%JGD)h~GhjrVppsRUQS+Lt}RsO+MFC@)Eqi<&E9L zONuYf@mp{h|M@sb%`m>&%k=o>;F_ITlTVRs8{dh-Q7dyubS=)bl#SK?>&1+Fb{79q zY!9W@rU0W}I0XAZUK|OGnT-zGv2j+)+an(qiuo|$1fiLPhjY63dOI!SWSsF}N^wu_ zf$YWNxf*}a1|o*Jh!<$g#x9^o1{Xg_x#YrATz`U&13Q(%sM=w+S6Ac=W~~g>hZ@T7 zKaB$?N5s6mV6*m^oJE6*FFJ$>8=>EILU*__`V%={nU7Wz;4^?#Mq4{U(lD#=(GGx* zR6upd_$**H%X-D-b3J3IDfxY;d*$-uYIfhxMX_)%;<xT#Z!Bdxp{nDjWWQAw)Rh&> zlZe^)aXt76Tl}bII`X;xpVr>A=T$7r*8N_;V&C|bb;wE#n69L{lKTdOu}x>PQXx!Z z8v~}bF-P^^@0i|^8BtZ|NJlz1q^yW~_q*M~T64`g#xw9vGNXdVmR_%~bpXrKYoF|^ z365u97R?p2eeAW5WVzqi#VNI{0FdCHzxKzq{2%MPyV(C+uJ3EmWLZ^P8PWCW{`TjG z`NQ7yR@*!qt2rgYY-dx(E1v%k`@+xPogZLL7a2!|e#)b@3v8)35C>QUFw4yICl0Il z#zSpM3I-^-paiTq3WZ>B#N096heB+=hmOT$Og%9}XA;<yMVjT!Z$Mw-?8p#vPZ%KV zS&@?7L<<75UOD{aSd`!!QCBzmobX%(^Pqgvy^0*D7_8!&oy(smx)~gKf2Rw3xyK9! z0v2pRg-@m~2^odEITkl&Skkx@p1Tf)rnGrqwrF}(T3B@b6U_14e^x1~S9K7u1qDj0 zmN_2nDlToX4&~{zxPAAAgIUKX^MHQ*-NLPJ+~r6jbMzjW5iZWvkYe0xw{{xhVgIbC zSu*oZuf)Bjy<BeZ{TOZKj`=v<Q$&Ay;?TZDxF^&dsLPLNj~<ar0(dv}O`4k{m}NLN zQ<K<<g4~PE7*#5^>0oDKO3Mi7Rl3MWaDeZFNAprk!mHuuD=|A_E|6m!-Bb+92{4N= zl!9<}{wn>#Ib#O{tElbtm9?kM>;s7|mJwbC%-p9Qm~0rPDRVS?!!8Tq#caYt9g8o; z-)^UXk<&V2OanTfL@1}nKAL~PsNf~9sg7zdV?jIRTh>(G6(g1?SzwE%sSx$WL?!n& zDPZ+D2ZcLku_VhAW;O+8a;y1uHKOC?=nO%<bM{!8RP;F-VsYh^ft|H72qH(v7=5|F z)n#|WMZUvYeuh`!%b2iAWM2izc)A=3_zbEF+S8b3Bj<wgDC`7H<r6eli941zsJ&;C z_<^Rk>F(9HYEaLe2gjXE`F!Lfbq@Z<mwUoeh&G9i!!BxuE$kvI7~yBbdyN?%GvABL z-gdr@17t2Zg*Sv}<Oq!s5(t|^x`bD!67-U4R~!J=D{+fj{^rLfyQJ$&yB}LQ`sNZ_ z4vFzbmCi0#n{s);*(mcJl>7WWU|(Qa6PND=tqm34ALHtX-iev9FH5`a>_px5v`Lbp zuR%&Av?PE$4hyDE-P&*V$Ta#E&A7hoZT8J-p^lF*g=_wUP3^H&bzEPEm1z;5f@Zei z13EsO56Rz%6eMqU9T}uKIa5aw&C;iNjp`*Ljz-Rt>St0kiTVR8jiqBGkyCaDB5dyr zeNmEOC1^rwrA_QyE<&6Pv3e%xFOt_ayFU{6ibAITUTa3@6YqC^*xqpf*+Fh9h$tX0 z=$Vl>+2*3~v{_glECQrsmiA}{e8dR-Q>Lp@cEhpP+3tBKwv~dlUb3;m*W6RXdgIs{ zywFVQ3TU-ouSRBL*aE&3vV?)+2+?l1WCs+?v+MF;A>|X=dfJOpA7_U<eTUFjLM@&i zznmKKlMF`iC}$__N#6}Lo5Zg4F6fN~U|8Y&;NGoj_u3tqiQXKV6gDkATRbu&4m0d< zLJK<+RGqJMi8a3jd?o*~H_gsP_FL{64}W(AL!w5s5A_jew?%rgIvM8tJIWM8qqzmn z3i!5D0)n7<D<z(xshB0!+^|;46cX68z7!s3c4Y!cwxDd<i-TGYkrdlGbcZSyNN`b; z7yrG7am0cz{t;?X@v$7--xJdW9t1N4%s$Tq`{qfBx%cMR11g%Ib29kf_a}(hZ~(8c zAd?O^+`XuQah(Sc7&}=n-5&Gl<8zyLYmrn2g6F_iUiOD8SqR5_GsPF!p;0~xi2Ff( zI@))zjedP8bWvfqZ##=Zoq6#AzyVy3IA&Pz1U?4JR-!tK3P{qBpjj_zC!j=%^1cfI z6XFx?bzXcoztk69^sssq7)|cq(M6fgP&mG=!~WZ+rXB_E=8BpcIdYwKcK<C9!RUIT zKkz-bV_5J+R;ycFJG(yhmCrnnf8TQ#t@C`M&<k|9k?|Rz%^;z_^!?AnYVvcB#0mM9 zX6F?Ai&<+*@^w2YymEbdJ1<)dPi&`}lGrY<by(i+%ZqqTV=-fQ7qoTgW1TFr#lbn; z`0wvGYF#{w%SJy{my>vaj@1SicRUDNFToMs=HV3hKdB+ET6~#T;o(r@Qe5F4BEAry znHsMHrFDZ&g;>C!<p~gg#T~OOtgp+@ieF)vS)tZ7a!$Kpp;Z$9CaW$51fc&wx_JFQ zI<IbMqV8ZAl#!B-<UR3jcIb@G+31b?PdqGlPCmd5E>O8@Ozy^lLxP`l=!@=F@1x6& z>J##`bADLLr;+;82ae*me2*7X>dA652)11;>n~vtb?AL7I!k>uVJ`8FslkiNzJJcK zTe);@V$Yc>78h&s!dNJ${erxqmkybSvsZhvhsX{l#Co3u?fSWI$Pi-S`uN1h)6}xj zM=Odk@Xr~3R=Oltx3lHZGERE>e50S%d@cq>?Ra~XOt{?|&T7*=jq$;mK-X|RzoMO2 z?LLwF>Zy9d+1YT0>kju`MAMiJ_N?=>n(F`k?6^4wJe>=O`>!(4)*`KkR~=~!D}#)4 zR#A|aUz3q&yP~h(n7%o0KM`Z=VZaG-+n{%YeUEXr-Ho(WcMxUX;bKZ6xD9v~NlkrC zERhWKggCLju@U=NRl_jRibJ^{FdV>6M_kQY5^6l?yU?+$?%HO{4!E`xs0>UuDf2by z5@}1vNqqTf8TrzVlqx%%7gJ<p5hsO&SEO%bxcY*P5S*38WA{<b$`?1=E$VhT0Qv(x zhBr*7UHLKO9O$@B@tHSRJEo-#kqUiD#%eZtq>SO1Ja%v}|2o&!9FoOo)sEnbB$-}Y z6}N#JK88j%_O4?bov=8eK(Uq=3tR2yu8rFVq<d)gy%b!Vvc3bH2W^Zjiih*V6GYnU z%yi`f;QUjh*lFV>=K8fUT$K2oeqYNp<<|V<c(~zcyPKkkg@FT91I0YIT*{IKQ5-qV zD-=)zZ~{1+Vk`?u4_5d16~FFd2z}r5y--dAPP6ZeKDW$|4b6YDzDW%A0BFuaxoTCt zDQ5NS26Jl)AJd`+?^aqOM4@`I2fCjCf0JGc)>`ODaM~jMIu2XNqsIA0PBT1WkI>?` zvYzuoJD|slbI`>>8h~nm9sJP?j8u}?M$?Xb=U5&QYKDF{n9>XM;Xhk1zN<OxctCNn z+YaBgCl!=wi8K50uFpuPOlL;2OgL44ej{ATSsucDaeU%NJ*qnp2rybhe_EZv>E+e9 zE+cf{$gE)@FWbQ?(;t^8@?mufF|dRu<5WX5K9A_L4nW(@u?C6>QarW&Js{01q%qPC z?@_&<zI<`qemb%TPM9Rni~tw6NjHxl!gr{=&~q7GR>$HyAEw!BgpMoc)pwc~!&3l3 zlK`dXQ(H#k&Y4qh9QKSzv$3Kdbn?ECJ&*M>%y$$RQI^z4@wHM_jpdqpmV?2~r?t7L zN7yHy-<dRk_25LV`jcG(gW|6>K(==?;q}4SLIYMOE|cqbJ=|d2*N*e<Ksy!wCm6c{ zx)1~nY5X?%o<*4vxRZm)D`(GHaqBC!q>^1ZolPG~JfF%lZre>gRK*N>LX|6h=Uf{; zK34B<RK#`R&#Jh0Q}3)TufHATrWjvInSBo{Bb!`|FB=tu@ik<@-@lJR+Rxr38i(@< z0)yn%;{lZ%Lqr+zJ0@L?ORrU<_v)IqBloqi`{bzxk5*Y+1mnG3%ZU*^=lj=wr>|B4 zH6b1^uxJplCSZR=s~Z1I;Sonx&3<FHZ|bMwC!6!ndDdczYL9;M{h8>}f6OK!&d>*- z%Xde40#7LVTGXnX-H;sf`=0b$Pm(9_gaA2Sf}B4KyNDCNbI&1e5tD=|`y@VxWg>;Z zJV}C$IXpsu4<FKP+)8IWb=<6$$R|VRDAKN6C%HKT#Kh0fqZ{=&F;X^R+$RP(dSj?# zx6d34^l-#jHt#psDp32pe2dsm#O{x`jDsU5q<Py@BsAZ%!s=?vhw6=Uu_!{W|D^NA zR|gY<`Cqtq;MX{+Ig#I&ApaT{ft%j0Sa*>#$P5^iv$#kwmN8h=#iN*XN(Y25dxxb< zj4G<N$jg9ZLj#w`iCYyKbyPRyN<qmN#K*@OA}91uFi)5bxEa6;d1E=H&weqvz^9=e zf~|uYF?a$DET-_8U7?f*ix3_pa1(C5k@lx|gaQ+arQH^|hfq^wWMFofn*@j|+`JHT zZLN>AEz>OQy8bd`Mw_J;ytd{C-nmGTg(-A2lYsiDj#e7jJ#a;wu#p_V`A1U|<Rf*q zKhCr*F+`x_gYetdS|FSC?PS{^%4vp)+`bRbt64hqbT%`OtoC^~&f59*;|^=1w2|pS z11kuDBt2+mFU&0H#-q<>`v8q}rz~lII6UuV1tz?af4z_3-?Mw+_#_Q0=D}N>acS8g z%-Z%d(xy{dv*GgI;B}ez@hi<phaTk0p7v*LhS`iaVP4Rf{A@tZ-(v197cSOD;|ueq z3<)$K`*D<QXhWqQT%aQT4&NJk3O#u!NkfGYYj|TJ3X?7~@?X%LrvHqv!b2geUR8t{ z|7;VVHC~u$`tQ9*v#bpq&_>F}_V!gb{$QFlM;{h`P3-wNf^6O^VlhmDd0BtwH1g;u z)Q9^US0xa!I5MoENjB@`c721zLADk6j(3~s<N!s~$whU6T{jbF?ExAKe1Z1-bSvi; zvYO8qkI&ZEHJJ2zPG>E5&Dl7ql@iWh{dHTobT)+o6cayiTe+2OfBOa)dq}!7aeQ3+ zpXDud$^Y~Cq^u;(s8bEA)*a_3EDSczQ;!!hGZS>IJ3NkSgA8S(dC$DowSnUXjvUi# zcOE_Y`4OP;$y6T5j)<2pEu6p4VHW-~w=0r;HRW&fl51hAmvwWO!}~s4df#spy}jq@ zAHBLi^xVXJ?&!TxZ;RUCTVL4mr57bwnO8#9S*OVwvyjo`EKR+9)}kLLPC?3Y^`F{+ z#q{}yHSZtm;6E~etCf>Gg%iL}em;OLjh*E?o}rns^&JC@5Ct$OLyI}@6x~aAP)X~D zu`w*h)R!Bz`vJ8|1b`LncZh9il`m(PyO+gdc<F2C=ckYiSPRC?a5_)V;yy%62yq3p z0AkJ|vNV&%K++`-1s-?|kLiHPB2JLdyht@%AkbgsJ+KrP4rBeDB&T0byKO}8J5YXD z6B~$hafrrJqoBo@AGZ)CM(7`%k$rMM#O`iHK3qD-VbG4%`%?EkJPLcE^&(>^iB+kg z{u<Ah4i7#b{MkMFmowheXr4MGy@}EFjRykY)b$TU2gpIBJ@(x*!NoEOCPTRC4z+<^ z0|^Q#o4vd~VeydB&B-xWC~Ge{e{~y;IzcpIEwZTv!}JyTwJ_r&>UensWKV5s)bG@i z^D;6hkc!8GU6&X=7(w)#>ybY6DDuI@gjVK}V0`k1;d`<qeog73vbzXskKPjL?=!4f zES-In&sm4B5N#a>Ix}damii6+HuB8u_u>W3ou=P6Exi|R8lwLPAu_e&mgxf?G}o;S z_{vb`paXT=;p=jD@G=pH0((;k_{V^s6K;Bb75CnvUQ<r687wEoO8SZuOnWss`Ux>} zsHIQ!@vQQ1p@n>~Vjw;RdA(uy?Lpnz$TX#!E}?gcA9wXTY@8#aH9-Eb1HA&=RFy_& z7%f|ZopZ-v%C`?qF~1$sORDWn;=f{^guKw9t_dJ|nDc3n?7DTtBz@XIvA%FU0>Oen zF~W&!2N^9G%wW!;^?S#M1{p07sozY|XSKOQyMe-AL(hT34qrMn$G4ZnVu2e3mMuU* zk&6yrN|7W~>qytC6&Ff+J4|;V+2z&+_m7L1s8XVjfaED&hVGWzR?zo%2={3bpNj`Q zKF}hiyoHu-EmEanM?iNQ`d$zNO%A0VJ^oV@Z}ZasU;vLjH@!{e91{ua*{pDFr-Aid zQC8RX@9WKG<$ca`FOJ8D-}~+h{_)i^ED$AmgGU_K)BAs0tBnDVY+#;5XK~w{B&WTt zK8Q`*fm^W~44cW|QBthi%+8SAcj2bE^5s(4ypEPLJ~C?d9J$Ga|KIB~uZeYBE(dXN z)-z|+T_(n{`goYb;A6)ES_P<;l}rlH7>qZ+y{-EiF)DVXrgn^;nK1hqtNMGHH=Axk zyea&%n5OwRvtToQBbZ3+hu2X9P0GFU#uD=sR6OhT2oh*8uE_6<DFFq_O6mc;COFuc z`SP*>a`uM&A=31Gc8Hg0PGH(spND&chkLuU&+w=*0mG?aI=~x?RtWn4#@voh`*o<j zl&=POYGY<CVrCs58Rz+b)8juZ_K)RZ?OtSL=Fv=S=IpW@?Jdalpj*Hw8*63?fdP8; z7ZrKp9=vpu1^Yo3@I{3O=csLu`h@>pPx|_J$4m@-3`{Gx9~J=?dPk(v0DV!#RW_Id zWE>9l+J{(3lc>RhIh#zYq@QxvkrjXsUX*g&H)sacs%xX3y5T$qs0ifpsBPFK`_&mt zjjiUD5u=W={@qWpWF)<VLC*R}`!)5_94ky(0ZR+=P|+FRe84&2l(M1NPU?=2{WE2& z2gXZe>9tQZ!J_{5u-@;reaWUk$6{IIk?T`<aH@*Lh&~itctTc4`6f>=ZS>DTOZAds z6=)4yNn4ai4h*q369zT>Gdjk5_UOX%h3KQpOMZNgd;XgutNA6k{pseu!%$+DJ~>kj z{Nt(efqSXC+LZ-{IBnXdL~&GcmI<wOY@S#MozR@n<S+YeGD2__`_?wk4@E*K*lQRs z(^65!m>Bu72u>_yHP2eS+4<z60jr6HQfzUT185y$g{p|vWK1;VSYkUFv$1g-u9)=7 z*=Kv)Z82D{9ifw3*&c0Rg5HgL5>DYFE^7!CmUB6KfdQDMaOI88jjeGO<)fq59c&S4 z=xa<e9tqc3t%U4!^Mqf~%TUuF$}Pm2bY7%$GQw9dxXVf@z<U$XgKB{5=aa4BA-`^- zFw6>RH7iU)t{`x-U*C-g7|A4A4+@OO^$;S`a|f<F^r&>((H;w}02L4@8b9qyU)*n# z!+Odg1A}r6;QzS2e{yK({7>Ga3Nfs>PFHm>YFi2P{m*MT3Y^`tA4LV2<pa7Qu&9p= z!}_h|i$o<tI8e(sL(7-?=ic_UA&u8!mX@Cp>7gG~f0M+PpcGVv67#BCV;g+oYb3^6 z;~+<2jAmUYMz9TUD2HWbIaP)|N*!bKfz048(MR<WajY3~K8ypPr!DS+bRVG4rU%Mo zrM88{zrXv&3Mo<Gkz$&1zf+bxZ4{)tqb%Syn>ok8S^jp0-lXNZdblu5AQz&>ygzJb z*8^Sa$ifAO4P`yJdI7>%*2FK_0WI_9|GporG4RWwkD$<DdXJDOg*<qI^%rad?{t8( z2*80F)a-2l5zA$PG3U1>ZbS({WB^9-GJ3S>=0)FOvgTCElr3THg42S!&iIFea>Q>* zFMN5x^L@hxR#070RetXFf$av<Cl4k3-h%3K<oedc8lTaz>y{UPa!_#8U+#M2?S<iV znaIjc_-M=R?hN0efs{zIZh4%-_&$Mu{$Y4CL(2DobFXsn)J08M$d{=iGfwMy&~Kkg zjyWvZ(Q6g3z}wSNZvF{fCPmSL!bLHapB~pzkQEuTc#IGuV?;AJYPz6bqdCX(Wl{}N zKYv%ZVLMc{oh#z;xs{S20BJBaZ)%rq+oV}wiW;3RiMBAhuDAU0ZThOWjlyj=<Kyem zPt7+PVq-Izs@_;>FL2#S>&s=|oi<8p@oG9bX}JI}Yr)A7J>UJ)^pb6};Mo9wb5>7} z2egWXbqb_xT=d-ez>iKBs2$tqf*)!3;WaLe6U@N1-L5k0Zd<dRj|}1I@ym;-a2UL7 zf6MfoBDEA+KsqamJ`|Ryxry=c@G!KL3aAl((|S!y@GGuI+{6$r)!I43a24V1XjJc4 zvo#yl?I{c06@*~)#g80pr4QUWJi@=n6v~$2KA1xng!UaUhN#cN!6n_)mvxIHzsPFQ z;Ws%M@(GCT2dTeUy6`>WN`v%k6j1|faRZ8&B{8-{&j%h4s-tq4wu_v9;6s>V@bVC* zywuC+uwg!bcT)0pHunajjzf1AkKh;07Qgj5-*@g?A51p?xW2z*mk}_bP^1DT;7A)K zV4fqPz3le45ghW%_kQooSY5+rQNQQP8Vj<3JD`We>5UNF4&7S2O&0t*>7gM3GzNf? zBwpeRzR9~+-hT2Jxqvo3!PBWNu^4#=MVAVcNb_JSQXT0-3j$3z`KPgtFfW;rZOy$T zyo|k2M%_K&-`Dh9k|+lMgKQUeZ)my^Ahbi%)e$GFz*-BQ^|~w<>g{}5^Djhm+0}j( zS?CT!H=kD>wbG&OAp<cyN+woF%xn)fG8I?2R|VjbFt?<94O%1OWQ|E_*?x)?s(s|$ zS<?apeF4<E3y+=_o81pyyS}d%iht-v@<PTeJ$5+BnBK^9d95wt>r*pI__CXH!L44A z^_X0+Q8uWloat-7FPVgY920qem#x>Pu@}-y?ZQ0!n9M7WCz}N4*%4==5+9%eg0CLo zIoulkVB9>h>7!TV;cPNlaJ+CFLa??BFrgE8%)Xvq(grxr?C{(kk_${4fri3CUD|OC zUb%UEZ=kD#{y0E0<1`-9&&j*K3h0iI?PgJyAU$W5A}<x!wgm4Nem8+%{ic+L7T=52 zimwuWbdUv*vQxEGF6_|GQ*caf`bJM*K2i+$5ZO;#d9ub!x4iEem^wJtLWI>+hFBvz ze{Md!eI$W>U~Y+ApbLq^D;IsfP02#vXsYmZVaHW?AL~QsoS;%SW8}2k_9pbuKO#LB z0sv~hG@58Rp<&Yz2(T+6ZO-oE*2xGYT$~VcV~>mLFjZv^ciH)4+Z}-U0yvyII{@pw zz?H{R|Jl*nA}-teZ5b`>tqV!ncIU?3{D|W?JoA>d+Lvn25MvSarS#a>CyN81aOgcu zSVih@&t|L2yRggscHB%nMG&3sAaMDt7#WLwDP1R6+g4pd+E$lqNhtt!@bU4<`!Sp3 z{m;I^tcO|+?{$?1?H(+9Rw@q}Iyp^=@EJH)Y<-PB8)6m=a-j;Nk-{!)4ZLZlJLIo0 z*vxW?{DH%!jBkbBS{Ug*YXAE=)Q2&{i|LsGwr+c}9tzYDU~^~38K{)YJ2G~O!T4H6 z<s<E4d{^NUV?)zoA{U3aiVM-J=bWeg2_*ZqXLR+I)8<b;`WC&dq2&X*P2bh^Qh;XZ zmJK*HdX*uUxvb}Exq!f+X`Yy66-9;J3-pa;=x-n$j_0c-YcS3!RN1AZMdQ9V?Avv^ z8;{>$<xBT!4H02eL>+Cjm^ADmfN@TRBR&t?MSmLYU1;<mubgOh03!%^_{YT!882(h zcu3n5vzO+aAi@|X2@r|u>RqwJe0OwQvD-nri@s!guFs#553$rwcI#(%Xc=?i1#kf2 zVgx6ZTBs^+Z$5_(1s^_f+AAK$beLmuJ}40iiOmI*5lsJ?p(kBDMk*tJ2M<K-0lfS2 zi0fLR2QJ#a7qp^~Aq9XmLtLO3pKdFfOQ*9%Q~n(1>3XKkQ)^DLGE)O}@cv@^*E)Hv zUurx{Bw6!OZGFU*$)ZUj=4|tr+O&3@c*ulN3QIII;=3v|SthYHXy}*;Ee<(|cz6^X zM)471J){{UC^JAt+(+mGq8fMxpA0fX_^!!Q@Q$R(er@LS8Nw7*Nfpde>F!U!QYPS- z0rY)C9ZEIXIdXUM^Q0Ens$*bK+^7Ly5+UUPBKK7cN8099<9>r@5}FwIR3WV3=Hu)n zXTryq%{^qL62cA@4Cj&ox+?=5Kfxs%Umv<l_rhXegXu)Nb&;|@;$LwjUV;+%!HLg~ zL9^PI%ZZ207T=8sGv5Vt(B?3{Dfh$Onw+W8O5P>v6IZO)vKytaMZ=V5yOk{Y;p`Pe z5W!8lG+&SAb_iMeAVQl-8H@G4Utd?x!+Djv^c^0qsbDEgRo!bi?+I$SBmKIEGZyJd zzTZ2Y_msSE`}5QJ_N`M7r94zfU;)vZ?z<}JCm^H2fBz_3=L!=kIQ-B~%~B2d5De?p zs<K$G)p>Pv;?YQttjZILAcSu`@(Nw0`GL|Pw2@}YD5W#~1Wz-09mRg6=CLV$*@AK| zQg(C9fd7C74LB;D{LMwKuueovn=*)V%vqPKwqWW6gpdAwwQnMM+J+qv3TO}DTF$1~ zJx-AOfdLYo9UM$LqMeskG18OktcA@BX9uUooEYskFv8&J!HfXsX>CE@A$bM3^@v@$ zT6h58`FOkQ_>xU!oUfT_Z@NtuPCm7Axj#9h@ej?O38JfXt9s7d)=#p_FWS4yRCc&& z=Et24y2sI3ho=)@J0hD84RbhE$e`p8jQGBTXSO{$CVHit54GcI76XmJa)w^yvu=>! zvYQuoI9hznV|lQq{Zl=x=WJo+Qx;CkWet2Y7LZZiE}UJs>z!4dFkbxO(i(%M)nc*o zH|d*25);ngG!xn(!se_Y&r~&s9<yYC1YV@M=<1^r2=cBq%tJhuZzwJ4%%%7_YI`(k ziP@++fz7V*99-)KTniEP>2{o-5Fb8}=3RvxXn@!946mQyd5OhUVfenm!+5$m^WK(_ zR&cw#ozsi!^iF^<X*m!5_IpiN>RFkw&S(BuBKKXPYZ#1rpc(F;%enK5aGy-{*FD(` z;3*>!;e0#Vv3Y4$p3Z~ggCi?&8L&jk!*ocgB9iy-W<TkeTrc;d<OUlygSsD$b<195 zLjO5F(*Cu4!1naIcHw3A2J^lJv*u7DJfMQ|neu^9{{exgW%}Ka>wEHHRu?CDGRjyv zO9N)_6Vwd**pRpNrh}|=0kd1Zg#Q`30(eyUDpTB1Z6wcnRK%g>9r9Bzy(BZhnQ(@^ zlsEXpHZ-RYmo1&kOnK&=qj!UiN@1}$dZ12Bv&P?I_JqRM%h=L^1YT0N4@h?)y1IES zXUEU*fxYeP$$5LX56%Z0*1{wPLJt)_4G)@~Ib}k`*}3|_zkrPt(XS2TbdGmck>UV* zLwX%+lX2H=*&Q0l@p|hBLf9)$0mf7Q@`1OT{99BYQLmab{1uE4+UDM6dM($+Q5Cs* zeFCxs^5*rNfI0&t!L9p9TL9FN%|U3?Yw=1ua5J>f7hXssyg$@Y@1LHScGqS7c1Wm; z-JrFrXW7wb;>i{WT=LF7#ZzZ(Zq8Mz@#~=;Z^$eiXvi%<=<zyj`b+{+75gWTBp7IH zvElP!U9D$mnBfiJtB_H^jk;rJ01H&0;WB$Q_!v5wdLFEa-tbmogm4aiv7{_`&(p=& z&OicOVdyL_e6K2n9n}D^KB>!(nYe&;BgE}?CT@9B<GiZssbnMf!dq@3p{$HR1pZBX ze!5IS@WE@Z>PkPxb=K?<Kr1-IJQ8p?%4=R(;_}5%GE@A_98TVfuPgK(O6?uK-!$qj z5B_2re~OjCisWa?t4;k(wqwpe3F8;qjL=zV$M))2$_qyR%MShTTUZSnV=Ve6vM9lD zVA-KC1uX@U2y;3Vb~%owi@Y?R3l{x|K*Qmp%+XaRzQuI$hM0_``M8jYZGdlRH`g!7 zOENt)n_|}!wi@(B$;aH1sR4dHn8Q~?+%b3fKhpggdO#<YWZT@v+t3=mXNzM!?$z5B zhouq&_Vt>qVAM+#md)1OCkJj?M*7Laz10W!#H<s9sM;Y#zNDm_4p(TNOPgFvR0pAD zcfU=qmlZ(d;}3mi*x!mR)s5H%W`S1U<qnFJy%@1qWyjl+^}=g;#}`ChMAbM9u&BcP z$N+u_xkP>$JE!)2uOUb|n_GmbVCplb%#~MNRS@`qq(mBz-zLgSO$Zf7*O^(oj}OEk zB_1kom=Kta7s)J;0=(vZqBvGHL8JU0NGkRz$~>uEbk1>v!PL{+^|A^-LYdBmP0640 z)$Mv-&(S;Nd2!p~62Ls>EhPqWSIkF$<S1vEw=~WvOv<M?uow1*-S+O`u$TCevhLG1 z1cP_}z#B)c=~s76^oCN6B%p1j*K}as0}dex4Nh`Mb5IZA9K(Z8^j6+`*jzC-o4=`_ zmOgpor%qZ+Ef=13s=a!UDrS!ozBrfO^AQS*9W=w&0uv{kA=5ph2<x*AFYsL%qKWDt zH$WK)OK3=5?487ikku5>4SRVg?nJ@0E-E`mq(F#X9p-G15G6QLqW&P?%GU=Ez4{c{ zf(Y;s)i&`hW&YlcOKz@qpkZL-wh|pTl|&S2`nI*TNg3y3pW870D2U_OLd~<4Ff%h= z<xwl){hU*;d1XPV0^K*OnVt_IjPv2@JjoTdX+SAIzt2EQG3-pdb!luzo{2Dc74jlY zNSaeADAJ+s_FTxe7|ZP`ldHrzk-LP%K&YPk`J^}C1+M}XDS<u<9y{64Nu=s*3PU=d zk<EkG1>S*W8<Pb9J-Dpj4{p(Gk)bEgvQP6x(vM%o%Y0T0u2gV^iVduEKJ>|yL6slk zvoaZq-o!NyD+B6UrDwa!R{e8#nqwpp0;M~d9FYOX)R-9PwI9Xf$wGlO`Kg<Ev;qa} zk(=!|$M1{*y8s0xig5w@;hPGd1h>}I{T3pJsSKF^aq8^uyK0xUw>clT#(a3)JhPHK z2j{QsycB_`ilHQ_c$&+|kbxg1t|h;Z+(I&njpHHn2jT()EXkdoUKax7+g2j!Ek4<p z@W~9c{3+_wWY_9Nv8w#WR6V^vF>_IfW7N)kX<v5!dSejN?utA{z*-@(N)%49w(4rV zdCZUt_p)w^5(IbbtB3X;-cGo%=Gdpjz1VV7E7DwQ)uc~FkC4y8ZNh1_GVjUC%Td{4 zQ$m()aN1its8UpQeA#>2BhN-o)b`7pr~3ud8Dl-RoI=L$3x&5UhM<15)ebUfd=Dx$ zH7S3-wWWui<4E6I%y__6typM?CNEB`w{ii0U4t<&=UBJ(Vv!rI0JTpq@-$gt6J^{A zyJPvF=xLyFSZwwd?_opPM~+k_tj6rF1zTicnK@vLafeZ2);-#Smr4cmd4b9Y^Y%BU zPK@?C72E4BzcN#HPB3t!2_O9@hR6ur@SN;50`BdGw8&v!uQML4p$r4Jz;J_5pFFe) zXU*-*+y`a26-8p2f9EH@IehsGXywxo0pr+0()OJ?SBBhHlwrI}(!Sin4_FOvv?n-D zHV3#nF*9jA6KX{=ouhBSsCL2EL5#Y7o#E)V<g@u9-Hi2v(!$P_#bu-*&EZvs(|5e4 zkS6joo8F73YY73_utj`6P}4*2Pz-y88H!OEEk~X-w9x{Pco9{>3v>Y;uKrN7uV!~y zUU9Sow&Z=bcl<smieY8%va2)|i^YCLns;OykM7l$vYDo(g4{<CoRHs!`N;)!MCUCG zEw_%Huh_O=$Ppw*<KrPajzKFz(!dOr%<Q0zpwU!hy6XWeL0ba-UAoov1(V;=>~?Uy zvw9Rc`rU&MLQMCO5~S$gaJ%6JORF24mqrx#z{4k2Yr>-^$mrdGf|VC>+(&0%b2sN> zv{q`6+QtJ&MWLsEim(#EdT9mnw?noe>pbX1M^q9h9QefmMYzIoZD}q8X?HHL831|} zqb^yEnoS2A*`iTmWTh9J7GaKxm3Vy7;zai+T`;dq`>UrqT(K9gt_Pq|x42l~q8o!J z2;LR^a!a6d`!#o`{sAjtkS$u(mW8HGYi<wJ4vx9UC=0$6Lgw;F^{#ijs<iLU4u`BR z{1mT!*<1JcgcSisqKTy5#GW))PKHh`^`ioA{eX2mU7hGXkw%Y*?&#pCX!aPyharxC zEu+Ws(SQ^{5ShP_tE&FE+J2T)rQ#j2Ree+(HC&B`kisJLX4}*RBoUZhTm$jmtsrfE zNxrg}L0fY0iU*9TZMLv!re?!Zv|=y*d{$qRCl<I%xwL&t|2%!%=W;(FVZeaYf(z%H zVyZ0nG3s#WSH28{2||2sdgZ-kHtY+NiH_8(T`IEdd_v@a&THOn?cn@*IG(q@)LRrE z;LWw9_4&jLefGL#mnR~?ab>sA%vx{xy=6WD)7e|c+T%7>@fk~+?h9TOtgp9zYh)YG zC{+tn0O~uayq{EPTE4U+gRLT($k=aCp%4ZE3m|H<#Q9p2$On-5u{V9&=)^xUdBg1i z-l-@^yI@Nj-GB<<_<;Wxkx4w&T7Ea?xSLzfu7>xfd<8ZJw@O-EtlL<eKv|~D8D#gO zZU`@Zy(;2%fVgaX40=Tz=GAA$?jO~08SBIm?cg5@4Me>YI~P4A;dwd`w`c@xz}36% zpT&HzP1rDsL+0qBekr?|H;tD2XS@kd$8wwKBIm+v1h{g-zI%q#4lfkt3Y_HfLN$DS zd=vI}O}k(hvP+tKeg*s|;BetR(1(z#i^EiN*aj02mGz(>%tlz{DI1K(^&MRZ-?YRu z&DY~yD+j`Ld?*hZI0*COcGyZ=0JfJF7`OX63ReZLZzK#<?hCYz#2L@ZJK8pY$md@1 z)+=~xqfewegxvtM`X~2@*rL#)Hc(oo8xV+vBYH3G?CzZn#0-v+CIMq~r}@+I7@@`1 zGSjXi_qgxEC1;PVHqp>mS*h0A6cx*2K7!jKNVX}Nj7^gm5JhWy+Sa%UhX(MEwWUZw zoGj-t!rtIRxTOQ-bjT?0Bg&(q%p0aIC78#$9<O@^b2(T_O0PjIGrbz_#MnHU(0*l~ z>9QY&Mk;pqcO#lbvmCItF|ac1QqX1$5Akjd62D1z-k9!&!vKCo4@<oS()R8J>#46V z;6UTn{$zr=*+(l~LM^nsTgbf^t&(MH5b<2jn5zKJjX&oDSY^j@)!o?-s|<tey030} z^WHe3Ke)9nu55J71D3l;SVVYWJLgPYRF{$tIpu>wT1QfAToMUq+-`#YZEFP^v)g55 zj4E$>9cf#5w<};r(YLy&k!Xq5j62P-woPqh60f(q=Zcf;0OMPJQrGV}`d?VjVoOXc znqye{I(^sPv@U9X>BbZGHJ=a4TM;(6|KvxNIzpnO{o}ePDA<_9C|oY{`*i7?Z1NP! z%v%^+=zquH>th<R898Qi+RVbkIq0plYtmvbsg0>PhhUHjVwL5He0SFBHRE^KN-hJt zZ8hc6uQ*?X`-V=QV)tb`s8OIOr|n{VI*|65%PIuaII#8tOSM8RY5L(czG-AsMmRA> z+bAw!rq<sIau>>a$h*i=gzL)P<Gj~HQ?N>*J-#t%$s2JpA(L4Y%b^<&&lA4qc<(24 zevlRPAH<{hWHx8=)Vg$rZ~6g@I-IFl^p76qT#PT0c8zD03@~X`FBmwy&yP7qn#`89 zNGpplcMLt)J!#jn_xjV%aK&aDP;#x6yLvJe5O{4q!gb|iEO0^OM~Cc+8u~RPA~>3v zcm6Dz*>Iy?jdiIg;SJ}H*=(UKSWK7`+gls4B=nU7UNVC|`<qR5w)Z$p6ivYQ!xh3; zCS*ZCM5carMwoXu*XA>wADZ0;daqa7U&2@%PostN#2MfO-U2%ODDduM*7Q7&e6rs< zkEMANMc1N78&k&FLo4>l4F2`ol&k9nIzW;(ljYBZb>I+R_xoYRAhwc=paetPFo$Z7 zk4Pu+*|D$*n|UQ>sU_VC?u@DlnmUV!&oJpPscC9L8{*=iQi4tBl~nt+vlEE!u8<$F zu1+xzO6^q}#|JWRLL~kfpS-FX1TfylTC;b;cOlkG*kDk}9m~WVua>bo{&d#$9H8qB zwMd>q|It$Bi-6|Q&Th{ub@#bkaVw*Qoqrqy)JnJo0f+h^%l&!3F9d+i_5=6^#hjDj z@A45dp+d)H(K+zjUaExcdQY{NRK8AKwOD_ehuu9TX&1^e7@1W)Xy<Lp=FS=+j!PMB zH<Ojm_3|;$EdJFmmhja$pUWBt;;@i+X0?SD3whKp%D{vYn>)eH+tz2ejWW#$Z*+Z} zaF#b7$|rb&(-FVNzW%hL&-3jc7tWG%l=aQ&2f)J^!+zz6epKY%uH;J4dIY#%$04RX z+RK-5?yedw9S)G=i4A&}XIf{`8W5ISjO(NVCcLJD(?k;eDB-u*mTvH3e~j)#<TsM( z66oiWANR!`F=fb_6d_d#ZrgOXgl#YNdcT%V(S8)vEBK{uEDxH(w83tJT@0<(XfOGw zUU!37b^e)W0d(>-6B7}KxOA}TQ?MvzWdK&w*^nw`l_lQ~)v;8JX_m(f9vBR%vv59J zEdDlvRSt9N87~+3dF}4_unak1_TbDdvi2y?6?8mK5RgO$4#YVwe^K}D8z-(_d*mJr z3IZOuW0cPGceL9ChZV<@uajal0q%e6x$lI$?1L;d!~I7`Dn$Pga||@VQy=@&u2H*O z+vw5xDHYB!v{dH~W?jz?JMx8ogm?Dki=rVB@ndUXT@y#mVH)Orsh;q$qtzY;4Y#X& zFtr49*-n$U*7OgwW~yl!W7uiYXY+VV=LHYo{~euP8@*xVqrjeRo!hrLL;k{j7&{jg z0caELv=T?eaOG-%8K`D(f)WS25HzvvRs_j-UYvO2cGe}m&bn!up0?4FErbUjHkhpO z9=wFmTjVweEeE*9x(^%5#^X};&0UoZ(}=yxXuVWMhu|#b{N;Lvh+<YZ{%Y&F*i~9c z*4|iS7t`8WTg%0~@$O^XW7v^}i+%11o3b3<l`Nk_ezJ6oee{kf+o!tw#&)4N2;Q@h z1Bo<T^jV&Ilw4-xmW5p}ZUQWMCi5Xy&v~c3?J66+!8Z{Wk7ZSHtYZegXjex@>ZRrB zzG<9eY`pg~=)0ZSdV#Yu;A{5QbB0jbXE;3}V_EmKUfF!QSd-+-Jzd)}K&-k(?aAXF zcMb6+X&&Q9f`RhXbH+?ZzN+O1YU>q>L!1X%AjY=Dk5^P&s(Gby&1UYpSRdf|@$7IW zBfN!|DXXFp)&pf~!k1kts>)%4x$cMQb`xEXwwSo)sq@ZfcFF>M%lVkAqW#*?EYi2M zB_NNN3Fi3kRsBGtu-g;83>vudf#?or!FKs>rL(t%!+fNGmDByLWK7*X1Ln2Dg=*Cs z^q`<w@@LYbdb$2OUOzb;Er|s{Mn}lgF0|$mLk}MI((V{>daE^8Gjx-2tBkw9F~rgt z0fJ*j&DR|}7K+zvZ6Qx|mf0c8r*>NKxoK?c%i|KP3$wb#uDx&b!wiP8X(bYacciaD z0pF+BxLUYSfi7=g0OOiIkszJ8;U1)h%VbC){Ed&7ih8hz9X8PD?vWmyW+%>lEi7IM zWBd40LTXYUs$ijAd1t=DI5M7SU{wYaeHu3jCS3k`#FXM24LGfh-Dx?t`uE{Hhl`3p z-6TSs&W!XBjHUa;n+ZBT0kAK^!5<+;GKdf-d2yLnun33u**g!M%4Ej`!zacprCcHm z$rRbW9a=qjGcL~1Cdc~a`}h&%WIMmisE^HyC}Eigr&(znHX)foH><^=`yle&0;Jtt zubax8<zWKKaWkDp!3j)`4TmW&#!ruMp3ZB`e6?`yaySs4;;R5!6#Ns<*LC5pt@+*u zRz>lH*ZS7eo)R%aAjUFw##@hU0ak`Zv%_U#^Eic&mPOUFlbU;UrUv}AnB#75@zr*% zT$Jd-C7(U+xye--*Pz_bRV20`HVDJZ?UM`8<vxj0w$bBw)~=jbKc0=ZS<$`5%n@g> zn=zd-qaNP5TP1U<4fp6@>R$e?GZa$~gu}1%-2)Mg7-e>A)Im1-mTSz-2j@*;fNGHA zD|x2?Lf8@Y#jLr{y3Y|O!s8I-_8b;*077x1hTri9>;<y`JE-w+L&5V)Ol}A9xz2Ju z8CU)4ag49q+BJ!)YRn-Z{pNNM<K=~vt>x{|c%1pZs?Xx3amb9_iOxcltceeA_whVR zT94&kL!R@>^PX>F%sIc^<y^nFgP<A<^laMQar8ky3^Jt=POjH0<`*8V;b>^&i3yRC zSs9T7?zx0IFw9Qk1yWD}{aV1bB|6tXdo06e@@JW(+ujL<!@n20@2|vzd+1oPe}kh< zJifs+(BOji0Q?ua+|X@T7BTF)^afRAh^70p8rqfEua^DeR4_TmT^HCaadT5ck~$m2 zZUw0cyd=yAaqLH=(w&Mfn$ah(i|_M8Mjlx5At2(HY5=G=xhn)ZBhtZx$F+{S;T)o| z#uBT3lj|wW3(@veg2Wh^9%eyHlzZs|dl>!})t@h!=Xq8!c~8&hKXY%X;Z-hofWI5- zJXm~=boRrCfVm0!V4a>$`f2odaul9|57FRjAMyZ!zaE&p0PEs)#bprnA0uIm={&;u z`-s{L5a{wP3i^h;G&b~AU|3Z)_!fmYL}0xTum{|a7p4r#ml13f3r2yD#sawur+6r% zkZ<gF5XB?njO>Jk4`j^#(}+)Ta^~jA;wVl$e=06-;&AA!y^_OKuzPE}Q?kk7_dR<L z%oWhs%w28JE_h99=y0Kz@>A>H^r{b$B$6(hWWZeJ{vK9$9`YTOgL9<jVGowZ@ZZxJ zMM;zww=*68C@1+WcA;Cqt(_IsXv<$G(`9~7NiRd^D6cvnM!uIX)?m;=<HC}r4E^0N zhk#v8+`%bXwA))3t)~~;k^c|{a22;_v-G99TkV#!x+tc<)yLalQ;!$gWa`ufjZBE~ zL3ulX2;aMQ6CTjREuBrNtHbC0R>1##N=<8Yq#-;bgY&+>X=@+S&S)`W<H6TK9>AFh z$M4sLfzHIN@={0tPirduX6f(f>fm5Kc7rWXqB7T6o`^@Z+PUl8agMgLfv$TjVfO^h z2|8oJ^C5(NJRTJW?s*MX$;dtig*AtM36z!S1NQybm$U%~?TyIKpIOv+as`ai%Sgsi zVc25sg*oow<@o$N<u0F7Mcn?|CPqjhELe!^u88g?u;556sT?&jRMwdD;?{$PpX5ue ziTsxj=-V8O!gIv0LI-c3Cdp%;+L3ZxKc>-roMSJ63?E~iV7v($i}aj$KhME9ZNZ^g z0Y&!IdQIX#30MaZ#UUAv7`DC0CMBi`upVpUdtZr@$+^m<q}nToIn-9v1_V=ebYWhn z%SLF&4Ce0zJq9t%bL1H6%{nQseB#WWSW9;g(wCbrNaYxOA=CjP-Tr<KXor68)J;YF zOw#?5XQYJ=^kgId8*D`SOk=t~p$G=ca~`Hw_PWB%D;iM{ClVzvCnY}^Eih;Ug{<&= z0{^c<vO&hC^!CQ3t)s@knuYFPh4FBP@Ed&`Z5M|kcz^Y@7!)||3DP9wFax!SHS3Mu zD`{1P%dN+qyf0`D9#tRz@B*xD46W_K8m<huC&Bx$?pnOX58_thyk~arbDz?+BO)#G zBfeFtcSuv~Fd=MaQ?xu{FM*TmMi;mMVB!Nm3OwBb1B4gw*%m^NY*DSHizLcR`;*+5 z>mBOSO*2}RuqzHX6Zy-lWEs4$alJs6l<MFDqvA7fFJJ<9*Zi9$f?iq!Sz+`di$3-8 zFvEq8L<bW|ALwUahvZc1n8Sh$_H*XwEk|OESOVz6Nw2@hK8rWwI_-s)eY3EdBD0^6 zj@;j*C;9FPLR=i?;BLiB%v$;_suO^s$MgFnobHu5OLK2BxX}Ol@Uj|b4{08)!M?`` z3ORt&Bl<raynh|8J1l=Fv7l({#ZmKhp250_F`D4HhkkmoLROg^r|~NgZ&OgnjDR1b zV>dUzgXt9@EP?y~u;_q0^N8wa3P*pyGa{~JmHZJ@@{u0!^^&DP_TO~g#(F)faMVBC zxKh*EGp5uAaY)%w(&g2>(%vY1$$P>{RH>4%?P3k1<uU<rK6wGAVZcP1XTo{~7!1MJ zkK~+3?jV??19Bv1g`(&>ke(22Q+}!Hw-!{F^BD4Mbp}uD*nOMqrk>=d6*uZ<*JcOs z45qHoP<oM|4)tqWU9%0Gc!CP+Mk+GIXBNyI)_4|9f=)Psg!izoxX;dp1pm%}eS5{> zHbQ%AZKk-Q0pxXR+Zl&2>#k?B>1D#QGlVEzZ&27vx9tQqHVqZj$!zW#XF`M6rRRuf zz5z!Vqqo)3OqrmYU~skQZ3CFOsbO|^;kBOZkB9YgbUc*zB1n&Pjqbbmd3Ijy8*z^w zdO?}XD=>Svy9hCcAfomhyg81rg#u)e&JI)iy6liJt>H<s4`s;^7xye^kXKGOTfj+W z_$7Rl6djN&OyMQwalW8FdY&TEq=Cbd$7+jxG`hiLzq{d4fZ;@LG@@m}V=hY9Q`ISW zFf){|*LAPI$`3R!C;uD(%-n7Xl7(v&g)`#fakv7-gzX@~L*8Z%`7pApFr&hQVlJ0U z6G)fH^BmMbh6NQQb_eVq(z`mHvCs@--i;H&%M7SpHF#XALXxK+t%Te}2mc%f5J;YZ z`%aQ@34BFGo|$_`*eC_jN*1gwEA;XbY%*9BDFc?|d~{FaYh0?4z!5KDt-~*)J$vL1 zTaxz03p^-9xIk|)<*=?`TbI8+>EE~&Una$9PQC<~u>Q_R-^?dJVebEb{A>YR94w4% zssbE@U<DENk%-y=So6fj0W+h_$#Wj>Onu%;VhB_-tt%#RDgMsh)fdnU#W){;UQ2X* zIxkT+%@sfhSZanoR`fTL41V&4(S2~Tk#z#39g09Oop6C-B+_~JSJ_i`UW<=z@v_r^ zm?qW|y8UV4Gcn383lH85H`15Wz;rPOx(&M<CYoprfAgP-4?}Y;K;N((d#BT3e$dE3 zznHYNppicfi{5(-mm1H!m=T`O!z$;2baTW35c#$=55@{Z9_<W!qmSi)^2kE~=CE`i zH;GV@<npI;A;!KjX@;oghF4gBpy}`|&RbxZz>LPzZf3u;ly1&Np}r$q$jksdNMq6Z zPF4<DTeGh^-Ai=Y2BR$cGIC7f#v4P7X!H_)Z-nvf=}G%OfOco#>PHgQ9+1&(PzKii zcC*#r7bsH^lz|fJeM63ghME-=U<~1rwSyqdbovTIA!fn#gWe1?wi)H+LTm-$2(s0{ zHtrA<bb4?Gt+Nuy!O&y!@-idA8V}GOvQTkTqmMhp22_1EM|lt`z7j)0ra0oO-$0yg z#x`*U77z4(FK!PP_xVcu6T&rcYuX%@B(&~X07b51)Z9V>-IJ3;S+!k2D^B@|;C3p+ zP9Y64^;keDs?LC+pxF<8(KrTg2(>ralkjb|9}z1FvPFpJM?82JxiIF6^s~-hodd?K z5ldPS@O}<h(*cc*iG{p7;`WzN1FE?O5B~c29d|(zgEx;@z*1q(K+Y0NK#O4C*W7~g z;Ak!V>Su2S&M3e8TrVr7Q~U_N5@_6rLE;~jE3O6JfG-x7f`+$u4BLMis#nPK0!kI; z`o-J<h#=U`>WXi{Q^0l7K*P+Y;GMQ@>eHaW)0S}nQjGc{)=C$v5dP{7_k23q2$mqf zU`e|qL4T~tT?yvKq}P!*0H*n%w|L_7@$f)4S;M)3fxvn=!ydiWP%ap0{pp_6GrTCk zZ#UodNoIP88*D&(DeYi)iG27<V|XuN@Wqg(E>B;^B(S>3Hbj^h0PUCkN`oy5tLqL9 zC#>mrL@$b$&cT{U^NST?y5tXHhd1{p^>e8?dplwdlOC?eIn2n5x!>-gUmruSc6iFg zO9X5M5ujMbUvw0IoB~(}kfke;53c#Rm{-6WRLCLQB@c0SdxkhDoe2>!W?<->l*lv+ zpvyoqXfNnaGd<|d*R!~^7O86@>sw*K_k!dM3YS|7FF#miSo6W7A4mNKsE9+!-`WeV zZZa3qC(lcCO`SC7Bo^c3!MHd2)G*HnG)>&|A!2l25<;#~u<l0cWIrFvl7%m8W>2@> z<EiI(n(5{~>!%;2jy|^-b9>rz3;j7-DZ6JqpOnsI<|1-rc6{C!+9td5$e7(<`{Twu zPR7qTn?6+eKHI?1F@umLlwToM2<Zu3lKTdUF^+opJKyK|=F$M!h^Z_-Xyt=s4&YeR zz&I9w_~3|**h_&?xvo{%;v*l^9HtY_y^i=}nCPlDKUQX6vie$qA;6tXKj(CErgfh7 z#}2_5wv^l8X4eo<*|U;0Ro<JLrqKuyt{afWi7DQ2L7klrWyc*y5R;rLV)vUvX{--W zYoUIB`MV1Fe{g|#aXn&i)Qj@g5VnhlcC!JI^!YDP<uIGd!YUXpxb(<6fYJTdm_D6D zduv*_pVrFcb>Q(Lw>G$4&>BOX;S<zmwAr*y9gRS`LfRNS>@tJsPBtkZdKnmW^K1RH z#}?QH!>MvB++T^8;RtH(W80Y?U;vYtb`)}}5)nOu0d`#FcVx#ryLT>cxk6RF#b$Hz zceAlKm1Fs}9={)}t5_g;XEnt#wcdT&3sinE5bZJQ^0N6eOfzvbV?d=sN%Cn7q-;Lh zj5IWY4JaUors4-&lOvC1F4_9#ju;w;nT7~YF?;}>jGghI^|1-k1j;O&JBZpL@7NE+ zB5#C=FpcGKnnGyf7-bRDb}f3&XG`-RP4OTdT*Naz@uv6)Tb^)Lh(!dKL$NEv+8o$K zVj)0VUA3DFgkmd~aCL(ai!U^=*JL*#p%pqgczwZY@yr%l=>=F5d7j}*oFPy5*n$=F zxnw(KJbTX$J=UfWZ(z1b=7;NjfQno0KHZ{ORxOT_OREZphmFuA=zbQ5H*5j^jy6Zv zDg1Z1oT{xYY;5?KD8#wFTzC#Fj6gUBriIve$VB1Qq5Yj&NL=fqZLA&R161erD|*56 z*<yTWb9AD~P)eZW<F1VZ*(s!kH_i97)6BYubL8a~L?6AJuAKBT`pW1#qi=BcVkY(s z>m1tKm!KjEZkw51{I=fSC+XkhZ{5rk!s}2;wmL6}@p;wX^z}|B{uQ?m*8gF0{TgBO z<C4G{6aD@ra!mY%|7D?lHpAB={g~#UQ4uCgpJ5LLPy`PM@APjEIGJo8M?4@<kDK)S zfUD!`%dybm4Iw}FmYxzUoY`!6y{C;X+VXZA!Xrn237Pe_xTqi7>-G9?|Mts2{h)vT z<Ig|;{YxIVK?HaAFaP@EfBxf#aUX|Wi#7Y#@YxkD{!IM-`hU>>{oD7i{u0Jn_G|ko zWBlna;WLVV`T6ta+0`Na@UP#$@=M(p&5wWkQO7|@kJ$Vv$M0tU{O`rj-~aK;@BdZS z$PTlgDISjTbk>no`5LD4pU`u+Fl4SXNv&;R*nfBnz@Fa6qI-}m<RYj)4?Z5;iI zz?=9_ctPBse+d8l=O6#eKjZ)WWAqp9pa1p)u8AM?yFcy){k!=uPezZ9AM=0z<Ny5J zfBP@L{e8JV{^kGuagEzw;oZqWH2qVOb^WiGAPb5x{xv9q>;r@HuhBhhe||`R{$X|S z_5WoL%VmBa;`*Qe`412Kzx)Ujd~nPAwX5Sl{o&7p9zUM+_y77KCV#~z!Ts0Q`pJSz zoZ)Z$`!C1ezO^6P{@;K3!*kP{@Bhz!?E?|)gRX!-asSGX{`}uAguh1jru>yY;J^Lx z-F=_o|MIVXUts-g1G@0=3jU?M|6qTN|L{Kk@EP55{073AThyZe&!2++&p-ZfIsX14 z|NP?*ulM)weD=(q^(CnP^!-Trzy0~gE&ub6-#?)xzUm);1r$GHuXC5Z{q5g>`NMN3 z-@Ed+8|%N{k-z+}@5k@$`akI|`_DIH4n1)6eE)WX{qkRL$bb2lfBF4&|NdY9!@Av@ zAH@^#sL$u)$2(|ntrjueGSQE&xfj<Te?_e1_XmGTv%mf6*0yEyuPl4T9oAj`5<ZDH z7f1E|5kKmf{loA6^I!hQ|Mm^y<zrQ$xBg3U!7Y~u?XUU0c-B}!1p4V8KMwrzFSuK- zU2u(mMPlj`zx4A1NbXtuYuvXe67gNrl7!dz+lrLm@fg1?R2Y6|_wai`uqke?;J4o? zg8aLX{qbjrmi+sJaetBiGNSkJ{mg%P#B~v8O&N#(cme<E0saNQ|Jwu8)sh9DU;qB+ mTYAzTKOgVsg8BD1L@)a1)BpTT=&Ankncxq{|MVaK^#1`9)m4iC literal 113179 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�AsX) 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 diff --git a/dev/notebooks/6_screening/index.html b/dev/notebooks/6_screening/index.html index 811fd8fc6..13601d010 100644 --- a/dev/notebooks/6_screening/index.html +++ b/dev/notebooks/6_screening/index.html @@ -94,4 +94,4 @@ ax = Axis( ) hm = heatmap!(ax, productions[disp_rxns, disp_rxns]) Colorbar(f[1, 2], hm, label = "Flux [mmol/gDW/h]") -f</code></pre><img src="data:image/png;base64,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795NURSj6QEAAAB0PYo8IszPz5ceIeTj40MICQkJQXUFAAAAQBQeg8VmsyUf9fT0CCHGxsaMJQUAAADQXnbv3t28saamRpmX9hScBysnJ6f1lne+VQfKOLFz4PVddh2dBXQ9BoThZaymx49nNiD0EIz/KNKNjcwGnDnIgdmAjGP2kv+iH87bxEyoLjTRqISvr29qaurBgwf79esnbrl3796nn36an5+/d+9exWIqWGDZ2tq23kLTneN7BgAAANCqlJSU+fPnjxo1Kj4+fvLkybt27QoKCho+fPitW7cUjqlIgRUbG6vw+QD+P3t3HtbEtf8P/IyAgCAgKqAIoqCAyrXiBlQLYllcqlar3EqLtqK9XsEiIlZRQbG4AEorta5VEJfWpWq1pVSButStCG6AO4JKi1qBgggB5vfH/G6+04Qkk2SyEN6vh8fHzJycnDA5kw9nznwOAACAVvH397927dqMGTP8/Pzc3NyuX78eERGxdu3a9u3bK1ynIgFWWFiYwq8HAAAAoG2sra0XLlyYm5t77dq1wYMHL1++XJnoiqhiqRwAAABo01pbllGBQPDZZ58FBAT4+vru27evtLT0X//616+//qpMnQiwFJGamkqJMTU1Ze+1traura0VPqWkpISiKJFVGnNzc8ePH9+lSxdDQ0NHR8eIiIiKigq1vhMAAAB+0YRq5vqjJTGWl5fXxo0bk5OTT548+f7771+/fr1fv36+vr7Lly9XuE4EWIorKiqiWWpqath7KyoqvvzySylP37Bhw+jRo//1r3/l5+dXV1fv3bv30qVLgwYNun37toobDgAAAP/n77//vnjx4oIFC5iMnjY2NpmZmevXr1+/fr3CdSLAUhU/P7/ExMSqqqoW9/7222+LFi1avnx5QkKCnZ2doaGhh4fHqVOnDAwMpk2b1tzMfZUBAAAAUEpeXt6gQYPYWyiKWrhw4YULFxSuEwGWqqxYsaK2tnbDhg0t7k1MTOzYsePixYvZG01MTKKioq5fv47VsgEAANTGxMSkxe3u7u4K16lgHiyQycHBYdasWRs3bpw/f37nzp3Zu2iazs7OHjlypLGxsciz/P39CSHZ2dnjxo1TX1sBAAB4QtFypA/VkkSjkyZNkrTr6NGjitWJESzFubq6sie5jx8/XqTAsmXLBAKB+BXc6urq6upqOzs78Trt7e0piiorK1NV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" /><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +f</code></pre><img src="data:image/png;base64,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795NURSj6QEAAAB0PYo8IszPz5ceIeTj40MICQkJQXUFAAAAQBQeg8VmsyUf9fT0CCHGxsaMJQUAAADQXnbv3t28saamRpmX9hScBysnJ6f1lne+VQfKOLFz4PVddh2dBXQ9BoThZaymx49nNiD0EIz/KNKNjcwGnDnIgdmAjGP2kv+iH87bxEyoLjTRqISvr29qaurBgwf79esnbrl3796nn36an5+/d+9exWIqWGDZ2tq23kLTneN7BgAAANCqlJSU+fPnjxo1Kj4+fvLkybt27QoKCho+fPitW7cUjqlIgRUbG6vw+QD+P3t3HtbEtf8P/IyAgCAgKqAIoqCAyrXiBlQLYllcqlar3EqLtqK9XsEiIlZRQbG4AEorta5VEJfWpWq1pVSButStCG6AO4JKi1qBgggB5vfH/G6+04Qkk2SyEN6vh8fHzJycnDA5kw9nznwOAACAVvH397927dqMGTP8/Pzc3NyuX78eERGxdu3a9u3bK1ynIgFWWFiYwq8HAAAAoG2sra0XLlyYm5t77dq1wYMHL1++XJnoiqhiqRwAAABo01pbllGBQPDZZ58FBAT4+vru27evtLT0X//616+//qpMnQiwFJGamkqJMTU1Ze+1traura0VPqWkpISiKJFVGnNzc8ePH9+lSxdDQ0NHR8eIiIiKigq1vhMAAAB+0YRq5vqjJTGWl5fXxo0bk5OTT548+f7771+/fr1fv36+vr7Lly9XuE4EWIorKiqiWWpqath7KyoqvvzySylP37Bhw+jRo//1r3/l5+dXV1fv3bv30qVLgwYNun37toobDgAAAP/n77//vnjx4oIFC5iMnjY2NpmZmevXr1+/fr3CdSLAUhU/P7/ExMSqqqoW9/7222+LFi1avnx5QkKCnZ2doaGhh4fHqVOnDAwMpk2b1tzMfZUBAAAAUEpeXt6gQYPYWyiKWrhw4YULFxSuEwGWqqxYsaK2tnbDhg0t7k1MTOzYsePixYvZG01MTKKioq5fv47VsgEAANTGxMSkxe3u7u4K16lgHiyQycHBYdasWRs3bpw/f37nzp3Zu2iazs7OHjlypLGxsciz/P39CSHZ2dnjxo1TX1sBAAB4QtFypA/VkkSjkyZNkrTr6NGjitWJESzFubq6sie5jx8/XqTAsmXLBAKB+BXc6urq6upqOzs78Trt7e0piiorK1NVowEAAFSttd1FWMny8uXLwsLCEydOPH78uLKyUuE6MYKluKKiIukrAnXv3n3u3LmpqamRkZHs7Uyae0lrY4skwU9JSUlJSWFvwTJEAAAAPMrNzRXZcu/evc8++ywhIUHhOjGCpVpLliyhKErkCJmbm3fs2LG0tFS8PLORPbg1c+bM3H964403VN1sAACAtszJySk2NnbOnDkK14ARLNXq2rXr/PnzN2zYMHXqVOFGiqJ8fX1zc3Nfv35tZGTELp+VlUUI8fX1FW6xsLCwsLBglxF5CgAAAPCuR48ely5dUvjpGMFSuUWLFhkZGcXHx7M3RkVFVVdXr127lr2xtrY2KSnJzc1tzJgx6m0jAAAAT5oJ1cT1h2hrVqKamprly5f36NFD4RowgqVynTp1ioyMjI2NZW8cMWLE2rVrlyxZIhAI5s6d27Vr14KCggULFtTX13/77bft2iHwBQAAUJMhQ4awH9bU1JSWljY1Ne3bt0/hOhFgKc7V1VVkS3l5uY2NjXjJBQsWfPnlly9evGBvjI6OHjx48IYNGwYOHFhTU2Nra/vOO+8cOXKkxRoAAABARUTuHjMzM+vVq9f06dNtbW0VrhMBliLCwsLCwsK47+3YsePz58/FS44ePXr06NH8tw8AAAA4y8jI4L1OBFgAAADAG0qe9KEt5yvSCQiwAAAAgD9yZRDVaK5RU1NTmWVqamoUqxwBFgAAALRFn332meoqR4AFAAAAbdGyZctUVznSAQAAAADwDCNYrdIHC57GRtXzWGFV8yseayOEmLfrwG+FwIthMf/ht8LLn2/ht8I2qG32Pt4/igZ1PM/lObeB58/206Zafiu01ZM9f4i7lUkvZBfihqJJuyY5CmtQZmZmYGCgiirHCBYAAAC0RSLrpnh4ePBYOQIsAAAAAKLMyoPiEGABAAAA8AxzsAAAAIA/rScPlkphBEua0NBQiqIiIyNb3Hvp0qWgoCBbW1tDQ0N7e3s/P7/9+/cLBAJJtZWWli5dutTNzc3ExMTJyWn+/PkiqxMCAADoAIrm+qNxxSwiD4UbFYMAS6K6urqDBw8aGRnt3bu3sbFRZG9qaqqXl5eVldWpU6eqq6vPnTvn4+Pz8ccfnzx5khCybNkyCwsLkaeEhIQcPXo0KSmpoqJi//792dnZXl5er17xfAMRAAAAcOTKIvJQuFExuEQo0ffff19dXZ2cnLxw4cLMzMzx48cLd124cOHTTz+NiYlZtWoVs8Xe3j4mJubtt9+urZV4I66fn19ERISJiQkhZOjQoVu2bBk5cuShQ4dCQkJU/V4AAABAxKZNm1RXOQIsidLS0vr06RMREZGYmJiens4OsNavX29mZrZ06VKRpwwfPpwQEhER8cUXXxBCKIoihNja2j5+/JgQEhMTwy7cu3dvQsijR4+Yh1FRURkZGQUFBZ988kl2dvaMGTNSU1NV+PYAAADatrCwMNVVjgCrZU+fPj116tTSpUvbtWs3derUbdu2vXz5slOnTsze7Ozst956y8jIqMXnpqSkmJqapqamVlZWSnmJzMxM8r8wi0HTdHh4eFRU1KFDhwwMDPh7NwAAAGpC0YRqlqOwrsIcrJbt2bOnubk5KCiIEBIUFFRfX//tt98yu6qqqqqrq3v06KFM/c+fP1++fLmdnd3kyZOFGysqKj744IORI0eyo6umpqaGf6Jp3f08AgBAa0fL+aOjEGC1LD09vV+/fgMGDCCEeHl52dnZpaenswswl/8UIxAIgoKCnj17lp6ebmxszK5TPGd/QkKC6T+dPXtW4ZcGAAAANUCA1YIrV64UFhZOmzaNeUhR1LRp0y5cuHDnzh1CiLm5uZmZWVlZmWKV0zQ9Y8aMnJyc3bt3+/j4sHd16tTJ0NBQpPzy5ctFRrDeeustxV4aAAAA1AMBVgvS0tIIIXFxcdT/JCcnE0KEg1i+vr7nzp17/fq1ApVHRkbu379/06ZN06dPF9mFeVcAAKAL2vz1QYIAS1xDQ8OBAwfeffdd+p8CAwP37NnDzH+Kjo6urq5et26dyHMvX76cnZ1NCOnQoUNDQ4N45WvWrElJSVm9evW8efPU8F4AAADUjaYpzj9Ed2cVI8ASdeLEiRcvXgQHB4tsDw4OLi0tzc3NJYR4enqmpKSsWrXq008/LS4ubmhoKCsrS0hI8Pb2rq6uJoS4urrW1dXl5OQ0N//frRS7du1aunTpwoULRfI1AAAAgI5BgCUqLS3NzMxs3LhxItsnTZrUoUMH5uohISQ8PPz8+fPl5eW+vr6mpqZeXl45OTk7d+5knjhx4sSPP/54ypQpenp6wvsNmeuMycnJFItKk3AAAACARiAPlqhjx461uN3U1FQkS7uHh8d3333XYuF27drt3Llz586d7I03b96U8rpJSUlJSUlyNhYAAAC0EQIsAAAA4A0SjTIQYAEAAACvdDds4g5zsAAAAAB4hgALAAAAgGcIsAAAAAB4hjlYAADQ6jUaKr4+LPCsmVBNchTWVRjBAgAAAOAZAiwAAAAAniHAAgAAAOAZ5mABAAAAbyh50ofq8NS51jeClZqaSokxNTUVFpg2bZqFhcXTp0+FW5qamoYNG+bs7FxXVye98rS0tL59+7Zv397CwkJVbwAAAECH0YTi/KPDKUlbX4DFKCoqollqamqEu1JTU/X09ObNmyfckpiYmJeXt3v3bmNjYyl1/vnnn6GhoXPnzn316lVlZaUKWw8AAAA6rbUGWFJYWVlt3Ljx6NGjBw8eJIQUFhbGxcVFRkZ6enpKf+Ldu3cbGxt9fHz09XHlFAAAABSngwEWISQkJCQgICA8PLyiomLmzJkODg7x8fHSnzJz5syRI0cSQtzd3SmKioiI+OCDD4YMGcIu4+PjM2nSJOb/UVFRNjY2f/755/jx401NTfv373/27FlCyMmTJwcMGGBsbOzr6/vkyRMurb1x48bEiRM7depkbGzs5eV15swZRd4zAAAAaA3dDLAIIVu3bq2trR0yZAhzcdDIyEh6+d27d+fk5BBC8vPzaZpOSUmR+RI0TUdFRa1YsaKsrGzEiBETJ048ffr0kSNHfv755xs3bjx+/DgsLExmJdeuXfP09DQxMcnLy3vy5ElgYKCfn19eXh7HtwkAAKBVKJpQTTTXH8zB0jaurq7sSe7jx48XKdCzZ8/FixeXlZWFhoZ6eHioog0VFRUzZswYNmxYp06dPv/888rKyv/85z9ff/21ra2tk5NTRETE8ePHq6qqpFcSHR1tb2+fnp7eu3dvS0vLFStWeHh4sMfbKioqbvxTbW2tKt4OAAAA8KW1TjYqKipycXGRUkAgEBw+fJgQkpWVVVtba2Jiwnsb9PT0Ro0axfy/S5culpaWgwcPbt++PbOlb9++zc3NpaWlbm5ukmpoaGjIycmJiIhgz/ry9vbevHmz8OHhw4fZDwkhPXv2HCztrQMAAICGtdYRLJk+//zzGzdupKWllZeXx8TE8FInTf9jKLNz5856enrCh6amptbW1uyHhBDpI1gvX74UCASJiYns0bj4+Pi//vpLWGbu3LkiI1giM8MAAABA2+hmgJWfn5+QkLBo0aKQkJAVK1Zs2rTp4sWL8lZiZmbGzv5ACCkvL2c/pCjRBGniW6QzNzfX09NbuXIl/U/Nzbq7+iUAAOg2Ws4fHaWDAZZAIJg5c2afPn3i4uIIIdHR0W5ubqGhoQ0NDXLV06tXr9LSUuGEp3v37j148IDfphoZGfn4+Bw7dqypifvK4wAAAFqMJlQz1x8EWK3JqlWrbt26lZaWZmhoSAjR19ffuXNncXHxmjVr5Krn/fffb2xsXLJkSWVl5Y0bNz777LM33niD99YmJyffuXMnODi4qKiorq7u9u3bKSkpCxcu5P2FAAAAQG1aa4AlchchRVF//PEHIeTq1atr165dvHgxe6LS4MGDFyxYkJCQcOvWLe4v0aNHj/379//00082Njbz5s37/PPP2Qvy8GXgwIFXrlwhhHh7e1taWk6aNOnx48cIsAAAAFq11ncXYVhYmJT8Uu7u7gKBQHx7YmJiYmKi9Jp9fHxEprFPmTJlypQpwoe5ubnC/yclJSUlJbELl5SUsB96eHiI1CaJi4vLgQMHuJQEAACAVqH1BVgAAACgtSiappq5Tq2iuI1EtEat9RIhAAAAgNZqWwFWcXExJUFxcbEuvSgAAABoUNu6ROji4sJxXlRrf1EAAADQoLYVYAEAAICq6fASztwhwAIAgFZPvx5f6dqCognFeTkSHQ7F2tYcLAAAAAA1QIAFAAAAwDMEWAAAAKC9KioqPvzwQ0tLS1NT04CAACmLspSWli5dutTNzc3ExMTJyWn+/PkvXrxQZ1PZEGABAAAAf2hCNdMcf2Qu9iwQCPz9/e/du3f16tVHjx517tzZx8envLy8xcIhISFHjx5NSkqqqKjYv39/dna2l5fXq1ev+H+PHOhsgJWamiqed0q4mOC0adMsLCyePn0qLN/U1DRs2DBnZ+e6ujoNNRkAAKD1o+X8kWrfvn3Xrl375ptvHBwcOnfuvG3btoaGBklr3/n5+V25ciUgIMDExGTo0KFbtmy5c+fOoUOH+H+PHOhsgMUoKiqiWWpqapjtqampenp68+bNE5ZMTEzMy8vbvXu3sbGxhhoLAAAA/3D8+HFHR0dXV1fmoampqa+v77Fjx1osHBMTY2JiInzYu3dvQsijR4/U0E5xOh5gSWJlZbVx48ajR48ePHiQEFJYWBgXFxcZGenp6anppgEAAMD/d+vWrb59+7K3ODs7P3z4kMvlpszMTPK/MEv92miARQgJCQkJCAgIDw+vqKiYOXOmg4NDfHy8zGft2LGDudqop6fXs2fPkJCQsrIydoEbN25Mnjy5S5cuZmZm/v7+eXl5Muu8cePGxIkTO3XqZGxs7OXldebMGcXfFQAAQKsiEAgq/qm2tla496+//jI3N2eXt7CwoGm6srJSerXPnz9fvny5nZ3d5MmTVdJuWdpugEUI2bp1a21t7ZAhQ5iLg0ZGRjKfEhoaylxtrK+v//HHH8vLy8ePH9/Y2MjsvXr1qoeHByHk7NmzT548iY6O/vrrr6VXeO3aNU9PTxMTk7y8vCdPngQGBvr5+XEJywAAALQQRdNUE+cfmr5y5cqAf9q8ebOwNvG15risPicQCIKCgp49e5aenq6pmT86nsldeNWWMW7cuBMnTggf9uzZc/HixcuXL58zZw4TGHGnr6/fv3//r776ytnZOT8/f+jQoYSQRYsW2drafvfdd/r6+oSQt99+++2335ZeT3R0tL29fXp6OvOUFStWnD59Oj4+/ujRo0yBoqKiwsJC9lOeP3/eWXYoCAAA0Ap4eXllZWVJ2mtpaVlVVcXeUlVVRVGUhYWFpKfQND1jxoycnJyMjAwfHx8emyoXHQ+wioqKXFxcJO0VCASHDx8mhGRlZdXW1rJnxklSX1+/YcOGjIyM0tJS4ZT5Bw8eDB06tL6+/syZMwsXLmRCJS4aGhpycnIiIiLYT/H29mYH7zdu3Pj222/Zz2rXrl3nnhxfAQAAoBXr37//9evX2Vtu377dq1cvKeNSkZGR+/fvT01NnT59uuobKFGbvkT4+eef37hxIy0trby8PCYmhstToqKikpOTExMTHz9+3Nzc/PjxY0KIQCAghFRWVjY2NtrY2HBvwMuXLwUCQWJiIjuXRHx8/F9//SUsM23atMP/1L9/fznfKAAAQKs0YcKE+/fvFxUVMQ9ramqys7MnTJggqfyaNWtSUlJWr17NThSgEW03wMrPz09ISFi0aFFISMiKFSs2bdp08eJFmc86cODAvHnzxo4da25uTlFUaWmpcJeFhYW+vv4ff/zBvQ3m5uZ6enorV66k/6m5mfM6mQAAAFqF10SjwcHBbm5uH3/8cUlJyYsXL+bMmWNgYBAVFcXszczMpCgqIyODebhr166lS5cuXLiQ46CJSrXRAEsgEMycObNPnz5xcXGEkOjoaDc3t9DQ0IaGBinPomn61atXhoaGwi379+8X/t/Q0PCtt946cuSIcM67TEZGRj4+PseOHWtqalLkbQAAAGgbXhONGhgY/PLLL46OjoMGDbK3t3/+/Hlubq6trW2LhZOTk5l/2deFwsLCeH+LXLTRAGvVqlW3bt1KS0tjoiV9ff2dO3cWFxevWbNGyrMoigoMDNy6dWtBQUFlZeXmzZtFsvUnJiY+efJk2rRpxcXFf//99+nTp2fPni29JcnJyXfu3AkODi4qKqqrq7t9+3ZKSsrChQuVf48AAAA6wNraOiMj4+XLl7W1tVlZWQMGDBDuCgwMpGn6gw8+YB7evHmTFpOamqqRZut4gOXq6iqyWs4ff/xx9erVtWvXLl68eMiQIcKSgwcPXrBgQUJCgpRVJAkhW7Zs8fT0HDVqlKOj482bN1NSUth73d3df/vtt8bGRg8PDzs7u8TExLlz50pv4cCBA69cuUII8fb2trS0nDRp0uO7qFyHAAAgAElEQVTHjxFgAQAAtGo6exdhWFiYpFFBGxsbZlq6iMTEREnLGwl17dr1wIED7C0iCTkGDhx4/PhxuZrq4uIiUicAAAC0ajobYAEAAID6UTTdrkl2LlBhYZU2RoN0/BIhAAAAgPohwBJVXFxMSVBcXKwNFQIAAICWwyVCUS4uLlzWOdJghQAAAKDlEGABAAAAfzhkt/pHYR2FAAsAAFq9RkNK002A/4+iCdXMfZK7StuiSZiDBQAAAMAzBFgAAAAAPEOABQAAAMAzzMECAAAA/tA09zlYRHfvsscIluJSU1MpitLT03vy5Al7+48//sikucrNzRUWE2FqaiosX1paunTpUjc3NxMTEycnp/nz57948ULN7wUAAIA3NOcf3YUAS1lGRkYiKwnu27evQ4cOIsWKiorYi3vX1NQId4WEhBw9ejQpKamiomL//v3Z2dleXl6vXr1SR+sBAABABRBgKWvChAl79+4VPnz16tXRo0cnTpzIvQY/P78rV64EBASYmJgMHTp0y5Ytd+7cOXTokAoaCwAAAOqAAEtZ06dPz8/PLyoqYh4ePXqUECJXgBUTE2NiYiJ82Lt3b0LIo0ePeG0mAACAWnC/PqjTVwkRYClr0KBBrq6u+/btYx7u27dv4sSJ7IBJXpmZmeR/YRYAAEDrwiQa5fqjuwEW7iLkwfTp03ft2hUfH//8+fOsrKzvv/9efPFBV1dX9sNx48adOHFCvKrnz58vX77czs5u8uTJzJazZ8+ePXuWXaa0tNTOktc3AAAAALzCCBYPpk+f/uDBgwsXLnz33Xfm5ub+/v7iZUQmubcYXQkEgqCgoGfPnqWnpxsbGzMbGxoaav6pqalJte8HAAAAlIMRLB707t3bw8Nj7969+fn5U6dONTAwUKASmqZnzJiRk5OTkZHh4+Mj3D569OjRo0ezS8bFxdE1ok8HAAAA7YEAix/BwcHLli2rrq5ev369YjVERkbu378/NTV1+vTp/LYNAABAfZBolBCCS4R8CQoKqq2ttbe39/LyUuDpa9asSUlJWb169bx583hvGwAAgFrRNNcf3YURLH507dpVIBAo9txdu3YtXbp04cKFMTEx/LYKAAAANAIjWGri6uoqslrOH3/8wexKTk5m/mXvDQsL02h7AQAAQHEYwVJcWFiYpDBo/PjxwkwNUooxbt68yX/jAAAANEKu9KG6e5EQARYAAADwh6ZJc7MchXUULhECAAAA8AwBFgAAAADPEGABAAAA8AxzsAAAAIA3lDyJRindnYOFAAsAAAB4pbthE3e4RAgAAADAMwRYAAAAADxDgAUAAADAM80EWKmpqZQYU1NTYYFp06ZZWFg8ffpUuKWpqWnYsGHOzs51dXVSal69ejW7HvVgvx0TE5NevXpNnjz50KFDNC5CAwBAW9NMU03NHH8I5+nwrY4mR7CKiopolpqaGuGu1NRUPT29efPmCbckJibm5eXt3r3b2NhYE42VjXk7L168yMzMHD58+EcffRQYGPj69WtNtwsAAADUTUsvEVpZWW3cuPHo0aMHDx4khBQWFsbFxUVGRnp6emq6aTIYGRk5OzsvXrw4KysrOzt78eLFmm4RAAAAqJuWBliEkJCQkICAgPDw8IqKipkzZzo4OMTHx8tVw44dO5jLdnp6ej179gwJCSkrK2MXuHHjxuTJk7t06WJmZubv75+Xl8dj+z09PSdOnLht27ZXr15JL3njxo2JEyd26tTJ2NjYy8vrzJkzPDYDAAAA1E97AyxCyNatW2tra4cMGcJcHDQyMpLr6aGhoczFx/r6+h9//LG8vHz8+PGNjY3M3qtXr3p4eBBCzp49++TJk+jo6K+//prf9o8ePfr169e///67lDLXrl3z9PQ0MTHJy8t78uRJYGCgn58fv6EeAACA+tA0aeb8o7uTlTUZYLm6urInuY8fP16kQM+ePRcvXlxWVhYaGsoEQ4rR19fv37//V199df369fz8fGbjokWLbG1tv/vuO1dX144dO7799ts7duxQ/M20pHv37oSQ8vJyKWWio6Pt7e3T09N79+5taWm5YsUKDw8PecfqAAAAtAVN5AmwNN1aldFkJveioiIXFxcpBQQCweHDhwkhWVlZtbW1JiYmctVfX1+/YcOGjIyM0tJS4Qz6Bw8eDB06tL6+/syZMwsXLtTXV+FvgLmLkKIoSQUaGhpycnIiIiLYzfD29t68ebPw4dGjR48ePcp+1uvXr517qKC5AAAAwBOtXirn888/v3HjRlpa2pw5c2JiYlJSUuR6elRU1P79+9PT0998800zM7OnT5/26NFDIBAQQiorKxsbG21sbFTT8P+PSTPRrVs3SQVevnwpEAgSExMTExPZ29kxmYODg4+PD3vvxYsXeW4oAAAA8Ep7A6z8/PyEhIRFixaFhIQ8fvx4+fLl//73v+W6UHjgwIF58+aNHTuWeVhaWircZWFhoa+v/8cff/Dc6H/Kzs42MjIaPHiwpALm5uZ6enorVqxYsWKFpDJvvPHGG2+8wd5SUlJC10gqDgAAAJqnpZPcBQLBzJkz+/TpExcXRwiJjo52c3MLDQ1taGjgWANN069evTI0NBRu2b9/v/D/hoaGb7311pEjR4Rz3nl38eLFY8eOzZkzp0OHDpLKGBkZ+fj4HDt2rKmpSUXNAAAAUCeKpqnmZq4/mOSuZqtWrbp161ZaWhoTIenr6+/cubO4uHjNmjUca6AoKjAwcOvWrQUFBZWVlZs3bxaZbJ6YmPjkyZNp06YVFxf//fffp0+fnj17tvItr6+vv3Pnzvr16/38/Hx9fdetWye9fHJy8p07d4KDg4uKiurq6m7fvp2SkrJw4ULlWwIAAKAZNOcf3aVFdxFSFMVcs7t69eratWsXL148ZMgQYeHBgwcvWLAgISHh1q1bHOvfsmWLp6fnqFGjHB0db968KTKFy93d/bfffmtsbPTw8LCzs0tMTJw7d67yb6dTp07+/v4XL17ctWtXZmamzNQSAwcOvHLlCiHE29vb0tJy0qRJjx8/RoAFAADQqmlmDlZYWFhYWJikve7u7sxUdBHik8HFLVu2bNmyZcz/u3bteuDAAfZekcUBBw4cePz4ca6Nlkz625HJxcVFpJ0AAADQqmnvJHcAAABofWh50ofq7hwsBFgAAADAH5omzc1yFNZRWjrJXYri4mJKguLiYtVVrvCLqrTBAAAAoIVa3wiWi4sLrbKAVxWVq7TBAAAAoIVa3wgWAAAAgJZrfSNYQAjZt9v18okRmm4FtD5dSQW/FY7zmcxvhdBG8P5R5N14nymaboJa3Xt+Lljxu+H/iVnsmXthHYUACwAAAHgkz12Euhth4RIhAAAAAM8QYAEAAADwDJcIAQAAgD+0PNmtdPYKYRsYwQoNDaUoKjIyssW9ly5dCgoKsrW1NTQ0tLe39/Pz279/P3uhntzc3PHjx3fp0sXQ0NDR0TEiIqKi4v/mZqamplIUZW1tXVtbK9xYUlJCUdSWLVtqamqkJNAaMGAAISQqKsrGxkZl7x4AAEC9aJo0NXP90d00RjoeYNXV1R08eNDIyGjv3r2NjY0ie1NTU728vKysrE6dOlVdXX3u3DkfH5+PP/745MmTTIENGzaMHj36X//6V35+fnV19d69ey9dujRo0KDbt2+z66moqPjyyy/FX93U1JRmsba2njhxovDhzZs3VfSuAQAAQLN0PMD6/vvvq6urP//884qKiszMTPauCxcufPrppzExMZs2bXJ1dWVGsGJiYnJzc83MzAghv/3226JFi5YvX56QkGBnZ2doaOjh4XHq1CkDA4Np06Y1s9YB8PPzS0xMrKqqUvfbAwAAAK2k4wFWWlpanz59IiIibGxs0tPT2bvWr19vZma2dOlSkacMHz7c19eXEJKYmNixY8fFixez95qYmERFRV2/fv2nn34SblyxYkVtbe2GDRsUbufTp0/HjBljYmLSs2fPjRs3KlwPAAAAaANdDrCePn166tSpoKCgdu3aTZ069fjx4y9fvhTuzc7OHjFihJGRUYvPpWmaKWBsbCyyy9/fn3m6cIuDg8OsWbM2btz44sULBdpJ03R4eHhMTMyTJ0+WLVsWHR29fft2BeoBAADQPGaxZ44/mIPVGu3Zs6e5uTkoKIgQEhQUVF9f/+233zK7qqqqqqure/ToIem51dXV1dXVdnZ24rvs7e0piiorK2NvXLZsmUAgWL9+vQLtrKioCAkJGTFihIWFxezZs2fMmBEXFyc+YwwAAKAVoGn5fnSULgdY6enp/fr1Y27W8/LysrOzE7lKSFGUpOcyyzNLKiC+eHP37t3nzp2bmpr6559/yttOiqLGjBkjfDhu3LinT5+WlJQwD3fu3On1T/n5+fK+BAAAAKiTzubBunLlSmFhYVxcHPOQoqhp06YlJyffuXOnb9++5ubmZmZmIqNQbObm5h07diwtLRXfxWwUH9xasmTJtm3bEhISFixYIFdTzc3N27dvL3xoZWVFCHny5ImTkxMhxN/f39XVlV3+0KFDhecVuRYJAAAA6qGzI1hpaWmEkLi4OGHeqeTkZEKIcBDL19f33Llzr1+/bvHpFEVJKpCVlcU8XWR7165d58+fv3Xr1sePH8vV1KqqqoaGBuFDJs+Wra0t89DOzk5kBIu5yREAAAC0lm4GWA0NDQcOHHj33XfpfwoMDNyzZw9zgS86Orq6unrdunUiz718+TIzgT0qKqq6unrt2rXsvbW1tUlJSW5ubuyLekKLFi0yMjKKj4+Xq7U0TbNTSPz444/dunVzcHCQqxIAAACt0EyTxiauP82Yg9WqnDhx4sWLF8HBwSLbg4ODS0tLc3NzCSGenp4pKSmrVq369NNPi4uLGxoaysrKEhISvL29q6urCSEjRoxYu3ZtfHx8TEzM48eP6+vrL1265Ofnx0yWb9euhV9dp06dIiMjmSEu7rp27Zqenn7+/PmqqqqdO3empaXFxsbq6+vs1VsAAACdp5sBVlpampmZ2bhx40S2T5o0qUOHDszVQ0JIeHj4+fPny8vLfX19TU1Nvby8cnJydu7cKXxidHR0VlZWQUHBwIEDzczM3n///aFDh+bn54tMimJbsGBB586d5Wptu3btmFCvW7ducXFxa9as+eSTT+SqAQAAALSKbg6THDt2rMXtpqam7EUDCSEeHh7fffedlKpGjx49evRoSXvDwsLCwsLYWzp27Pj8+fMWC//xxx/iG5OSkpKSkgghP//8s5RmAAAAQCuimwEWAAAAaAhN6GbZpYSFdRQCLAAAAOAPk8mde2EdpZtzsAAAAAA0CAEWAAAAAM8QYAEAAADwDHOwWqXpM4tioyp4rLCq+RWPtRFCzNt14LdC4MWwmP/wW+Hlz7fwW2Eb1DZ7H+8fRYr7pGpuLq75mt8KnzbVyi4kD1s9Ux5rW5n0gpC3eamKbqbpJq7Hg9bdRKMIsAAAAIBHtDxT13U2wMIlQgAAAACeIcACAAAA4BkuEQIAAAB/aHmyW+nsFcI2P4KVmppKUVRxcbGkXQwTE5NevXpNnjz50KFDNOtz0+LTHz9+TFHU2rVruby09PoBAABaGbqZNDVx/ZEj53sr09YDLJmKiopomn7x4kVmZubw4cM/+uijwMDA169ft5b6AQAAQP0QYHFiZGTk7Oy8ePHirKys7OzsxYsXt676AQAAQJ0QYMnH09Nz4sSJ27Zte/WK59Q16qkfAAAA1AABltxGjx79+vXr33//vZXWDwAAoEI0TTc3c/zR4cWecReh3Lp3704IKS8vF25xdXVVaf0AAACtBu4iJIRgBEsBzF1+FEUJtzAT1YXKysp4rH/9+vWd/+n8+fPK1A8AAACqhhEsuT19+pQQ0q1bN/XUHx4ePmvWLHaBjRs3ktdXVfTqAAAAoDwEWHLLzs42MjIaPHiweuo3NjY2NjZmF9DX19fdIVUAAGjtsBYhIQiw5HXx4sVjx47997//7dBBJevVq7p+AAAAlaKbabqpiXthlTZGgzAHi5P6+vo7d+6sX7/ez8/P19d33bp1rat+AAAAUCeMYBEidhtg//79b968yd5lbGxsZWXl7u6+a9euKVOmsGe48/LSqqsfAAAA1K+tj2CFhYXRYpjoir3r1atXJSUlR44cee+999jRD1PGxcWFXWePHj1omv7ss8+4v7Sk+gEAANq4ioqKDz/80NLS0tTUNCAg4NatW3wVVqm2HmABAAAAn3hNNCoQCPz9/e/du3f16tVHjx517tzZx8dHUqpIuQqrGgIsAAAA4A9Nk+Zmrj+yAqx9+/Zdu3btm2++cXBw6Ny587Zt2xoaGhITE5UvrGoIsFSouLiYkqC4uFjTrQMAANB2x48fd3R0FE6VNjU19fX1PXbsmPKFVQ0Blgq5uLiIT/BiiEzbAgAAAHG3bt3q27cve4uzs/PDhw/r6uqULKxquIuw9SkpKSm5U7cy6QWPddbTAh5rI4QYUhr4NINMT/N/5rdCfj+HbVPb7H28fxQpvrMprUr6i98K/6Yb+K2wI1XPY22//lbn0LeEl6pekmcP6ELuhUtKSuLi4tgbfXx8fHx8mP//9ddfgwYNYu+1sLCgabqyslIkC7e8hVUNAVbr88YbbxBCKFMHmSXPnTvn6empp6cns6QRt5e+fPmym5sbjx/TgoICBwcHCwsLviosKirq3LmzlZUVXxXev3/f0NCwR48efFX4+PHj+vp6R0dHviqsqKh48eIFxxXH50yQXaaysrKkpIT5mHHgKbNEXV3djRs3hg0bxq1C2Zqami5cuDBixAi+KiTydBaOuHcWjr1PxzoLl4+iZjsLl8+2XJ3FjEMZDXYWh77ce700wsBIrqfk5uZK2kuLTdIS36JYYZWTdA0LdICpqWl1dTWPFfbp0+f27ds8Vujt7Z2Tk8Njhe+///7evXt5rDAyMjIpKYnHCpOSkiIjI3mscO/eve+//z6PFebk5Hh7e/NY4e3bt/v06cNjhdXV1aampjxWSKOz8AGdRXmtorOoWd++fceMGcPesnjxYoqiXr16pWRhVcMcLAAAANBS/fv3v3PnDnvL7du3e/Xq1eLwsFyFVQ0BFgAAAGipCRMm3L9/v6ioiHlYU1OTnZ09YULL15jlKqxqCLAAAABASwUHB7u5uX388cclJSUvXryYM2eOgYFBVFQUszczM5OiqIyMDC6F1QwBFgAAAGgpAwODX375xdHRcdCgQfb29s+fP8/NzbW1tVW+sKrhLkJdtnTpUkNDQx4rDA8P79y5M48Vzpw508HBgccKp0yZIpIERUkBAQEdO3bksUIvL6+///6bxwrd3Nz4PcoODg4zZ87kscLOnTuHh4fzWKGhoeHSpUt5rJCgs/ABnUV5raKzqJ+1tbVwjEpEYGAg/c/7BKUUVjOK1uAdjAAAAAC6CJcIAQAAAHiGAAsAAACAZwiwdNO9e/c03QQZeG9hG6xQFbT/XWt/hdpP+3+HbfCgEPwadY6eyAJAoAOOHz/u4+NjZWU1ZMgQTbelZUwL27dvz9dqJ22wQlXQ/netogq1ubPwrrUcFC3vLLzDr1EHqT95PKjUsWPH2rdv7+TkVFZWpum2tEzYQhcXl7Vr1/JVYbt27dq1a1deXq61LeSxQlXQ/netugq1trPwDp1FO6no10gIMTExqa+vV75CUAACLJ2ihi+Mp0+fKvN0dgvLy8uVP5swFbq5ub3xxhvvvfeeMlWptIU8Vtgi7TwuwgqdnZ03bdqktS1Uph42gUBw5MiRiIiITz75JDU19fnz53zVzODlKKuuszg7O2/ZsoXHCnnpLAKB4Pjx41FRUXPnzk1NTX327JmSFYrTzt7n5uZmbW09ZcoUZaoCZSDA0h2qjq7Onz8/ceJEiqIU7vziLVTybCI8j5w8eZIQ8vvvvytWj6pbyGOF4rT2uLArLCwsNDQ0LC4u1toWKq+goKB///6EEGtr68DAQHd3906dOvG1mjJfR1mlnaWkpMTGxubixYt8Vah8ZykoKHBzcyOEdO3a1d/ff8iQIRYWFunp6QpXKEJre5+bm9u5c+cIIfyu5w1yQYClI1QXXTU3Nx89etTLy4sQ4uDgoK+vP3LkSIVbSAhZvXo1eztzNtmwYYNiFbq5uVVUVEycONHf31+BVqmhhTxWyKblx8XR0VHko9itW7fY2Fh+W+ju7v7o0SPFKuS3s5w7d87U1LRDhw5fffWVQCBgNl68eLFXr14pKSkKV8vvUea9s4j/Drdu3eru7q5whfx2FuFB2bRpU0NDA7Px999/d3R0/PLLLxWoUEgNvU+ZzzZzoNesWdO+ffvKykrh3traWgUaCQpDgKULVBRdvX79evv27c7OzoSQ3r1779ix4/Dhw4SQ48ePK9zCs2fPOjg4fP311+y95eXl8v49zT6P3Lx5k6Ko3NxcdoG//vrrxIkTGm8hjxUKaf9xsbKycnBwKCkpEW7Py8sjhCxbtoym6du3b/PVwubmZrmaR6umszx9+rRz587m5uaXLl0S2VVaWmplZXXq1Cl56+T9KKuis4j/Dl++fEkIKSgoUKCF/HYWKQflwYMHlpaWV69elbdOWo29T+HPNnOgaZoeOnQok+WcwYSqSUlJ8lYLCkOA1epx/MK4e/cu9zpfvny5Zs0aGxsbQoijo+POnTuZP8qHDh3q6uoqb88XaeHDhw/FzyYKVCg8j0yfPt3T01O4t7y8PDo6mlmyg+Mwu4payGOFjFZxXJgKN2zY4ODgkJeXR9P0lStXevbsaWBgcOvWLZqmfX19v/rqKx5byP2zrYrOQtP0xx9/TFFUVlZWi3s3bNjg7Ozc2NjIsTZVHGXVdRYRzMo2Bw4ckLeFvHeWWbNmSTko4eHhQUFBclWokd4n72dbeKDLysooitq2bRuzl4muOnTocPr0abnaCcpAgNW6cfzCYIpxOYGWlZVFRkYyJ1x9ff1PP/1UeL3jp59+IoR88803yrdQ0tmEy3QBkfPI/fv39fT0mD8fHz58+N///tfIyKhv377MnckjRowQXhpQcws5VsixTs0eFy5nefEKt27damho2LVrV0KIgYFBRkYGTdPNzc1mZmYrVqxQpoVXrlwRKcbls817Z2EIBAITE5OQkBBJBe7fv08I4TKIpaKjrOrOwrZv3z5CCPdvcXk7C8eAo7Gx0cTE5MMPP5RUYN++fd27d29qauIynqrO3qfMZ1t4oGma/uKLL9q1a/fnn3/SiK40BwFW6xYfH08Iyc/Pl1JGrhuA4+PjKYqaPHlyXl7eTz/9ZG1tLRxg9/Ly6t69u7x3/Epq4cOHD6dPn87+s/7FixcURf38888yK2SfR2bPnu3m5nbr1q2QkBB9ff2BAwceOHBg+/btFEWNGDHi77//1kgLOVYoV52aOi4cz/Lx8fHi37t3796NjY1dtmxZYWEhs6WoqIgQwuWCVIsV0jT98uVLkbZx/2zz21kYZWVlhBD2SEljYyM7A0J9fX1AQMDr169lVqWKo6yezsKorKzs2bOntbW1zEBNZoUtdha5/lAUOSgicnNzr1+/TnMbT5X3uMiMAlXx2WYfaJqmvb2933rrLRrRlUYhwGr1YmNj3dzcJN17rMB91I8fPxb+X3g2OXXqFCFk3bp1vLeQ/VqEkBs3bsisUDhVs7y8vH379t26daMoytPT84cffqBp+ptvvhH/wpB+yuO9hRwrlKtOjRwXubLpVFdXy3zRtLQ0Qgjzh7VM0itUIBME752FaSRFUexJQj/++CN7Clpzc7MwupL51cv7UVZRZ2F/lzNevXo1atQoQsiePXvkaiHHziLXR7GqqoqiKOnBNC3PeCr348K0U+YnR67PtouLS2JiovQK2RPYnz17pqenl5KSguhKsxBg6QJJZyhe7qNmziZubm5mZmbsG1Lkyi7D5RwaFxdnamra1NTEvW2NjY3Tp08fPXp0dnY2s6XFLwwuf/jy3kKOXxsKvGtGi8dF3pQ/XAIOfrPphIWF9ezZU/l6xD/bRUVFxsbGwqEySVTRWUaOHClymxszBY09zZ/m/NXLxkvvY/DYWVavXt23b9+bN28Ktzx48GD48OGEkIULF3J/d0IyO4sCH0VPT8/U1FTpZbiPp4qQdFx4uYVCvJKysjIrKyspA3IiduzYQQi5dOmS9OhKyfRdIBMCLB0hfobi8T7q9PR0QkhUVJRwiwLZZWSeQ8eMGTNq1Ci5GiZCyhcGl5F23lvIJcZS5l2LHBfFUv5IDzh4z6YzfPhwJsVlU1NTYWHh7t27582bJ28iA0mZIBwcHGJiYmQ+nffOkpuba21tzR7kuHv3bqdOnQYMGCAMnRX+6uWl94lTsrOkp6dbWlpOnTo1Li7u/fffNzIy0tPTi4+Pl6sNbFI6i2IfxVOnTnXv3l16DCHXeKoI8ePCY3QlnrghMjKS+4li7NixdnZ2UqIr5dN3ARcIsHRHbGzsO++8w/yf3/uo58+f3759e+H3h8LZZWJjYwcOHChpfkbnzp0/++wz5v+VlZU5OTnHjh3j3kjpXxgcUyTz3kLpFSpWpxD7uCiT8ke8kSrKplNXV2doaOju7j5q1ChmyjBFUX379g0ODmZHJ9JJygRRUFBAURSXAItWQWdZv369i4sLc3Ht7t27PXr0MDU1PXv2rMyXkImv3sfGS2cpKytbuHDhwIEDnZ2dQ0JCZF6Pk6nFzqLMR3HdunVOTk45OTmSCigznipyXPgduxJP3BAQEODk5MSlktraWkNDQ0KIeHTFV/ou4AgBlk5hTj383kddUVHRoUOHmTNnMg+VzC4j6Sx8/fp1QsjkyZODgoKcnJwoiiKEGBsbcxy9l/mFwWzh8rXBewulfPEo867Zx0X5lD/sRqoom059ff2ECRMIIfb29lOmTFmzZs2pU6eEX5Yc7w5jH9ONGzc6ODgwby0vL4/JBCHzEqEQ750lNTXV0tJy7ty5PEZX/Exj+fMAACAASURBVPY+Bo+dhXcinUX5j2JaWpqFhYWVlVVAQID4SJXC46kix0U47OTt7f3hhx9+9NFHs2fP/s9//hMWFhYREcHxHkPxxA329vZhYWG5ubmhoaFyXX6NjY0Via54TN8F3CHA0jUK3Ect/bvt0KFDFEUJ51vwlV2moqIiMzMzISFhypQpvXr1YpYeNzY29vDwCAsL27Vr1/Xr1zmmDsrPz5f0haFMYmgeW6iKOtnHhceUPyrKpiOMroTDdeIvKnNykvhn+5NPPqEoiklNZGhouG/fPnZ5mUEb750lPz9/zJgxZmZmvERXtAp6n4o6i1zkCqaV/yjW1NRs375d/D4SKeOpMkNq9nERHmIPD4+OHTt6e3u/+eabw4YNGzRo0IABA5ydnXv37i1z4n+Ln5PLly/r6+vb29vr6+uHhobKdQ/pw4cPmf/wm74L5IIAS9fIex81l+825oYjWp7sMlJqy87OtrOzY2ILExOTN998c/78+V5eXra2tvLGK0LffPNNi3+OK5YYWhUtVEWdzHHh5aAwVJRNh0t0xSUEEb+5PSsrq3379ps2bVqzZo1IQiMuk7VV0VlomhbeM8jxrYnkVRfBb++j+e4s8pIrmFZdYicp46mVlZVchu6Y48I+xO+8887w4cMVa4+kj6Ktre25c+fkTc/B4D19F8gLAZYO4n4ftbx/XnPPLiPdrl279uzZU1hYKPwy8PDwmDx5Mpc2yMRLYmhVtFBF75qvg0KrJptOY2MjL9EVQ+Tm9i1bthBC6urqJFXL8c4GVXQWjuU/++wzQsihQ4dkVsjjgZbUSL6yqHN8OSlUmthJesRPc748KvJ2AgMD33zzTcWaRLc0zb+wsJCiKCmfDelT+BVIqybvGgYgHQIs3cTlPmoFLl5wzC4jr/r6ekNDQ8XS/IjgmBi6vr4+ODh44cKFDx48UHMLea+T+0H55ptviouLpZfhkk1HIBAcPXo0IiJi1qxZ69evlzk/PTY2lpfoStz48eP79OkjpVou6axU0Vnkiq4mTJjAZYiC997HPYt6SUnJsWPHlLycJO/vUBUfRZpDdMXgEmOJDKm+/fbb3t7eXN6aJLGxsf369btz5w5N03fu3HF2djYyMmInrRXieBugXGnV5F3DAGRCgKWzpN9HrfB3m8zsMgqc8i5dukQI+fXXX+VqSYs4JoY+ffp0REREYGBgx44dZSbL4beFqqhT5kEJDAycP38+RVGffvop92pbzKZTUFAwYMAAQkiXLl3GjBnj7e1tZma2fft2edus/Lzgly9ftm/ffsGCBeLVypvOivfOwiVrvFzRFYPf3sc9i/rly5f9/Pz69+//7bffskuGhoZmZmZyabmSwTRfH0Xp46ls9fX148aNI7KWaGQPqXp7e48ePVq8jEAgOHLkSERExCeffJKamvr8+XMpFSYnJxsbGzs7O+vr6+vp6Ylk31DyNkBJ6btohdYwAJkQYOkySfdRS5rTypB+57P07DKKfft+8cUXenp6NTU13N6WDNyzqNM0fe/ePXt7+8OHD0svxm8Lea9TZsqfiIgIQoi/v79c873Es+kIcwR88cUXwrCgqKjIyclJrvkcvMwL3rVrFyHkwoUL4tUqkM6K984i/XOoQHRFq6D3ydVZ9uzZQwhhz3m/ePGitbW1zBhL+aFKHj+KksZT2YSjXOHh4dwDjjfffDMgIEBkY0FBQf/+/Qkh1tbWgYGB7u7unTp1kp7Kq6ioaMWKFUuWLGHHvnzdBiievotWdA0DkAkBVpsjc06ri4uL9OtWkrLLKHzKmz59+sCBA+V6F7du3ZKyV66vjd27dzs7O0svo0ALZeK3TikpfzZv3kxR1JgxY6ysrIRZvGUSz6YjJUfAtWvXzMzMxGcytYivecGpqansJEb85n4TqVOxziLpcyg9upI+sYb33sexsxQVFdnY2Jibm4uMBcqMsZSPrlT3UWyRyDVE7ukqhg0bNm7cOPYW4UH56quvhBPML1682KtXL+7Jdfm9DVAkfRfN04If0CIEWG2L9DmtzKlEX1//4MGD0usRzy6jzCkvISFhzpw53N9FRkaGnp7e999/L6UM9xjrhx9+IIS8evVKShl5W8gFxzqZGfG1tbWZmZnSv6JaTPnDRFfBwcGNjY1nzpyxsrJihny4zEITyabz0UcfSVmX2s3NjctfvfzOCxYZZ+Ir91uLdSrWWcQ/h19++SUh5J133mkxurp48aK5ufkXX3whpU5+e1+LjRQhKboStllSjMVL+k1aNR/FFrU4Q6u8vNzV1VVmjjF3d/eJEycKH0o5KKWlpVZWVqdOnZJeIe+3AYqk76J5XfADxCHAakOkz2nlHl0xRLLLKHnK474qFhNdvffee8JzjSQys6jTNP3q1Stvb+8uXbrI/EOQewvZ98ArWWdzc7OXl9c333zDzMkwMTHZvHmzlPIiB4UdXTFbLl++zMy94DgLTZhNp76+3tjYePr06ZJKDhw4MDo6WvrboVUwL5iWP51VY2OjzAsrPHYWdtb4P//809jY2NPTU5jKgY2Jrrp27SrzZkB+ex8ttbNIj66ELRePseSNrqR3B94/iuKkzH9njpf0m+xWr17NXifx448/lpK0bMOGDc7OztIv2StwG6B0ImnVVDHoC2wIsNoQ8TRCDOZro3v37tyjKxGqO+WJ4B5dMUQm8L5+/fr58+cPHz7Mz88/efJkQkJCz549CSGbNm1Svm2M2tpaBwcH6ZmN5MIsl9ajR487d+6UlJS4uLjs2LGDyxP37dsnEl21iOMstLt37xJCJF0J+vPPP/X19desWcOlYVzmBctF3nRWz58/l/cGMSHFOotwQnFGRgYhpMV089yjKxF89b4Wf4FcoisGE2P98ssvwi1cZvoz5Foaj8ePIpvMuwu53GQn/C0JBAITE5OQkBBJJe/fv08IkTmIJddtgFwI06rJNegrs53QIgRYbYtIGiGGvGNX4pQ55XG/EUne6Irx+vVrX19fS0tLAwMDIsba2lrmKrncW8g4e/astbW1lBXQuFfIrGpnZ2cnnD5VXl7OZX6JQCCwtLQcM2YMl1ntXGahlZeXE0IkfffPmzePEHLlyhWZryWixXnBCuCezorBZWKNKjrL3r17raysxLeLR1dccmow+A04BALBX3/9xfyfe3TFuHTpksgYj/SLj4rdE6eKjyLH6Ir7TXbiScsaGxvZCRfq6+sDAgKEA5kcE1BJuQ1QLnIN+nLMvAriEGC1dcpHV7T8pzz22YTjjUji0RX3K3GxsbHt2rWLjo7etGnT9u3bMzIyjhw5kpWVVVRUxCW/OZcW1tbW/vLLL8I/1n/99dfOnTuLr87BvUL6f9FVz549S0pKzpw5Y2NjI76YmiQNDQ0dO3aUPk1NiMssNJqmBwwYsHv3bvHtGRkZFEUpFieJzwtWGJd0VmwKrLWnfGd59uyZqakpu5G0WHQlb04NZXqfuO+++44JieSNriRpMcZS8p44fj+KMnM3iC+DnZiYKL3O6upqiqLYSfB//PFH9vLkzc3NIhn/OX4UW7wNUF7yDvpqZGFKHYAAq03jJbpicD/liZ9NZAYc4tGVvFfi5LqvUJz0Ft68ebNHjx7MkNioUaOYqSRxcXFSLn7JfMvs6IrZwjReZEEYKTZv3uzi4iLzLXOfhXb8+HEHB4c//viDvZFJNtGjR48nT55wbBibyLxgJUlPZyVOrq8NvjrLli1bXF1dhZd+jh07Zmpqyh67UiCnhjK9T1xsbGz//v15ia6EFQp7Hy/3xPH+UZSSu0F8sKesrMzKykpKSn3GyJEjRZZx3LBhAzvGEqmf40dR/DZAxahi0BdEIMBqu3iMrmjOpzxhViETExP2DE0pAYekK4Myr8SJUFGM1dzc7Orq2rdv3xs3blRWVs6fP79Xr14lJSU//vijkZGRAhXSLUVXjIiIiA4dOjx69Ihjm+Pi4th3DNFKz0Jbt26dnZ1dampqTk7Ozp07PTw8CCF9+/a9d+8exyaJEJkXrDxJ6azENTY2HjhwgEkcJXMOOL+dJSkpydLScvr06SNHjiSE9OrVSzgrS7GcGkr2PnGxsbGEkBMnTsj/5iRW6Ofnx+M9cbx/FFskKQtaZGTkqFGjpD83NzfX2tqaHQndvXu3U6dOAwYMEA6cy5uASvw2QGXINejLMfMqsCHAartSU1P5+sJgyDzlCRdwtba2Fv9abTHgEImu5LoSJ04VMda9e/cIIewbuJKTkx0cHEaOHDlo0CAFKpQSXRFC5J29+/r1a+VnobH99NNPw4cPpyiKEGJnZxcbGys9M61M6k+38/r16y1btjg6OjKhRnh4eIurkbDx3lkKCgrCwsKmTp2alJQkTDYrKacGF0r2PnFKdhZxMTEx/N4Tx/tHUYSULGgBAQFOTk4ya1i/fr2LiwtzTZbp16ampmfPnhWpn3sCKpHbAJXHcdBXscyrgACrTZOerlOczJmYUk55wvP7uXPnCCEt5jIWvxFp5cqVwuhKgStx4mJjY1euXMm9vMwW1tbWGhkZsbfU1NT079/fwMCAyxVM8QqTk5P5iq6ElJyFJq62tlaZObaaUlVVtW7dOub6lI2NzerVq4UTumXivbOIkJRTg/u6mUr2PnGxsbGzZ8+W611Ix/s9cbTKPoriWdDs7e3DwsJyc3NDQ0PZYzzSD3RqaqqlpeXcuXNlRlcMmQmohLcB8kXmoK/CmVcBARZwxX0mpvgpT3h+r6ioWLNmTfv27dkF2H93it+IxEQACl+J4514Czdv3uzs7FxQUFBfX3/y5MkBAwaIjHY0NTVJiWPEKxT57S1ZsqTF6Kqqqop7s7kMSCg/sUNr/fHHH0uWLDE3NyeEuLq67tixo8VMVHyRd91cKTk15F03U5neJ07eUSW5SLonTiAQHD9+PCoqau7cuampqTyOonHUYvRz+fJlfX19e3t7fX390NBQ5jfD5UDn5+ePGTPGzMxMZnRFa18CKmUyrwICLOBEmaVA2ed3mqaHDh0aGBgo3Mv8PZSUlCS9EmWuxKnBDz/88N5777377rvGxsbs6OrmzZtjx441MDAwMDAYN25ciwmQpGP+vhefgZuZmWlpaXn58mXuVUmPsTZu3NihQwcerz5oifv378+dO9fIyIgQ4u3t/cMPP8i7uoi85O0sHHNqcMxY1mJjlOx9qiN+T1xBQYGbmxshpGvXrv7+/kOGDLGwsJDrKrbyJN1kZ2tre+7cOWHQKdeBFrlnkN9VB1REycyrgAALZFNmKVCR83tZWRlFUdu2bWP2Mud3ZhEM6bnslLwSpwbMzd7s6Co7O9vExMTKyio5OfmXX35ZuXJl165d8/Ly5Kp20qRJbm5uIjFBZmamoaGhr6+vvJNOJMVYGzduJIQEBQXdvXtXsYuGWmvVqlV6enrTpk1TIE2XAhToLNxzanDJWCbeGOV7n+qI3BMnXLxv06ZNwhwBv//+u6Oj45dffqnOhon3lMLCQoqiDh06xDxU7Kwo76oDGsRL5tU2DgFWG8U916UyS4GKnN9pmv7iiy/atWvH5HNin9+55LJT8kqcGqxatUrYnoqKik6dOrm6urIXADly5Ii8K3y9/fbbYWFh7C3i0ZVcl/bEZ6Ex0ZWtre2iRYtmz57dt2/f8+fPy9VILcc9f1iL1NBZOObU4JixjN0YvnqfKojcEydl8b4HDx5YWlqq+ZpUbGxsv3797ty5Q9P0nTt3nJ2djYyMmPshFD7Q8iag0tQQEe+ZV9smBFhtFMdcl0ouBRofHy+SasXb2/utt96i/3l+Z3ZxmTupuitxvFu9enX79u3F01YNGzZMru/7AwcOdO/eXZiaYdu2bSLRlZKX9oRjV8J72c6cOTN58mTFatNJ6uks4jk1RHDPWMbgvffxTuSeuFmzZklZvC88PDwoKEiNraNpmk5OTjY2NmZWAtXT02OuVCp5oLknoGJeSOGFqxUmb+ZVZ2dnHlcb0yUIsNoumV8bvMzEZF/DevbsmZ6eXkpKivj5ncHlLK+iK3G8CwoKEi7xyybXrCnG1q1bBw0a9MEHHzApakSiK0LI+++/f//+fe55KYWYp3/00UeqnpbU2qmns7Dn3fOybibvvY93wnviGhsbTUxMPvzwQ0kl9+3b1717d/UPURcVFa1YsWLJkiXMsBMvB5pLAip5l8rml1yZV4uKioyNjbXhz1ptgwCrTZPytaGKmZg7duwghFy6dKnF8zvNOZedKq7E8S48PPzf//43jxWKXxlkwiM7O7tFixbNmjWrd+/ev/32G/cKEV3JRQ2dhd+MZSL46n0qIr54n4jc3Fx5l8HmHY9nRekJqDQbXUnBNMzR0VGkYQ4ODjExMZpqldZCgNXWtfi1oaKZmGPHjrWzs5Nyflcglx1fV+J49/vvv1tYWCi2gEyL4uPjxaOroKAg4ZaMjAy5/sSPi4tDdCUXNXQW7hnL5M2poYrex6OqqiqKoqRk3hfivgw2v3g/K0pKQKXl0ZWVlZXIgj8FBQUURSHAEocAC1rIdSnvTEwuamtrDQ0NCSHSz+/y5rLj8Uoc75KSkpycnE6ePMlXMiHh0iItDj7l5eURQngM6UCcGjoLl4xl8k68U1Hv45enp6f0RF/yLoPNL1WcFcVJWpyHwW+qermww76NGzc6ODgw9xzk5eX17NnTwMAAlwjFIcACmm4p16W8S4FyERsby+X8zuCYy473K3H8+vXXX4ODg+Pi4nisU9KlvQ8++MDOzu7Zs2cPHjzAuJTqqKGzyMxYpkBODVX0Pn6dOnWqe/fu7Gv9IhRYBptfqjgrsklZnIf+X+CrcMp7XhomHFT75JNPKIpiFkUwNDTct28fuzzyYzEQYIFEci0FytHDhw9FtsjMZSc9fRHvV+K0X4uX9tavX08I6devX3R09KxZsxwdHXUs1YKW472zSM9YplhODd57H+/WrVvn5OTU4gruii2DzTtVnBUZ4ovzsGMsfpcbl1d8fLzIJcusrKz27dtv2rRpzZo1IjM0NHXzoxZCgAXScFwKVGEys60wXycnT56UUgnvV+JaHea3FBISUldXx2zJyMjo2rWr8CGoAe+dRVLGMr5yavDS+3iXlpZmYWFhZWUVEBAgnEbZ4jLY3Fdp5JcqzootzrsSxliaja4Y1dXV7IdbtmwhhIifYbR2AplGIMACGWQuBaowjud3LhOxVXElTs0UvqjH/Jbmzp0rPh9L3vWJQUmq6yw033d98tj7eFdTU7N9+/YbN24wDyUtgy3vKo084v1Aiw8RMZgYq3v37pqNrsSNHz++T58+IhsRXYlAgAWaITOXnQ4kEeCYAbywsHDChAlGRkbt27cfM2aMXClDW4yuaJr+4IMPzMzMMIKlM/jtDq2o90lZBltIsVUatY3IEBFDG8auxL18+bJ9+/YLFixgb0R0JQ4BFmiMlFx2zPl96tSphYWFwlvnWh0uGcBPnz5tYmLSqVOndevWZWVlrVy5skuXLhcuXOD4EnFxceLRFTMfKzk5WfGmg5bhPadGq+h9HJfBpuVfpbFV0M7oiqbpXbt2EULYpymtvflRsxBggdZhzu82NjYRERFz5szp3bt3652vLT3G+vPPPy0sLPT19WfPni3cuGfPHmW+KpjfXmhoqMI1QFumVb2P+zLYcq3S2CpobXRF03RqamrPnj2FD7X25keNQ4AF2oU5v0+ePPnvv/9mthw8eLBLly5VVVWSnsJ9LV6NkBJjrV69ukOHDnl5ecOGDROOt7948YIQoti8Xe25sgOtkQK9T9W4LIMt7yqN2k+boyuGpLSoWnXzo8YhwAItwpzfR48eLXJFwMDA4NixY5KexXEtXg2S1MLg4OB3332XpunKykphjHXq1ClCiJRsQJIgugJlKNb71EBkGWxeVmnUcqmpqa0iKNH+mx81CwEWaAvm/N6xY0eRJHUPHz6kKOr48eNSnqt8jKXqzHjiGcBpmo6Ojn7vvfeY/zMxVlhYmKur64gRIxR4CSx9AwpTpvepQVVVlepWadROreIWYHlvfmxrCUgRYIG2YOKD4OBgke3BwcHGxsZ//fWX9KcrE2Mxf4epem0Q8QzgN2/eNDc3F25kYixTU1ONL2oLbY2SvU8NuK/SCOrE/eZH9ZxmtQoCLNAuo0ePFuYFbm5uXrJkCSGEY59ULMYSjnJrZP215ORkZ2dnYcqfysrK3377Tc1tAGAo0/vUgMsqjaBxUqIrTZ1mNQUBFmiXvXv39urVa8eOHWlpaSNHjiSE/Pe//+X+9BavxEnBnkNQXl7u7Oys/hUeDh06ZG9vHxwcrLaLAriMCC1SsvepAWIsLSc9utLgaVYjEGCB1tm+fTuzPPvgwYP3798v79MvXbo0bdo0LuNY4jM0S0pKbGxsLl68KHejldPQ0PDTTz8xq78pRg1JTaEtULL3qQFiLK0lM7pitmjqNKt+CLBAB3G5Vigp7/DWrVvd3d1V3ED+qSGpKYCWEF+lEbSB+M2POnaalRcCLNBN0gMOKas6vHz5khBSUFCg+jbyTP1JTQEA2NjzHHTyNCuXduK3vALogOHDhx87dmzGjBk///yzyK7jx49PnTrV3t4+JyenR48eInv19fUJIcXFxWpqKH+kvGVCyPbt2xsaGi5dunTt2rXIyEhm49ixY2/fvv3w4UP1thQAdFO/fv2Y/+jqaVYuCLBAZ7UYcEjv9oQQZs2Nrl27qq+h/JESYxUVFQUEBLi7u2dlZZ0/f56JsfLz8wkhRkZGGmgrAOgo3T7NcocAC3SZMOBg0qMTQq5fv97Q0HDw4MEWu31VVdWSJUusra2ZW6haI/G3zLC1tdXT0yOEmJubMzFWeHh4eHj4iBEjunXrpqHGAoAO0vnTLEf6mm4AgGoNHz78+PHjlpaWzMNly5Y1NjaGhIScPn1a5O+nurq6d99999GjR3v27GkxYXRrIfKWGSEhIW+++ea9e/ecnJyYGMvf37+srOzbb7/VVDsBQCe1hdMsJ5qeBAagAatXr+7bty87ScGDBw+GDx9OCFm4cKEGG6ZSSGoKAGrTNk+zbBRN05qO8QA0YM+ePREREaNHj+7fv//t27e///57gUAQFxe3bNkyTTdNhQ4fPhwZGTly5MilS5cKp6MCAKhC2zzNCiHAgrbr8ePHKSkpp06dev369fDhwxcsWPDGG29oulEqJxAITp8+PWrUKENDQ023BQB0XNs8zTIQYAEAAADwDHcRAgAAAPAMARYAAAAAzxBgAXCF6+kAAMARAixo02bPnt3iwjIiioqKJk6c2KFDB0NDw7Fjx966dUsNbQMAgNYLARa0aaGhoZIW7xPKzs4eOnTo2bNnV65ceeLECQ8PDx8fn4sXL6qtkQAA0OrgLkJo6y5dujRx4sS0tLSAgADxvRUVFc7OzjU1NR999NG2bduYjRkZGatXr9b5lUoBAEBhGMGCtk7KAsmEkO3btzc0NFy6dOnatWvMAsmEkLFjx96+ffvhw4fqbSkAALQaCLAApMVYRUVFAQEB7u7uzALJTIyVn59PCDEyMtJAWwEAoDVAgAVACCvGOnXqFHu7ra2tnp4eIYRZIPn8+fPh4eHh4eEjRozo1q2bhhoLAADaDnOwAP7P5cuXLS0tnZychFtu3br15ptv/v7778zGqqoqf3//wsLC3377zc3NTXMtBQAArYYAC0CGDRs2bNu27dChQwMGDCCEVFVVFRYWenp6arpdAACgvRBgAch2+PDhyMjIkSNHLl26tF+/fppuDgAAaDsEWACcCASC06dPjxo1ytDQUNNtAQAAbYcACwAAAIBnuIsQAAAAgGcIsAAAAAB4hgALAAAAgGcIsAAAAAB4hgALAAAAgGcIsAAAAAB4hgALAAAAgGcIsAAAAAB4hgALAPiUmppK/Y+hoWHfvn1XrlwpEAjU35LVq1ebmpryXi3zBouLi4Vbrl692rlz54EDBz579ky4MTc3d/z48V26dDE0NHR0dIyIiKioqOC9MQCgtRBgAQD/ioqKaJquqKiIjIxcuXLlihUrVPpyy5Yts7D4f+3cb0hTaxwH8Oc4Td2aZ2mZLxRLiViRVlLMHK5mW5qSZmRI4IvS0AalNY2wCJPUWMYoTKWwN/3zTdCLZolz4b9wsbQMyiiR2jDDbLM/29R27ovDPQzL7vV2du/13u/n1c7veZ5znmegfHnO2ZH49BKz6e3tTUlJiYmJMZlMS5YsYYvnz59PSUmJi4vr6+ubmJi4fv16b2/vunXrBgcH/5FJAsDfDwELAHyFpunCwsKtW7fW19f//Vc/ceLE58+ffXqJzs5OlUq1atWqtra20NBQttjT01NaWnry5MmqqqqoqKjAwECZTNbW1hYQEJCTk+PxeHw6JQD4l0DAAgDfiomJcTgc4+PjXGVgYCAzM3PRokXBwcGbNm3q6Ojgmq5cucLeXhQIBNHR0Xl5eW/fvvU+28DAQHZ29uLFi0NCQtRqtcViKS4uPnPmjMPhYAdGRkayPWfcIjQajXK5XCgU0jS9Y8cO73t8Wq02IiJibGxs586dCxcujIyMvHDhwh+uq729PS0tLSEh4f79+zRNc3WdTicWi48dO+bdWSQSabXap0+ftrS0/NkvDgDmMwQsAPCtV69eBQcHcxHkyZMniYmJIpHIYrHYbLbU1FSVSmWxWNjW/Px8hmEYhnG73QaDYWRkJCMjY3p6mm19/PixTCYjhHR2dtpstrKysvr6er1eX15eTtM0O9BqtX4/B6PRuG3btoSEhKGhIYvF4nQ6k5KS3rx5w3VgGKa4uPjIkSM2m+3QoUOHDx9++PDhTxZ179699PR0uVxuMBi8YxzDMO3t7XK5PDg4eMYQtVpNCGlvb5/rFwgA8xIDAMCfixcvkt+fwbLb7XV1dYSQ0tJSroNarZZKpVNTU1wlOTk5MzPzh2djH1oym83soVKpXLFihfdYlnfA4lRWVopEIvazTCaLi4vjUCCcQgAABE9JREFUmsbGxoRCoUajYQ+PHj1KCDEYDFyH5cuXHzhw4CcLJITExsa6XK4ZrXa7nRBSWFj4/UCn00lR1O7du394WgD4j8EOFgDwTyqVUhQlkUg0Gk1hYWFNTQ1bn5ycNJlMGRkZ/v7+XGeFQtHV1cV+drvd1dXVq1evFovFFEWtXLmSEDI0NMQ2dXR0ZGdne4/9M1wul9lszsjI4CphYWFJSUkPHjzgKgKBQKVSec9/eHj4J+dMT09//fp1dXX1jDrDMIQQiqJ+OIptBYD/AwQsAOAfu4M1OjpaVFTU1NTERZmPHz9OTU3pdDrKS2VlJfeEllarra2t1el0VqvV4/Gw9/vYtzzY7fbp6emIiIi5TsZut3s8nvDwcO/i0qVLP3z4wB2GhYV55zaxWOxwOH5yTp1OV1BQUFFRwWVHFk3TYrHY++Yjhy1GRUXNdf4AMB8hYAGAr4SHh9fV1cXFxe3fv9/tdhNCaJoWCAQVFRUz9tK539bdunVLo9Fs376dpmmKoryTikQi8ff3f/fu3VynIZFI/Pz8vF9SRQh5//59WFgYdzjbntNsKIpqbGzMy8s7fvy4Xq/3riuVyq6uLpfLNWNIa2srIUSpVM51/gAwHyFgAYAPURRVVVU1PDx8+fJlQkhQUNDmzZvv3Lnz7du37zszDPP169fAwECucvPmTe5zYGBgcnLy7du3uWfeOUKhcHJycrY5BAUFbdy48e7du1xlfHy8u7tboVD85XURQiiKampq2rNnT0lJSUNDA1fXarUTExMzdra+fPly7ty5NWvWpKWl/cpFAWC+QMACAN9SqVSJiYlnz55lM1Btbe3Lly/37t37/Plzp9M5ODio1+vZx8wpikpNTW1sbOzv77fb7ZcuXRoZGfE+lU6ns9lsOTk5L168+PTpk9FoLCgoIIRIpVKn02kymWZ7y9Tp06cHBgZKSkpGR0eHhoZyc3MDAgLKysp+cWkCgeDatWtZWVkHDx68evUqW5TL5TU1NZWVleXl5Var1e129/b2qlQqt9vd3Nzs54f/ugD/C/hTBwCfO3XqlNVqbWpqIoTEx8c/evSIEKJQKEJDQ7OysqxWKxuwCCENDQ2JiYlbtmyJjY199uyZ9903Qsj69et7enqmp6dlMllUVJROpysqKiKEZGZm7tu3b9euXQKBgHsPljeVStXS0mI2m5ctW7Z27doFCxZ0d3dHR0f/+tL8/f2bm5vT0tLy8/Nv3LjBFsvKylpbW/v7++Pj40NCQnJzczds2NDX1yeVSn/9igAwL1D4VQsAAAAAv7CDBQAAAMAzBCwAAAAAniFgAQAAAPAMAQsAAACAZwhYAAAAADxDwAIAAADgGQIWAAAAAM8QsAAAAAB4hoAFAAAAwDMELAAAAACeIWABAAAA8AwBCwAAAIBnCFgAAAAAPEPAAgAAAOAZAhYAAAAAzxCwAAAAAHiGgAUAAADAMwQsAAAAAJ79BthGvJwUKRu/AAAAAElFTkSuQmCC" /><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/notebooks/7_community_model/index.html b/dev/notebooks/7_community_model/index.html index 4f9c0eae2..e00965682 100644 --- a/dev/notebooks/7_community_model/index.html +++ b/dev/notebooks/7_community_model/index.html @@ -133,4 +133,4 @@ d = flux_balance_analysis_dict( Tulip.Optimizer; modifications = [change_optimizer_attribute("IPM_IterationsLimit", 1000)], ) -d["community_biomass"] # community μ</code></pre><pre class="documenter-example-output">0.23607110796208797</pre><p>Notice that the growth rate is now above 0! Nutrient sharing saved the day!</p><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +d["community_biomass"] # community μ</code></pre><pre class="documenter-example-output">0.23607110796208797</pre><p>Notice that the growth rate is now above 0! Nutrient sharing saved the day!</p><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/notebooks/8_custom_model/index.html b/dev/notebooks/8_custom_model/index.html index f69cbe786..bd5f51e0d 100644 --- a/dev/notebooks/8_custom_model/index.html +++ b/dev/notebooks/8_custom_model/index.html @@ -126,4 +126,4 @@ reactions_to_remove .=> screen_variants( "Reaction W" => 0.3044596423819445 "Reaction X" => 0.3044596423819445 "Reaction Y" => 0.3044596260552588 - "Reaction Z" => 0.3044596424137387</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> + "Reaction Z" => 0.3044596424137387</pre><hr/><p><em>This page was generated using <a href="https://github.com/fredrikekre/Literate.jl">Literate.jl</a>.</em></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/notebooks/index.html b/dev/notebooks/index.html index c858f7224..6c8aca9e3 100644 --- a/dev/notebooks/index.html +++ b/dev/notebooks/index.html @@ -1,2 +1,2 @@ <!DOCTYPE html> -<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Examples and notebooks · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../tutorials/">Quickstart tutorials</a></li><li><a class="tocitem" href="../advanced/">Advanced tutorials</a></li><li class="is-active"><a class="tocitem" href>Examples and notebooks</a></li><li><a class="tocitem" href="../functions/">Function reference</a></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Examples and notebooks</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Examples and notebooks</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/master/docs/src/notebooks.md" title="Edit on GitHub"><span class="docs-icon fab">ï‚›</span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Notebooks-and-example-workflows"><a class="docs-heading-anchor" href="#Notebooks-and-example-workflows">Notebooks and example workflows</a><a id="Notebooks-and-example-workflows-1"></a><a class="docs-heading-anchor-permalink" href="#Notebooks-and-example-workflows" title="Permalink"></a></h1><ul><li><a href="1_loading_converting_saving/#Loading,-converting,-and-saving-models">Loading, converting, and saving models</a></li><ul><li><a href="1_loading_converting_saving/#Loading-models">Loading models</a></li><li><a href="1_loading_converting_saving/#Using-the-generic-interface-to-access-model-details">Using the generic interface to access model details</a></li><li><a href="1_loading_converting_saving/#Converting-between-model-types">Converting between model types</a></li><li><a href="1_loading_converting_saving/#Saving-and-exporting-models">Saving and exporting models</a></li></ul><li><a href="2_finding_balance/#Finding-balance-and-variability-of-constraint-based-models">Finding balance and variability of constraint-based models</a></li><ul><li><a href="2_finding_balance/#Optimization-solvers-in-COBREXA">Optimization solvers in <code>COBREXA</code></a></li><li><a href="2_finding_balance/#Flux-balance-analysis-(FBA)">Flux balance analysis (FBA)</a></li><li><a href="2_finding_balance/#Modifications">Modifications</a></li><li><a href="2_finding_balance/#Flux-variability-analysis-(FVA)">Flux variability analysis (FVA)</a></li><li><a href="2_finding_balance/#Parsimonious-flux-balance-analysis-(pFBA)">Parsimonious flux balance analysis (pFBA)</a></li></ul><li><a href="3_basic_stdmodel_usage/#Basic-usage-of-StandardModel">Basic usage of <code>StandardModel</code></a></li><ul><li><a href="3_basic_stdmodel_usage/#Loading-a-model">Loading a model</a></li><li><a href="3_basic_stdmodel_usage/#Basic-analysis">Basic analysis</a></li><li><a href="3_basic_stdmodel_usage/#Inspecting-the-flux-solution:-atom_exchange">Inspecting the flux solution: <code>atom_exchange</code></a></li><li><a href="3_basic_stdmodel_usage/#Inspecting-the-flux-solution:-metabolite_fluxes">Inspecting the flux solution: <code>metabolite_fluxes</code></a></li><li><a href="3_basic_stdmodel_usage/#Internals-of-StandardModel">Internals of <code>StandardModel</code></a></li><li><a href="3_basic_stdmodel_usage/#Genes,-Reactions,-and-Metabolites"><code>Gene</code>s, <code>Reaction</code>s, and <code>Metabolite</code>s</a></li><li><a href="3_basic_stdmodel_usage/#Checking-the-internals-of-StandardModels:-annotation_index">Checking the internals of <code>StandardModel</code>s: <code>annotation_index</code></a></li><li><a href="3_basic_stdmodel_usage/#Checking-the-internals-of-StandardModels:-check_duplicate_reaction">Checking the internals of <code>StandardModel</code>s: <code>check_duplicate_reaction</code></a></li><li><a href="3_basic_stdmodel_usage/#Checking-the-internals-of-StandardModels:-is_mass_balanced">Checking the internals of <code>StandardModel</code>s: <code>is_mass_balanced</code></a></li></ul><li><a href="4_basic_core_coupled_usage/#Basic-usage-of-CoreModel-and-CoreModelCoupled">Basic usage of <code>CoreModel</code> and <code>CoreModelCoupled</code></a></li><ul><li><a href="4_basic_core_coupled_usage/#Loading-a-CoreModel">Loading a <code>CoreModel</code></a></li><li><a href="4_basic_core_coupled_usage/#Basic-analysis-on-CoreModel">Basic analysis on <code>CoreModel</code></a></li><li><a href="4_basic_core_coupled_usage/#Structure-of-CoreModel">Structure of <code>CoreModel</code></a></li><li><a href="4_basic_core_coupled_usage/#CoreModelCoupled-adds-coupling-constraints-to-CoreModel"><code>CoreModelCoupled</code> adds coupling constraints to <code>CoreModel</code></a></li></ul><li><a href="5_basic_stdmodel_construction/#Model-construction-and-modification">Model construction and modification</a></li><ul><li><a href="5_basic_stdmodel_construction/#Model-construction">Model construction</a></li><li><a href="5_basic_stdmodel_construction/#Modifying-existing-models">Modifying existing models</a></li></ul><li><a href="6_screening/#Exploring-model-variants-with-screen">Exploring model variants with <code>screen</code></a></li><ul><li><a href="6_screening/#Preparing-the-functions">Preparing the functions</a></li><li><a href="6_screening/#Knocking-out-single-reactions">Knocking out single reactions</a></li><li><a href="6_screening/#Knocking-out-reaction-combinations">Knocking out reaction combinations</a></li></ul><li><a href="7_community_model/#Building-and-analysing-a-small-community-model">Building and analysing a small community model</a></li><ul><li><a href="7_community_model/#Load-the-base-model">Load the base model</a></li><li><a href="7_community_model/#Load-the-models-and-inspect-fba-solutions">Load the models and inspect fba solutions</a></li><li><a href="7_community_model/#Build-a-community-model-of-the-cytochrome-oxidase-knockout-and-the-ATP-synthase-knockout-models">Build a community model of the cytochrome oxidase knockout and the ATP synthase knockout models</a></li><li><a href="7_community_model/#Set-exchange-reaction-bounds-of-community-model-based-on-the-bounds-of-the-individual-models">Set exchange reaction bounds of community model based on the bounds of the individual models</a></li><li><a href="7_community_model/#Add-objective-function-to-community-model">Add objective function to community model`</a></li><li><a href="7_community_model/#Perform-community-FBA">Perform community FBA</a></li><li><a href="7_community_model/#Add-the-enolase-knockout-to-the-community-model">Add the enolase knockout to the community model</a></li><li><a href="7_community_model/#Allow-the-mutants-to-rescue-each-other-by-sharing-pyruvate">Allow the mutants to rescue each other by sharing pyruvate</a></li></ul><li><a href="8_custom_model/#Using-a-custom-model-data-structure">Using a custom model data structure</a></li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../advanced/">« Advanced tutorials</a><a class="docs-footer-nextpage" href="../functions/">Function reference »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Examples and notebooks · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../tutorials/">Quickstart tutorials</a></li><li><a class="tocitem" href="../advanced/">Advanced tutorials</a></li><li class="is-active"><a class="tocitem" href>Examples and notebooks</a></li><li><a class="tocitem" href="../functions/">Function reference</a></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Examples and notebooks</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Examples and notebooks</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/master/docs/src/notebooks.md" title="Edit on GitHub"><span class="docs-icon fab">ï‚›</span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Notebooks-and-example-workflows"><a class="docs-heading-anchor" href="#Notebooks-and-example-workflows">Notebooks and example workflows</a><a id="Notebooks-and-example-workflows-1"></a><a class="docs-heading-anchor-permalink" href="#Notebooks-and-example-workflows" title="Permalink"></a></h1><ul><li><a href="1_loading_converting_saving/#Loading,-converting,-and-saving-models">Loading, converting, and saving models</a></li><ul><li><a href="1_loading_converting_saving/#Loading-models">Loading models</a></li><li><a href="1_loading_converting_saving/#Using-the-generic-interface-to-access-model-details">Using the generic interface to access model details</a></li><li><a href="1_loading_converting_saving/#Converting-between-model-types">Converting between model types</a></li><li><a href="1_loading_converting_saving/#Saving-and-exporting-models">Saving and exporting models</a></li></ul><li><a href="2_finding_balance/#Finding-balance-and-variability-of-constraint-based-models">Finding balance and variability of constraint-based models</a></li><ul><li><a href="2_finding_balance/#Optimization-solvers-in-COBREXA">Optimization solvers in <code>COBREXA</code></a></li><li><a href="2_finding_balance/#Flux-balance-analysis-(FBA)">Flux balance analysis (FBA)</a></li><li><a href="2_finding_balance/#Modifications">Modifications</a></li><li><a href="2_finding_balance/#Flux-variability-analysis-(FVA)">Flux variability analysis (FVA)</a></li><li><a href="2_finding_balance/#Parsimonious-flux-balance-analysis-(pFBA)">Parsimonious flux balance analysis (pFBA)</a></li></ul><li><a href="3_basic_stdmodel_usage/#Basic-usage-of-StandardModel">Basic usage of <code>StandardModel</code></a></li><ul><li><a href="3_basic_stdmodel_usage/#Loading-a-model">Loading a model</a></li><li><a href="3_basic_stdmodel_usage/#Basic-analysis">Basic analysis</a></li><li><a href="3_basic_stdmodel_usage/#Inspecting-the-flux-solution:-atom_exchange">Inspecting the flux solution: <code>atom_exchange</code></a></li><li><a href="3_basic_stdmodel_usage/#Inspecting-the-flux-solution:-metabolite_fluxes">Inspecting the flux solution: <code>metabolite_fluxes</code></a></li><li><a href="3_basic_stdmodel_usage/#Internals-of-StandardModel">Internals of <code>StandardModel</code></a></li><li><a href="3_basic_stdmodel_usage/#Genes,-Reactions,-and-Metabolites"><code>Gene</code>s, <code>Reaction</code>s, and <code>Metabolite</code>s</a></li><li><a href="3_basic_stdmodel_usage/#Checking-the-internals-of-StandardModels:-annotation_index">Checking the internals of <code>StandardModel</code>s: <code>annotation_index</code></a></li><li><a href="3_basic_stdmodel_usage/#Checking-the-internals-of-StandardModels:-check_duplicate_reaction">Checking the internals of <code>StandardModel</code>s: <code>check_duplicate_reaction</code></a></li><li><a href="3_basic_stdmodel_usage/#Checking-the-internals-of-StandardModels:-is_mass_balanced">Checking the internals of <code>StandardModel</code>s: <code>is_mass_balanced</code></a></li></ul><li><a href="4_basic_core_coupled_usage/#Basic-usage-of-CoreModel-and-CoreModelCoupled">Basic usage of <code>CoreModel</code> and <code>CoreModelCoupled</code></a></li><ul><li><a href="4_basic_core_coupled_usage/#Loading-a-CoreModel">Loading a <code>CoreModel</code></a></li><li><a href="4_basic_core_coupled_usage/#Basic-analysis-on-CoreModel">Basic analysis on <code>CoreModel</code></a></li><li><a href="4_basic_core_coupled_usage/#Structure-of-CoreModel">Structure of <code>CoreModel</code></a></li><li><a href="4_basic_core_coupled_usage/#CoreModelCoupled-adds-coupling-constraints-to-CoreModel"><code>CoreModelCoupled</code> adds coupling constraints to <code>CoreModel</code></a></li></ul><li><a href="5_basic_stdmodel_construction/#Model-construction-and-modification">Model construction and modification</a></li><ul><li><a href="5_basic_stdmodel_construction/#Model-construction">Model construction</a></li><li><a href="5_basic_stdmodel_construction/#Modifying-existing-models">Modifying existing models</a></li></ul><li><a href="6_screening/#Exploring-model-variants-with-screen">Exploring model variants with <code>screen</code></a></li><ul><li><a href="6_screening/#Preparing-the-functions">Preparing the functions</a></li><li><a href="6_screening/#Knocking-out-single-reactions">Knocking out single reactions</a></li><li><a href="6_screening/#Knocking-out-reaction-combinations">Knocking out reaction combinations</a></li></ul><li><a href="7_community_model/#Building-and-analysing-a-small-community-model">Building and analysing a small community model</a></li><ul><li><a href="7_community_model/#Load-the-base-model">Load the base model</a></li><li><a href="7_community_model/#Load-the-models-and-inspect-fba-solutions">Load the models and inspect fba solutions</a></li><li><a href="7_community_model/#Build-a-community-model-of-the-cytochrome-oxidase-knockout-and-the-ATP-synthase-knockout-models">Build a community model of the cytochrome oxidase knockout and the ATP synthase knockout models</a></li><li><a href="7_community_model/#Set-exchange-reaction-bounds-of-community-model-based-on-the-bounds-of-the-individual-models">Set exchange reaction bounds of community model based on the bounds of the individual models</a></li><li><a href="7_community_model/#Add-objective-function-to-community-model">Add objective function to community model`</a></li><li><a href="7_community_model/#Perform-community-FBA">Perform community FBA</a></li><li><a href="7_community_model/#Add-the-enolase-knockout-to-the-community-model">Add the enolase knockout to the community model</a></li><li><a href="7_community_model/#Allow-the-mutants-to-rescue-each-other-by-sharing-pyruvate">Allow the mutants to rescue each other by sharing pyruvate</a></li></ul><li><a href="8_custom_model/#Using-a-custom-model-data-structure">Using a custom model data structure</a></li></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../advanced/">« Advanced tutorials</a><a class="docs-footer-nextpage" href="../functions/">Function reference »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/search/index.html b/dev/search/index.html index 454e9ddf0..c97f315d7 100644 --- a/dev/search/index.html +++ b/dev/search/index.html @@ -1,2 +1,2 @@ <!DOCTYPE html> -<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../tutorials/">Quickstart tutorials</a></li><li><a class="tocitem" href="../advanced/">Advanced tutorials</a></li><li><a class="tocitem" href="../notebooks/">Examples and notebooks</a></li><li><a class="tocitem" href="../functions/">Function reference</a></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body><script src="../search_index.js"></script><script src="../assets/search.js"></script></html> +<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../tutorials/">Quickstart tutorials</a></li><li><a class="tocitem" href="../advanced/">Advanced tutorials</a></li><li><a class="tocitem" href="../notebooks/">Examples and notebooks</a></li><li><a class="tocitem" href="../functions/">Function reference</a></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body><script src="../search_index.js"></script><script src="../assets/search.js"></script></html> diff --git a/dev/tutorials/1_loading/index.html b/dev/tutorials/1_loading/index.html index a1ed84465..105a46156 100644 --- a/dev/tutorials/1_loading/index.html +++ b/dev/tutorials/1_loading/index.html @@ -18,4 +18,4 @@ jm.json["reactions"][1]</code></pre><p>That should print out the first "upper_bound" => 1000.0 "subsystem" => "Glycolysis/Gluconeogenesis" "annotation" => Dict{String,Any}("ec-code"=>Any["2.7.1.11"],"metanetx…</code></pre><p><a href="../../functions/#COBREXA.MATModel"><code>MATModel</code></a> and <a href="../../functions/#COBREXA.SBMLModel"><code>SBMLModel</code></a> (returned by the respective loading functions) contain similar "full" model information – you can access the whole MATLAB and SBML data and build on them without any restrictions.</p><h2 id="Converting-to-other-model-types"><a class="docs-heading-anchor" href="#Converting-to-other-model-types">Converting to other model types</a><a id="Converting-to-other-model-types-1"></a><a class="docs-heading-anchor-permalink" href="#Converting-to-other-model-types" title="Permalink"></a></h2><p>Despite JSON and SBML are great for storing and exchanging the models, the data representation is not very suitable for analyzing the model and processing it mathematically.</p><p>COBREXA.jl contains several model types that are much better suited for supporting the analysis tasks. You can use the following:</p><ul><li><a href="../../functions/#COBREXA.CoreModel"><code>CoreModel</code></a>, which represents the "core" of the optimization problem and the corresponding linear programming problem – a sparse representation of the stoichiometric matrix, flux bounds vectors, objective vector, etc.</li><li><a href="../../functions/#COBREXA.StandardModel"><code>StandardModel</code></a> (a "standard" for COBREXA.jl), which represents a highly flexible, object-like, dictionary-based representation of a model that contains individual <a href="../../functions/#COBREXA.Reaction"><code>Reaction</code></a>s, <a href="../../functions/#COBREXA.Metabolite"><code>Metabolite</code></a>s, <a href="../../functions/#COBREXA.Gene"><code>Gene</code></a>s, and other things.</li></ul><div class="admonition is-info"><header class="admonition-header">Conversion limitations and possible data loss</header><div class="admonition-body"><p>Because of the specifics of the format of each model structure, the conversion is not always able to preserve all information from the source data. You may need to check if any complicated and less-standard annotations are still present. If you require them, and either use a more complicated model, or collect them manually.</p></div></div><p>A loaded model can be converted to any other model type using the standard Julia conversion:</p><pre><code class="language-none">cm = convert(CoreModel, jm)</code></pre><p>You can also use a shortcut in <a href="../../functions/#COBREXA.load_model-Tuple{String}"><code>load_model</code></a> to convert the model to the desired format in one command:</p><pre><code class="language-none">cm = load_model(CoreModel, "e_coli_core.xml")</code></pre><p>With <a href="../../functions/#COBREXA.CoreModel"><code>CoreModel</code></a>, the information is easily accessible in matrix form. For example, <code>cm.S</code> now contains the sparse stoichiometric matrix, which you can convert to a dense matrix and manipulate it in Julia as any other matrix:</p><pre><code class="language-none">Matrix(cm.S)</code></pre><p>...should show you the (relatively empty) stoichiometry of the model.</p><p><a href="../../functions/#COBREXA.StandardModel"><code>StandardModel</code></a> is more suitable for fine-grained access to individual items of the model, perhaps closer to the SBML-style models. For example, you can view and set reaction bounds as follows:</p><pre><code class="language-none">sm = load_model(StandardModel, "e_coli_core.json") -sm.reactions["PGI"].ub</code></pre><p>...this prints the upper bound of the reaction (in this case, <code>1000.0</code>); you can change it the usual way:</p><pre><code class="language-none">sm.reactions["PGI"].ub = 500</code></pre><p>This change will naturally project to future analysis results.</p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +sm.reactions["PGI"].ub</code></pre><p>...this prints the upper bound of the reaction (in this case, <code>1000.0</code>); you can change it the usual way:</p><pre><code class="language-none">sm.reactions["PGI"].ub = 500</code></pre><p>This change will naturally project to future analysis results.</p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/tutorials/2_analysis/index.html b/dev/tutorials/2_analysis/index.html index 5d3b82a42..9e93aec19 100644 --- a/dev/tutorials/2_analysis/index.html +++ b/dev/tutorials/2_analysis/index.html @@ -32,4 +32,4 @@ Names registered in the model: lbs, mb, ubs, x</code></pre><p>From that, you can -16.243 -37.4763 -5.57301 0.0 0.0 0.0 -0.310819 -1.20057e-7 -2.13126 - 5.71597e-5 0.00990677 0.692399</code></pre></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> + 5.71597e-5 0.00990677 0.692399</code></pre></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/tutorials/3_hpc/index.html b/dev/tutorials/3_hpc/index.html index bfbe1e6c4..d871cba65 100644 --- a/dev/tutorials/3_hpc/index.html +++ b/dev/tutorials/3_hpc/index.html @@ -23,4 +23,4 @@ result = flux_variability_analysis(...; workers=workers()) module load lang/Julia # this is usually required to make Julia available to your job -julia myJob.jl</code></pre><p>To run the computation, simply run <code>sbatch myJob.sbatch</code> on the access node. The job will be scheduled and eventually executed. You may watch <code>sacct</code> and <code>squeue</code> in the meantime, to see the progress.</p><p>Remember that you need to explicitly save the result of your Julia script computation to files, to be able to retrieve them later. Standard outputs of the jobs are often mangled and discarded. If you still want to collect the standard output, you may change the last line of the batch script to</p><pre><code class="language-none">julia myJob.jl > myJob.log</code></pre><p>and collect the output from the log later. This is convenient especially if logging various computation details using the <code>@info</code> and similar macros.</p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +julia myJob.jl</code></pre><p>To run the computation, simply run <code>sbatch myJob.sbatch</code> on the access node. The job will be scheduled and eventually executed. You may watch <code>sacct</code> and <code>squeue</code> in the meantime, to see the progress.</p><p>Remember that you need to explicitly save the result of your Julia script computation to files, to be able to retrieve them later. Standard outputs of the jobs are often mangled and discarded. If you still want to collect the standard output, you may change the last line of the batch script to</p><pre><code class="language-none">julia myJob.jl > myJob.log</code></pre><p>and collect the output from the log later. This is convenient especially if logging various computation details using the <code>@info</code> and similar macros.</p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/tutorials/4_modifying/index.html b/dev/tutorials/4_modifying/index.html index e31242229..300a5f649 100644 --- a/dev/tutorials/4_modifying/index.html +++ b/dev/tutorials/4_modifying/index.html @@ -19,4 +19,4 @@ flux_balance_analysis_dict( change_objective("R_TALA"), ])</code></pre><h2 id="Exporting-the-modified-models-in-native-formats"><a class="docs-heading-anchor" href="#Exporting-the-modified-models-in-native-formats">Exporting the modified models in native formats</a><a id="Exporting-the-modified-models-in-native-formats-1"></a><a class="docs-heading-anchor-permalink" href="#Exporting-the-modified-models-in-native-formats" title="Permalink"></a></h2><p>Manually modified models can be exported in standard formats so that they can be examined in other environments, or just made accessible for publication.</p><p><code>COBREXA.jl</code> supports export of MATLAB-like and JSON models. Simply use <a href="../../functions/#COBREXA.save_model-Tuple{MetabolicModel, String}"><code>save_model</code></a>:</p><pre><code class="language-none">save_model(m, "myModel.json") save_model(m, "myModel.mat")</code></pre><p>The function automatically guesses the appropriate model format to write into the file from the file extension. If required, you can choose the model format manually by using <a href="../../functions/#COBREXA.save_json_model-Tuple{MetabolicModel, String}"><code>save_json_model</code></a> and <a href="../../functions/#COBREXA.save_mat_model-Tuple{MetabolicModel, String}"><code>save_mat_model</code></a>.</p><h2 id="Using-Serialization-for-quick-and-efficient-model-storage"><a class="docs-heading-anchor" href="#Using-Serialization-for-quick-and-efficient-model-storage">Using <code>Serialization</code> for quick & efficient model storage</a><a id="Using-Serialization-for-quick-and-efficient-model-storage-1"></a><a class="docs-heading-anchor-permalink" href="#Using-Serialization-for-quick-and-efficient-model-storage" title="Permalink"></a></h2><p>If you save the model "just for yourself", such as for the use in an immediately following analysis, it may be inconvenient (and unnecessarily inefficient) to encode and decode the models to and from the external format. Moreover, certain model types (such as <a href="../../functions/#COBREXA.CoreModelCoupled"><code>CoreModelCoupled</code></a>) cannot be fully represented in all model formats, thus increasing the chance for accidental data loss.</p><p>Instead of that, we recommend using the <code>Serialization</code> package. It provides a straightforward way to save <em>any</em> Julia data structure to the disk, using a very efficient data format that can be written to and read from the disk very quickly.</p><p>With any model in <code>m</code>, you can write it to disk as follows:</p><pre><code class="language-none">using Serialization -open(f -> serialize(f, m), "myModel", "w")</code></pre><p>...and read it back with:</p><pre><code class="language-none">m = deserialize("myModel")</code></pre><p>One great advantage of <code>Serialization</code> is speed – models with millions of reactions are usually loaded and saved with minimal overhead in less than a second.</p><div class="admonition is-warning"><header class="admonition-header">Limits of `Serialization`</header><div class="admonition-body"><p>Serialized models are great for quickly exchanging data objects between analysis steps. The avoided need for re-encoding can save you a great deal of analysis time that can be used for better purposes. Despite that, do not rely on the stability of the serialized format – it often changes between Julia versions, and the data stored in one version may not open easily after an upgrade. In short, use serialized data within one workflow, and use standard and stable external formats for publishing and storing the data beyond the scope of a single analysis workflow.</p></div></div></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +open(f -> serialize(f, m), "myModel", "w")</code></pre><p>...and read it back with:</p><pre><code class="language-none">m = deserialize("myModel")</code></pre><p>One great advantage of <code>Serialization</code> is speed – models with millions of reactions are usually loaded and saved with minimal overhead in less than a second.</p><div class="admonition is-warning"><header class="admonition-header">Limits of `Serialization`</header><div class="admonition-body"><p>Serialized models are great for quickly exchanging data objects between analysis steps. The avoided need for re-encoding can save you a great deal of analysis time that can be used for better purposes. Despite that, do not rely on the stability of the serialized format – it often changes between Julia versions, and the data stored in one version may not open easily after an upgrade. In short, use serialized data within one workflow, and use standard and stable external formats for publishing and storing the data beyond the scope of a single analysis workflow.</p></div></div></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/dev/tutorials/index.html b/dev/tutorials/index.html index 39ebddbb5..64969a9ba 100644 --- a/dev/tutorials/index.html +++ b/dev/tutorials/index.html @@ -1,2 +1,2 @@ <!DOCTYPE html> -<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Quickstart tutorials · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li class="is-active"><a class="tocitem" href>Quickstart tutorials</a></li><li><a class="tocitem" href="../advanced/">Advanced tutorials</a></li><li><a class="tocitem" href="../notebooks/">Examples and notebooks</a></li><li><a class="tocitem" href="../functions/">Function reference</a></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Quickstart tutorials</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Quickstart tutorials</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/master/docs/src/tutorials.md" title="Edit on GitHub"><span class="docs-icon fab">ï‚›</span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="COBREXA-Tutorials"><a class="docs-heading-anchor" href="#COBREXA-Tutorials">COBREXA Tutorials</a><a id="COBREXA-Tutorials-1"></a><a class="docs-heading-anchor-permalink" href="#COBREXA-Tutorials" title="Permalink"></a></h1><ul><li><a href="1_loading/#Loading-and-converting-model-data">Loading and converting model data</a></li><ul><li><a href="1_loading/#Loading-models-from-files">Loading models from files</a></li><li><a href="1_loading/#Converting-to-other-model-types">Converting to other model types</a></li></ul><li><a href="2_analysis/#Basic-analysis-of-constraint-based-models">Basic analysis of constraint-based models</a></li><ul><li><a href="2_analysis/#Optimization-problem-solvers">Optimization problem solvers</a></li><li><a href="2_analysis/#Flux-balance-analysis">Flux balance analysis</a></li><li><a href="2_analysis/#Flux-variability-analysis">Flux variability analysis</a></li><li><a href="2_analysis/#Parsimonious-flux-balance-analysis">Parsimonious flux balance analysis</a></li><li><a href="2_analysis/#Flux-sampling">Flux sampling</a></li></ul><li><a href="3_hpc/#Distributed-processing-and-HPC-environments">Distributed processing and HPC environments</a></li><ul><li><a href="3_hpc/#Starting-the-distributed-workers">Starting the distributed workers</a></li><li><a href="3_hpc/#Running-a-distributed-analysis">Running a distributed analysis</a></li><li><a href="3_hpc/#Interacting-with-HPC-schedulers">Interacting with HPC schedulers</a></li><li><a href="3_hpc/#Wrapping-your-script-in-a-Slurm-job">Wrapping your script in a Slurm job</a></li></ul><li><a href="4_modifying/#Modifying-and-saving-the-models">Modifying and saving the models</a></li><ul><li><a href="4_modifying/#Manual-modifications">Manual modifications</a></li><li><a href="4_modifying/#Analysis-modifiers">Analysis modifiers</a></li><li><a href="4_modifying/#Exporting-the-modified-models-in-native-formats">Exporting the modified models in native formats</a></li><li><a href="4_modifying/#Using-Serialization-for-quick-and-efficient-model-storage">Using <code>Serialization</code> for quick & efficient model storage</a></li></ul></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../">« Home</a><a class="docs-footer-nextpage" href="../advanced/">Advanced tutorials »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 27 July 2021 17:08">Tuesday 27 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Quickstart tutorials · COBREXA.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script><link href="../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img class="docs-light-only" src="../assets/logo.svg" alt="COBREXA.jl logo"/><img class="docs-dark-only" src="../assets/logo-dark.svg" alt="COBREXA.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">COBREXA.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li class="is-active"><a class="tocitem" href>Quickstart tutorials</a></li><li><a class="tocitem" href="../advanced/">Advanced tutorials</a></li><li><a class="tocitem" href="../notebooks/">Examples and notebooks</a></li><li><a class="tocitem" href="../functions/">Function reference</a></li><li><a class="tocitem" href="../howToContribute/">How to contribute</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Quickstart tutorials</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Quickstart tutorials</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/LCSB-BioCore/COBREXA.jl/blob/master/docs/src/tutorials.md" title="Edit on GitHub"><span class="docs-icon fab">ï‚›</span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="COBREXA-Tutorials"><a class="docs-heading-anchor" href="#COBREXA-Tutorials">COBREXA Tutorials</a><a id="COBREXA-Tutorials-1"></a><a class="docs-heading-anchor-permalink" href="#COBREXA-Tutorials" title="Permalink"></a></h1><ul><li><a href="1_loading/#Loading-and-converting-model-data">Loading and converting model data</a></li><ul><li><a href="1_loading/#Loading-models-from-files">Loading models from files</a></li><li><a href="1_loading/#Converting-to-other-model-types">Converting to other model types</a></li></ul><li><a href="2_analysis/#Basic-analysis-of-constraint-based-models">Basic analysis of constraint-based models</a></li><ul><li><a href="2_analysis/#Optimization-problem-solvers">Optimization problem solvers</a></li><li><a href="2_analysis/#Flux-balance-analysis">Flux balance analysis</a></li><li><a href="2_analysis/#Flux-variability-analysis">Flux variability analysis</a></li><li><a href="2_analysis/#Parsimonious-flux-balance-analysis">Parsimonious flux balance analysis</a></li><li><a href="2_analysis/#Flux-sampling">Flux sampling</a></li></ul><li><a href="3_hpc/#Distributed-processing-and-HPC-environments">Distributed processing and HPC environments</a></li><ul><li><a href="3_hpc/#Starting-the-distributed-workers">Starting the distributed workers</a></li><li><a href="3_hpc/#Running-a-distributed-analysis">Running a distributed analysis</a></li><li><a href="3_hpc/#Interacting-with-HPC-schedulers">Interacting with HPC schedulers</a></li><li><a href="3_hpc/#Wrapping-your-script-in-a-Slurm-job">Wrapping your script in a Slurm job</a></li></ul><li><a href="4_modifying/#Modifying-and-saving-the-models">Modifying and saving the models</a></li><ul><li><a href="4_modifying/#Manual-modifications">Manual modifications</a></li><li><a href="4_modifying/#Analysis-modifiers">Analysis modifiers</a></li><li><a href="4_modifying/#Exporting-the-modified-models-in-native-formats">Exporting the modified models in native formats</a></li><li><a href="4_modifying/#Using-Serialization-for-quick-and-efficient-model-storage">Using <code>Serialization</code> for quick & efficient model storage</a></li></ul></ul></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../">« Home</a><a class="docs-footer-nextpage" href="../advanced/">Advanced tutorials »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 28 July 2021 12:10">Wednesday 28 July 2021</span>. Using Julia version 1.6.0.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> -- GitLab