diff --git a/.github/workflows/validate-notebooks.yml b/.github/workflows/validate-notebooks.yml
new file mode 100644
index 00000000..a47915d8
--- /dev/null
+++ b/.github/workflows/validate-notebooks.yml
@@ -0,0 +1,25 @@
+name: Check notebook examples for regressions
+
+on: [push, pull_request]
+
+env:
+ JULIA_NUM_THREADS: 'auto'
+jobs:
+ notebooks-examples-regression-test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: julia-actions/setup-julia@v1
+ with:
+ version: 1.9
+ - uses: julia-actions/cache@v1
+ - uses: julia-actions/julia-buildpkg@v1
+ - name: Create Julia files from Jupyter Notebook examples
+ run: |
+ mkdir ./jlexamples
+ ./ipynb-to-jl.sh "full_fledged_schema_examples"
+ ./ipynb-to-jl.sh "full_fledged_schema_examples_new"
+ - name: Validate notebook examples by running
+ run: julia -p auto --project="." -e 'include("./run_notebooks.jl")'
+ - name: Clean up Julia files from Jupyter Notebook examples
+ run: rm -rf jlexamples
diff --git a/.gitignore b/.gitignore
index 947c55d6..2069f2a2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,35 +2,22 @@
*.jl.cov
*.jl.mem
-examples/.ipynb_checkpoints/
-
+.vscode
.DS_Store
-examples/primitive schema examples/.ipynb_checkpoints/
-
-examples/primitive_schema_examples/.ipynb_checkpoints/
-
-
-
-examples/primitive_schema_examples/practises/.ipynb_checkpoints/SEIRVD model hard-checkpoint.ipynb
-
-examples/primitive_schema_examples/practises/.ipynb_checkpoints/SEIRVD model-checkpoint.ipynb
-
-examples/primitive_schema_examples/practises/.ipynb_checkpoints/SIRV composition model simple-checkpoint.ipynb
-
-examples/primitive_schema_examples/practises/.ipynb_checkpoints/SIRV composition model-checkpoint.ipynb
-
-examples/primitive_schema_examples/practises/solutions/.ipynb_checkpoints/SIRV composition model-checkpoint.ipynb
-
-examples/full_fledged_schema_examples/.ipynb_checkpoints/composed open population SIRV model-checkpoint.ipynb
-
-examples/full_fledged_schema_examples/.ipynb_checkpoints/
+Manifest.toml
+.#*
-examples/full_fledged_schema_examples/composition/.ipynb_checkpoints/
+# Jupyter notebook checkpoints
+.ipynb_checkpoints
+**/*.ipynb_checkpoints
-examples/full_fledged_schema_examples/stratification/.ipynb_checkpoints/
+# Vim temporary files:
+*~
+*.swp
+*.swo
-examples/full_fledged_schema_examples/CaulsalLoopDiagrams/.ipynb_checkpoints/
+# Emacs temporary files
+\#*\#
+.\#*
-Manifest.toml
-.#*
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 7a73a41b..00000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,2 +0,0 @@
-{
-}
\ No newline at end of file
diff --git a/Project.toml b/Project.toml
index 6aada9dd..af97f70a 100644
--- a/Project.toml
+++ b/Project.toml
@@ -9,9 +9,7 @@ AlgebraicRewriting = "725a01d3-f174-5bbd-84e1-b9417bad95d9"
Catlab = "134e5e36-593f-5add-ad60-77f754baafbe"
Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa"
CompTime = "0fb5dd42-039a-4ca4-a1d7-89a96eae6d39"
-GraphViz = "f526b714-d49f-11e8-06ff-31ed36ee7ee0"
Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6"
-Graphviz_jll = "3c863552-8265-54e4-a6dc-903eb78fde85"
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
LabelledArrays = "2ee39098-c373-598a-b85f-a56591580800"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
@@ -29,7 +27,6 @@ AlgebraicRewriting = "0.2.1 - 0.3.2, 0.4"
Catlab = "0.15.5 - 0.16.8, 0.16"
Combinatorics = "1.0.2"
CompTime = "0.1"
-GraphViz = "0.2"
Graphs = "1.9.0"
JSON = "0.21.0"
LabelledArrays = "^1"
diff --git a/docs/Project.toml b/docs/Project.toml
index 8da6fd73..afc2d5c1 100644
--- a/docs/Project.toml
+++ b/docs/Project.toml
@@ -2,7 +2,6 @@
AlgebraicRewriting = "725a01d3-f174-5bbd-84e1-b9417bad95d9"
Catlab = "134e5e36-593f-5add-ad60-77f754baafbe"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
-GraphViz = "f526b714-d49f-11e8-06ff-31ed36ee7ee0"
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
LabelledArrays = "2ee39098-c373-598a-b85f-a56591580800"
Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306"
diff --git a/docs/literate/full_fledged_schema_examples_new/CasualLoopDiagrams/convert_from_SEIR_stockFlowDiagram.jl b/docs/literate/full_fledged_schema_examples_new/CasualLoopDiagrams/convert_from_SEIR_stockFlowDiagram.jl
index 3ca7777f..42bd8438 100644
--- a/docs/literate/full_fledged_schema_examples_new/CasualLoopDiagrams/convert_from_SEIR_stockFlowDiagram.jl
+++ b/docs/literate/full_fledged_schema_examples_new/CasualLoopDiagrams/convert_from_SEIR_stockFlowDiagram.jl
@@ -1,7 +1,5 @@
# # Convert from SEIR Stock Flow Diagram
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/docs/literate/full_fledged_schema_examples_new/composition/COVID_full_model.jl b/docs/literate/full_fledged_schema_examples_new/composition/COVID_full_model.jl
index b0173366..445e330a 100644
--- a/docs/literate/full_fledged_schema_examples_new/composition/COVID_full_model.jl
+++ b/docs/literate/full_fledged_schema_examples_new/composition/COVID_full_model.jl
@@ -1,7 +1,5 @@
# # COVID Full Model
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/docs/literate/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.jl b/docs/literate/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.jl
index 284711af..40018bd6 100644
--- a/docs/literate/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.jl
+++ b/docs/literate/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.jl
@@ -1,7 +1,5 @@
# # SEIR Full Model Measles Chickenpox
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/docs/literate/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.jl b/docs/literate/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.jl
index a7d7c38b..bd549500 100644
--- a/docs/literate/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.jl
+++ b/docs/literate/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.jl
@@ -1,7 +1,5 @@
# # Composed Open Population SIRV Model
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/docs/literate/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.jl b/docs/literate/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.jl
index b7e52cdf..7647b512 100644
--- a/docs/literate/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.jl
+++ b/docs/literate/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.jl
@@ -1,7 +1,5 @@
# # Curable Sexually-Transmitted Diseases Model
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/docs/literate/full_fledged_schema_examples_new/composition/diabetes_model.jl b/docs/literate/full_fledged_schema_examples_new/composition/diabetes_model.jl
index de6d775a..bdd5f055 100644
--- a/docs/literate/full_fledged_schema_examples_new/composition/diabetes_model.jl
+++ b/docs/literate/full_fledged_schema_examples_new/composition/diabetes_model.jl
@@ -1,7 +1,5 @@
# # Diabetes Model
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/docs/literate/full_fledged_schema_examples_new/stratification/diabetes_diagnose.jl b/docs/literate/full_fledged_schema_examples_new/stratification/diabetes_diagnose.jl
index a39f8794..54bd1556 100644
--- a/docs/literate/full_fledged_schema_examples_new/stratification/diabetes_diagnose.jl
+++ b/docs/literate/full_fledged_schema_examples_new/stratification/diabetes_diagnose.jl
@@ -1,7 +1,5 @@
# # Diabetes Diagnose
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/docs/literate/full_fledged_schema_examples_new/stratification/sir_linear_stratification.jl b/docs/literate/full_fledged_schema_examples_new/stratification/sir_linear_stratification.jl
index 8778dc8d..ca59bbe3 100644
--- a/docs/literate/full_fledged_schema_examples_new/stratification/sir_linear_stratification.jl
+++ b/docs/literate/full_fledged_schema_examples_new/stratification/sir_linear_stratification.jl
@@ -1,7 +1,5 @@
# # SIR Linear Stratification
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/docs/literate/full_fledged_schema_examples_new/stratification/sir_linear_stratification.md b/docs/literate/full_fledged_schema_examples_new/stratification/sir_linear_stratification.md
index 47d6ff93..dfd585fc 100644
--- a/docs/literate/full_fledged_schema_examples_new/stratification/sir_linear_stratification.md
+++ b/docs/literate/full_fledged_schema_examples_new/stratification/sir_linear_stratification.md
@@ -1,5 +1,3 @@
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/docs/literate/full_fledged_schema_examples_new/stratification/sir_standard_stratification.jl b/docs/literate/full_fledged_schema_examples_new/stratification/sir_standard_stratification.jl
index 01789bb7..74a03c3c 100644
--- a/docs/literate/full_fledged_schema_examples_new/stratification/sir_standard_stratification.jl
+++ b/docs/literate/full_fledged_schema_examples_new/stratification/sir_standard_stratification.jl
@@ -1,7 +1,5 @@
# # SIR Standard Stratification
-using GraphViz
-
using StockFlow
using StockFlow.Syntax
diff --git a/examples/full_fledged_schema_examples/CaulsalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb b/examples/full_fledged_schema_examples/CausalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb
similarity index 99%
rename from examples/full_fledged_schema_examples/CaulsalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb
rename to examples/full_fledged_schema_examples/CausalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb
index 925ecb48..f6330b74 100644
--- a/examples/full_fledged_schema_examples/CaulsalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb
+++ b/examples/full_fledged_schema_examples/CausalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb
@@ -1342,21 +1342,21 @@
}
],
"source": [
- "Graph(seir_causalLoop)"
+ "GraphCL(seir_causalLoop)"
]
}
],
"metadata": {
"kernelspec": {
- "display_name": "Julia 1.9.2",
+ "display_name": "Julia 1.10.4",
"language": "julia",
- "name": "julia-1.9"
+ "name": "julia-1.10"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
- "version": "1.9.2"
+ "version": "1.10.4"
}
},
"nbformat": 4,
diff --git a/examples/full_fledged_schema_examples/CaulsalLoopDiagrams/create_a_causalLoopDiagram.ipynb b/examples/full_fledged_schema_examples/CausalLoopDiagrams/create_a_causalLoopDiagram.ipynb
similarity index 98%
rename from examples/full_fledged_schema_examples/CaulsalLoopDiagrams/create_a_causalLoopDiagram.ipynb
rename to examples/full_fledged_schema_examples/CausalLoopDiagrams/create_a_causalLoopDiagram.ipynb
index e1be64c4..b16c25c1 100644
--- a/examples/full_fledged_schema_examples/CaulsalLoopDiagrams/create_a_causalLoopDiagram.ipynb
+++ b/examples/full_fledged_schema_examples/CausalLoopDiagrams/create_a_causalLoopDiagram.ipynb
@@ -110,8 +110,8 @@
"source": [
"# test the causal loop diagram\n",
"si_causalLoop=CausalLoop(\n",
- " (:S,:i,:I),\n",
- " (:S=>:i,:i=>:S,:i=>:I,:I=>:i)\n",
+ " [:S,:i,:I],\n",
+ " [:S=>:i,:i=>:S,:i=>:I,:I=>:i]\n",
")"
]
},
@@ -186,21 +186,21 @@
}
],
"source": [
- "Graph(si_causalLoop)"
+ "GraphCL(si_causalLoop)"
]
}
],
"metadata": {
"kernelspec": {
- "display_name": "Julia 1.7.3",
+ "display_name": "Julia 1.10.4",
"language": "julia",
- "name": "julia-1.7"
+ "name": "julia-1.10"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
- "version": "1.7.3"
+ "version": "1.10.4"
}
},
"nbformat": 4,
diff --git a/examples/full_fledged_schema_examples/SIR_example_function_structure_test_compostion_and_stratification.ipynb b/examples/full_fledged_schema_examples/SIR_example_function_structure_test_compostion_and_stratification.ipynb
index f8f830b0..712e6d4e 100644
--- a/examples/full_fledged_schema_examples/SIR_example_function_structure_test_compostion_and_stratification.ipynb
+++ b/examples/full_fledged_schema_examples/SIR_example_function_structure_test_compostion_and_stratification.ipynb
@@ -946,7 +946,7 @@
"source": [
"# define a foot of the structured multicospan\n",
"footS=foot(:S, :N, :S=>:N)\n",
- "Graph(footS;schema=\"C0\")"
+ "StockFlow.Graph(footS;schema=\"C0\")"
]
},
{
@@ -970,7 +970,7 @@
"source": [
"# define a foot of the structured multicospan\n",
"footI=foot(:I, :N, :I=>:N)\n",
- "Graph(footI;schema=\"C0\")"
+ "StockFlow.Graph(footI;schema=\"C0\")"
]
},
{
@@ -2114,9 +2114,7 @@
{
"cell_type": "code",
"execution_count": 15,
- "metadata": {
- "scrolled": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -2543,9 +2541,7 @@
{
"cell_type": "code",
"execution_count": 19,
- "metadata": {
- "scrolled": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -6059,9 +6055,7 @@
{
"cell_type": "code",
"execution_count": 34,
- "metadata": {
- "scrolled": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -9921,9 +9915,7 @@
{
"cell_type": "code",
"execution_count": 46,
- "metadata": {
- "scrolled": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -10756,21 +10748,21 @@
],
"source": [
"causalloop=convertToCausalLoop(SIRstructure)\n",
- "Graph(causalloop)"
+ "GraphCL(causalloop)"
]
}
],
"metadata": {
"kernelspec": {
- "display_name": "Julia 1.9.2",
+ "display_name": "Julia 1.10.4",
"language": "julia",
- "name": "julia-1.9"
+ "name": "julia-1.10"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
- "version": "1.9.2"
+ "version": "1.10.4"
}
},
"nbformat": 4,
diff --git a/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/.ipynb_checkpoints/convert_from_SEIR_stockFlowDiagram-checkpoint.ipynb b/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/.ipynb_checkpoints/convert_from_SEIR_stockFlowDiagram-checkpoint.ipynb
deleted file mode 100644
index 7362fe16..00000000
--- a/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/.ipynb_checkpoints/convert_from_SEIR_stockFlowDiagram-checkpoint.ipynb
+++ /dev/null
@@ -1,1072 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "tags": [
- "parameters"
- ]
- },
- "outputs": [],
- "source": [
- "using GraphViz\n",
- "\n",
- "using StockFlow\n",
- "using StockFlow.Syntax"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 1. Define SEIR Stock and Flow model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "
StockAndFlowF {S:4, SV:1, LS:4, F:8, I:4, O:7, V:10, LV:8, LSV:2, P:5, LVV:2, LPV:8, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " E | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " I | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " R | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_birth | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " f_incid | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 7 | \n",
- " v_deathS | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " f_inf | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 8 | \n",
- " f_deathE | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " f_rec | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 9 | \n",
- " f_deathI | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 10 | \n",
- " f_deathR | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 6 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_birth | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_incid₁ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_incid₂ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_incid₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_inf | \n",
- " / | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_rec | \n",
- " / | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_deathS | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_deathE | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_deathI | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " v_deathR | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 1 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 2 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 3 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 4 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " β | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " tlatent | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " trecovery | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " δ | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 5 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 5 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:4, SV:1, LS:4, F:8, I:4, O:7, V:10, LV:8, LSV:2, P:5, LVV:2, LPV:8, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ E │\n",
- "│\u001b[1m 3 \u001b[0m│ I │\n",
- "│\u001b[1m 4 \u001b[0m│ R │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_birth │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ f_incid │\n",
- "│\u001b[1m 3 \u001b[0m│ 7 │ v_deathS │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ f_inf │\n",
- "│\u001b[1m 5 \u001b[0m│ 8 │ f_deathE │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ f_rec │\n",
- "│\u001b[1m 7 \u001b[0m│ 9 │ f_deathI │\n",
- "│\u001b[1m 8 \u001b[0m│ 10 │ f_deathR │\n",
- "└───┴────┴──────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 6 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 7 │ 3 │\n",
- "│\u001b[1m 7 \u001b[0m│ 8 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌────┬──────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼──────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_birth │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_incid₁ │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_incid₂ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_incid₃ │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_inf │ / │\n",
- "│\u001b[1m 6 \u001b[0m│ v_rec │ / │\n",
- "│\u001b[1m 7 \u001b[0m│ v_deathS │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_deathE │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_deathI │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ v_deathR │ * │\n",
- "└────┴──────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 1 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 2 │ 8 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 3 │ 9 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 4 │ 10 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ β │\n",
- "│\u001b[1m 3 \u001b[0m│ tlatent │\n",
- "│\u001b[1m 4 \u001b[0m│ trecovery │\n",
- "│\u001b[1m 5 \u001b[0m│ δ │\n",
- "└───┴───────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 4 │ 2 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ 8 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 5 │ 9 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 5 │ 10 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "seir = @stock_and_flow begin\n",
- " :stocks\n",
- " S\n",
- " E\n",
- " I\n",
- " R\n",
- "\n",
- " :parameters\n",
- " μ\n",
- " β\n",
- " tlatent\n",
- " trecovery\n",
- " δ\n",
- "\n",
- " :dynamic_variables\n",
- " v_birth = μ * N\n",
- " v_incid₁ = I / N\n",
- " v_incid₂ = S * v_incid₁\n",
- " v_incid₃ = β * v_incid₂\n",
- " v_inf = E / tlatent\n",
- " v_rec = I / trecovery\n",
- " v_deathS = S * δ\n",
- " v_deathE = E * δ \n",
- " v_deathI = I * δ\n",
- " v_deathR = R * δ\n",
- "\n",
- " :flows\n",
- " CLOUD => f_birth(v_birth) => S\n",
- " S => f_incid(v_incid₃) => E\n",
- " S => v_deathS(v_deathS) => CLOUD\n",
- " E => f_inf(v_inf) => I\n",
- " E => f_deathE(v_deathE) => CLOUD\n",
- " I => f_rec(v_rec) => R\n",
- " I => f_deathI(v_deathI) => CLOUD\n",
- " R => f_deathR(v_deathR) => CLOUD\n",
- "\n",
- " :sums\n",
- " N = [S,E,I,R]\n",
- "\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": "\n\n\n\n\n",
- "text/plain": [
- "Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"β\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"tlatent\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"trecovery\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"δ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_1u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(seir)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 2. Convert the Stock and Flow diagram to Causal Loop diagram"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
CausalLoop {E:35, N:20, Name:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 13 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 13 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 13 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 13 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 13 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 13 | \n",
- " 14 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 3 | \n",
- " 14 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 1 | \n",
- " 15 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 2 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 3 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 1 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 2 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 3 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 4 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 8 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 10 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 10 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 11 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 12 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 16 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 17 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 18 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 19 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 30 | \n",
- " 20 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 31 | \n",
- " 20 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 32 | \n",
- " 20 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 33 | \n",
- " 20 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 34 | \n",
- " 14 | \n",
- " 15 | \n",
- "
\n",
- " \n",
- " 35 | \n",
- " 15 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " E | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " I | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " R | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " f_birth | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " f_incid | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_deathS | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " f_inf | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " f_deathE | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " f_rec | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " f_deathI | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " f_deathR | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " v_incid₁ | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " v_incid₂ | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " β | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " tlatent | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " trecovery | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " δ | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "CausalLoop {E:35, N:20, Name:0}\n",
- "┌────┬────┬────┐\n",
- "│\u001b[1m E \u001b[0m│\u001b[1m s \u001b[0m│\u001b[1m t \u001b[0m│\n",
- "├────┼────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 13 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 13 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 13 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 13 │\n",
- "│\u001b[1m 5 \u001b[0m│ 13 │ 5 │\n",
- "│\u001b[1m 6 \u001b[0m│ 13 │ 14 │\n",
- "│\u001b[1m 7 \u001b[0m│ 3 │ 14 │\n",
- "│\u001b[1m 8 \u001b[0m│ 1 │ 15 │\n",
- "│\u001b[1m 9 \u001b[0m│ 2 │ 8 │\n",
- "│\u001b[1m 10 \u001b[0m│ 3 │ 10 │\n",
- "│\u001b[1m 11 \u001b[0m│ 1 │ 7 │\n",
- "│\u001b[1m 12 \u001b[0m│ 2 │ 9 │\n",
- "│\u001b[1m 13 \u001b[0m│ 3 │ 11 │\n",
- "│\u001b[1m 14 \u001b[0m│ 4 │ 12 │\n",
- "│\u001b[1m 15 \u001b[0m│ 5 │ 1 │\n",
- "│\u001b[1m 16 \u001b[0m│ 6 │ 2 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴────┴────┘\n",
- "\u001b[36m 19 rows omitted\u001b[0m\n",
- "┌────┬───────────┐\n",
- "│\u001b[1m N \u001b[0m│\u001b[1m nname \u001b[0m│\n",
- "├────┼───────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ E │\n",
- "│\u001b[1m 3 \u001b[0m│ I │\n",
- "│\u001b[1m 4 \u001b[0m│ R │\n",
- "│\u001b[1m 5 \u001b[0m│ f_birth │\n",
- "│\u001b[1m 6 \u001b[0m│ f_incid │\n",
- "│\u001b[1m 7 \u001b[0m│ v_deathS │\n",
- "│\u001b[1m 8 \u001b[0m│ f_inf │\n",
- "│\u001b[1m 9 \u001b[0m│ f_deathE │\n",
- "│\u001b[1m 10 \u001b[0m│ f_rec │\n",
- "│\u001b[1m 11 \u001b[0m│ f_deathI │\n",
- "│\u001b[1m 12 \u001b[0m│ f_deathR │\n",
- "│\u001b[1m 13 \u001b[0m│ N │\n",
- "│\u001b[1m 14 \u001b[0m│ v_incid₁ │\n",
- "│\u001b[1m 15 \u001b[0m│ v_incid₂ │\n",
- "│\u001b[1m 16 \u001b[0m│ μ │\n",
- "│ ⋮ │ ⋮ │\n",
- "└────┴───────────┘\n",
- "\u001b[36m 4 rows omitted\u001b[0m\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "seir_causalLoop = convertToCausalLoop(seir)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": "\n\n\n\n\n",
- "text/plain": [
- "Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_birth\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_incid\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"v_deathS\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_inf\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_deathE\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_rec\", :shape => \"plaintext\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n16\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n17\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n18\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n19\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n14\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n15\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n15\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "Graph(seir_causalLoop)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.9.2",
- "language": "julia",
- "name": "julia-1.9"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.9.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/Causal_Loop_Operations.ipynb b/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/Causal_Loop_Operations.ipynb
index e098308d..e8add4e8 100644
--- a/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/Causal_Loop_Operations.ipynb
+++ b/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/Causal_Loop_Operations.ipynb
@@ -2,17 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": null,
- "id": "296f433c-2829-4dd6-b912-dd40b33486cc",
- "metadata": {},
- "outputs": [],
- "source": [
- "using Pkg; Pkg.activate(\"../../..\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"id": "18b6f788-a3f4-4d23-8a10-d485765c069d",
"metadata": {},
"outputs": [],
@@ -24,27 +14,520 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"id": "55b7d7c5-71e7-43ae-b638-43610f55e706",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_birth\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_incid\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_deathS\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_inf\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_deathE\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_rec\", :shape => \"plaintext\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n19\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n21\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n22\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n23\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n23\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n23\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n23\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n16\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n17\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n17\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n18\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n18\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"GraphCL(convertToCausalLoop(seir()))"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"id": "43f3518f-02b2-45de-8feb-e638a7fd6961",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
CausalLoopPM {V:1, P:2, M:3, Name:0}\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " C2 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "CausalLoopPM {V:1, P:2, M:3, Name:0}\n",
+ "┌───┬───────┐\n",
+ "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\n",
+ "├───┼───────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ C2 │\n",
+ "└───┴───────┘\n",
+ "┌───┬────┬────┐\n",
+ "│\u001b[1m P \u001b[0m│\u001b[1m sp \u001b[0m│\u001b[1m tp \u001b[0m│\n",
+ "├───┼────┼────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
+ "│\u001b[1m 2 \u001b[0m│ 1 │ 1 │\n",
+ "└───┴────┴────┘\n",
+ "┌───┬────┬────┐\n",
+ "│\u001b[1m M \u001b[0m│\u001b[1m sm \u001b[0m│\u001b[1m tm \u001b[0m│\n",
+ "├───┼────┼────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
+ "│\u001b[1m 2 \u001b[0m│ 1 │ 1 │\n",
+ "│\u001b[1m 3 \u001b[0m│ 1 │ 1 │\n",
+ "└───┴────┴────┘\n"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"C2 = CausalLoopPM([:C2], [:C2 => :C2 for _ in 1:5], [POL_NEGATIVE, POL_POSITIVE, POL_NEGATIVE, POL_POSITIVE, POL_NEGATIVE])"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"id": "bd634359-6944-4d5b-9553-6bafc701c511",
"metadata": {},
"outputs": [],
@@ -63,7 +546,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"id": "4fd14532-d369-4b97-b6da-1d59827a7b00",
"metadata": {},
"outputs": [],
@@ -73,457 +556,1556 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"id": "1a509f1a-f74f-4139-9831-367133f6b644",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"C2 == C2′ == C2′′"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"id": "a8bc304f-fd50-48c8-8ddb-84ce3c57d499",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"C2\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"+\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"+\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"-\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"-\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"-\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"GraphCL(C2)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"id": "65452ef7-810a-4807-a9ff-91fbead56f8b",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"C2\", :shape => \"square\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"+\", :penwidth => \"0\", :style => \"filled\", :shape => \"cds\", :fillcolor => \"lightblue\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"+\", :penwidth => \"0\", :style => \"filled\", :shape => \"cds\", :fillcolor => \"lightblue\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"-\", :penwidth => \"0\", :style => \"filled\", :shape => \"cds\", :fillcolor => \"lightblue\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"-\", :penwidth => \"0\", :style => \"filled\", :shape => \"cds\", :fillcolor => \"lightblue\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"-\", :penwidth => \"0\", :style => \"filled\", :shape => \"cds\", :fillcolor => \"lightblue\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"B\", :shape => \"circle\", :fillcolor => \"yellow\", :style => \"filled\")), Catlab.Graphics.Graphviz.Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"circle\", :fillcolor => \"yellow\", :style => \"filled\")), Catlab.Graphics.Graphviz.Node(\"n9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"B\", :shape => \"circle\", :fillcolor => \"yellow\", :style => \"filled\")), Catlab.Graphics.Graphviz.Node(\"n10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"B\", :shape => \"circle\", :fillcolor => \"yellow\", :style => \"filled\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :arrowhead => \"none\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :arrowhead => \"none\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"yellow\", :style => \"dashed\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"yellow\", :style => \"dashed\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"yellow\", :style => \"dashed\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"yellow\", :style => \"dashed\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"yellow\", :style => \"dashed\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"GraphRB(C2)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"id": "be1ee08d-1a1d-4e38-8902-5ee94551e652",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
CausalLoopPM {V:4, P:2, M:1, Name:0}\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " A | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " B | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " C | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " D | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "CausalLoopPM {V:4, P:2, M:1, Name:0}\n",
+ "┌───┬───────┐\n",
+ "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\n",
+ "├───┼───────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ A │\n",
+ "│\u001b[1m 2 \u001b[0m│ B │\n",
+ "│\u001b[1m 3 \u001b[0m│ C │\n",
+ "│\u001b[1m 4 \u001b[0m│ D │\n",
+ "└───┴───────┘\n",
+ "┌───┬────┬────┐\n",
+ "│\u001b[1m P \u001b[0m│\u001b[1m sp \u001b[0m│\u001b[1m tp \u001b[0m│\n",
+ "├───┼────┼────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
+ "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │\n",
+ "└───┴────┴────┘\n",
+ "┌───┬────┬────┐\n",
+ "│\u001b[1m M \u001b[0m│\u001b[1m sm \u001b[0m│\u001b[1m tm \u001b[0m│\n",
+ "├───┼────┼────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 3 │ 1 │\n",
+ "└───┴────┴────┘\n"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"CL_ABC = @cl A => +B, B => +C, C => -A, D"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"id": "11e184c2-e681-4483-b3cf-aff7deebe541",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"B\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"C\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"D\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"+\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"+\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"-\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"GraphCL(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"id": "fc589a21-10cb-446f-bee8-b49967997801",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"square\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"B\", :shape => \"square\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"C\", :shape => \"square\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"D\", :shape => \"square\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"+\", :penwidth => \"0\", :style => \"filled\", :shape => \"cds\", :fillcolor => \"lightblue\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"+\", :penwidth => \"0\", :style => \"filled\", :shape => \"cds\", :fillcolor => \"lightblue\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"-\", :penwidth => \"0\", :style => \"filled\", :shape => \"cds\", :fillcolor => \"lightblue\")), Catlab.Graphics.Graphviz.Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"B\", :shape => \"circle\", :fillcolor => \"yellow\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :arrowhead => \"none\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :arrowhead => \"none\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :arrowhead => \"none\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"yellow\", :style => \"dashed\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"yellow\", :style => \"dashed\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"yellow\", :style => \"dashed\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"GraphRB(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"id": "698e98af-4847-4fed-b880-f93df2ee03f7",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"nvert(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"id": "ca18f020-48ad-4d61-9ac9-f68369b97a1d",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"nedges(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"id": "cac3cba1-1397-42c7-8656-c56d2c9cc84a",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"np(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"id": "a5e354ce-cc14-407c-a21a-c5a98b4fd85e",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"nm(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"id": "7dd07c6e-d46f-4c0a-b514-21adbb1b23e7",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"sedge(CL_ABC, 3) # Source node for edge 3, which is C => A, is C, which is index 3"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"id": "69240659-b9ed-48d2-befd-3d459a752d3d",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"tedge(CL_ABC, 3) # C => A, target is A, with index 1"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"id": "d50862a1-d8bb-44e7-9b7c-44bb9252a7a0",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4-element Vector{Symbol}:\n",
+ " :A\n",
+ " :B\n",
+ " :C\n",
+ " :D"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"vnames(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"id": "ca36df44-8984-43be-8d49-09136f8c6ea5",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "POL_POSITIVE::Polarity = 0"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"epol(CL_ABC, 1) # Polarity of edge 1, A => B, is positive"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"id": "1b78e2eb-5064-41dc-83c3-35bd1bc5faf4",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3-element Vector{Polarity}:\n",
+ " POL_POSITIVE::Polarity = 0\n",
+ " POL_POSITIVE::Polarity = 0\n",
+ " POL_NEGATIVE::Polarity = 1"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"epols(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"id": "d0c1886a-538a-4d5f-9eeb-a0bc043b4786",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1-element Vector{Int64}:\n",
+ " 1"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"outgoing_edges(CL_ABC, 1) # indices of all edges with src 1 (in this case, A)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 22,
"id": "0c79c394-999f-417d-99b6-de06601545bf",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Int64[]"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"outgoing_edges(CL_ABC, 4) # D"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 23,
"id": "f3935523-6dff-4617-9485-b058ff7cba3a",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1-element Vector{Int64}:\n",
+ " 3"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"incoming_edges(CL_ABC, 1) # indices of all edges with src 1"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"id": "7d0c133e-93c4-471d-8179-bcfe31dedbee",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1-element Vector{Vector{Int64}}:\n",
+ " [1, 2, 3]"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"cl_cycles(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"id": "e41005f6-b44e-4a37-b386-6b0952abf326",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Dict{Vector{Int64}, Polarity} with 1 entry:\n",
+ " [1, 2, 3] => POL_NEGATIVE"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"extract_loops(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 26,
"id": "515f3bb8-db99-4c58-bae9-96fb6b393886",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"is_walk(CL_ABC, [1,2,3,1,2])"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 27,
"id": "b34c6118-3980-427f-94fc-40f3605e46b2",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "false"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"is_walk(CL_ABC, [3,2])"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 28,
"id": "7dd42d1a-73f9-42df-876a-26b51a1ad96f",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"is_walk(CL_ABC, Vector{Int}())"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 29,
"id": "9a41ed3f-4e23-48ed-860d-e238fde13938",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"is_circuit(CL_ABC, [1,2,3])"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 30,
"id": "50926a33-55a8-4df9-a98a-d6ec088772f1",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "false"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"is_circuit(CL_ABC, [1,2])"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 31,
"id": "d41e8642-a978-491b-bc10-62f8269623ef",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "POL_POSITIVE::Polarity = 0"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"walk_polarity(CL_ABC, [1,2,3,1,2,3])"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 32,
"id": "cac86c9d-040d-4d6a-8f4d-612c46a6eb57",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Dict{Vector{Int64}, Polarity} with 8 entries:\n",
+ " [2, 3] => POL_NEGATIVE\n",
+ " [3] => POL_NEGATIVE\n",
+ " [] => POL_POSITIVE\n",
+ " [1] => POL_POSITIVE\n",
+ " [3, 1] => POL_NEGATIVE\n",
+ " [1, 2, 3] => POL_NEGATIVE\n",
+ " [1, 2] => POL_POSITIVE\n",
+ " [2] => POL_POSITIVE"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"extract_all_nonduplicate_paths(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 33,
"id": "24f53f85-d90e-4bd6-8cf5-0176ce06d87d",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"num_loops_var_on(CL_ABC, :D)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 34,
"id": "5ecc73db-b8c3-4798-bc86-d54d7119fedd",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"num_loops_var_on(CL_ABC, :A)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 35,
"id": "7f450c79-163a-45a9-9090-69f48f563794",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "5"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"num_loops_var_on(C2, :C2)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 36,
"id": "02de13aa-a99d-402e-b368-a6dc13a4b144",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"num_indep_loops_var_on(C2, :C2) # Treating each pair of nodes as if there is at most one edge between them"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 37,
"id": "9faf3d72-d485-48e3-af61-d0515bd7914a",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{4, 3} directed simple Int64 graph"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"to_graphs_graph(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 38,
"id": "639edf0a-d4ee-4ebc-a15e-7a5e7e61535e",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4-element Vector{Rational{Int64}}:\n",
+ " 1\n",
+ " 1\n",
+ " 1\n",
+ " 0"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"betweenness(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 39,
"id": "010d3293-faef-479b-b253-32d295c6818a",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{1, 1} directed simple Int64 graph"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"to_graphs_graph(C2) # eliminates duplicate edges!"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 40,
"id": "e410e9ff-b5f8-444b-94db-0c7474ee8edc",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1-element Vector{Rational{Int64}}:\n",
+ " 0"
+ ]
+ },
+ "execution_count": 40,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"betweenness(C2)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 41,
"id": "14a2c91c-b818-4493-8b26-cd9017be09f8",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Dict{Symbol, Tuple{Int64, Int64}} with 1 entry:\n",
+ " :C2 => (5, 5)"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"num_inputs_outputs(C2) # in, out"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 42,
"id": "dddbb9cc-708f-4574-899d-7e0c70011baa",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Dict{Symbol, NTuple{4, Int64}} with 1 entry:\n",
+ " :C2 => (2, 2, 3, 3)"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"num_inputs_outputs_pols(C2) # pos in, pos out, neg in, neg out"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 43,
"id": "d988c875-8cf1-4d04-b87f-4ba955fbd363",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1×1 Matrix{Vector{Vector{Int64}}}:\n",
+ " [[]]"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"all_shortest_paths(C2) "
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 44,
"id": "5dd08879-22c4-4846-a314-71b733ff4d8a",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "6×6 Matrix{Vector{Vector{Int64}}}:\n",
+ " [[]] [[1]] [[1, 2]] [[1, 2, 3], [4, 5, 6]] [[4]] [[4, 5]]\n",
+ " [] [[]] [[2]] [[2, 3]] [] []\n",
+ " [] [] [[]] [[3]] [] []\n",
+ " [] [] [] [[]] [] []\n",
+ " [] [] [] [[5, 6]] [[]] [[5]]\n",
+ " [] [] [] [[6]] [] [[]]"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
" all_shortest_paths(@cl((A => B, B => C, C => D, A => B′, B′ => C′, C′ => D)))"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 45,
"id": "57a4ab6c-c708-4ca2-bb57-c697e4782653",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2-element Vector{Vector{Int64}}:\n",
+ " [1, 2, 3]\n",
+ " [4, 5, 6]"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"shortest_paths( (@cl A => B, B => C, C => D, A => B′, B′ => C′, C′ => D), :A, :D )"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 46,
"id": "40efc5d4-d003-43ed-a180-cf6385eb4aa2",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "6-element Vector{Rational{Int64}}:\n",
+ " 0\n",
+ " 3//2\n",
+ " 3//2\n",
+ " 0\n",
+ " 3//2\n",
+ " 3//2"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
" betweenness(@cl((A => B, B => C, C => D, A => B′, B′ => C′, C′ => D)))"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 47,
"id": "af79cfb2-bc26-48d4-a6b8-24b734f131e9",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "24×24 Matrix{Vector{Vector{Int64}}}:\n",
+ " [[]] … [] [] [] [] [] []\n",
+ " [[3, 12, 20]] [] [] [] [] [] []\n",
+ " [[5, 12, 20]] [] [] [] [] [] []\n",
+ " [[8, 12, 20]] [] [] [] [] [] []\n",
+ " [[20]] [] [] [] [] [] []\n",
+ " [[24]] … [] [] [] [] [] []\n",
+ " [[25]] [] [] [] [] [] []\n",
+ " [[26, 3, 12, 20], [22, 5, 12, 20]] [] [] [] [] [] []\n",
+ " [[27, 3, 12, 20]] [] [] [] [] [] []\n",
+ " [[28, 5, 12, 20], [23, 8, 12, 20]] [] [] [] [] [] []\n",
+ " [[29, 5, 12, 20]] … [] [] [] [] [] []\n",
+ " [[30, 8, 12, 20]] [] [] [] [] [] []\n",
+ " [[12, 20]] [] [] [] [] [] []\n",
+ " [[10, 40, 41, 42, 24]] [] [] [] [] [] []\n",
+ " [[11, 40, 41, 42, 24]] [] [] [] [] [] []\n",
+ " [[40, 41, 42, 24]] … [] [] [] [] [] []\n",
+ " [[41, 42, 24]] [] [] [] [] [] []\n",
+ " [[42, 24]] [] [] [] [] [] []\n",
+ " [[33, 20]] [[]] [] [] [] [] []\n",
+ " [[32, 42, 24]] [] [[]] [] [] [] []\n",
+ " [[34, 26, 3, 12, 20], [34, 22, 5, 12, 20]] … [] [] [[]] [] [] []\n",
+ " [[35, 28, 5, 12, 20], [35, 23, 8, 12, 20]] [] [] [] [[]] [] []\n",
+ " [[36, 25]] [] [] [] [] [[]] []\n",
+ " [[31, 41, 42, 24]] [] [] [] [] [] [[]]"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"all_shortest_paths(convertToCausalLoop(seir()))"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 48,
"id": "afa809b3-4c51-478b-8152-ab61aeb9d245",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4×4 Matrix{Vector{Vector{Int64}}}:\n",
+ " [[]] [[1]] [[1, 2]] []\n",
+ " [[2, 3]] [[]] [[2]] []\n",
+ " [[3]] [[3, 1]] [[]] []\n",
+ " [] [] [] [[]]"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"all_shortest_paths(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 49,
"id": "dadced78-8b2d-4f21-9db1-912c477bc7f4",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"B\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"C\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"D\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"+\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"+\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\", :label => \"-\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())"
+ ]
+ },
+ "execution_count": 49,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"GraphCL(CL_ABC)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 50,
"id": "175b0ba9-6280-436a-80e1-be0708fe71f6",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1-element Vector{Vector{Int64}}:\n",
+ " [1, 2]"
+ ]
+ },
+ "execution_count": 50,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"shortest_paths(CL_ABC, :A, :C)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 51,
"id": "1a4400c9-c0d5-4dd3-a00c-bc667aeb18f9",
"metadata": {},
"outputs": [],
@@ -546,7 +2128,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 52,
"id": "e9592655-9d9c-49f9-a6e1-37a7515323e0",
"metadata": {},
"outputs": [],
@@ -568,30 +2150,143 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 53,
"id": "30083505-af9c-434f-867a-1e2417ed4afc",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"B\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"C\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"D\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"plaintext\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:color => \"blue\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())"
+ ]
+ },
+ "execution_count": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"GraphCL(cl)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 54,
"id": "eaa543fc-cf59-4756-8c7a-688baa877d7d",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "5-element Vector{Rational{Int64}}:\n",
+ " 0\n",
+ " 2\n",
+ " 0\n",
+ " 0\n",
+ " 0"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"betweenness(cl)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 55,
"id": "473c4e7b-7599-452e-9ed4-f9f6be3eed3f",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "5-element Vector{Rational{Int64}}:\n",
+ " 0\n",
+ " 2\n",
+ " 0\n",
+ " 0\n",
+ " 0"
+ ]
+ },
+ "execution_count": 55,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"betweenness(cl2)"
]
@@ -606,47 +2301,230 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 56,
"id": "c1d468f7-ccd3-444c-a230-fff16d959704",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
CausalLoopPM {V:3, P:1, M:1, Name:0}\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " A | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " B | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " C | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "CausalLoopPM {V:3, P:1, M:1, Name:0}\n",
+ "┌───┬───────┐\n",
+ "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\n",
+ "├───┼───────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ A │\n",
+ "│\u001b[1m 2 \u001b[0m│ B │\n",
+ "│\u001b[1m 3 \u001b[0m│ C │\n",
+ "└───┴───────┘\n",
+ "┌───┬────┬────┐\n",
+ "│\u001b[1m P \u001b[0m│\u001b[1m sp \u001b[0m│\u001b[1m tp \u001b[0m│\n",
+ "├───┼────┼────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 2 │ 3 │\n",
+ "└───┴────┴────┘\n",
+ "┌───┬────┬────┐\n",
+ "│\u001b[1m M \u001b[0m│\u001b[1m sm \u001b[0m│\u001b[1m tm \u001b[0m│\n",
+ "├───┼────┼────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
+ "└───┴────┴────┘\n"
+ ]
+ },
+ "execution_count": 56,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"cl_small = @cl A => -B, B => +C "
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 57,
"id": "766821bc-90e5-4fc1-a222-9adc3f66a714",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2-element Vector{Polarity}:\n",
+ " POL_POSITIVE::Polarity = 0\n",
+ " POL_NEGATIVE::Polarity = 1"
+ ]
+ },
+ "execution_count": 57,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"epols(cl_small)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 58,
"id": "7c2819ad-cfbe-43df-8ac1-869655f1ac62",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "true"
+ ]
+ },
+ "execution_count": 58,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"to_simple_cl(cl_small) == (@cl A, B => C, A => B) # Note the order!"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 59,
"id": "a110c5e1-d93c-44c9-9da4-b1d1e8087673",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
CausalLoop {V:3, E:2, Name:0}\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " A | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " B | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " C | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "CausalLoop {V:3, E:2, Name:0}\n",
+ "┌───┬───────┐\n",
+ "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\n",
+ "├───┼───────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ A │\n",
+ "│\u001b[1m 2 \u001b[0m│ B │\n",
+ "│\u001b[1m 3 \u001b[0m│ C │\n",
+ "└───┴───────┘\n",
+ "┌───┬─────┬─────┐\n",
+ "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n",
+ "├───┼─────┼─────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 2 │ 3 │\n",
+ "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
+ "└───┴─────┴─────┘\n"
+ ]
+ },
+ "execution_count": 59,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"to_simple_cl(cl_small)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 60,
"id": "a663d5e8-a9cf-4913-becb-3d10cfbd000a",
"metadata": {},
"outputs": [],
@@ -656,10 +2534,93 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 61,
"id": "5929158c-2cdf-4542-b745-1fc00ee139e9",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
CausalLoop {V:4, E:3, Name:0}\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " A | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " B | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " C | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " D | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "CausalLoop {V:4, E:3, Name:0}\n",
+ "┌───┬───────┐\n",
+ "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\n",
+ "├───┼───────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ A │\n",
+ "│\u001b[1m 2 \u001b[0m│ B │\n",
+ "│\u001b[1m 3 \u001b[0m│ C │\n",
+ "│\u001b[1m 4 \u001b[0m│ D │\n",
+ "└───┴───────┘\n",
+ "┌───┬─────┬─────┐\n",
+ "│\u001b[1m E \u001b[0m│\u001b[1m src \u001b[0m│\u001b[1m tgt \u001b[0m│\n",
+ "├───┼─────┼─────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
+ "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │\n",
+ "│\u001b[1m 3 \u001b[0m│ 3 │ 4 │\n",
+ "└───┴─────┴─────┘\n"
+ ]
+ },
+ "execution_count": 61,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"ABC = (@cl A => B, B => C)\n",
"BCD = (@cl B => C, C => D)\n",
@@ -671,10 +2632,108 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 62,
"id": "df1a5746-4d2c-4ecc-95b6-8311d0347757",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
CausalLoopPM {V:4, P:2, M:1, Name:0}\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " A | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " B | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " C | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " D | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "CausalLoopPM {V:4, P:2, M:1, Name:0}\n",
+ "┌───┬───────┐\n",
+ "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\n",
+ "├───┼───────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ A │\n",
+ "│\u001b[1m 2 \u001b[0m│ B │\n",
+ "│\u001b[1m 3 \u001b[0m│ C │\n",
+ "│\u001b[1m 4 \u001b[0m│ D │\n",
+ "└───┴───────┘\n",
+ "┌───┬────┬────┐\n",
+ "│\u001b[1m P \u001b[0m│\u001b[1m sp \u001b[0m│\u001b[1m tp \u001b[0m│\n",
+ "├───┼────┼────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
+ "│\u001b[1m 2 \u001b[0m│ 3 │ 4 │\n",
+ "└───┴────┴────┘\n",
+ "┌───┬────┬────┐\n",
+ "│\u001b[1m M \u001b[0m│\u001b[1m sm \u001b[0m│\u001b[1m tm \u001b[0m│\n",
+ "├───┼────┼────┤\n",
+ "│\u001b[1m 1 \u001b[0m│ 2 │ 3 │\n",
+ "└───┴────┴────┘\n"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"ABC_pol = (@cl A => +B, B => -C)\n",
"BCD_pol = (@cl B => -C, C => +D)\n",
diff --git a/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb b/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb
index 5cc2e2f9..6c0661b7 100644
--- a/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb
+++ b/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb
@@ -10,8 +10,6 @@
},
"outputs": [],
"source": [
- "using GraphViz\n",
- "\n",
"using StockFlow\n",
"using StockFlow.Syntax"
]
@@ -1801,15 +1799,15 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Julia 1.9.3",
+ "display_name": "Julia 1.10.4",
"language": "julia",
- "name": "julia-1.9"
+ "name": "julia-1.10"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
- "version": "1.9.3"
+ "version": "1.10.4"
}
},
"nbformat": 4,
diff --git a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/COVID_full_model-checkpoint.ipynb b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/COVID_full_model-checkpoint.ipynb
deleted file mode 100644
index 426fab1c..00000000
--- a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/COVID_full_model-checkpoint.ipynb
+++ /dev/null
@@ -1,10947 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "e1fdfd76",
- "metadata": {},
- "outputs": [],
- "source": [
- "using GraphViz\n",
- "\n",
- "using StockFlow\n",
- "using StockFlow.Syntax\n",
- "\n",
- "using Catlab\n",
- "using Catlab.CategoricalAlgebra\n",
- "using LabelledArrays\n",
- "using OrdinaryDiffEq\n",
- "using Plots\n",
- "\n",
- "using Catlab.Graphics\n",
- "using Catlab.Programs\n",
- "using Catlab.WiringDiagrams"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "id": "a494cf12",
- "metadata": {},
- "outputs": [],
- "source": [
- "display_uwd(ex) = to_graphviz(ex, box_labels=:name, junction_labels=:variable, edge_attrs=Dict(:len=>\"1\"));"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "aa2de079",
- "metadata": {},
- "source": [
- "The figure shows the composition is list as follows:\n",
- "\n",
- "![COVID_full_compose.jpg](figures/COVID_full_compose.jpg)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "98036e62",
- "metadata": {},
- "source": [
- "Math Equations of the composed COVID-19 model:\n",
- "\n",
- "![math_equation.png](figures/math_equation.png)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "4242dbbb",
- "metadata": {},
- "source": [
- "# Model A: \n",
- "Model A simulates the disease spread through the symptomatic infectious, development. This is an extended model based on SEIR model, where stock IA represent infectives during asymptomatic stage before symptomics occur; stock IYU represents symptomatic infectives with complications; stock IYN represents symptomatic infectives without complications.\n",
- "\n",
- "![COVID_full_model_A.jpg](figures/COVID_full_model_A.jpg)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "37954cea",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:6, SV:3, LS:12, F:6, I:6, O:6, V:8, LV:6, LSV:2, P:6, LVV:2, LPV:6, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " E | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " IA | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " IYU | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " IYN | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " R | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NIC | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " fNewIncidence | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " fNewInfectious | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " fBecomingSymptomatic | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 6 | \n",
- " fSymptomicsNotDevelopingComplications | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 7 | \n",
- " fNewRecovery | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 8 | \n",
- " fWaningImmunityR | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_NewIncidence₁ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_NewIncidence₂ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_NewIncidence₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_NewInfectious | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_BecomingSymptomatic | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_SymptomicsNotDevelopingComplications | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_NewRecovery | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_WaningImmunityR | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " β | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rLatent | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rIncubation | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rDevelop | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rRecovery | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " rw | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:6, SV:3, LS:12, F:6, I:6, O:6, V:8, LV:6, LSV:2, P:6, LVV:2, LPV:6, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ E │\n",
- "│\u001b[1m 3 \u001b[0m│ IA │\n",
- "│\u001b[1m 4 \u001b[0m│ IYU │\n",
- "│\u001b[1m 5 \u001b[0m│ IYN │\n",
- "│\u001b[1m 6 \u001b[0m│ R │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NIC │\n",
- "│\u001b[1m 3 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 4 │ 3 │\n",
- "│\u001b[1m 9 \u001b[0m│ 5 │ 1 │\n",
- "│\u001b[1m 10 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 11 \u001b[0m│ 5 │ 3 │\n",
- "│\u001b[1m 12 \u001b[0m│ 6 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬───────────────────────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼───────────────────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ fNewIncidence │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ fNewInfectious │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ fBecomingSymptomatic │\n",
- "│\u001b[1m 4 \u001b[0m│ 6 │ fSymptomicsNotDevelopingComplications │\n",
- "│\u001b[1m 5 \u001b[0m│ 7 │ fNewRecovery │\n",
- "│\u001b[1m 6 \u001b[0m│ 8 │ fWaningImmunityR │\n",
- "└───┴────┴───────────────────────────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 4 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 5 │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ 6 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 4 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 6 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬────────────────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼────────────────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_NewIncidence₁ │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_NewIncidence₂ │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_NewIncidence₃ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_NewInfectious │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_BecomingSymptomatic │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_SymptomicsNotDevelopingComplications │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_NewRecovery │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_WaningImmunityR │ * │\n",
- "└───┴────────────────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 8 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬─────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ β │\n",
- "│\u001b[1m 2 \u001b[0m│ rLatent │\n",
- "│\u001b[1m 3 \u001b[0m│ rIncubation │\n",
- "│\u001b[1m 4 \u001b[0m│ rDevelop │\n",
- "│\u001b[1m 5 \u001b[0m│ rRecovery │\n",
- "│\u001b[1m 6 \u001b[0m│ rw │\n",
- "└───┴─────────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 8 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "seir = @stock_and_flow begin\n",
- " \n",
- " :stocks\n",
- " S\n",
- " E\n",
- " IA\n",
- " IYU\n",
- " IYN\n",
- " R\n",
- " \n",
- " :parameters\n",
- " β\n",
- " rLatent\n",
- " rIncubation\n",
- " rDevelop\n",
- " rRecovery\n",
- " rw\n",
- " \n",
- " :dynamic_variables\n",
- " v_NewIncidence₁ = β * NIC\n",
- " v_NewIncidence₂ = v_NewIncidence₁ / N # λ\n",
- " v_NewIncidence₃ = v_NewIncidence₂ * S\n",
- "\n",
- "\n",
- " v_NewInfectious = E * rLatent\n",
- " v_BecomingSymptomatic = IA * rIncubation\n",
- " v_SymptomicsNotDevelopingComplications = IYU * rDevelop\n",
- " v_NewRecovery = IYN * rRecovery\n",
- " v_WaningImmunityR = R * rw\n",
- " \n",
- " :flows\n",
- " S => fNewIncidence(v_NewIncidence₃) => E\n",
- " E => fNewInfectious(v_NewInfectious) => IA\n",
- " IA => fBecomingSymptomatic(v_BecomingSymptomatic) => IYU\n",
- " IYU => fSymptomicsNotDevelopingComplications(v_SymptomicsNotDevelopingComplications) => IYN\n",
- " IYN => fNewRecovery(v_NewRecovery) => R\n",
- " R => fWaningImmunityR(v_WaningImmunityR) => S\n",
- " \n",
- " \n",
- " \n",
- " :sums\n",
- " N = [S, E, IA, IYU, IYN, R]\n",
- " NIC = [IA, IYU, IYN]\n",
- " NI = [IA, IYU, IYN]\n",
- " \n",
- "end\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "id": "d0a5c863",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYU\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYN\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"β\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rLatent\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rIncubation\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rDevelop\", :shape => \"circle\", :color => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(seir)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "f3b0d408",
- "metadata": {},
- "source": [
- "# Model B: \n",
- "Model B simulates the vaccination process. The stock “VP” represents individuals who are partially vaccinated, because they have only received the first dose of the vaccine or immunity from vaccination has decrease. In contrast, the stock “VF” represents individuals who are fully vaccinated having received two doses of the vaccine or immunity from vaccination has increase due to boosters. Notably, both partially and fully vaccinated individuals are not fully protected from transmitting the disease. Thus, there are flows from stock “VP” and “VF” to “E” that represents the new infection of vaccinated individuals.\n",
- "\n",
- "![COVID_full_model_B.jpg](figures/COVID_full_model_B.jpg)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "58dffbf3",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:4, SV:2, LS:4, F:6, I:6, O:6, V:8, LV:6, LSV:0, P:5, LVV:2, LPV:8, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " E | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " VP | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " VF | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NIC | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 5 | \n",
- " fFirstdoseVaccine | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 6 | \n",
- " fWaningImmunityVP | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 7 | \n",
- " fSeconddoseVaccine | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 8 | \n",
- " fWaningImmunityVF | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " fNewIncidenceVP | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " fNewIncidenceVF | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_NewIncidenceVP | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_NewIncidenceVF | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_infVP | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_infVF | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " ##v_fFirstdoseVaccine#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " ##v_fWaningImmunityVP#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " ##v_fSeconddoseVaccine#294 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " ##v_fWaningImmunityVF#295 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rv | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rw | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " λ | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " eP_complement | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " eF_complement | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 5 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 1 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 2 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 1 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 2 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:4, SV:2, LS:4, F:6, I:6, O:6, V:8, LV:6, LSV:0, P:5, LVV:2, LPV:8, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ E │\n",
- "│\u001b[1m 3 \u001b[0m│ VP │\n",
- "│\u001b[1m 4 \u001b[0m│ VF │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NIC │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 5 │ fFirstdoseVaccine │\n",
- "│\u001b[1m 2 \u001b[0m│ 6 │ fWaningImmunityVP │\n",
- "│\u001b[1m 3 \u001b[0m│ 7 │ fSeconddoseVaccine │\n",
- "│\u001b[1m 4 \u001b[0m│ 8 │ fWaningImmunityVF │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ fNewIncidenceVP │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ fNewIncidenceVF │\n",
- "└───┴────┴────────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 6 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 3 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 3 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 4 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_NewIncidenceVP │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_NewIncidenceVF │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_infVP │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_infVF │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ ##v_fFirstdoseVaccine#292 │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ ##v_fWaningImmunityVP#293 │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ ##v_fSeconddoseVaccine#294 │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ ##v_fWaningImmunityVF#295 │ * │\n",
- "└───┴────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 8 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌───┬───────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rv │\n",
- "│\u001b[1m 2 \u001b[0m│ rw │\n",
- "│\u001b[1m 3 \u001b[0m│ λ │\n",
- "│\u001b[1m 4 \u001b[0m│ eP_complement │\n",
- "│\u001b[1m 5 \u001b[0m│ eF_complement │\n",
- "└───┴───────────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 5 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 1 │ 5 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 2 │ 6 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 1 │ 7 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 2 │ 8 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "v = @stock_and_flow begin\n",
- " :stocks\n",
- " S\n",
- " E\n",
- " VP\n",
- " VF\n",
- " \n",
- " \n",
- " :parameters\n",
- " rv\n",
- " rw\n",
- " λ\n",
- " eP_complement # 1.0 - eP\n",
- " eF_complement # 1.0 - eF\n",
- "\n",
- "\n",
- " :dynamic_variables\n",
- " v_NewIncidenceVP = VP * eP_complement\n",
- " v_NewIncidenceVF = VF * eF_complement\n",
- "\n",
- " v_infVP = v_NewIncidenceVP * λ\n",
- " v_infVF = v_NewIncidenceVF * λ\n",
- "\n",
- " \n",
- " :flows\n",
- " S => fFirstdoseVaccine(S * rv) => VP\n",
- " VP => fWaningImmunityVP(VP * rw) => S\n",
- " VP => fSeconddoseVaccine(VP * rv) => VF\n",
- " VF => fWaningImmunityVF(VF * rw) => VP\n",
- " VP => fNewIncidenceVP(v_infVP) => E\n",
- " VF => fNewIncidenceVF(v_infVF) => E\n",
- "\n",
- " \n",
- " \n",
- " :sums\n",
- " N = [S, E, VP, VF]\n",
- " NIC = []\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "id": "8b9e9903",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VF\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rv\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rw\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"λ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"eP_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"eF_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP * eP_complement\", :shape => \"plaintext\", :fontcolor => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(v;rd=\"TB\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "af635316",
- "metadata": {},
- "source": [
- "# Model C:\n",
- "Model C simulates a disease developmental process for individuals who are persistently asymptomatic. The stocks “IA2” and \"IA3\" indicate the infected individuals without any symptoms, and they correspond to similiar stage of \"IYU\" and \"IYN\" with symptoms respectively.\n",
- "\n",
- "![COVID_full_model_C.jpg](figures/COVID_full_model_C.jpg)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "0be8d49f",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:4, SV:3, LS:10, F:3, I:3, O:3, V:3, LV:3, LSV:0, P:3, LVV:0, LPV:3, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " IA | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " IA2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " IA3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " R | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NIC | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " fDevelopmentOfPersistentAsymptomaticity | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " fProgressionIA2_IA3 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " fNewrecoveryIA3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " ##v_fDevelopmentOfPersistentAsymptomaticity#296 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " ##v_fProgressionIA2_IA3#297 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ##v_fNewrecoveryIA3#298 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rIncubationIA | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rDevelopIA2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rRecoveryIA3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:4, SV:3, LS:10, F:3, I:3, O:3, V:3, LV:3, LSV:0, P:3, LVV:0, LPV:3, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ IA │\n",
- "│\u001b[1m 2 \u001b[0m│ IA2 │\n",
- "│\u001b[1m 3 \u001b[0m│ IA3 │\n",
- "│\u001b[1m 4 \u001b[0m│ R │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NIC │\n",
- "│\u001b[1m 3 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 2 │ 3 │\n",
- "│\u001b[1m 7 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 10 \u001b[0m│ 4 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬─────────────────────────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼─────────────────────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ fDevelopmentOfPersistentAsymptomaticity │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ fProgressionIA2_IA3 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ fNewrecoveryIA3 │\n",
- "└───┴────┴─────────────────────────────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────────────────────────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼─────────────────────────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ ##v_fDevelopmentOfPersistentAsymptomaticity#296 │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ ##v_fProgressionIA2_IA3#297 │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ ##v_fNewrecoveryIA3#298 │ * │\n",
- "└───┴─────────────────────────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌───┬───────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rIncubationIA │\n",
- "│\u001b[1m 2 \u001b[0m│ rDevelopIA2 │\n",
- "│\u001b[1m 3 \u001b[0m│ rRecoveryIA3 │\n",
- "└───┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "ia = @stock_and_flow begin\n",
- " :stocks\n",
- " IA\n",
- " IA2\n",
- " IA3\n",
- " R\n",
- " \n",
- " :parameters\n",
- " rIncubationIA\n",
- " rDevelopIA2\n",
- " rRecoveryIA3\n",
- " \n",
- " :flows\n",
- " IA => fDevelopmentOfPersistentAsymptomaticity(IA * rIncubationIA) => IA2\n",
- " IA2 => fProgressionIA2_IA3(IA2 * rDevelopIA2) => IA3\n",
- " IA3 => fNewrecoveryIA3(IA3 * rRecoveryIA3) => R\n",
- " \n",
- " :sums\n",
- " N = [IA, IA2, IA3, R]\n",
- " NIC = [IA, IA2, IA3]\n",
- " NI = [IA, IA2, IA3]\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "1a75782b",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA2\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA3\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rIncubationIA\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rDevelopIA2\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rRecoveryIA3\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA * rIncubationIA\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA2 * rDevelopIA2\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA3 * rRecoveryIA3\", :shape => \"plaintext\", :fontcolor => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(ia)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "5abb8bd7",
- "metadata": {},
- "source": [
- "# Model D:\n",
- "Model D simulates the hospitalization process due to COVID-19, where the stocks labelled “HICU” and “HNICU” represent the populations of hospitalized ICU patients and hospitalized non-ICU patients. And the stock \"D\" represents the hospitalized deaths due to COVID-19 infected patients.\n",
- "\n",
- "![COVID_full_model_D.jpg](figures/COVID_full_model_D.jpg)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "b9a6cb78",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:5, SV:3, LS:8, F:6, I:6, O:6, V:6, LV:6, LSV:0, P:6, LVV:0, LPV:6, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " IYU | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " HICU | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " HNICU | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " R | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " D | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NIC | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_HICUAdmission | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " f_HNICUAdmission | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " f_OutICU | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " f_RecoveryH | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " f_NewDeathsHICU | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " f_NewDeathsHNICU | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_HICUAdmission | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_HNICUAdmission | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_OutICU | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_RecoveryH | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_NewDeathsHICU | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_NewDeathsHNICU | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rAdmICU | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rAdmNICU | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rOutICU | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rrH | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rDeathICU | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " rDeathNICU | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:5, SV:3, LS:8, F:6, I:6, O:6, V:6, LV:6, LSV:0, P:6, LVV:0, LPV:6, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ IYU │\n",
- "│\u001b[1m 2 \u001b[0m│ HICU │\n",
- "│\u001b[1m 3 \u001b[0m│ HNICU │\n",
- "│\u001b[1m 4 \u001b[0m│ R │\n",
- "│\u001b[1m 5 \u001b[0m│ D │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NIC │\n",
- "│\u001b[1m 3 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 8 \u001b[0m│ 4 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_HICUAdmission │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ f_HNICUAdmission │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ f_OutICU │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ f_RecoveryH │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ f_NewDeathsHICU │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ f_NewDeathsHNICU │\n",
- "└───┴────┴──────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 4 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 5 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_HICUAdmission │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_HNICUAdmission │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_OutICU │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_RecoveryH │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_NewDeathsHICU │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_NewDeathsHNICU │ * │\n",
- "└───┴──────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 5 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 6 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌───┬────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rAdmICU │\n",
- "│\u001b[1m 2 \u001b[0m│ rAdmNICU │\n",
- "│\u001b[1m 3 \u001b[0m│ rOutICU │\n",
- "│\u001b[1m 4 \u001b[0m│ rrH │\n",
- "│\u001b[1m 5 \u001b[0m│ rDeathICU │\n",
- "│\u001b[1m 6 \u001b[0m│ rDeathNICU │\n",
- "└───┴────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 6 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "h = @stock_and_flow begin\n",
- " :stocks\n",
- " IYU\n",
- " HICU\n",
- " HNICU\n",
- " R\n",
- " D\n",
- " \n",
- " :parameters\n",
- " rAdmICU\n",
- " rAdmNICU\n",
- " rOutICU\n",
- " rrH\n",
- " rDeathICU\n",
- " rDeathNICU\n",
- " \n",
- " :dynamic_variables\n",
- " v_HICUAdmission = IYU * rAdmICU\n",
- " v_HNICUAdmission = IYU * rAdmNICU\n",
- " v_OutICU = HICU * rOutICU\n",
- " v_RecoveryH = HNICU * rrH\n",
- " v_NewDeathsHICU = HICU * rDeathICU\n",
- " v_NewDeathsHNICU = HNICU * rDeathNICU\n",
- " \n",
- " :flows\n",
- " IYU => f_HICUAdmission(v_HICUAdmission) => HICU\n",
- " IYU => f_HNICUAdmission(v_HNICUAdmission) => HNICU\n",
- " HICU => f_OutICU(v_OutICU) => HNICU\n",
- " HNICU => f_RecoveryH(v_RecoveryH) => R\n",
- " HICU => f_NewDeathsHICU(v_NewDeathsHICU) => D\n",
- " HNICU => f_NewDeathsHNICU(v_NewDeathsHNICU) => D\n",
- " \n",
- " :sums\n",
- " N = [IYU, HICU, HNICU, R]\n",
- " NIC = [IYU]\n",
- " NI = [IYU, HICU, HNICU]\n",
- " \n",
- " \n",
- " end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "027d470b",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYU\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"HICU\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"HNICU\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rAdmICU\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rAdmNICU\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rOutICU\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rrH\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rDeathICU\", :shape => \"circle\", :color => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(h;rd=\"TB\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "a479719e",
- "metadata": {},
- "source": [
- "## Defines the sub-components plans to be composed"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "id": "0d864aa2",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYU\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"NI\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Node(\"sv2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"NIC\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Node(\"sv3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "footIYUN=foot(:IYU, (:NI,:NIC,:N), (:IYU=>:NI, :IYU=>:NIC, :IYU=>:N))\n",
- "GraphF(footIYUN;schema=\"C0\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "id": "34905b59",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "footRN=foot(:R, :N, :R=>:N)\n",
- "GraphF(footRN;schema=\"C0\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "id": "c0d90f5d",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"NI\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Node(\"sv2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"NIC\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Node(\"sv3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "footIAN=foot(:IA, (:NI,:NIC,:N), (:IA=>:NI, :IA=>:NIC, :IA=>:N))\n",
- "GraphF(footIAN;schema=\"C0\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "id": "e8a714ce",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "footSN=foot(:S, :N, :S=>:N)\n",
- "GraphF(footSN;schema=\"C0\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "id": "af487fc6",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "footEN=foot(:E, :N, :E=>:N)\n",
- "GraphF(footEN;schema=\"C0\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "id": "b188f416",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"NIC\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "footNIC=foot((),:NIC,())\n",
- "GraphF(footNIC;schema=\"C0\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "baad6238",
- "metadata": {},
- "source": [
- "## Defines the UWD of composition"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "id": "7eecd838",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", false, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box1\", :label => \"modelA\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box2\", :label => \"modelB\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box3\", :label => \"modelC\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box4\", :label => \"modelD\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer1\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer2\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer3\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer4\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer5\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer6\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n14\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n14\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n8\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n14\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n15\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n15\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n15\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n9\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n15\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n16\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n16\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n10\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n16\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"ellipse\", :margin => \"0.05,0.025\", :width => \"0.5\", :height => \"0.5\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :len => \"1\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "covid = @relation (footSN, footEN, footIAN, footIYUN, footRN, footNIC) begin\n",
- " modelA(footSN, footEN, footIAN, footIYUN, footRN, footNIC)\n",
- " modelB(footSN, footEN, footNIC)\n",
- " modelC(footIAN, footRN)\n",
- " modelD(footIYUN, footRN)\n",
- "end;\n",
- "display_uwd(covid)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "0c262a8f",
- "metadata": {},
- "source": [
- "## Composition"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "id": "402c2989",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:13, SV:3, LS:24, F:21, I:21, O:21, V:25, LV:21, LSV:2, P:20, LVV:4, LPV:23, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " E | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " IA | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " IYU | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " IYN | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " R | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " VP | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " VF | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " IA2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " IA3 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " HICU | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " HNICU | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " D | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NIC | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 9 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 10 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 11 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 12 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 12 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " fNewIncidence | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " fNewInfectious | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " fBecomingSymptomatic | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 6 | \n",
- " fSymptomicsNotDevelopingComplications | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 7 | \n",
- " fNewRecovery | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 8 | \n",
- " fWaningImmunityR | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 13 | \n",
- " fFirstdoseVaccine | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 14 | \n",
- " fWaningImmunityVP | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 15 | \n",
- " fSeconddoseVaccine | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 16 | \n",
- " fWaningImmunityVF | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 11 | \n",
- " fNewIncidenceVP | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 12 | \n",
- " fNewIncidenceVF | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 17 | \n",
- " fDevelopmentOfPersistentAsymptomaticity | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 18 | \n",
- " fProgressionIA2_IA3 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 19 | \n",
- " fNewrecoveryIA3 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 20 | \n",
- " f_HICUAdmission | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 21 | \n",
- " f_HNICUAdmission | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 22 | \n",
- " f_OutICU | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 23 | \n",
- " f_RecoveryH | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 24 | \n",
- " f_NewDeathsHICU | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 25 | \n",
- " f_NewDeathsHNICU | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 12 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 7 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 10 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 9 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 13 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 14 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 15 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 16 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 17 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 18 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 19 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 20 | \n",
- " 13 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 21 | \n",
- " 13 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 11 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 10 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 12 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 13 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 14 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 15 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 16 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 17 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 18 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 20 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 19 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 21 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_NewIncidence₁ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_NewIncidence₂ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_NewIncidence₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_NewInfectious | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_BecomingSymptomatic | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_SymptomicsNotDevelopingComplications | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_NewRecovery | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_WaningImmunityR | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_NewIncidenceVP | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " v_NewIncidenceVF | \n",
- " * | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " v_infVP | \n",
- " * | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " v_infVF | \n",
- " * | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " ##v_fFirstdoseVaccine#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " ##v_fWaningImmunityVP#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " ##v_fSeconddoseVaccine#294 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " ##v_fWaningImmunityVF#295 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " ##v_fDevelopmentOfPersistentAsymptomaticity#296 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " ##v_fProgressionIA2_IA3#297 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " ##v_fNewrecoveryIA3#298 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " v_HICUAdmission | \n",
- " * | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " v_HNICUAdmission | \n",
- " * | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " v_OutICU | \n",
- " * | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " v_RecoveryH | \n",
- " * | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " v_NewDeathsHICU | \n",
- " * | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " v_NewDeathsHNICU | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 1 | \n",
- " 13 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 7 | \n",
- " 14 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 7 | \n",
- " 15 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 8 | \n",
- " 16 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 3 | \n",
- " 17 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 9 | \n",
- " 18 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 10 | \n",
- " 19 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 4 | \n",
- " 20 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 4 | \n",
- " 21 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 11 | \n",
- " 22 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 12 | \n",
- " 23 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 11 | \n",
- " 24 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 12 | \n",
- " 25 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " β | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rLatent | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rIncubation | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rDevelop | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rRecovery | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " rw | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " rv | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " rw | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " λ | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " eP_complement | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " eF_complement | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " rIncubationIA | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " rDevelopIA2 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " rRecoveryIA3 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " rAdmICU | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " rAdmNICU | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " rOutICU | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " rrH | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " rDeathICU | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " rDeathNICU | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 9 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 10 | \n",
- " 12 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 10 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 11 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 9 | \n",
- " 12 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 7 | \n",
- " 13 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 8 | \n",
- " 14 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 7 | \n",
- " 15 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 8 | \n",
- " 16 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 12 | \n",
- " 17 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 13 | \n",
- " 18 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 14 | \n",
- " 19 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 15 | \n",
- " 20 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 16 | \n",
- " 21 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 17 | \n",
- " 22 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 18 | \n",
- " 23 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 19 | \n",
- " 24 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 20 | \n",
- " 25 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:13, SV:3, LS:24, F:21, I:21, O:21, V:25, LV:21, LSV:2, P:20, LVV:4, LPV:23, Name:0, Op:0, Position:0}\n",
- "┌────┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├────┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ E │\n",
- "│\u001b[1m 3 \u001b[0m│ IA │\n",
- "│\u001b[1m 4 \u001b[0m│ IYU │\n",
- "│\u001b[1m 5 \u001b[0m│ IYN │\n",
- "│\u001b[1m 6 \u001b[0m│ R │\n",
- "│\u001b[1m 7 \u001b[0m│ VP │\n",
- "│\u001b[1m 8 \u001b[0m│ VF │\n",
- "│\u001b[1m 9 \u001b[0m│ IA2 │\n",
- "│\u001b[1m 10 \u001b[0m│ IA3 │\n",
- "│\u001b[1m 11 \u001b[0m│ HICU │\n",
- "│\u001b[1m 12 \u001b[0m│ HNICU │\n",
- "│\u001b[1m 13 \u001b[0m│ D │\n",
- "└────┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NIC │\n",
- "│\u001b[1m 3 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 4 │ 3 │\n",
- "│\u001b[1m 9 \u001b[0m│ 5 │ 1 │\n",
- "│\u001b[1m 10 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 11 \u001b[0m│ 5 │ 3 │\n",
- "│\u001b[1m 12 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 13 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 14 \u001b[0m│ 8 │ 1 │\n",
- "│\u001b[1m 15 \u001b[0m│ 9 │ 1 │\n",
- "│\u001b[1m 16 \u001b[0m│ 9 │ 2 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴──────┘\n",
- "\u001b[36m 8 rows omitted\u001b[0m\n",
- "┌────┬────┬─────────────────────────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├────┼────┼─────────────────────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ fNewIncidence │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ fNewInfectious │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ fBecomingSymptomatic │\n",
- "│\u001b[1m 4 \u001b[0m│ 6 │ fSymptomicsNotDevelopingComplications │\n",
- "│\u001b[1m 5 \u001b[0m│ 7 │ fNewRecovery │\n",
- "│\u001b[1m 6 \u001b[0m│ 8 │ fWaningImmunityR │\n",
- "│\u001b[1m 7 \u001b[0m│ 13 │ fFirstdoseVaccine │\n",
- "│\u001b[1m 8 \u001b[0m│ 14 │ fWaningImmunityVP │\n",
- "│\u001b[1m 9 \u001b[0m│ 15 │ fSeconddoseVaccine │\n",
- "│\u001b[1m 10 \u001b[0m│ 16 │ fWaningImmunityVF │\n",
- "│\u001b[1m 11 \u001b[0m│ 11 │ fNewIncidenceVP │\n",
- "│\u001b[1m 12 \u001b[0m│ 12 │ fNewIncidenceVF │\n",
- "│\u001b[1m 13 \u001b[0m│ 17 │ fDevelopmentOfPersistentAsymptomaticity │\n",
- "│\u001b[1m 14 \u001b[0m│ 18 │ fProgressionIA2_IA3 │\n",
- "│\u001b[1m 15 \u001b[0m│ 19 │ fNewrecoveryIA3 │\n",
- "│\u001b[1m 16 \u001b[0m│ 20 │ f_HICUAdmission │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴────┴─────────────────────────────────────────┘\n",
- "\u001b[36m 5 rows omitted\u001b[0m\n",
- "┌────┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├────┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 4 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 5 │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ 6 │\n",
- "│\u001b[1m 7 \u001b[0m│ 8 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 11 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 12 │ 2 │\n",
- "│\u001b[1m 10 \u001b[0m│ 7 │ 7 │\n",
- "│\u001b[1m 11 \u001b[0m│ 10 │ 7 │\n",
- "│\u001b[1m 12 \u001b[0m│ 9 │ 8 │\n",
- "│\u001b[1m 13 \u001b[0m│ 13 │ 9 │\n",
- "│\u001b[1m 14 \u001b[0m│ 14 │ 10 │\n",
- "│\u001b[1m 15 \u001b[0m│ 15 │ 6 │\n",
- "│\u001b[1m 16 \u001b[0m│ 16 │ 11 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴────┘\n",
- "\u001b[36m 5 rows omitted\u001b[0m\n",
- "┌────┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├────┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 4 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 6 │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 7 │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ 7 │\n",
- "│\u001b[1m 10 \u001b[0m│ 11 │ 7 │\n",
- "│\u001b[1m 11 \u001b[0m│ 10 │ 8 │\n",
- "│\u001b[1m 12 \u001b[0m│ 12 │ 8 │\n",
- "│\u001b[1m 13 \u001b[0m│ 13 │ 3 │\n",
- "│\u001b[1m 14 \u001b[0m│ 14 │ 9 │\n",
- "│\u001b[1m 15 \u001b[0m│ 15 │ 10 │\n",
- "│\u001b[1m 16 \u001b[0m│ 16 │ 4 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴────┘\n",
- "\u001b[36m 5 rows omitted\u001b[0m\n",
- "┌────┬─────────────────────────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼─────────────────────────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_NewIncidence₁ │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_NewIncidence₂ │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_NewIncidence₃ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_NewInfectious │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_BecomingSymptomatic │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_SymptomicsNotDevelopingComplications │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_NewRecovery │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_WaningImmunityR │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_NewIncidenceVP │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ v_NewIncidenceVF │ * │\n",
- "│\u001b[1m 11 \u001b[0m│ v_infVP │ * │\n",
- "│\u001b[1m 12 \u001b[0m│ v_infVF │ * │\n",
- "│\u001b[1m 13 \u001b[0m│ ##v_fFirstdoseVaccine#292 │ * │\n",
- "│\u001b[1m 14 \u001b[0m│ ##v_fWaningImmunityVP#293 │ * │\n",
- "│\u001b[1m 15 \u001b[0m│ ##v_fSeconddoseVaccine#294 │ * │\n",
- "│\u001b[1m 16 \u001b[0m│ ##v_fWaningImmunityVF#295 │ * │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────────────────────────────────────────────────┴─────┘\n",
- "\u001b[36m 9 rows omitted\u001b[0m\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 8 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ 9 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 10 │ 1 │\n",
- "│\u001b[1m 9 \u001b[0m│ 1 │ 13 │ 1 │\n",
- "│\u001b[1m 10 \u001b[0m│ 7 │ 14 │ 1 │\n",
- "│\u001b[1m 11 \u001b[0m│ 7 │ 15 │ 1 │\n",
- "│\u001b[1m 12 \u001b[0m│ 8 │ 16 │ 1 │\n",
- "│\u001b[1m 13 \u001b[0m│ 3 │ 17 │ 1 │\n",
- "│\u001b[1m 14 \u001b[0m│ 9 │ 18 │ 1 │\n",
- "│\u001b[1m 15 \u001b[0m│ 10 │ 19 │ 1 │\n",
- "│\u001b[1m 16 \u001b[0m│ 4 │ 20 │ 1 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "\u001b[36m 5 rows omitted\u001b[0m\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌────┬───────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ β │\n",
- "│\u001b[1m 2 \u001b[0m│ rLatent │\n",
- "│\u001b[1m 3 \u001b[0m│ rIncubation │\n",
- "│\u001b[1m 4 \u001b[0m│ rDevelop │\n",
- "│\u001b[1m 5 \u001b[0m│ rRecovery │\n",
- "│\u001b[1m 6 \u001b[0m│ rw │\n",
- "│\u001b[1m 7 \u001b[0m│ rv │\n",
- "│\u001b[1m 8 \u001b[0m│ rw │\n",
- "│\u001b[1m 9 \u001b[0m│ λ │\n",
- "│\u001b[1m 10 \u001b[0m│ eP_complement │\n",
- "│\u001b[1m 11 \u001b[0m│ eF_complement │\n",
- "│\u001b[1m 12 \u001b[0m│ rIncubationIA │\n",
- "│\u001b[1m 13 \u001b[0m│ rDevelopIA2 │\n",
- "│\u001b[1m 14 \u001b[0m│ rRecoveryIA3 │\n",
- "│\u001b[1m 15 \u001b[0m│ rAdmICU │\n",
- "│\u001b[1m 16 \u001b[0m│ rAdmNICU │\n",
- "│ ⋮ │ ⋮ │\n",
- "└────┴───────────────┘\n",
- "\u001b[36m 4 rows omitted\u001b[0m\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 9 │ 11 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 10 │ 12 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 8 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 10 │ 9 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 11 │ 10 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ 11 │ 2 │\n",
- "│\u001b[1m 10 \u001b[0m│ 9 │ 12 │ 2 │\n",
- "│\u001b[1m 11 \u001b[0m│ 7 │ 13 │ 2 │\n",
- "│\u001b[1m 12 \u001b[0m│ 8 │ 14 │ 2 │\n",
- "│\u001b[1m 13 \u001b[0m│ 7 │ 15 │ 2 │\n",
- "│\u001b[1m 14 \u001b[0m│ 8 │ 16 │ 2 │\n",
- "│\u001b[1m 15 \u001b[0m│ 12 │ 17 │ 2 │\n",
- "│\u001b[1m 16 \u001b[0m│ 13 │ 18 │ 2 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │ ⋮ │\n",
- "└─────┴──────┴──────┴──────────────┘\n",
- "\u001b[36m 7 rows omitted\u001b[0m\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "open_modelA=Open(seir, footSN, footEN, footIAN, footIYUN, footRN, footNIC)\n",
- "open_modelB=Open(v,footSN,footEN, footNIC)\n",
- "open_modelC=Open(ia,footIAN,footRN)\n",
- "open_modelD=Open(h,footIYUN,footRN)\n",
- "# Compose those three models according the UWD-algebra\n",
- "openCOVID19 = oapply(covid, [open_modelA, open_modelB, open_modelC, open_modelD])\n",
- "# composed model\n",
- "COVID19=apex(openCOVID19)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "b99b8db1",
- "metadata": {},
- "source": [
- "Composed model:\n",
- "![COVID_composed.jpg](figures/COVID_composed.jpg)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "id": "6b0c7999",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYU\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYN\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VF\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA2\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA3\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p9\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p9\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p11\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p10\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(COVID19)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "4247dca3",
- "metadata": {},
- "source": [
- "## Graph Rewriting"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "id": "e407e8ad",
- "metadata": {},
- "outputs": [],
- "source": [
- "L = @stock_and_flow begin\n",
- " :stocks\n",
- " VP\n",
- " VF\n",
- " E\n",
- "\n",
- " :parameters\n",
- " eP_complement\n",
- " eF_complement\n",
- " λ\n",
- " β\n",
- "\n",
- "\n",
- " :flows\n",
- " VP => fNewIncidenceVP(v_infVP) => E\n",
- " VF => fNewIncidenceVF(v_infVF) => E\n",
- "\n",
- " :dynamic_variables\n",
- " v_NewIncidence₁ = β * NIC\n",
- " v_NewIncidence₂ = v_NewIncidence₁ / N # λ\n",
- "\n",
- " v_NewIncidenceVP = VP * eP_complement\n",
- " v_NewIncidenceVF = VF * eF_complement\n",
- "\n",
- " v_infVP = v_NewIncidenceVP * λ\n",
- " v_infVF = v_NewIncidenceVF * λ\n",
- " \n",
- "\n",
- " :sums\n",
- " N = [VP, VF, E]\n",
- " NIC = []\n",
- "end;"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "id": "106c1bd0",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VF\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"eP_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"eF_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"λ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"β\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"β * NIC\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(β * NIC) / N\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP * eP_complement\", :shape => \"plaintext\", :fontcolor => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(L)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "id": "1a6ec871",
- "metadata": {},
- "outputs": [],
- "source": [
- "I = @stock_and_flow begin\n",
- " :stocks\n",
- " VP\n",
- " VF\n",
- " E\n",
- "\n",
- " :parameters\n",
- " eP_complement\n",
- " eF_complement\n",
- " β\n",
- "\n",
- " :flows\n",
- " VP => fNewIncidenceVP(v_infVP) => E\n",
- " VF => fNewIncidenceVF(v_infVF) => E\n",
- "\n",
- " :dynamic_variables\n",
- " v_NewIncidence₁ = β * NIC\n",
- " v_NewIncidence₂ = v_NewIncidence₁ / N # λ\n",
- " v_NewIncidenceVP = VP * eP_complement\n",
- " v_NewIncidenceVF = VF * eF_complement\n",
- "\n",
- "\n",
- " v_infVP = *(v_NewIncidenceVP)\n",
- " v_infVF = *(v_NewIncidenceVF)\n",
- "\n",
- " :sums\n",
- " N = [VP, VF, E]\n",
- " NIC = []\n",
- "end;"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "id": "ddc874f2",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VF\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"eP_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"eF_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"β\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"β * NIC\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(β * NIC) / N\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP * eP_complement\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VF * eF_complement\", :shape => \"plaintext\", :fontcolor => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(I)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "id": "489c992f",
- "metadata": {},
- "outputs": [],
- "source": [
- "R = @stock_and_flow begin\n",
- " :stocks\n",
- " VP\n",
- " VF\n",
- " E\n",
- "\n",
- " :parameters\n",
- " eP_complement\n",
- " eF_complement\n",
- " β\n",
- "\n",
- " :flows\n",
- " VP => fNewIncidenceVP(v_infVP) => E\n",
- " VF => fNewIncidenceVF(v_infVF) => E\n",
- "\n",
- " :dynamic_variables\n",
- " v_NewIncidence₁ = β * NIC\n",
- " v_NewIncidence₂ = v_NewIncidence₁ / N # λ\n",
- "\n",
- " v_NewIncidenceVP = VP * eP_complement\n",
- " v_NewIncidenceVF = VF * eF_complement\n",
- "\n",
- "\n",
- " v_infVP = v_NewIncidenceVP * v_NewIncidence₂\n",
- " v_infVF = v_NewIncidenceVF * v_NewIncidence₂\n",
- "\n",
- "\n",
- " :sums\n",
- " N = [VP, VF, E]\n",
- " NIC = []\n",
- "end;"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "id": "dda09460",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VF\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"eP_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"eF_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"β\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"β * NIC\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(β * NIC) / N\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP * eP_complement\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VF * eF_complement\", :shape => \"plaintext\", :fontcolor => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(R)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 26,
- "id": "a1a5d90d",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Rule{:DPO}(ACSetTransformation((S = FinFunction([1, 2, 3], 3, 3), SV = FinFunction([1, 2], 2, 2), LS = FinFunction([1, 2, 3], 3, 3), F = FinFunction([1, 2], 2, 2), I = FinFunction([1, 2], 2, 2), O = FinFunction([1, 2], 2, 2), V = FinFunction([1, 2, 3, 4, 5, 6], 6, 6), LV = FinFunction([1, 2], 2, 2), LSV = FinFunction([1, 2], 2, 2), P = FinFunction([1, 2, 4], 3, 4), LVV = FinFunction([1, 2, 3], 3, 3), LPV = FinFunction([1, 2, 3], 3, 5), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:3, SV:2, LS:3, F:2, I:2, O:2, V:6, LV:2, LSV:2, P:3, LVV:3, LPV:3, Name:0, Op:0, Position:0}, StockAndFlowF {S:3, SV:2, LS:3, F:2, I:2, O:2, V:6, LV:2, LSV:2, P:4, LVV:3, LPV:5, Name:0, Op:0, Position:0}), ACSetTransformation((S = FinFunction([1, 2, 3], 3, 3), SV = FinFunction([1, 2], 2, 2), LS = FinFunction([1, 2, 3], 3, 3), F = FinFunction([1, 2], 2, 2), I = FinFunction([1, 2], 2, 2), O = FinFunction([1, 2], 2, 2), V = FinFunction([1, 2, 3, 4, 5, 6], 6, 6), LV = FinFunction([1, 2], 2, 2), LSV = FinFunction([1, 2], 2, 2), P = FinFunction([1, 2, 3], 3, 3), LVV = FinFunction([1, 2, 4], 3, 5), LPV = FinFunction([1, 2, 3], 3, 3), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:3, SV:2, LS:3, F:2, I:2, O:2, V:6, LV:2, LSV:2, P:3, LVV:3, LPV:3, Name:0, Op:0, Position:0}, StockAndFlowF {S:3, SV:2, LS:3, F:2, I:2, O:2, V:6, LV:2, LSV:2, P:3, LVV:5, LPV:3, Name:0, Op:0, Position:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}(:Position => Dict(), :Op => Dict(), :Name => Dict()))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "using AlgebraicRewriting\n",
- "using AlgebraicRewriting: rewrite\n",
- "const hom = Catlab.CategoricalAlgebra.homomorphism\n",
- "\n",
- "rule = Rule(hom(I,L), hom(I,R))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "id": "14bbb5a8",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VF\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYU\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYN\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA2\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA3\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p10\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v14\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p9\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v13\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p8\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "Covid19_rewritten = rewrite(rule, COVID19)\n",
- "GraphF(Covid19_rewritten)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 28,
- "id": "b8de4b13",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:13, SV:3, LS:24, F:21, I:21, O:21, V:25, LV:21, LSV:2, P:19, LVV:6, LPV:21, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " VP | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " VF | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " E | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " IA | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " IYU | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " IYN | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " R | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " IA2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " IA3 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " HICU | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " HNICU | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " D | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NIC | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 7 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 9 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 10 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 11 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 12 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 12 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 5 | \n",
- " fNewIncidenceVP | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 6 | \n",
- " fNewIncidenceVF | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 7 | \n",
- " fNewIncidence | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 8 | \n",
- " fNewInfectious | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 9 | \n",
- " fBecomingSymptomatic | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 10 | \n",
- " fSymptomicsNotDevelopingComplications | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 11 | \n",
- " fNewRecovery | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 12 | \n",
- " fWaningImmunityR | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 13 | \n",
- " fFirstdoseVaccine | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 14 | \n",
- " fWaningImmunityVP | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 15 | \n",
- " fSeconddoseVaccine | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 16 | \n",
- " fWaningImmunityVF | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 17 | \n",
- " fDevelopmentOfPersistentAsymptomaticity | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 18 | \n",
- " fProgressionIA2_IA3 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 19 | \n",
- " fNewrecoveryIA3 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 20 | \n",
- " f_HICUAdmission | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 21 | \n",
- " f_HNICUAdmission | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 22 | \n",
- " f_OutICU | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 23 | \n",
- " f_RecoveryH | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 24 | \n",
- " f_NewDeathsHICU | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 25 | \n",
- " f_NewDeathsHNICU | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 8 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 6 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 7 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 10 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 12 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 13 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 14 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 15 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 16 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 17 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 18 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 19 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 20 | \n",
- " 13 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 21 | \n",
- " 13 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 12 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 13 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 14 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 15 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 16 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 17 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 18 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 20 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 19 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 21 | \n",
- " 12 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_NewIncidence₁ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_NewIncidence₂ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_NewIncidenceVP | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_NewIncidenceVF | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_infVP | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_infVF | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_NewIncidence₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_NewInfectious | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_BecomingSymptomatic | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " v_SymptomicsNotDevelopingComplications | \n",
- " * | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " v_NewRecovery | \n",
- " * | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " v_WaningImmunityR | \n",
- " * | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " ##v_fFirstdoseVaccine#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " ##v_fWaningImmunityVP#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " ##v_fSeconddoseVaccine#294 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " ##v_fWaningImmunityVF#295 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " ##v_fDevelopmentOfPersistentAsymptomaticity#296 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " ##v_fProgressionIA2_IA3#297 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " ##v_fNewrecoveryIA3#298 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " v_HICUAdmission | \n",
- " * | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " v_HNICUAdmission | \n",
- " * | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " v_OutICU | \n",
- " * | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " v_RecoveryH | \n",
- " * | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " v_NewDeathsHICU | \n",
- " * | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " v_NewDeathsHNICU | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 12 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 4 | \n",
- " 13 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 1 | \n",
- " 14 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 1 | \n",
- " 15 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 2 | \n",
- " 16 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 5 | \n",
- " 17 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 9 | \n",
- " 18 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 10 | \n",
- " 19 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 6 | \n",
- " 20 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 6 | \n",
- " 21 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 11 | \n",
- " 22 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 12 | \n",
- " 23 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 11 | \n",
- " 24 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 12 | \n",
- " 25 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " eP_complement | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " eF_complement | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " β | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rLatent | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rIncubation | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " rDevelop | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " rRecovery | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " rw | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " rv | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " rw | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " rIncubationIA | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " rDevelopIA2 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " rRecoveryIA3 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " rAdmICU | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " rAdmNICU | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " rOutICU | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " rrH | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " rDeathICU | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " rDeathNICU | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 12 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " 13 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 10 | \n",
- " 14 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 9 | \n",
- " 15 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 10 | \n",
- " 16 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 11 | \n",
- " 17 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 12 | \n",
- " 18 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 13 | \n",
- " 19 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 14 | \n",
- " 20 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 15 | \n",
- " 21 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 16 | \n",
- " 22 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 17 | \n",
- " 23 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 18 | \n",
- " 24 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 19 | \n",
- " 25 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:13, SV:3, LS:24, F:21, I:21, O:21, V:25, LV:21, LSV:2, P:19, LVV:6, LPV:21, Name:0, Op:0, Position:0}\n",
- "┌────┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├────┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ VP │\n",
- "│\u001b[1m 2 \u001b[0m│ VF │\n",
- "│\u001b[1m 3 \u001b[0m│ E │\n",
- "│\u001b[1m 4 \u001b[0m│ S │\n",
- "│\u001b[1m 5 \u001b[0m│ IA │\n",
- "│\u001b[1m 6 \u001b[0m│ IYU │\n",
- "│\u001b[1m 7 \u001b[0m│ IYN │\n",
- "│\u001b[1m 8 \u001b[0m│ R │\n",
- "│\u001b[1m 9 \u001b[0m│ IA2 │\n",
- "│\u001b[1m 10 \u001b[0m│ IA3 │\n",
- "│\u001b[1m 11 \u001b[0m│ HICU │\n",
- "│\u001b[1m 12 \u001b[0m│ HNICU │\n",
- "│\u001b[1m 13 \u001b[0m│ D │\n",
- "└────┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NIC │\n",
- "│\u001b[1m 3 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 5 │ 3 │\n",
- "│\u001b[1m 8 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 9 \u001b[0m│ 6 │ 2 │\n",
- "│\u001b[1m 10 \u001b[0m│ 6 │ 3 │\n",
- "│\u001b[1m 11 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 12 \u001b[0m│ 7 │ 2 │\n",
- "│\u001b[1m 13 \u001b[0m│ 7 │ 3 │\n",
- "│\u001b[1m 14 \u001b[0m│ 8 │ 1 │\n",
- "│\u001b[1m 15 \u001b[0m│ 9 │ 1 │\n",
- "│\u001b[1m 16 \u001b[0m│ 9 │ 2 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴──────┘\n",
- "\u001b[36m 8 rows omitted\u001b[0m\n",
- "┌────┬────┬─────────────────────────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├────┼────┼─────────────────────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 5 │ fNewIncidenceVP │\n",
- "│\u001b[1m 2 \u001b[0m│ 6 │ fNewIncidenceVF │\n",
- "│\u001b[1m 3 \u001b[0m│ 7 │ fNewIncidence │\n",
- "│\u001b[1m 4 \u001b[0m│ 8 │ fNewInfectious │\n",
- "│\u001b[1m 5 \u001b[0m│ 9 │ fBecomingSymptomatic │\n",
- "│\u001b[1m 6 \u001b[0m│ 10 │ fSymptomicsNotDevelopingComplications │\n",
- "│\u001b[1m 7 \u001b[0m│ 11 │ fNewRecovery │\n",
- "│\u001b[1m 8 \u001b[0m│ 12 │ fWaningImmunityR │\n",
- "│\u001b[1m 9 \u001b[0m│ 13 │ fFirstdoseVaccine │\n",
- "│\u001b[1m 10 \u001b[0m│ 14 │ fWaningImmunityVP │\n",
- "│\u001b[1m 11 \u001b[0m│ 15 │ fSeconddoseVaccine │\n",
- "│\u001b[1m 12 \u001b[0m│ 16 │ fWaningImmunityVF │\n",
- "│\u001b[1m 13 \u001b[0m│ 17 │ fDevelopmentOfPersistentAsymptomaticity │\n",
- "│\u001b[1m 14 \u001b[0m│ 18 │ fProgressionIA2_IA3 │\n",
- "│\u001b[1m 15 \u001b[0m│ 19 │ fNewrecoveryIA3 │\n",
- "│\u001b[1m 16 \u001b[0m│ 20 │ f_HICUAdmission │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴────┴─────────────────────────────────────────┘\n",
- "\u001b[36m 5 rows omitted\u001b[0m\n",
- "┌────┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├────┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │\n",
- "│\u001b[1m 3 \u001b[0m│ 8 │ 4 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 5 │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ 6 │\n",
- "│\u001b[1m 7 \u001b[0m│ 6 │ 7 │\n",
- "│\u001b[1m 8 \u001b[0m│ 7 │ 8 │\n",
- "│\u001b[1m 9 \u001b[0m│ 10 │ 4 │\n",
- "│\u001b[1m 10 \u001b[0m│ 9 │ 1 │\n",
- "│\u001b[1m 11 \u001b[0m│ 12 │ 1 │\n",
- "│\u001b[1m 12 \u001b[0m│ 11 │ 2 │\n",
- "│\u001b[1m 13 \u001b[0m│ 13 │ 9 │\n",
- "│\u001b[1m 14 \u001b[0m│ 14 │ 10 │\n",
- "│\u001b[1m 15 \u001b[0m│ 15 │ 8 │\n",
- "│\u001b[1m 16 \u001b[0m│ 16 │ 11 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴────┘\n",
- "\u001b[36m 5 rows omitted\u001b[0m\n",
- "┌────┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├────┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 4 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 3 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 6 │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ 7 │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 8 │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ 4 │\n",
- "│\u001b[1m 10 \u001b[0m│ 10 │ 1 │\n",
- "│\u001b[1m 11 \u001b[0m│ 11 │ 1 │\n",
- "│\u001b[1m 12 \u001b[0m│ 12 │ 2 │\n",
- "│\u001b[1m 13 \u001b[0m│ 13 │ 5 │\n",
- "│\u001b[1m 14 \u001b[0m│ 14 │ 9 │\n",
- "│\u001b[1m 15 \u001b[0m│ 15 │ 10 │\n",
- "│\u001b[1m 16 \u001b[0m│ 16 │ 6 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴────┘\n",
- "\u001b[36m 5 rows omitted\u001b[0m\n",
- "┌────┬─────────────────────────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼─────────────────────────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_NewIncidence₁ │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_NewIncidence₂ │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_NewIncidenceVP │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_NewIncidenceVF │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_infVP │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_infVF │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_NewIncidence₃ │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_NewInfectious │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_BecomingSymptomatic │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ v_SymptomicsNotDevelopingComplications │ * │\n",
- "│\u001b[1m 11 \u001b[0m│ v_NewRecovery │ * │\n",
- "│\u001b[1m 12 \u001b[0m│ v_WaningImmunityR │ * │\n",
- "│\u001b[1m 13 \u001b[0m│ ##v_fFirstdoseVaccine#292 │ * │\n",
- "│\u001b[1m 14 \u001b[0m│ ##v_fWaningImmunityVP#293 │ * │\n",
- "│\u001b[1m 15 \u001b[0m│ ##v_fSeconddoseVaccine#294 │ * │\n",
- "│\u001b[1m 16 \u001b[0m│ ##v_fWaningImmunityVF#295 │ * │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────────────────────────────────────────────────┴─────┘\n",
- "\u001b[36m 9 rows omitted\u001b[0m\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 7 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 8 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 9 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 10 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ 11 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 12 │ 1 │\n",
- "│\u001b[1m 9 \u001b[0m│ 4 │ 13 │ 1 │\n",
- "│\u001b[1m 10 \u001b[0m│ 1 │ 14 │ 1 │\n",
- "│\u001b[1m 11 \u001b[0m│ 1 │ 15 │ 1 │\n",
- "│\u001b[1m 12 \u001b[0m│ 2 │ 16 │ 1 │\n",
- "│\u001b[1m 13 \u001b[0m│ 5 │ 17 │ 1 │\n",
- "│\u001b[1m 14 \u001b[0m│ 9 │ 18 │ 1 │\n",
- "│\u001b[1m 15 \u001b[0m│ 10 │ 19 │ 1 │\n",
- "│\u001b[1m 16 \u001b[0m│ 6 │ 20 │ 1 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "\u001b[36m 5 rows omitted\u001b[0m\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌────┬───────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ eP_complement │\n",
- "│\u001b[1m 2 \u001b[0m│ eF_complement │\n",
- "│\u001b[1m 3 \u001b[0m│ β │\n",
- "│\u001b[1m 4 \u001b[0m│ rLatent │\n",
- "│\u001b[1m 5 \u001b[0m│ rIncubation │\n",
- "│\u001b[1m 6 \u001b[0m│ rDevelop │\n",
- "│\u001b[1m 7 \u001b[0m│ rRecovery │\n",
- "│\u001b[1m 8 \u001b[0m│ rw │\n",
- "│\u001b[1m 9 \u001b[0m│ rv │\n",
- "│\u001b[1m 10 \u001b[0m│ rw │\n",
- "│\u001b[1m 11 \u001b[0m│ rIncubationIA │\n",
- "│\u001b[1m 12 \u001b[0m│ rDevelopIA2 │\n",
- "│\u001b[1m 13 \u001b[0m│ rRecoveryIA3 │\n",
- "│\u001b[1m 14 \u001b[0m│ rAdmICU │\n",
- "│\u001b[1m 15 \u001b[0m│ rAdmNICU │\n",
- "│\u001b[1m 16 \u001b[0m│ rOutICU │\n",
- "│ ⋮ │ ⋮ │\n",
- "└────┴───────────────┘\n",
- "\u001b[36m 3 rows omitted\u001b[0m\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 5 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 6 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 2 │ 7 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 8 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 9 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 10 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ 11 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 12 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ 13 │ 2 │\n",
- "│\u001b[1m 10 \u001b[0m│ 10 │ 14 │ 2 │\n",
- "│\u001b[1m 11 \u001b[0m│ 9 │ 15 │ 2 │\n",
- "│\u001b[1m 12 \u001b[0m│ 10 │ 16 │ 2 │\n",
- "│\u001b[1m 13 \u001b[0m│ 11 │ 17 │ 2 │\n",
- "│\u001b[1m 14 \u001b[0m│ 12 │ 18 │ 2 │\n",
- "│\u001b[1m 15 \u001b[0m│ 13 │ 19 │ 2 │\n",
- "│\u001b[1m 16 \u001b[0m│ 14 │ 20 │ 2 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │ ⋮ │\n",
- "└─────┴──────┴──────┴──────────────┘\n",
- "\u001b[36m 5 rows omitted\u001b[0m\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "Covid19_rewritten"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 29,
- "id": "97a76bd7",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VP\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"VF\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYU\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IYN\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA2\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"IA3\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"fNewRecovery\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s10\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"fNewrecoveryIA3\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s12\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_RecoveryH\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"fDevelopmentOfPersistentAsymptomaticity\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s9\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"fProgressionIA2_IA3\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_HICUAdmission\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_HNICUAdmission\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s11\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_OutICU\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s11\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s13\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_NewDeathsHICU\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s12\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s13\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_NewDeathsHNICU\", :labelfontsize => \"6\", :color => \"black:invis:black\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(Covid19_rewritten; type=\"SF\", rd=\"TB\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "a99b51bd",
- "metadata": {},
- "source": [
- "# Define parameters and initial values"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 30,
- "id": "7c0af9bf",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "13-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :IYU, :IA, :R, :HICU, :HNICU, :VP, :VF, :D, :IA2, :IA3, :IYN)}:\n",
- " :S => 3.801e7\n",
- " :E => 0.0\n",
- " :IYU => 10.0\n",
- " :IA => 0.0\n",
- " :R => 0.0\n",
- " :HICU => 0.0\n",
- " ⋮\n",
- " :VF => 0.0\n",
- " :D => 0.0\n",
- " :IA2 => 0.0\n",
- " :IA3 => 0.0\n",
- " :IYN => 0.0"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define constant parameters\n",
- "p_COVID19_raw = LVector(\n",
- " β=0.8, tLatent=2.9, tIncubation=2.72, tDevelop=6.0, tRecovery=3.5,tw=2*365.0,\n",
- " fH=0.002, fICU=0.23, tICU=6.0, tH = 12.0, tOutICU=6.0, fractionIA=0.4\n",
- ")\n",
- "\n",
- "\n",
- "p_COVID19 = LVector(\n",
- " β=p_COVID19_raw.β, rLatent=1.0/p_COVID19_raw.tLatent, rIncubation=(1.0-p_COVID19_raw.fractionIA)/p_COVID19_raw.tIncubation,\n",
- " rDevelop=(1.0-p_COVID19_raw.fH)/p_COVID19_raw.tDevelop, rRecovery=1.0/p_COVID19_raw.tRecovery, rw=1.0/p_COVID19_raw.tw,\n",
- " rv=0.01, eP=0.6, eF=0.85, rIncubationIA=p_COVID19_raw.fractionIA/p_COVID19_raw.tIncubation, \n",
- " rDevelopIA2=1.0/p_COVID19_raw.tDevelop, rRecoveryIA3=1.0/p_COVID19_raw.tRecovery,\n",
- " rAdmICU=p_COVID19_raw.fH*p_COVID19_raw.fICU/p_COVID19_raw.tDevelop,\n",
- " rAdmNICU=p_COVID19_raw.fH*(1.0-p_COVID19_raw.fICU)/p_COVID19_raw.tDevelop,\n",
- " rrH=1.0/p_COVID19_raw.tH, rOutICU=1.0/p_COVID19_raw.tOutICU,rDeathICU=0.085, rDeathNICU=0.018,\n",
- " eP_complement = 0.4, eF_complement = 0.15\n",
- ")\n",
- "# define initial values for stocks\n",
- "u0_COVID19 = LVector(\n",
- " S=38010000.0, E=0.0, IYU=10.0, IA=0.0, R=0.0, HICU=0.0, HNICU=0.0, VP=0.0, VF=0.0,\n",
- " D=0.0, IA2=0.0, IA3=0.0, IYN=0.0\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "d5eca965",
- "metadata": {},
- "source": [
- "# Solve the ODEs"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 31,
- "id": "f9ede952",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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",
- "image/svg+xml": [
- "\n",
- "\n"
- ],
- "text/html": [
- "\n",
- "\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# results are tested the same as the Anylogic model\n",
- "prob_COVID19 = ODEProblem(vectorfield(Covid19_rewritten),u0_COVID19,(0.0,100.0),p_COVID19);\n",
- "sol_COVID19 = solve(prob_COVID19,Tsit5(),abstol=1e-8);\n",
- "plot(sol_COVID19)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 32,
- "id": "1430ad32",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n"
- ],
- "text/plain": [
- "HTML{String}(\"\\n\")"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# to have the figures plotted fix to the wider of the cells\n",
- "HTML(\"\"\"\n",
- "\n",
- "\"\"\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 33,
- "id": "db3c3ad3-89e8-484d-a5c3-654f537cb33f",
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.9.2",
- "language": "julia",
- "name": "julia-1.9"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.9.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/SEIR_full_model_measles_chickenpox-checkpoint.ipynb b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/SEIR_full_model_measles_chickenpox-checkpoint.ipynb
deleted file mode 100644
index bb242e7e..00000000
--- a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/SEIR_full_model_measles_chickenpox-checkpoint.ipynb
+++ /dev/null
@@ -1,1645 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "using GraphViz\n",
- "\n",
- "using StockFlow\n",
- "using StockFlow.Syntax\n",
- "\n",
- "using Catlab\n",
- "using Catlab.CategoricalAlgebra\n",
- "using LabelledArrays\n",
- "using OrdinaryDiffEq\n",
- "using Plots\n",
- "\n",
- "using Catlab.Graphics\n",
- "using Catlab.Programs\n",
- "using Catlab.Theories\n",
- "using Catlab.WiringDiagrams"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# SEIR model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:4, SV:1, LS:4, F:8, I:4, O:7, V:10, LV:8, LSV:2, P:5, LVV:2, LPV:8, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " E | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " I | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " R | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " fbirth | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " fincid | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " fdeathS | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 6 | \n",
- " finf | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 7 | \n",
- " fdeathE | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 8 | \n",
- " frec | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 9 | \n",
- " fdeathI | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 10 | \n",
- " fdeathR | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 6 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " ##v_fbirth#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " ##v_fincid#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ##v_fincid#294 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " ##v_fincid#295 | \n",
- " / | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " ##v_fdeathS#296 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " ##v_finf#297 | \n",
- " / | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " ##v_fdeathE#298 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " ##v_frec#299 | \n",
- " / | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " ##v_fdeathI#300 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " ##v_fdeathR#301 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 3 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 4 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " β | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " tlatent | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " trecovery | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " δ | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 5 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 5 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:4, SV:1, LS:4, F:8, I:4, O:7, V:10, LV:8, LSV:2, P:5, LVV:2, LPV:8, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ E │\n",
- "│\u001b[1m 3 \u001b[0m│ I │\n",
- "│\u001b[1m 4 \u001b[0m│ R │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬─────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼─────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ fbirth │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ fincid │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ fdeathS │\n",
- "│\u001b[1m 4 \u001b[0m│ 6 │ finf │\n",
- "│\u001b[1m 5 \u001b[0m│ 7 │ fdeathE │\n",
- "│\u001b[1m 6 \u001b[0m│ 8 │ frec │\n",
- "│\u001b[1m 7 \u001b[0m│ 9 │ fdeathI │\n",
- "│\u001b[1m 8 \u001b[0m│ 10 │ fdeathR │\n",
- "└───┴────┴─────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 6 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 7 │ 3 │\n",
- "│\u001b[1m 7 \u001b[0m│ 8 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌────┬─────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼─────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ ##v_fbirth#292 │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ ##v_fincid#293 │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ ##v_fincid#294 │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ ##v_fincid#295 │ / │\n",
- "│\u001b[1m 5 \u001b[0m│ ##v_fdeathS#296 │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ ##v_finf#297 │ / │\n",
- "│\u001b[1m 7 \u001b[0m│ ##v_fdeathE#298 │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ ##v_frec#299 │ / │\n",
- "│\u001b[1m 9 \u001b[0m│ ##v_fdeathI#300 │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ ##v_fdeathR#301 │ * │\n",
- "└────┴─────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 3 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 8 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 3 │ 9 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 4 │ 10 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 4 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ β │\n",
- "│\u001b[1m 3 \u001b[0m│ tlatent │\n",
- "│\u001b[1m 4 \u001b[0m│ trecovery │\n",
- "│\u001b[1m 5 \u001b[0m│ δ │\n",
- "└───┴───────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 4 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 8 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 5 │ 9 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 5 │ 10 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "seir = @stock_and_flow begin\n",
- " :stocks\n",
- " S\n",
- " E\n",
- " I\n",
- " R\n",
- "\n",
- " :parameters\n",
- " μ\n",
- " β\n",
- " tlatent\n",
- " trecovery\n",
- " δ\n",
- "\n",
- " :flows\n",
- " CLOUD => fbirth(μ * N) => S\n",
- " S => fincid(β * S * I / N) => E\n",
- " S => fdeathS(S * δ) => CLOUD\n",
- " E => finf(E / tlatent) => I\n",
- " E => fdeathE(E * δ) => CLOUD\n",
- " I => frec(I / trecovery) => R\n",
- " I => fdeathI(I * δ) => CLOUD\n",
- " R => fdeathR(R * δ) => CLOUD\n",
- "\n",
- " :sums\n",
- " N = [S, E, I, R]\n",
- "\n",
- "end\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"E\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"β\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"tlatent\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"trecovery\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"δ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_1u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(seir)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 1. Measles model \n",
- "## Time unit: Month"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 89070.0\n",
- " :E => 0.0\n",
- " :I => 930.0\n",
- " :R => 773545.0"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define parameter values and initial values of stocks\n",
- "# define constant parameters\n",
- "p_measles = LVector(\n",
- " β=49.598, μ=0.03/12, δ=0.03/12, tlatent=8.0/30, trecovery=5.0/30\n",
- ")\n",
- "# define initial values for stocks\n",
- "u0_measles = LVector(\n",
- " S=90000.0-930.0, E=0.0, I=930.0, R=773545.0\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "data": {
- "image/png": "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pz85XYoeoXcMlvnJT37y0UcfrV+/ft68eb/61a+cLg4AAPQdxxaEGzZs+L//+78VK1bE4/GD/2qa5sqVK59//vnKysqur7OpqWnt2rV79uw5YFWrVq16/vnnKyoqiIixjp+tOuOMM45p5QAAAEfW1aZRwzCuueaaTz/9dOLEibW1tdXV1QsWLOi8gGVZF110UVNT0ymnnPKTn/zktdde60qv5ty5c998801Zln/xi1/cfffd9kzO+SWXXFJfX3/qqaf+9Kc/feWVV9ra2gYNGmRZ1q9+9asZM2Yc64sEAAA4nK4G4RNPPLFr167NmzcHAof+2caVK1du3779yy+/9Pl8Tz755N133/3+++8TUSQSWbJkyQ033JBa8tlnn503b569ngcffPDFF1+85pprOq/q3Xff3bJly9atW/1+/1NPPXX33Xf/8Ic/fOihh0RRvO6666699tpv+FoBAAAOwjjnXVnujDPOuPnmmydMmFBbW3v66aeHQqEDFrj55psFQXj88ceJqK6uLj8/v7m5OTMzs7Gx8bzzzps9e/Y999xDRHfdddc777zz7rvvZmZmpp47d+7c0047LXVFeOuttxqG8cc//pGIGhsbc3JyGhoasrOzj1rIkpKSzg2n/fv337x5c1deXV8SjUaDwaDTpXCSqqqSJHXPr7f0WKgGuq6bpun1ep0uiJNQDSzLkmX5qLcbdPVgsXv37ueff/6ZZ55JT0//7LPPli1bNmbMmM4LVFVVjR8/3n6cl5enKEpVVVVmZmZ2dva777573nnnEVEymXznnXdWrVrVOQUPVlVVNXr0aPtxdna21+utqqrqShCedNJJTz311AE/5+FCB5+muIosywhCcn01QBDaXF4NLMsyTfOoi3X1YJFIJLKzs//2t78R0a9+9as77rjjn//8Z+cFTNMURTE1KQiCYRj245ycnNWrV48cOVJRlM2bN4fD4SNv64BViaKYWhUAAMDx1dVRowUFBZMnT7YfT5069eAmx4KCgvr6evtxW1ubqqqFhYWpvz722GP9+/fPzs5+8sknu7Kt1Kqi0WgsFuu8KgAAgOOoq0E4derUXbt22Y937NhRXFxsP25pabEvPCdNmvTuu+/aPY4rV64cOXJkbm6uvcw999yzfPnyFStWvPfee0uXLv3Nb35z5G3Zq7Isy17VsGHD8vPzj/2lAQAAHF1Xm0Zvv/32iRMnBgKBtLS0Bx980L6w0zQtHA5/+umnY8aMmTNnzv3333/ttdeOGzfuwQcffPjhh+0n7tmzZ+3atatXr7b7Bd95553LLrvshhtusKP0pZdeeu+99zZu3FheXl5ZWXn99defc845V1xxxX333XfttdeOHz/+wQcffOCBB1L3EQIAABxfXQ3CYcOGrV+/fvHixbFY7K233ho7diwRSZL01FNP9e/fn4g8Hs9HH3303HPP1dfXv/TSS6l21AEDBqxduza1nuzs7A8++CA1WVJSMmbMmNS4G3tEjKIoH3744XPPPVdXV7d48eIpU6YchxcKAABwKF29faJXmDFjxi233OLyUaORSMTl48Rw+wShGmDUKBGhGuwbNSrL8pEX6x3fNQoAAHCCIAgBAMDVEIQAAOBqCEIAAHA1BCEAALgaghAAAFwNQQgAAK6GIAQAAFdDEAIAgKshCAEAwNUQhAAA4GoIQgAAcDUEIQAAuBqCEAAAXA1BCAAAroYgBAAAV0MQAgCAqyEIAQDA1RCEAADgaghCAABwNQQhAAC4GoIQAABcDUEIAACuhiAEAABXQxACAICrIQgBAMDVEIQAAOBqCEIAAHA1BCEAALgaghAAAFwNQQgAAK6GIAQAAFdDEAIAgKshCAEAwNUQhAAA4GoIQgAAcDUEIQAAuBqCEAAAXA1BCAAAroYgBAAAV0MQAgCAqyEIAQDA1RCEAADgaghCAABwNQQhAAC4GoIQAABcDUEIAACuhiAEAABXQxACAICrIQgBAMDVEIQAAOBqCEIAAHA1BCEAALgaghAAAFwNQQgAAK6GIAQAAFdDEAIAgKshCAEAwNUQhAAA4GoIQgAAcDUEIQAAuBqCEAAAXA1BCAAAroYgBAAAV0MQAgCAqyEIAQDA1RCEAADgaghCAABwNcnpAnTJihUrXnvtNfvxbbfdNmLECGfLAwAAfUbvCMLPP/88Kytr9uzZRFRUVOR0cQAAoO/oHUFIRIqiKIoydOhQj8fjdFkAAKDv6B19hFlZWTt27HjggQdOOeWUL774wuniAABA39E7rggXLly4cOFCInrxxRfvv//+l19+2ekSAQBAH3HMQbh06VLDMOzuugO0t7cvXry4rq5u+vTpEyZM6Mraksnk559/vmXLllGjRo0ePTo1PxKJLF68uLa2dtq0aWeeeWZqfnFxcWtr67GWGQAA4HCOLQjff//96667bvDgwQcHoa7rEydOHDRo0JgxY2bNmvXHP/5xzpw5R13hjBkz9u7d297e/qMf/SgVhIZhnHvuuf379x83btxll132hz/8oaGhoaioyLKs+++//6c//ekxlRkAAOAIjiEIE4nEj370o5///OepOxk6+8c//mGa5quvvioIwsCBA++77z47CGtqap544on77rtPEAQiMk3z7rvv/ulPf5qTk0NEy5cv93g8c+fO7byqpUuXJpPJv//976IoDhky5De/+c3jjz++bt06QRCeeOKJs88++3Al1HW9trZ29+7d9qTX6y0sLOz6CwQAABc6hiD87//+7+uuu+5wdy+sXr162rRpdtrNmDHjmmuuaWhoyMnJCYfDn3/++cKFC//85z9zzufPn9/Y2BgKhexnHXII6OrVqy+88EJRFO1VXXXVVSNGjJgyZcpRS7hnz54777zT5/PZk3l5eatWrer6C+wbotGo00VwmKqqkiRJUu/o/z5BUA10XTdNU9d1pwviJFQDy7JkWZZl+ciLdfVgsWHDhjVr1qxfv37JkiWHXKCmpiZ1rZaRkeHxeKqrq3Nycjwez5IlSy699NLvfe97yWSyra3t9ddfP/ItEDU1NePGjbMfh0Ihv99fXV2dn59/1EIOHTr0lltumTlzZhdfVF+VOs9wJ1mWEYTk+mpgB6HX63W6IA5zeTWwLMs0zaMu1qWDRTKZXLRo0Z///Ocj5KogCJZlpSY55/YlHRH5fL6///3vAwcOVBRl586dR70R8IBVWZaVWhUAAMDx1aUg/Ne//lVWVvbLX/6SiGpra8vLyy+44II333yz89lWYWFhTU2N/bihoUHTtFT/nGmaN9100/jx4zVNu/nmm5999lm7BfVwOq+qublZVVV09QEAwAnSpRvqx4wZs3r16gceeOCBBx64+uqrCwoKHnjgAUVROOeffvppPB4nopkzZy5fvlzTNCJ6/fXXJ0yYEA6Hicg0zfnz5zc3N7/66qtvvvlmfX39woULO1/wHcxeVTKZtFc1btw4e2QNAADAcdelK8JQKDRmzBj78fbt2/1+vz2padq4ceM+/fTTMWPGzJgx4+GHH546deqoUaNeeumll156yV6+qqpKkqRUv+CSJUtuuumm2tpa+yLv8ccff+ONN/7zn/9s2rRp7dq1P/nJT2bOnDlt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YcqUKYZhOF2i7rBq1arMzMxLL7302muvTU9P//3vf2/Pb2lpGT58+LRp0+bNm5eXl7dz505ny9kNNE0bO3YsEe3Zs8ee88EHH4TD4RtuuOHMM8+cPHmyruuOFvDEqq6uHjly5IQJExYsWDBhwoStW7dyzg3DOO+8884444wbbrghHA6vXbvW6WKeQLW1taWlpTNnzvzxj39cVFR0zz332PPXr18fDocXLFhw9tlnn3POOZqmOVvO4+5HP/qRoijp6ek/+MEPOs9fsGDByJEjFy1alJOT8+KLL9ozt23blp2dfe21115wwQWnnHJKe3u7E0U+zpqbm9PT0+2wt2u+beDAgWeeeeb8+fNHjhx51llnxeNxe/7dd99dWlq6aNGioqKiRx55xJ7ZR4JwypQp9ktKJpNDhw5dunSp0yXqDnV1damqvGzZskAgYJ8BPPzww+eff75lWZzzH/7whzfeeKOTpewW99577y9+8YvOQTh16tSHH36Yc55MJocPH/6Pf/zDyfKdYJdddtlNN910wMxly5YNGjQokUhwzv/whz+ce+65ThStmzzxxBMTJkywH69bty4YDNr1f/r06f/7v//LOdc07eSTT37llVecLOUJUFlZqarqj3/8485B+MUXX6SlpTU2NnLO33zzzdLSUtM0Oeff/e53b7vtNs65ZVmTJk16/PHHnSr2caTrellZGef8gCBMXQCoqlpaWvrCCy9wzuvq6rxer/2nzz77LC0tLRKJcM77Qh9hNBp97733Zs+eTUSKolxyySXLli1zulDdITc3N/Xz0wUFBaZpWpZFRMuWLZs9e7bdFDBnzpw333zTyVKeeFu3bn3ttdfsILTFYrE1a9a4pErEYrE33njj9ttvX79+/ccff6zruj1/2bJlF198sf2tInPmzFm3bl17e7ujJT2BsrKyEomEXf9jsVg4HGaMaZq2cuVKuxrIsjxr1qy+Vw2Ki4s9Hs8BM5ctWzZ58mT7ywSmT5/e0NCwefNm2ndkICLG2BVXXNE39oYkSf379z94/qBBg+wHHo8nHA5rmkZEq1atOumkk+w/jR49Ojs7e+3atdQrfpj3qKqrq4mosLDQniwqKnLhjzHdd9993/nOd+xG/6qqqqKiInt+UVFRXV2dYRiS1Bfe64OZprlgwYInn3yy8+GgpqaGc955J9gHgj5pz549oih+//vfD4fDlZWVuq6vWbMmIyOjqqpq4sSJ9jL5+fmSJFVVVaWlpTlb2hNk7ty5GzduHDduXGlp6VdfffXKK68QUW1trWVZxcXF9jJFRUUbNmxwtJjdpKqqKvWqJUnKy8urqqoaNmxYU1NT573hkl9oWrZs2d69e2fNmkVf3zPUaSf0hStC0zQZY6m+UFEU3fZblHfddVd5eflDDz1kT5qmaY+VICJRFDnnpmk6V7oT63e/+924cePOPvvszjNdVSVUVdV1/corr/z73/++YcOGrKysRx99lL5eDYiIMdaHd8K2bduWLFly5ZVXXnnllUVFRU899RQR2dXeJdWgM7v+pyYlSTIMw517Y9OmTQsXLvzrX/9qXx8fcs9Q3wjC/Px8y7IaGxvtybq6uv1jgVzgvvvue+ONN1asWJE62S8oKKivr7cf19XVZWVlHdx40mc89NBDTU1NixYtuuWWW4jozjvv3LBhQ35+PufcJVXCbguZNGkSETHGJk2aZP8ye+dq0NLSout6qtWk73n00UcvvvjiX/ziF1ddddWrr776wgsvbN++PT8/n/Z97TIR1dXV9eE90Fnnt55zXl9fX1hYGAgE0tLSXLU3Nm/ePHPmzKeeeurCCy+053TeM9RpJ/SFIMzMzBw1atTKlSuJiHO+atWqo37Fap/xyCOPvPDCCytXrszJyUnNnDx58ooVK+zHK1eu7Nt745lnnrn88svPP/98+2Wec845+fn56enpo0ePdkmVKCgoGDFixM6dO+3JHTt22I0/kydPXrlypT2IYOXKlaeeemof/gZqURTtTiAisoeGiqLo8/nGjx/f+bMwefJkx4rYjSZPnrx27dpkMklEGzZskCTplFNOoYOODH17b2zfvn3GjBmPPPLI5Zdfnpp57rnnfvbZZ01NTURUUVGxe/fujt/q6cbRPSfQkiVLcnJyHnzwwWuvvXbo0KGpkbJ92/Lly4nokksuuXEfe5zY3r17s7Ozb7vttnvvvTctLe3jjz92uqTdIRaLUadRo6+++mp2dvaDDz543XXXDRkyJBaLOVq6E+vll18uLi5+9NFHb7/99uzs7F27dnHOE4nEsGHDrr766oceeig3N/fll192upgn0Pr16wOBwB133PHkk0+eeeaZF154oT1q9I033giHw7/97W/nz58/cOBAe4hgX/L222/feOONJ5988siRI2+88cY33njDnj9lypRp06Y98sgjgwcP/u1vf2vP/PDDD9PS0u67775bbrklLy/P7krvA372s5/deOONRHTllVfeeOON9oe9uLh4yJAhqWPj66+/bi983XXXTZgw4bHHHhs9evStt95qz+w7vz7xwQcfvPPOO+FweP78+Z1vLe/DduzYsWbNms5z5s2bZ48jraioeOGFFzRNmzNnzsknn+xQAbuVYRjPPfdcag8Q0Ycffrh8+fLMzMwFCxb0+Srx0Ucf2S/26quvTjV5tbS0/OUvf2lqapo2bVpq4ExftWvXrtdee629vX3EiBFz585N3S2+fv36ZcuWZWRkzJ8/v/OtWwsNAwAAAbdJREFU5X3Dpk2bPvnkk9TkmDFjxowZQ0SJROIvf/lLZWXlWWeddfHFF6cW+Pzzz1977TWfz3f99denRpP1dn/9618TiURq8rvf/a7H4/nzn//ceWzE6NGjx40bR0SGYSxevHjr1q2jRo266qqr7C7DvhOEAAAA30Bf6CMEAAD4xhCEAADgaghCAABwNQQhAAC4GoIQAABcDUEIAACuhiAEAABXQxAC9Cn19fVPP/20/ZMsANAVCEKAPmX37t2LFi366quvnC4IQK+BIAQAAFdDEAL0HStXrrR/cWbWrFnhcDgcDts/wA0AR4DvGgXoOxobG1966aVbb7314YcfPu2004jo9NNP7/NfOA7wLUlOFwAAjpvs7Gz7K/bHjBnTt39tDuA4QtMoAAC4GoIQAABcDUEIAACuhiAE6FOCwSARdf7BbgA4MgyWAehTSktLA4HAM888EwwG/X7/kCFD0tLSnC4UQI+GK0KAPiUYDD777LNbtmw5//zzx44d+/HHHztdIoCeDvcRAgCAq+GKEAAAXA1BCAAAroYgBAAAV0MQAgCAqyEIAQDA1RCEAADgaghCAABwtf8P6rswD5750MkAAAAASUVORK5CYII=",
- "image/svg+xml": [
- "\n",
- "\n"
- ],
- "text/html": [
- "\n",
- "\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# solve the ODEs\n",
- "# The model results are compared with the same model built by Anylogic, and the resules are the same!\n",
- "prob_measles = ODEProblem(vectorfield(seir),u0_measles,(0.0,120.0),p_measles);\n",
- "sol_measles = solve(prob_measles,Tsit5(),abstol=1e-8);\n",
- "plot(sol_measles)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 2. Chickenpox model \n",
- "## Time unit: Month"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295354.0\n",
- " :E => 0.0\n",
- " :I => 1000.0\n",
- " :R => 567191.0"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define parameter values and initial values of stocks\n",
- "# define constant parameters\n",
- "p_chickenpox = LVector(\n",
- " β=18.0, μ=0.03/12.0, δ=0.03/12.0, tlatent=14.0/30.0, trecovery=5.0/30.0\n",
- ")\n",
- "# define initial values for stocks\n",
- "u0_chickenpox = LVector(\n",
- " S=295354.0, E=0.0, I=1000.0, R=567191.0\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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ulwuc+sBALACBGEVMnz4cLNLAACwHNwjBAAAS0MQAgCApSEIq5AzZ85cunTJ7CoAAKyletwj3Llz59dff82nhwwZkpGRYWY1lWbkyJG9e/fGd40CANxK1eOKcPPmzcePH69Xr169evUwlhIAAG6i6nFFSEQtW7bs27evw+EwuxAAAAgr1SMIRVGcNWvWrFmzIiIi/v3vf1fql3CecZ87UXS68rYfEGFztU69+xY8EQAAXEf1CMLnnnvuxRdfJKK33377tdde++c//1l5z/XjpeNbz96KL91OcMUjCAEATBdqEJ47dy43Nzcw27JlS1G88v6iYRhbtmwpKCjo0KFDSkpKiFsuLi4+duxYSkpKampq8Ka2bt2an5/fvn371NRUSZL48o4dO65evTrELf8692d0uj+jU6U+BQAAVB2hBuE777zz2WefBfokt23b5nQ6g1dgjPXv3//06dONGzceO3bssmXLOnToUOFmH3300UWLFkmS9Morr7z66quBTQ0YMOD48ePNmjUbO3bs4sWL3W53/fr1GWNTpkzJysq6kRcIAABwPTfQNTpy5Mg33njjlx7dsGHDgQMHDh06FBkZOWPGjIkTJ/IPPJSWli5btuzRRx8NrDlv3ryBAwfywZ+TJk2aNWvW7373u+BNbdq0ae/evYcPH46Kinr//fcnTpw4YsSIuXPnCoLQr1+/kSNH3uiLBAAA+CU3EIR5eXmbNm3KyMioW7fu1Y8uW7asd+/ekZGRRDRkyJDnnnuuqKgoLi6utLT0zTffPHfu3B/+8Aciev311xctWtSzZ08ehHfeeec1N/Xggw9GRUXxTY0fP37p0qWh5N/333//4IMPBmZr16596NCh6/9J4KceqoJRo0bdcccd11+HMebxeEpKSn5phdLSUkEQbnZp1YnX65VlWZarx/3vSoJmoKqqruuappldiJnQDAzDsNlsNpvt+quFerAQBGHnzp0//vjjd99916VLl/nz51+x6ezs7NatW/PpmjVr2my27OzsuLi4GjVqbNy4sUuXLkTk9Xq/+OKLr776KjEx8TrPlZ2d3aJFCz6dnJzsdDqzs7Ov/ydc48aNP/roo169eoX4ooioSn0eY+jQoRWuIwiCy+XiZwnXxBi7zqNWIJczuxAzoRnwILziDo7VoBkYhqHreoWrhXqweOONN6ZOnUpEhYWFbdq0+cc//jFu3LjgFVRVDQxpEQRBFEVFUfhszZo1N27c2LRpU5vNduDAgeTk5Os/V/CmiEiSpMCmAAAAbq5Qv1kmcOUUHx/fr1+/PXv2XLFCampqfn4+n3a73V6vN/jTfjNnzkxPT4+Pj//Xv/5V4XMFb6q0tLS0tLRSPzgIAABW9mu6jw4ePJiZmcmny8rKXC6XIAj33nvvjBkzGGOCIHz11VcNGjSoUaMGX+ett95avHjxhg0bDMPo1q2bqqoTJ068zvbvvffeqVOnBjZVv3794E9WhLGjR4+63W4iio+Pv+222yzeuQcAcGuEeqjt06dPmzZt4uLivvrqq3379s2aNYuIFEWJjIzcs2dPZmbm4MGDp0yZMmrUqFatWr355ptvvvkmv0l78uTJJUuWbNiwISkpiYg2bNjQp0+fxx9/vFatWkS0bNmy//znPwcPHszNzS0pKRkwYEDr1q0ffvjh119/fcSIEW3atPnzn/88efJki9zvfeqpp86cOXPbbbedOnVK07TFixe3bNnS7KIAAMJcqF2jo0aN8ng8P/74Y9euXY8cOZKenk5Esiy/8847tWvXJiKn07l9+/Y77rjjyJEjs2bNevzxx/kf1q1bd/v27TwFiahmzZo7d+7kKUhEERER8fHxI0aMePDBB+Pj43kHrMPh+Oabbxo0aHDkyJGZM2da6vMSTz755Pr1648ePdqpU6fXXnvN7HIAAMJfqFeE/fv379+//xULRVF89tlnA7PJycmvvPLK1X97xfVc8OwDDzzwwAMPXP0nSUlJf/zjH0OsLSy1aNFi7ty5ZlcBABD+cBfqSqXnvcWny27BE9mi5MSmMVcsPHfu3N69e/Py8j788MPHHnvsFpQBAGBxCMIrefOVknPeW/BEslO8OggXLFjw9ddfnzp1qnHjxte8vAYAgJsLQXilxGYxic2uzKdb5vnnn58wYUJZWVmnTp1mzJjxwgsvmFUJAIBFVI9fqLeaiIiIGTNmTJ48uaCgwOxaAADCHIKwimrfvn27du2mT59udiEAAGEOQViFjB49umPHjoHZ6dOn84+pAABA5cE9wipkyJAhwbONGzdu3LixWcUAAFgErggBAMDSEIQAAGBpCEIAALA0BCEAAFgaghAAACwNQQgAAJaGj0/Q4cOHZ86caXYVoTp37pzZJQAAhBWrB2HHjh2//fbbvXv3ml1IqLp27dqkSROzqwAACB9WD8LGjRv/4x//MLsKAAAwDe4RAgCApSEIAQDA0hCEAABgaQhCAACwNAQhAABYGoIQAAAsDUEIAACWhiAEAABLQxACAIClIQgBAMDSEIQAAGBpCEIAALA0BCEAAFgaghAAACwNQQgAAJaGIAQAAEtDEAIAgKUhCAEAwNIQhAAAYGkIQgAAsDQEIQAAWBqCEAAALA1BCAAAloYgBAAAS5PNLiAkmzdvXr16NZ8ePXr0HXfcYW49AAAQNqpHEO7cudPr9fbu3ZuIEhISzC4HAADCR/UIQiKqVatWo0aN0tLSzC4EAADCSvW4RxgREbFhw4aRI0c2bdr0+PHjZpcDAADho3oE4bhx49asWbNmzZpnn3120qRJZpcDAADh44aDcM+ePTt37rzmQz6fb+HChe+///6RI0dC3+CJEyc2bNhw8uTJ4IWKovBNHT58OHh5o0aNcnNzb7RmAACAX3Jj9wj37t3bqVOnO++8c9++fVc8pOt6t27dbDZbixYt/vSnP3366ac9evSocIO9evXasWMHET3//POvvvoqX2gYxgMPPEBEd99996RJk+bMmVNQUFCnTh3DMP7f//t/Q4cOvaGaAQAAruMGglDTtKeeemrcuHHr1q27+tFVq1ZdvHjx+++/t9lsTZo0+dOf/sSDsKCgYM6cOc899xxfjTE2ffr0UaNGxcXFEdHs2bNr1KgxaNCg4E2tXr06Ozv70KFDdru9efPmr7322quvvrpw4UJRFF966aW+ffv+UoWGYZSUlBQWFvJZm80WFRUV+gsEAAALEhhjIa46adIkxliDBg2mTp169RXhk08+abfbZ8yYQUT5+fnJycn5+fmJiYlutzsrK6tdu3bTp09njD377LPffvvt6tWro6OjA387aNCg5s2bB64Ix40bR0Tvv/8+ERUWFiYkJOTm5taoUaPCCjMyMvLz8202G5+tVavW9u3bQ3x1YaOkpMTi8e/1emVZluVqMyK6MqAZqKqq67rT6TS7EDOhGRiGYbPZIiIirr9aqAeLgwcPLlq0aPfu3YsXL77mCufPn2/Xrh2fTkpKstvt58+fT0xMjImJWbNmTVZW1osvvuj1eg8cOLBmzZrr/9ucP38+MzOTT8fHx7tcrvPnz4cShA0bNhw/fnyvXr1CfFHhKvgkw4JsNhuCkCzfDBCEnMWbgWEYuq5XuFpIBwtN00aPHv3hhx9ep1UxxgRBCMwKwk/XmrGxsWvWrKlfv77dbj9y5EiFZyhXbIovCaVOAACAGxXSqNHt27cfPXr03XffHTx48Lvvvnvq1KnBgwf7fL7gdVJTUwPjOQsLC30+X2pqKp9ljL366qsNGzasXbv25MmTK3y64E253W6PxxPYFAAAwM0VUhDedddd//jHPwYNGjRo0KA2bdrExcUNGjRIkiQiOnXqlKIoRHT//fevXbuWX4R++eWXLVq0SE5OJiJ+X3D//v2rVq1at27dN9988/zzz1//6e6///5169YFNtW0adOUlJTf+DoBAACuKaSu0eCBnaqqbtmyhc8qilK3bt09e/ZkZmb279//L3/5S//+/TMzMz/44IOZM2fy9U+fPn3y5MnAfcE1a9Y8+uij586dq1WrFhHNmjVr7dq1O3bsOHLkyHfffTd27Nhu3br17dv3z3/+c79+/Vq1avXBBx/8/e9/r5SXDgAA8Cu+a7Rjx478Uo+IZFmeP39+vXr1iMhms23dunX+/Pl5eXlr1qwJjHbJyMhYsWJF4M9jY2NXrVoVmL377rtjYmICKVu3bl2+2S1btnz22Wd5eXlffvnlPffc82tfHQAAQAVu4OMTVV/Pnj0xarS4uNji48Tw8QlCM8CoUSJCMygfNRr4TN0vqR7fNQoAAFBJEIQAAGBpCEIAALA0BCEAAFgaghAAACwNQQgAAJaGIAQAAEtDEAIAgKUhCAEAwNIQhAAAYGkIQgAAsDQEIQAAWBqCEAAALA1BCAAAloYgBAAAS0MQAgCApSEIAQDA0hCEAABgaQhCAACwNAQhAABYGoIQAAAsDUEIAACWhiAEAABLQxACAIClIQgBAMDSEIQAAGBpCEIAALA0BCEAAFgaghAAACwNQQgAAJaGIAQAAEtDEAIAgKUhCAEAwNIQhAAAYGkIQgAAsDQEIQAAWBqCEAAALA1BCAAAloYgBAAAS0MQAgCApclmFxCStWvXLl68mE9PmDChYcOG5tYDAABho3oE4YEDBxITEwcOHEhE6enpZpcDAADho3oEIRHZbDZJkho0aOByucyuBQAAwkf1uEeYlJR04sSJ6dOnN2vW7LvvvjO7HAAACB/V44pw5MiRI0eOJKL58+e/+eabn3/+udkVAQBAmAg1CA8dOrRp06acnJyaNWsOGDDgmjfq3G733Llzc3Nze/To0b59+1A26/F4Dhw4cOjQoZYtW7Zs2fLqTWVlZXXo0CGwPD093e12h1gzAABAhULtGv30008PHz4cHR29Z8+ehg0bfv/991esoChKhw4dNm7c6HK5HnrooQULFoSy2QcffHD48OETJ05ctWpVYKGqqvfee+9XX33lcrkGDhw4f/789957b9GiRQsXLnzmmWeGDRsWYs0AAAAVCvWK8M033wxMFxUVLVy4sHHjxsEr8I83LFy4UBTFjIyMN954Y/DgwUSUk5Pz7rvvvvnmm6IoEpGu66+88soLL7xQo0YNIlq7dq3NZhs0aFDwppYuXaqq6hdffCGK4u233z558uQPPvhg69atoih++OGH7dq1+6UiFUU5duzY3r17+Wx8fHy9evVCfIEAAGBNN3yPsLi4+MSJE4888sgVyzdt2tS9e3eedj179nz00Ufz8vKSk5MTExP/+9//PvbYY/PmzSOi4cOHFxQUxMbG8r+y2WxXP8UVmxoyZMhdd93VuXPnCms7ffr0jBkz/vWvf/HZuLi45cuX3+gLrO5KSkrMLsFkXq9XlmVZrh73vysJmoGqqrquq6pqdiFmQjMwDMNms10zaILdwMFi9uzZU6ZMycnJGTt27NChQ694NCcnJ3AzLy4uzul0nj9/Pjk52W63L1y4sF+/fqNGjfL5fCUlJUuXLrXb7dd5opycnFatWvHp6OjoiIiI8+fPp6SkVFhh/fr1x48f36tXr9BfVFiKjo42uwQz2Ww2BCFZvhnwIHQ6nWYXYjKLNwPDMHRdr3C1GzhYPPTQQ/fee++hQ4eefvrptm3bDhkyJPhRURQNwwh+ekmS+LTT6Vy0aFHdunXtdvuxY8eun4LX39T1XajVYVNZSswF5pIp2kaySDE2wSZSbAVPCAAA1nUDQRgbGxsbG3v77bcfOnRozpw5VwRhWlpaTk4On87Ly1MUJS0tjc/quv7EE0+0a9dOVdUnn3zyk08+4d2evyR4U5cuXfJ6vYFNXZ9NKd3hq/mf3bpXJ7dKukGXFaYxuqyQQ6IImWJsgkumSJni7BRlE6JsFG2jWDvF2YUYG8XYKdZO8XYhzkFxdop3CJFWv6iAasark0cjj84KSgVSmWKQRyOvTopBpRojoiIfMSLFoFKViH5aTkSXFTL8k2Qwuqz8mgLsEgXvNfx8lIicErkkIbDEJlKUjUSiWLsgChRrJ0mgGDs5RIqQhcBfAdwaoR7pFUUJXMn997//5cnEGNu1a1fTpk0jIiJ69eo1YcKEqVOnOhyOJUuWtGvXLiEhgYh0XR8+fPjly5eXLFkiCMLAgQP5/cLrXOT16tXr6aef9nq9TqdzyZIlrVu3Tk5ODqXIxIv7x8cfuGbXKD9AXFaYR6cyjQp9VKKxEpWKVXIrVKiws6V0WaEiHytSiP+n0Mc0g+IdlOAQEhyU6BQSHJTooASHkOSkJCclOYUkJyU6hCQnSUKIbyTAL7qsUGl5s+TTZRpdVqhEpTKNSjTmVsijU6lKbpV5df9yn05FClMNKlb9J3wuSbAL9ii77pDIKZFLJptIUbJARHEOEsifQ0RkFyneLggCyQLVifI3Y4dEjFHkz++q2ERijHRGApFxdenlFJ1KtZ9m+fkoEXl1KlQYEZ0pJc3wJ7FBdFkxdIPcKmkGFavk1cmjM7dCjCjWThGy4JIo1k6RMkXIFG0T4hwUKVOUjaJtQpydYmwUYxei+VmsjWLtAn+BADck1CBs3LhxZmZmfHz8gQMHzp8///XXXxORqqpt27bds2dPZmZmz549p0+f3qVLl+bNmy9YsCDwmffz5887nc7AfcGFCxc+9dRTFy9eTE1NJaL33ntv+fLl33333b59+zZv3vzcc8/16tUrKyurXr16Xbp0adGixYIFC+bPn//bX6dTIqdE8Y7gfaTi/cWnU6FCBV52yUeXfPx/qcDLThZTgY8KvEaely75WJ6XEhyU7BQSnZTkEGq4qIaLkp1CkpNqOAU+nezESa6FFPrIrbLLCrkVcqvkVphb9S/k517Fqn+FYpWKVSpR2WWFYmwUaaMomxBjo2gbRdkoQhbi7BQpU6SN4u3CbZHkkinKRjE20SFRtI0iZHJIFGsX7CJFB0VXcXFxtb45pDNyK1SqMY9GbpVKVCrVqFRjhT4q1ahEpXwvO+6mywoVq4ZbJbdClxVyq6zQRzE2inMIMTaKsYkJTi3OLsTZKc5BcXYh3kFx9p8m4h1CHO6bAJHAGKt4LaJz58795z//cbvdtWrV6tKlC081xtimTZtatWrFdzlVVdesWZOfn9+5c+e6deuGstkjR46cO3cuMNuwYUP+UX1N09asWZOXl9epU6fQPwLRs2dPswbL5Hspz8sKvJTvYxfK/LN5Xsr1sDwv5XtZnpfi7OXp6BJquijZSUlOIdlJKS4hcH35268sq/sR8Le7uaNG+RG5UGGX+aFWYZdVPkGXFX//gVthlxVy+5czt0pxdoq1CzH+SxaKsQmxdoqzU7TNvzDa5l8h2p95N/mIbOVmUKTQZYUVlGmFXqOMbEUKFfl4Nw8r5BM+VqhQoY8KfaxYpfjyjIx3/Cwj4+0UZ6c4PuEgHqiOkMyFl4AAAB/6SURBVIYrVBXh2gzKNCrVqFhlboXKNCrTqFBhfMKtkFv1Txf6qFQ1uqXS880rGDUaahBWCyYGYSh4OuZ76aKH5XqIB+RFHpYeKvCxfC/FO/yJmOQQkpz+sEx0UqK/e9bfT3udvAzXph+66wThZYWKg67JChVWfnFGlxXGryqKFBa4wuB96fzOMb+FzCMt1k4xNoq1C/EO/8IYO8XZf8o806EZhDhq1GBUWB6NRT665GNFChX6glIzaKLIR5JIsTaKcwix5Z2xwW2AjzngbSDKRlE2ipKFeMetecXXUAWbAT+z9OjMq9NlhXw6lajkVplP510j5NXJrbJS1X/pX6wyj04lKl1WqEwjj84KfRQh+8d88E6RSBvF2YUImSJlirFTtM0/HWcnl0R3xej142/exyfgN+KXfUT0S72yjKjAS/lelu+lfB+PTMouY99dogKfUeClAh9d8rECL8XYKdHhP4cNjO7xn7EaUo0Yg++WfJ+MspGzWp3GXkeJSj6DLivMo5FHpyIflWnMq1NR0I20gjLRY1CZrherrMhHxSqVaD/1PUbzW0o2iikfJBVtpxgbpUYId8VSnINi7WJM+T0nfv8JwpgoUKKDEn+6aVJBnwy/a1uksKLyHoJAr8BFd6DT2yjy8VZHJSorUvyd21GyEGsnV/lBnHdu85u40TZBFijWTmL5//IlLtm/8/KFRBQlCzaRiEgQ6Cb3Iqikld/+LdGYahAR+XQq0342UawyjflvBjOiIh8R0WWFGURuhXTmH3VVpDCDUZHiv/vLky9w95cPnoq1k13inSKCQ6IYG0XZyCFSvF2oFcnvClO0TXRKxPfZSBu5pBu7DWwYRgifnkAQViVCCGHJFfroUnn3Dj9j5RPnSim/VPScN8pvTdFlhZVopBn+EyWX5D9RtYkUZxdsIkXb/AP2iCjeLhD5bzsFTxD5d8tfoVRjSvnexYcsEZFqUIlKRP7dgzEqUojKd0X+J3z6skI6oyKF8R0vUiaHRHF2gR8+4h3kkgSXTHHl4yni7UK6g0U7WKxDjLaJ/MS8MvoewZr4tUhqRKjByQXO0op85NWpTPtpuBMf1svT5WQxMaIihRgjt2rozP8oBY3p5WsS/bTXBPCdIhhjDkG49lcKBLZMRDaRBCKH5B/HIBJFlMdtYBgwH4dF5YcCPt5KIIpzEBHF2ASpfLxVjI0kkWLtoiRQnJ1ksTzvJSHGXkXHFSIIq6V4R/DAn5+1rOLisujoK7uD+EmZW2Uef986aQYVKkwrz5tilRj5x/Vll5FPJyL/iET/ZlVDu8FOdIdIRGQT/XsUHzTPT28Doxadkn/U4u0xROVj6yNl0S760zrGRnJ5ZkeFdnHm9TJZFmSMTYIqg5991iCBfuqnvPmBEDjRDCgpKYmKigpeYhNJFEhnP+2MQAhCi5DFK7KTq5LnZgDwq/Cx8cFkhUWbd4eyGsFZMwAAWBqCEAAALA1BCAAAloYgBAAAS0MQAgCApSEIAQDA0hCEAABgaQhCAACwNAQhAABYGoIQAAAsDUEIAACWhiAEAABLQxACAIClIQgBAMDSEIQAAGBpCEIAALA0BCEAAFgaghAAACwNQQgAAJaGIAQAAEtDEAIAgKUhCAEAwNIQhAAAYGkIQgAAsDQEIQAAWBqCEAAALA1BCAAAloYgBAAAS0MQAgCApSEIAQDA0hCEAABgaQhCAACwNAQhAABYGoIQAAAsDUEIAACWhiAEAABLqx5BuGDBggfKffvtt2aXAwAA4UM2u4CQnDp1qmfPniNGjCCiqKgos8sBAIDwUT2uCIno3LlzO3fu1HXdZrOZXQsAAISP6hGEderUkSRp48aNbdq02b59u9nlAABA+KgeXaNDhgwZMmQIEXXo0GHq1KlLliwxuyIAAAgToQbhgQMHVq1adebMmdq1a48cOTI1NfXqdXJycv7+978XFBR07969f//+oWw2Jydn9+7dP/zwQ4cOHdq3bx9YfuHChQ8++CA/P7979+4PPfRQYHlERISqqiHWDAAAUKFQg/B3v/vd/fffn5mZuW3btubNm+/fvz8tLS14BY/H0759+6ysrNatWz/77LP5+fmjR4+ucLNjxoxxu92nT5/2+XyBIPR6vR06dOjWrVvbtm2fe+65ixcvXrhwISkpiTH23nvvTZ069UZfJAAAwC8JNQj37t0ryzIRPfHEE5mZmStWrBg7dmzwCp9//nlSUtJHH31ERImJiS+99NKoUaMEQTh79uykSZM+/PBDu91ORF6v9/e///2f//xnnqMrVqwgokGDBgVvauHChbGxsTNnziSiGjVqTJgwYeHChbt37xYEYcWKFXfeeecvFVlWVrZ//37+REQUHR3dpk2bkN8KAACwolCDkKcgETHG3G53fHz8FSts27ata9eufLpr165Hjx7Nzc1NSUlJS0tTFKVfv35LliwRBOHhhx9OTk5OSUm5znNdsanjx4/XqFFjzJgxFRZ54cKFzz//fMOGDXw2Li5uzpw5Ib7AsFFaWioIgtlVmMnr9cqyHGix1oRmoKqqruuappldiJnQDAzDsNlsFX7W4IYPFtOmTXM4HFffArxw4UKDBg34dHR0tMvlysnJSUlJkSRp9uzZw4YNGzRokKIoqamps2bNEsXrjVa9cOFC3bp1+XRERERUVFROTk56enqFtdWrV2/8+PG9evW60RcVThhjFv+opVzO7ELMhGbAg9DpdJpdiJnQDAzD0HW9wtVu7GDx2WefvfPOO19//XWg+zHA4XAoisKnGWOqqgaaoCRJH3/8cd26de12+9KlS6+fgldsiogURbF4awYAgMpzA58jXLRo0Ysvvrh27dr69etf/Wh6enp2djafzsnJ0XU9MJrG6/UOHDiwd+/enTp1Gjx4cHDIXVPwpnJzc1VVvWJgDgAAwM0SahCuXr366aefXrFiRZMmTQILGWMrVqy4fPkyEfXv33/FihXFxcVENH/+/C5dusTGxhKRz+d7+OGH09LSZs2aNXfu3Li4uH79+nm93us8V//+/VeuXOl2u/mm7rvvvoSEhF/9CgEAAK4j1K7RRx55JCIiIjBSdMSIEU8//bSqqn379t2zZ09mZmaXLl3atm3bpk2bhg0bbt26dfny5XzNS5cuNW/efMqUKbxHdPbs2RMnTiwuLua9nX/9618XLlx44sSJ7du3L1269NVXX+3fv/99993XsWPHNm3aNGrUaOvWrUuXLq2EFw4AAEBEJDDGQllv3759hmEEZlNSUtLT0xljhw4duv3223mqMcZ2796dm5vbvn37xMTEUDZ75syZvLy8wGydOnWSkpL4pvbs2ZOTk9OhQ4cQN0VEPXv2xGCZ4uLi6Ohos6swE0aNEpoBBssQEZpB+WCZmzZqtGXLllcv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",
- "image/svg+xml": [
- "\n",
- "\n"
- ],
- "text/html": [
- "\n",
- "\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# solve the ODEs\n",
- "# The model results are compared with the same model built by Anylogic, and the resules are the same!\n",
- "prob_chickenpox = ODEProblem(vectorfield(seir),u0_chickenpox,(0.0,120.0),p_chickenpox);\n",
- "sol_chickenpox = solve(prob_chickenpox,Tsit5(),abstol=1e-8);\n",
- "plot(sol_chickenpox)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "retcode: Success\n",
- "Interpolation: specialized 4th order \"free\" interpolation\n",
- "t: 298-element Vector{Float64}:\n",
- " 0.0\n",
- " 2.8133919327141074e-9\n",
- " 3.0947311259855185e-8\n",
- " 3.122865045312659e-7\n",
- " 3.125678437245373e-6\n",
- " 3.1259597764386445e-5\n",
- " 0.00031259879103579717\n",
- " 0.003125990723749904\n",
- " 0.015721220942788605\n",
- " 0.04026863845950178\n",
- " ⋮\n",
- " 116.95057564863274\n",
- " 117.38101312924142\n",
- " 117.81143080997383\n",
- " 118.24182866323792\n",
- " 118.67220671844858\n",
- " 119.10256500501667\n",
- " 119.53290360934692\n",
- " 119.96322253233947\n",
- " 120.0\n",
- "u: 298-element Vector{LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}}:\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295354.0\n",
- " :E => 0.0\n",
- " :I => 1000.0\n",
- " :R => 567191.0\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295353.99998667586\n",
- " :E => 1.7320507818745795e-5\n",
- " :I => 999.9999831126152\n",
- " :R => 567191.000012891\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295353.9998534344\n",
- " :E => 0.00019052556412603002\n",
- " :I => 999.9998142387877\n",
- " :R => 567191.0001418012\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295353.9985210214\n",
- " :E => 0.001922573939183367\n",
- " :I => 999.9981255026566\n",
- " :R => 567191.0014309019\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295353.9851970526\n",
- " :E => 0.01924283889007708\n",
- " :I => 999.9812383556265\n",
- " :R => 567191.0143217528\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295353.8519734983\n",
- " :E => 0.19242361030166427\n",
- " :I => 999.8123883115076\n",
- " :R => 567191.1432145798\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295352.5213499726\n",
- " :E => 1.9220453840944718\n",
- " :I => 998.126028662952\n",
- " :R => 567192.4305759802\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295339.3749437633\n",
- " :E => 19.00152652208452\n",
- " :I => 981.4746974066799\n",
- " :R => 567205.1488323078\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295283.93378345115\n",
- " :E => 90.83469714947545\n",
- " :I => 911.4633089972851\n",
- " :R => 567258.768210402\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 295190.2782579937\n",
- " :E => 211.30502569745482\n",
- " :I => 794.147911380377\n",
- " :R => 567349.2688049284\n",
- " ⋮\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 287359.58047511696\n",
- " :E => 501.7078205713716\n",
- " :I => 179.38966267303041\n",
- " :R => 575504.3220416381\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 287517.6291542\n",
- " :E => 500.7023967219029\n",
- " :I => 179.00426283902502\n",
- " :R => 575347.6641862384\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 287676.1525249288\n",
- " :E => 499.8859736702451\n",
- " :I => 178.68645323720042\n",
- " :R => 575190.2750481631\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 287834.9763419593\n",
- " :E => 499.25801156993975\n",
- " :I => 178.43604045982232\n",
- " :R => 575032.3296060103\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 287993.92708219093\n",
- " :E => 498.817976441694\n",
- " :I => 178.2528329333104\n",
- " :R => 574874.0021084335\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 288152.8319148042\n",
- " :E => 498.5653420410812\n",
- " :I => 178.13664159720813\n",
- " :R => 574715.466101557\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 288311.51871292066\n",
- " :E => 498.4995906622028\n",
- " :I => 178.08728039535794\n",
- " :R => 574556.8944160213\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 288469.81599174725\n",
- " :E => 498.6202134875822\n",
- " :I => 178.10456626442502\n",
- " :R => 574398.4592285003\n",
- " 4-element LArray{Float64, 1, Vector{Float64}, (:S, :E, :I, :R)}:\n",
- " :S => 288483.304863531\n",
- " :E => 498.662023366161\n",
- " :I => 178.08630510848926\n",
- " :R => 574384.9468079938"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "sol_chickenpox"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n"
- ],
- "text/plain": [
- "HTML{String}(\"\\n\")"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# to have the figures plotted fix to the wider of the cells\n",
- "HTML(\"\"\"\n",
- "\n",
- "\"\"\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.9.2",
- "language": "julia",
- "name": "julia-1.9"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.9.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/composed_open_population_SIRV_model-checkpoint.ipynb b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/composed_open_population_SIRV_model-checkpoint.ipynb
deleted file mode 100644
index 7ed4aa67..00000000
--- a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/composed_open_population_SIRV_model-checkpoint.ipynb
+++ /dev/null
@@ -1,5293 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "using GraphViz\n",
- "\n",
- "using StockFlow\n",
- "using StockFlow.Syntax\n",
- "\n",
- "using Catlab\n",
- "using Catlab.CategoricalAlgebra\n",
- "using LabelledArrays\n",
- "using OrdinaryDiffEq\n",
- "using Plots\n",
- "\n",
- "using Catlab.Graphics\n",
- "using Catlab.Programs\n",
- "using Catlab.Theories\n",
- "using Catlab.WiringDiagrams"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Model A: Open population SIR model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:1, LS:3, F:6, I:3, O:5, V:8, LV:6, LSV:2, P:4, LVV:2, LPV:6, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " I | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " R | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_birth | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " f_inf | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " f_rec | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 6 | \n",
- " f_deathS | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 7 | \n",
- " f_deathI | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 8 | \n",
- " f_deathR | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_inf₁ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_inf₂ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_inf₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " ##v_f_birth#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " ##v_f_rec#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " ##v_f_deathS#294 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " ##v_f_deathI#295 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " ##v_f_deathR#296 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rbirth | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " cbeta | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rrecovery | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rdeath | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:1, LS:3, F:6, I:3, O:5, V:8, LV:6, LSV:2, P:4, LVV:2, LPV:6, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ I │\n",
- "│\u001b[1m 3 \u001b[0m│ R │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_birth │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ f_inf │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ f_rec │\n",
- "│\u001b[1m 4 \u001b[0m│ 6 │ f_deathS │\n",
- "│\u001b[1m 5 \u001b[0m│ 7 │ f_deathI │\n",
- "│\u001b[1m 6 \u001b[0m│ 8 │ f_deathR │\n",
- "└───┴────┴──────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_inf₁ │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_inf₂ │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_inf₃ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ ##v_f_birth#292 │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ ##v_f_rec#293 │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ ##v_f_deathS#294 │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ ##v_f_deathI#295 │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ ##v_f_deathR#296 │ * │\n",
- "└───┴──────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 8 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 4 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rbirth │\n",
- "│\u001b[1m 2 \u001b[0m│ cbeta │\n",
- "│\u001b[1m 3 \u001b[0m│ rrecovery │\n",
- "│\u001b[1m 4 \u001b[0m│ rdeath │\n",
- "└───┴───────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 8 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "sir = @stock_and_flow begin\n",
- "\n",
- " :stocks\n",
- " S\n",
- " I \n",
- " R \n",
- "\n",
- " :parameters\n",
- " rbirth\n",
- " cbeta\n",
- " rrecovery\n",
- " rdeath\n",
- "\n",
- " :dynamic_variables\n",
- " v_inf₁ = I / N\n",
- " v_inf₂ = v_inf₁ * cbeta\n",
- " v_inf₃ = v_inf₂ * S\n",
- "\n",
- " :flows\n",
- " CLOUD => f_birth(rbirth * N) => S \n",
- " S => f_inf(v_inf₃) => I \n",
- " I => f_rec(rrecovery * I) => R\n",
- " S => f_deathS(S * rdeath) => CLOUD\n",
- " I => f_deathI(I * rdeath) => CLOUD\n",
- " R => f_deathR(R * rdeath) => CLOUD\n",
- " \n",
- "\n",
- " :sums\n",
- " N = [I, R, S]\n",
- "\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rbirth\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cbeta\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rrecovery\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rdeath\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_1u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_4d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_5d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(sir)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Model B: Open population SVI model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:1, LS:3, F:3, I:2, O:3, V:4, LV:3, LSV:0, P:4, LVV:1, LPV:4, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " V | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " I | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " f_vacc | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " f_deathV | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " f_infV | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_vacV | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_infV | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ##v_f_vacc#297 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " ##v_f_deathV#298 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rvaccine | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rdeath | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " lambda | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " evaccine_complement | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:1, LS:3, F:3, I:2, O:3, V:4, LV:3, LSV:0, P:4, LVV:1, LPV:4, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ V │\n",
- "│\u001b[1m 3 \u001b[0m│ I │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ f_vacc │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ f_deathV │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ f_infV │\n",
- "└───┴────┴──────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_vacV │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_infV │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ ##v_f_vacc#297 │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ ##v_f_deathV#298 │ * │\n",
- "└───┴──────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌───┬─────────────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼─────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rvaccine │\n",
- "│\u001b[1m 2 \u001b[0m│ rdeath │\n",
- "│\u001b[1m 3 \u001b[0m│ lambda │\n",
- "│\u001b[1m 4 \u001b[0m│ evaccine_complement │\n",
- "└───┴─────────────────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "svi = @stock_and_flow begin\n",
- " \n",
- " :stocks\n",
- " S\n",
- " V\n",
- " I\n",
- "\n",
- " :parameters\n",
- " rvaccine\n",
- " rdeath\n",
- " lambda\n",
- " evaccine_complement # 1.0 - evaccine\n",
- "\n",
- " :dynamic_variables\n",
- " v_vacV = evaccine_complement * V\n",
- " v_infV = v_vacV * lambda\n",
- "\n",
- " \n",
- " :flows\n",
- " S => f_vacc(S * rvaccine) => V\n",
- " V => f_deathV(V * rdeath) => CLOUD\n",
- " V => f_infV(v_infV) => I \n",
- "\n",
- " :sums\n",
- " N = [V, I, S]\n",
- "\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"V\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rvaccine\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rdeath\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"lambda\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"evaccine_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_2d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"evaccine_complement * V\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(evaccine_complement * V) * lambda\", :shape => \"plaintext\", :fontcolor => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(svi)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Composition "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Using UWD-algebra"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### 1. Compose two diagrams with stocks, sum dynamic variables, and links between them first"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", false, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box1\", :label => \"seir\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box2\", :label => \"svi\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer1\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer2\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"junction\", :fillcolor => \"black\", :height => \"0.075\", :id => \"junction1\", :label => \"\", :shape => \"circle\", :style => \"filled\", :width => \"0.075\", :xlabel => \"S\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"junction\", :fillcolor => \"black\", :height => \"0.075\", :id => \"junction2\", :label => \"\", :shape => \"circle\", :style => \"filled\", :width => \"0.075\", :xlabel => \"I\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"ellipse\", :margin => \"0.05,0.025\", :width => \"0.5\", :height => \"0.5\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :len => \"1\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define the UWD-algebra\n",
- "sirv_uwd = @relation (S,I) begin\n",
- " seir(S,I)\n",
- " svi(S,I)\n",
- "end;\n",
- "display_uwd(sirv_uwd)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define a foot of the structured multicospan\n",
- "footS=foot(:S, :N, :S=>:N)\n",
- "GraphF(footS;schema=\"C0\")\n",
- " "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define a foot of the structured multicospan\n",
- "footI=foot(:I, :N, :I=>:N)\n",
- "GraphF(footI;schema=\"C0\")\n",
- " "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:4, SV:1, LS:4, F:9, I:5, O:8, V:12, LV:9, LSV:2, P:8, LVV:3, LPV:10, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " I | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " R | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " V | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_birth | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " f_inf | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " f_rec | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 6 | \n",
- " f_deathS | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 7 | \n",
- " f_deathI | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 8 | \n",
- " f_deathR | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 11 | \n",
- " f_vacc | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 12 | \n",
- " f_deathV | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 10 | \n",
- " f_infV | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 7 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 9 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_inf₁ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_inf₂ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_inf₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " ##v_f_birth#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " ##v_f_rec#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " ##v_f_deathS#294 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " ##v_f_deathI#295 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " ##v_f_deathR#296 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_vacV | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " v_infV | \n",
- " * | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " ##v_f_vacc#297 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " ##v_f_deathV#298 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 4 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 1 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 4 | \n",
- " 12 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rbirth | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " cbeta | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rrecovery | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rdeath | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rvaccine | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " rdeath | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " lambda | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " evaccine_complement | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 9 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 7 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 5 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 6 | \n",
- " 12 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:4, SV:1, LS:4, F:9, I:5, O:8, V:12, LV:9, LSV:2, P:8, LVV:3, LPV:10, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ I │\n",
- "│\u001b[1m 3 \u001b[0m│ R │\n",
- "│\u001b[1m 4 \u001b[0m│ V │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_birth │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ f_inf │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ f_rec │\n",
- "│\u001b[1m 4 \u001b[0m│ 6 │ f_deathS │\n",
- "│\u001b[1m 5 \u001b[0m│ 7 │ f_deathI │\n",
- "│\u001b[1m 6 \u001b[0m│ 8 │ f_deathR │\n",
- "│\u001b[1m 7 \u001b[0m│ 11 │ f_vacc │\n",
- "│\u001b[1m 8 \u001b[0m│ 12 │ f_deathV │\n",
- "│\u001b[1m 9 \u001b[0m│ 10 │ f_infV │\n",
- "└───┴────┴──────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 7 │ 4 │\n",
- "│\u001b[1m 5 \u001b[0m│ 9 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 8 │ 4 │\n",
- "│\u001b[1m 8 \u001b[0m│ 9 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌────┬──────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼──────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_inf₁ │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_inf₂ │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_inf₃ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ ##v_f_birth#292 │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ ##v_f_rec#293 │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ ##v_f_deathS#294 │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ ##v_f_deathI#295 │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ ##v_f_deathR#296 │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_vacV │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ v_infV │ * │\n",
- "│\u001b[1m 11 \u001b[0m│ ##v_f_vacc#297 │ * │\n",
- "│\u001b[1m 12 \u001b[0m│ ##v_f_deathV#298 │ * │\n",
- "└────┴──────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 8 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 4 │ 9 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 1 │ 11 │ 1 │\n",
- "│\u001b[1m 9 \u001b[0m│ 4 │ 12 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 4 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬─────────────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼─────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rbirth │\n",
- "│\u001b[1m 2 \u001b[0m│ cbeta │\n",
- "│\u001b[1m 3 \u001b[0m│ rrecovery │\n",
- "│\u001b[1m 4 \u001b[0m│ rdeath │\n",
- "│\u001b[1m 5 \u001b[0m│ rvaccine │\n",
- "│\u001b[1m 6 \u001b[0m│ rdeath │\n",
- "│\u001b[1m 7 \u001b[0m│ lambda │\n",
- "│\u001b[1m 8 \u001b[0m│ evaccine_complement │\n",
- "└───┴─────────────────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 9 │ 10 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 8 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 8 │ 9 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 7 │ 10 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 5 │ 11 │ 2 │\n",
- "│\u001b[1m 10 \u001b[0m│ 6 │ 12 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# open sir and svi stock and flow diagram with the feet defined before\n",
- "open_sir=Open(sir, footS, footI)\n",
- "open_svi=Open(svi, footS, footI)\n",
- "# Compose those two models according the UWD-algebra\n",
- "open_sirv = oapply(sirv_uwd, [open_sir, open_svi])\n",
- "# the composed stock and flow diagram is the apex of the composed open stock and flow diagram\n",
- "sirv = apex(open_sirv)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"V\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rbirth\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cbeta\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rrecovery\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rdeath\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rvaccine\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rdeath\", :shape => \"circle\", :color => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p8\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(sirv)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "### 2. Graph Rewriting\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "#### NOTE: all the parts in the L, I and R (especially the attributes) should be the same as the SIRV diagram, or the natrual transformation will not be natural."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:3, LVV:2, LPV:3, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " V | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " I | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_infV | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_inf₁ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_inf₂ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_vacV | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_infV | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " lambda | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " cbeta | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " evaccine_complement | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:3, LVV:2, LPV:3, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ V │\n",
- "│\u001b[1m 2 \u001b[0m│ I │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_infV │\n",
- "└───┴────┴────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_inf₁ │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_inf₂ │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_vacV │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_infV │ * │\n",
- "└───┴────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬─────────────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼─────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ lambda │\n",
- "│\u001b[1m 2 \u001b[0m│ cbeta │\n",
- "│\u001b[1m 3 \u001b[0m│ evaccine_complement │\n",
- "└───┴─────────────────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 4 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 4 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "L = @stock_and_flow begin\n",
- " :stocks\n",
- " V\n",
- " I\n",
- "\n",
- " :parameters\n",
- " lambda\n",
- " cbeta\n",
- " evaccine_complement\n",
- "\n",
- " :dynamic_variables\n",
- " v_inf₁ = I / N\n",
- " v_inf₂ = v_inf₁ * cbeta\n",
- " \n",
- " v_vacV = evaccine_complement * V\n",
- "\n",
- "\n",
- " v_infV = v_vacV * lambda\n",
- "\n",
- "\n",
- " :flows\n",
- " V => f_infV(v_infV) => I\n",
- "\n",
- " :sums\n",
- " N = [V, I]\n",
- " end;\n",
- " \n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"V\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"lambda\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cbeta\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"evaccine_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I / N\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(I / N) * cbeta\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"evaccine_complement * V\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(evaccine_complement * V) * lambda\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(L)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:2, LVV:2, LPV:2, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " V | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " I | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_infV | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_inf₁ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_inf₂ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_vacV | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_infV | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " cbeta | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " evaccine_complement | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:2, LVV:2, LPV:2, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ V │\n",
- "│\u001b[1m 2 \u001b[0m│ I │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_infV │\n",
- "└───┴────┴────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_inf₁ │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_inf₂ │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_vacV │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_infV │ * │\n",
- "└───┴────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬─────────────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼─────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ cbeta │\n",
- "│\u001b[1m 2 \u001b[0m│ evaccine_complement │\n",
- "└───┴─────────────────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 4 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "I = @stock_and_flow begin\n",
- " :stocks\n",
- " V\n",
- " I\n",
- "\n",
- " :parameters\n",
- " cbeta\n",
- " evaccine_complement\n",
- "\n",
- " :dynamic_variables\n",
- " v_inf₁ = I / N\n",
- " v_inf₂ = v_inf₁ * cbeta\n",
- " v_vacV = evaccine_complement * V\n",
- " v_infV = *(v_vacV)\n",
- "\n",
- "\n",
- " :flows\n",
- " V => f_infV(v_infV) => I\n",
- "\n",
- " :sums\n",
- " N = [V, I]\n",
- " end;\n",
- " \n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"V\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cbeta\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"evaccine_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I / N\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(I / N) * cbeta\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"evaccine_complement * V\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(*)(evaccine_complement * V)\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_infV\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(I)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:2, LVV:3, LPV:2, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " V | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " I | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_infV | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_inf₁ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_inf₂ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_vacV | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_infV | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " cbeta | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " evaccine_complement | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:2, LVV:3, LPV:2, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ V │\n",
- "│\u001b[1m 2 \u001b[0m│ I │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_infV │\n",
- "└───┴────┴────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_inf₁ │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_inf₂ │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_vacV │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_infV │ * │\n",
- "└───┴────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬─────────────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼─────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ cbeta │\n",
- "│\u001b[1m 2 \u001b[0m│ evaccine_complement │\n",
- "└───┴─────────────────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "R = @stock_and_flow begin\n",
- " :stocks\n",
- " V\n",
- " I\n",
- "\n",
- " :parameters\n",
- " cbeta\n",
- " evaccine_complement\n",
- "\n",
- " :dynamic_variables\n",
- " v_inf₁ = I / N\n",
- " v_inf₂ = v_inf₁ * cbeta\n",
- "\n",
- " v_vacV = evaccine_complement * V\n",
- "\n",
- " v_infV = v_vacV * v_inf₂\n",
- "\n",
- " :flows\n",
- " V => f_infV(v_infV) => I\n",
- "\n",
- " :sums\n",
- " N = [V, I]\n",
- " end;\n",
- " \n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"V\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cbeta\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"evaccine_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I / N\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(I / N) * cbeta\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"evaccine_complement * V\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(evaccine_complement * V) * ((I / N) * cbeta)\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(R)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Rule{:DPO}(ACSetTransformation((S = FinFunction([1, 2], 2, 2), SV = FinFunction([1], 1, 1), LS = FinFunction([1, 2], 2, 2), F = FinFunction([1], 1, 1), I = FinFunction([1], 1, 1), O = FinFunction([1], 1, 1), V = FinFunction([1, 2, 3, 4], 4, 4), LV = FinFunction([1, 2], 2, 2), LSV = FinFunction([1], 1, 1), P = FinFunction([2, 3], 2, 3), LVV = FinFunction([1, 2], 2, 2), LPV = FinFunction([1, 2], 2, 3), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:2, LVV:2, LPV:2, Name:0, Op:0, Position:0}, StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:3, LVV:2, LPV:3, Name:0, Op:0, Position:0}), ACSetTransformation((S = FinFunction([1, 2], 2, 2), SV = FinFunction([1], 1, 1), LS = FinFunction([1, 2], 2, 2), F = FinFunction([1], 1, 1), I = FinFunction([1], 1, 1), O = FinFunction([1], 1, 1), V = FinFunction([1, 2, 3, 4], 4, 4), LV = FinFunction([1, 2], 2, 2), LSV = FinFunction([1], 1, 1), P = FinFunction([1, 2], 2, 2), LVV = FinFunction([1, 2], 2, 3), LPV = FinFunction([1, 2], 2, 2), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:2, LVV:2, LPV:2, Name:0, Op:0, Position:0}, StockAndFlowF {S:2, SV:1, LS:2, F:1, I:1, O:1, V:4, LV:2, LSV:1, P:2, LVV:3, LPV:2, Name:0, Op:0, Position:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}(:Position => Dict(), :Op => Dict(), :Name => Dict()))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "using AlgebraicRewriting\n",
- "using AlgebraicRewriting: rewrite\n",
- "const hom = Catlab.CategoricalAlgebra.homomorphism\n",
- "rule = Rule(hom(I,L), hom(I,R))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"V\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cbeta\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"evaccine_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rbirth\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rrecovery\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rdeath\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rvaccine\", :shape => \"circle\", :color => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "sirv_rewritten = rewrite(rule, sirv)\n",
- "GraphF(sirv_rewritten)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "4-element LArray{Float64, 1, Vector{Float64}, (:S, :I, :R, :V)}:\n",
- " :S => 990.0\n",
- " :I => 10.0\n",
- " :R => 0.0\n",
- " :V => 0.0"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define values of constant parameters\n",
- "p = LVector(\n",
- " cbeta=0.1, rbirth=0.001, rdeath=0.001, rrecovery=0.05, # for model sir\n",
- " rvaccine=0.01, evaccine=0.3, evaccine_complement = 0.7 # for model svi\n",
- ")\n",
- "# define initial values for stocks\n",
- "u0 = LVector(\n",
- " S=990.0, I=10.0, R=0.0, V=0.0\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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/56zC3FjeAF7D69hL13hq9cHQfjVV19Zrdb58+c77g4fPrypqcnDw8Nqtd5999333nvvjh07TCYTIUStVjseo9VqjUbjpZ6woaFh48aNe/fuddz19fXNyMjACcWrYjabBUG42p+KVJG1WeTbevarfPGNEuWVMVKa7xC96JBzbrFYnF2FezOZTJxzHLm90bMDGbpxzlUqlUql+umH9UEQfvDBB7fddlv3nvR6veOGRqNZtWpVVlaWoighISGU0tbWVk9PT0JIc3NzWFjYpZ4wLi5u5cqVOTk5va9tyFIUxfFS90B2ApkXT/52nC/ZzbJj2AtjhRBd31bnBjjnoih2v5mhBxhjWq0WQdgbvTmQgRDCOZfly18l1tv3aEtLyxdffHGpScErKyv9/PwopVqtNj09fc+ePY7te/funTBhQi93Df1HoOS+4ax8mcpXTUZusL9SzC244hAABqnetgg/+uijMWPGpKSkdG/561//ajAYEhMTz549+8orr6xevdqxffXq1U8++aRWqz158uR333339ttv93LX0N981OTVCcL9I9jjeXzEeul349myODakzxwCwGDU2yD08vJ68cUXL9ySkZGxdu3avLy8wMDA999//4YbbnBsv+222zQazfr16729vb/77rvQ0NBe7hoGRpwXXT9LyG1UVh2Uf3+E/2GikBWCNASAwYMqisuNhli8eDHOEfaSwWDontCnr3CF/PMUfzqfTw2lL49n0Z6DOQ4dg2VwjrA3TCYTzhH2Un8cyEOK4xzhZQfL4D0KV4pRcnsiK18mJvqQsZulX+fLBruzawIA6DUEIVwdD5GsGSMcXizWmsjwT6X3yrnscn0KAABXAUEIPRHhQf8+Vfh8tvCv03z0JunrGoQhALgrBCH03JhA+u0N4vNj2YP75Rv+LR1rRxwCgPtBEEJvLYphpTni7Ag2Y6v0wD65EUv+AoBbQRBCH1Ax8vORrHypSi+S1A32l4u5WXJ2TQAAVwZBCH3GT0N+nykcXCAWNivD10v/7xRHVykAuD4EIfSxeG/66SzhXzOEvxzjEzZLu+uQhgDg0hCE0C+yQuj+BeKj6eyO7+RFX8vHOxCHAOCiEITQXyghN8axsqXiNaF0yufSQ/vlJqxrBACuB0EI/UsjkEfTWNkylchIynr7KxhHAwAuBkEIAyFAQ96YKBxYIBY0K8PXS/88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",
- "image/svg+xml": [
- "\n",
- "\n"
- ],
- "text/html": [
- "\n",
- "\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "prob_sirv = ODEProblem(vectorfield(sirv_rewritten),u0,(0.0,100.0),p);\n",
- "sol_sirv = solve(prob_sirv,Tsit5(),abstol=1e-8);\n",
- "plot(sol_sirv)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n"
- ],
- "text/plain": [
- "HTML{String}(\"\\n\")"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# to have the figures plotted fix to the wider of the cells\n",
- "HTML(\"\"\"\n",
- "\n",
- "\"\"\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.9.2",
- "language": "julia",
- "name": "julia-1.9"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.9.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/curable_sexually_transmitted_diseases_model-checkpoint.ipynb b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/curable_sexually_transmitted_diseases_model-checkpoint.ipynb
deleted file mode 100644
index 48a236f4..00000000
--- a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/curable_sexually_transmitted_diseases_model-checkpoint.ipynb
+++ /dev/null
@@ -1,6394 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "using GraphViz\n",
- "\n",
- "using StockFlow\n",
- "using StockFlow.Syntax\n",
- "\n",
- "using Catlab\n",
- "using Catlab.CategoricalAlgebra\n",
- "using LabelledArrays\n",
- "using OrdinaryDiffEq\n",
- "using Plots\n",
- "\n",
- "using Catlab.Graphics\n",
- "using Catlab.Programs\n",
- "using Catlab.Theories\n",
- "using Catlab.WiringDiagrams"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "This model is re-created based on Garnett's paper:\n",
- "https://journals.lww.com/stdjournal/Fulltext/2000/11000/Epidemiology_and_Control_of_Curable_Sexually.7.aspx"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 1. Define the components of all the sub-models\n",
- "## 1.1 The births and deaths of Stock X"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "StructuredMulticospan{Catlab.CategoricalAlgebra.StructuredCospans.DiscreteACSet{StockAndFlow0, StockAndFlowF}, SMulticospan{1, StockAndFlowF, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}, StaticArraysCore.SVector{1, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}}}, StaticArraysCore.SVector{1, StockAndFlow0}}(SMulticospan{1, StockAndFlowF, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}, StaticArraysCore.SVector{1, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}}}(StockAndFlowF:\n",
- " S = 1:1\n",
- " SV = 1:1\n",
- " LS = 1:1\n",
- " F = 1:2\n",
- " I = 1:1\n",
- " O = 1:1\n",
- " V = 1:2\n",
- " LV = 1:1\n",
- " LSV = 1:1\n",
- " P = 1:1\n",
- " LVV = 1:0\n",
- " LPV = 1:2\n",
- " Name = 1:0\n",
- " Op = 1:0\n",
- " Position = 1:0\n",
- " lss : LS → S = [1]\n",
- " lssv : LS → SV = [1]\n",
- " ifn : I → F = [1]\n",
- " is : I → S = [1]\n",
- " ofn : O → F = [2]\n",
- " os : O → S = [1]\n",
- " fv : F → V = [1, 2]\n",
- " lvs : LV → S = [1]\n",
- " lvv : LV → V = [2]\n",
- " lsvsv : LSV → SV = [1]\n",
- " lsvv : LSV → V = [1]\n",
- " lvsrc : LVV → V = Int64[]\n",
- " lvtgt : LVV → V = Int64[]\n",
- " lpvp : LPV → P = [1, 1]\n",
- " lpvv : LPV → V = [1, 2]\n",
- " sname : S → Name = [:X]\n",
- " svname : SV → Name = [:N]\n",
- " fname : F → Name = [:f_births, :f_deathX]\n",
- " vname : V → Name = [:v_births, :v_deathX]\n",
- " pname : P → Name = [:μ]\n",
- " vop : V → Op = [:*, :*]\n",
- " lvsposition : LV → Position = Int8[1]\n",
- " lsvsvposition : LSV → Position = Int8[1]\n",
- " lvsrcposition : LVV → Position = Int8[]\n",
- " lpvpposition : LPV → Position = Int8[2, 2], StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}[ACSetTransformation((S = FinFunction([1], 1, 1), SV = FinFunction([1], 1, 1), LS = FinFunction([1], 1, 1), F = FinFunction(1:0, 0, 2), I = FinFunction(1:0, 0, 1), O = FinFunction(1:0, 0, 1), V = FinFunction(1:0, 0, 2), LV = FinFunction(1:0, 0, 1), LSV = FinFunction(1:0, 0, 1), P = FinFunction(1:0, 0, 1), LVV = FinFunction(1:0, 0, 0), LPV = FinFunction(1:0, 0, 2), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:1, SV:1, LS:1, F:0, I:0, O:0, V:0, LV:0, LSV:0, P:0, LVV:0, LPV:0, Name:0, Op:0, Position:0}, StockAndFlowF {S:1, SV:1, LS:1, F:2, I:1, O:1, V:2, LV:1, LSV:1, P:1, LVV:0, LPV:2, Name:0, Op:0, Position:0})]), StockAndFlow0[StockAndFlow0:\n",
- " S = 1:1\n",
- " SV = 1:1\n",
- " LS = 1:1\n",
- " Name = 1:0\n",
- " lss : LS → S = [1]\n",
- " lssv : LS → SV = [1]\n",
- " sname : S → Name = [:X]\n",
- " svname : SV → Name = [:N]])"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "openX = Open( \n",
- " (@stock_and_flow begin\n",
- "\n",
- " :stocks\n",
- " X\n",
- "\n",
- " :parameters\n",
- " μ\n",
- "\n",
- " :dynamic_variables\n",
- " v_births = N * μ\n",
- " v_deathX = X * μ\n",
- "\n",
- " :flows\n",
- " CLOUD => f_births(v_births) => X\n",
- " X => f_deathX(v_deathX) => CLOUD\n",
- "\n",
- " :sums\n",
- " N = [X]\n",
- "\n",
- " end \n",
- " ),\n",
- " # feet\n",
- " foot(:X,:N,:X=>:N)\n",
- " \n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_1u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_2d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N * μ\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X * μ\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"fs_1u\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_births\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fs_2d\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_deathX\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(apex(openX))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1.2 The SIS sub-model structure"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "StructuredCospan{Catlab.CategoricalAlgebra.StructuredCospans.DiscreteACSet{StockAndFlow0, StockAndFlowF}, Multicospan{StockAndFlowF, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}, StaticArraysCore.SVector{2, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}}}, StaticArraysCore.SVector{2, StockAndFlow0}}(Multicospan{StockAndFlowF, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}, StaticArraysCore.SVector{2, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}}}(StockAndFlowF:\n",
- " S = 1:2\n",
- " SV = 1:2\n",
- " LS = 1:3\n",
- " F = 1:3\n",
- " I = 1:2\n",
- " O = 1:3\n",
- " V = 1:6\n",
- " LV = 1:3\n",
- " LSV = 1:2\n",
- " P = 1:4\n",
- " LVV = 1:3\n",
- " LPV = 1:4\n",
- " Name = 1:0\n",
- " Op = 1:0\n",
- " Position = 1:0\n",
- " lss : LS → S = [1, 2, 2]\n",
- " lssv : LS → SV = [1, 1, 2]\n",
- " ifn : I → F = [3, 1]\n",
- " is : I → S = [1, 2]\n",
- " ofn : O → F = [1, 2, 3]\n",
- " os : O → S = [1, 2, 2]\n",
- " fv : F → V = [4, 5, 6]\n",
- " lvs : LV → S = [1, 2, 2]\n",
- " lvv : LV → V = [3, 5, 6]\n",
- " lsvsv : LSV → SV = [2, 1]\n",
- " lsvv : LSV → V = [1, 2]\n",
- " lvsrc : LVV → V = [1, 2, 3]\n",
- " lvtgt : LVV → V = [2, 3, 4]\n",
- " lpvp : LPV → P = [4, 2, 1, 3]\n",
- " lpvv : LPV → V = [1, 4, 5, 6]\n",
- " sname : S → Name = [:X, :A]\n",
- " svname : SV → Name = [:N, :NI]\n",
- " fname : F → Name = [:f_newInfectiousA, :f_deathA, :f_recoveryA]\n",
- " vname : V → Name = [:v_inf₁, :v_inf₂, :v_inf₃, :v_inf₄, :v_deathA, Symbol(\"##v_f_recoveryA#292\")]\n",
- " pname : P → Name = [:μ_temp1, :ϕ_complement, :σ′, :cβ]\n",
- " vop : V → Op = [:*, :/, :*, :*, :*, :*]\n",
- " lvsposition : LV → Position = Int8[2, 1, 1]\n",
- " lsvsvposition : LSV → Position = Int8[2, 2]\n",
- " lvsrcposition : LVV → Position = Int8[1, 1, 1]\n",
- " lpvpposition : LPV → Position = Int8[1, 2, 2, 2], StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}[ACSetTransformation((S = FinFunction([1], 1, 2), SV = FinFunction([1], 1, 2), LS = FinFunction([1], 1, 3), F = FinFunction(1:0, 0, 3), I = FinFunction(1:0, 0, 2), O = FinFunction(1:0, 0, 3), V = FinFunction(1:0, 0, 6), LV = FinFunction(1:0, 0, 3), LSV = FinFunction(1:0, 0, 2), P = FinFunction(1:0, 0, 4), LVV = FinFunction(1:0, 0, 3), LPV = FinFunction(1:0, 0, 4), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:1, SV:1, LS:1, F:0, I:0, O:0, V:0, LV:0, LSV:0, P:0, LVV:0, LPV:0, Name:0, Op:0, Position:0}, StockAndFlowF {S:2, SV:2, LS:3, F:3, I:2, O:3, V:6, LV:3, LSV:2, P:4, LVV:3, LPV:4, Name:0, Op:0, Position:0}), ACSetTransformation((S = FinFunction(Int64[], 0, 2), SV = FinFunction([2], 1, 2), LS = FinFunction(Int64[], 0, 3), F = FinFunction(1:0, 0, 3), I = FinFunction(1:0, 0, 2), O = FinFunction(1:0, 0, 3), V = FinFunction(1:0, 0, 6), LV = FinFunction(1:0, 0, 3), LSV = FinFunction(1:0, 0, 2), P = FinFunction(1:0, 0, 4), LVV = FinFunction(1:0, 0, 3), LPV = FinFunction(1:0, 0, 4), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:0, SV:1, LS:0, F:0, I:0, O:0, V:0, LV:0, LSV:0, P:0, LVV:0, LPV:0, Name:0, Op:0, Position:0}, StockAndFlowF {S:2, SV:2, LS:3, F:3, I:2, O:3, V:6, LV:3, LSV:2, P:4, LVV:3, LPV:4, Name:0, Op:0, Position:0})]), StockAndFlow0[StockAndFlow0:\n",
- " S = 1:1\n",
- " SV = 1:1\n",
- " LS = 1:1\n",
- " Name = 1:0\n",
- " lss : LS → S = [1]\n",
- " lssv : LS → SV = [1]\n",
- " sname : S → Name = [:X]\n",
- " svname : SV → Name = [:N], StockAndFlow0:\n",
- " S = 1:0\n",
- " SV = 1:1\n",
- " LS = 1:0\n",
- " Name = 1:0\n",
- " lss : LS → S = Int64[]\n",
- " lssv : LS → SV = Int64[]\n",
- " sname : S → Name = Symbol[]\n",
- " svname : SV → Name = [:NI]])"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "openSIS_A = Open(\n",
- " (@stock_and_flow begin\n",
- "\n",
- " :stocks\n",
- " X\n",
- " A\n",
- "\n",
- " :parameters\n",
- " μ_temp1 # going to compose all μ in Rewriting. Shouldn't be necessary on params.\n",
- " ϕ_complement\n",
- " σ′\n",
- " cβ\n",
- "\n",
- " :dynamic_variables\n",
- " v_inf₁ = cβ * NI\n",
- " v_inf₂ = v_inf₁ / N\n",
- " v_inf₃ = v_inf₂ * X\n",
- " v_inf₄ = v_inf₃ * ϕ_complement\n",
- "\n",
- " v_deathA = A * μ_temp1\n",
- "\n",
- " :flows\n",
- " X => f_newInfectiousA(v_inf₄) => A\n",
- " A => f_deathA(v_deathA) => CLOUD\n",
- " A => f_recoveryA(A * σ′) => X\n",
- "\n",
- " :sums\n",
- " N = [X, A]\n",
- " NI = [A]\n",
- "\n",
- " end\n",
- " ),\n",
- " # feet\n",
- " foot(:X,:N,:X=>:N),\n",
- " foot((),:NI,())\n",
- "\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ_temp1\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"σ′\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cβ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_2d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cβ * NI\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"(cβ * NI) / N\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"((cβ * NI) / N) * X\", :shape => \"plaintext\", :fontcolor => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(apex(openSIS_A))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "StructuredCospan{Catlab.CategoricalAlgebra.StructuredCospans.DiscreteACSet{StockAndFlow0, StockAndFlowF}, Multicospan{StockAndFlowF, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}, StaticArraysCore.SVector{2, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}}}, StaticArraysCore.SVector{2, StockAndFlow0}}(Multicospan{StockAndFlowF, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}, StaticArraysCore.SVector{2, StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}}}(StockAndFlowF:\n",
- " S = 1:2\n",
- " SV = 1:2\n",
- " LS = 1:3\n",
- " F = 1:3\n",
- " I = 1:2\n",
- " O = 1:3\n",
- " V = 1:3\n",
- " LV = 1:2\n",
- " LSV = 1:0\n",
- " P = 1:4\n",
- " LVV = 1:0\n",
- " LPV = 1:4\n",
- " Name = 1:0\n",
- " Op = 1:0\n",
- " Position = 1:0\n",
- " lss : LS → S = [1, 2, 2]\n",
- " lssv : LS → SV = [1, 1, 2]\n",
- " ifn : I → F = [3, 1]\n",
- " is : I → S = [1, 2]\n",
- " ofn : O → F = [1, 2, 3]\n",
- " os : O → S = [1, 2, 2]\n",
- " fv : F → V = [1, 2, 3]\n",
- " lvs : LV → S = [2, 2]\n",
- " lvv : LV → V = [2, 3]\n",
- " lsvsv : LSV → SV = Int64[]\n",
- " lsvv : LSV → V = Int64[]\n",
- " lvsrc : LVV → V = Int64[]\n",
- " lvtgt : LVV → V = Int64[]\n",
- " lpvp : LPV → P = [2, 4, 1, 3]\n",
- " lpvv : LPV → V = [1, 1, 2, 3]\n",
- " sname : S → Name = [:X, :Y]\n",
- " svname : SV → Name = [:N, :NI]\n",
- " fname : F → Name = [:f_newInfectiousY, :f_deathY, :f_recoveryY]\n",
- " vname : V → Name = [:v_inf₄, :v_deathY, Symbol(\"##v_f_recoveryY#293\")]\n",
- " pname : P → Name = [:μ_temp2, :ϕ, :σ, :λ]\n",
- " vop : V → Op = [:*, :*, :*]\n",
- " lvsposition : LV → Position = Int8[1, 1]\n",
- " lsvsvposition : LSV → Position = Int8[]\n",
- " lvsrcposition : LVV → Position = Int8[]\n",
- " lpvpposition : LPV → Position = Int8[1, 2, 2, 2], StructTightACSetTransformation{TypeLevelBasicSchema{Symbol, Tuple{:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV}, Tuple{(:lss, :LS, :S), (:lssv, :LS, :SV), (:ifn, :I, :F), (:is, :I, :S), (:ofn, :O, :F), (:os, :O, :S), (:fv, :F, :V), (:lvs, :LV, :S), (:lvv, :LV, :V), (:lsvsv, :LSV, :SV), (:lsvv, :LSV, :V), (:lvsrc, :LVV, :V), (:lvtgt, :LVV, :V), (:lpvp, :LPV, :P), (:lpvv, :LPV, :V)}, Tuple{:Name, :Op, :Position}, Tuple{(:sname, :S, :Name), (:svname, :SV, :Name), (:fname, :F, :Name), (:vname, :V, :Name), (:pname, :P, :Name), (:vop, :V, :Op), (:lvsposition, :LV, :Position), (:lsvsvposition, :LSV, :Position), (:lvsrcposition, :LVV, :Position), (:lpvpposition, :LPV, :Position)}}, NamedTuple{(:S, :SV, :LS, :F, :I, :O, :V, :LV, :LSV, :P, :LVV, :LPV, :Name, :Op, :Position), Tuple{Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, Vector{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, Catlab.CategoricalAlgebra.FinSets.FinDomFunctionVector{Int64, UnitRange{Int64}, Catlab.CategoricalAlgebra.FinSets.FinSetInt}, VarFunction{Symbol}, VarFunction{Symbol}, VarFunction{Int8}}}, StockAndFlowF, StockAndFlowF}[ACSetTransformation((S = FinFunction([1], 1, 2), SV = FinFunction([1], 1, 2), LS = FinFunction([1], 1, 3), F = FinFunction(1:0, 0, 3), I = FinFunction(1:0, 0, 2), O = FinFunction(1:0, 0, 3), V = FinFunction(1:0, 0, 3), LV = FinFunction(1:0, 0, 2), LSV = FinFunction(1:0, 0, 0), P = FinFunction(1:0, 0, 4), LVV = FinFunction(1:0, 0, 0), LPV = FinFunction(1:0, 0, 4), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:1, SV:1, LS:1, F:0, I:0, O:0, V:0, LV:0, LSV:0, P:0, LVV:0, LPV:0, Name:0, Op:0, Position:0}, StockAndFlowF {S:2, SV:2, LS:3, F:3, I:2, O:3, V:3, LV:2, LSV:0, P:4, LVV:0, LPV:4, Name:0, Op:0, Position:0}), ACSetTransformation((S = FinFunction(Int64[], 0, 2), SV = FinFunction([2], 1, 2), LS = FinFunction(Int64[], 0, 3), F = FinFunction(1:0, 0, 3), I = FinFunction(1:0, 0, 2), O = FinFunction(1:0, 0, 3), V = FinFunction(1:0, 0, 3), LV = FinFunction(1:0, 0, 2), LSV = FinFunction(1:0, 0, 0), P = FinFunction(1:0, 0, 4), LVV = FinFunction(1:0, 0, 0), LPV = FinFunction(1:0, 0, 4), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:0, SV:1, LS:0, F:0, I:0, O:0, V:0, LV:0, LSV:0, P:0, LVV:0, LPV:0, Name:0, Op:0, Position:0}, StockAndFlowF {S:2, SV:2, LS:3, F:3, I:2, O:3, V:3, LV:2, LSV:0, P:4, LVV:0, LPV:4, Name:0, Op:0, Position:0})]), StockAndFlow0[StockAndFlow0:\n",
- " S = 1:1\n",
- " SV = 1:1\n",
- " LS = 1:1\n",
- " Name = 1:0\n",
- " lss : LS → S = [1]\n",
- " lssv : LS → SV = [1]\n",
- " sname : S → Name = [:X]\n",
- " svname : SV → Name = [:N], StockAndFlow0:\n",
- " S = 1:0\n",
- " SV = 1:1\n",
- " LS = 1:0\n",
- " Name = 1:0\n",
- " lss : LS → S = Int64[]\n",
- " lssv : LS → SV = Int64[]\n",
- " sname : S → Name = Symbol[]\n",
- " svname : SV → Name = [:NI]])"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "openSIS_Y = Open(\n",
- " (@stock_and_flow begin\n",
- " \n",
- " :stocks\n",
- " X\n",
- " Y\n",
- "\n",
- " :parameters\n",
- " μ_temp2\n",
- " ϕ\n",
- " σ\n",
- " λ\n",
- "\n",
- " :dynamic_variables\n",
- " v_inf₄ = ϕ * λ # at present, lambda needs to come second\n",
- " # in algebraic rewriting, position of variables matters for homomorphisms.\n",
- " # When we later have *(ϕ), phi comes first, because it's the only variable\n",
- " \n",
- " v_deathY = Y * μ_temp2\n",
- "\n",
- " :flows\n",
- " X => f_newInfectiousY(v_inf₄) => Y\n",
- " Y => f_deathY(v_deathY) => CLOUD\n",
- " Y => f_recoveryY(Y * σ) => X\n",
- "\n",
- " :sums\n",
- " N = [X, Y]\n",
- " NI = [Y]\n",
- "\n",
- "end\n",
- " ),\n",
- "\n",
- " # feet\n",
- " foot(:X,:N,:X=>:N),\n",
- " foot((),:NI,())\n",
- " \n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Y\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ_temp2\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"σ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"λ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_2d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ * λ\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Y * μ_temp2\", :shape => \"plaintext\", :fontcolor => \"black\")), Catlab.Graphics.Graphviz.Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Y * σ\", :shape => \"plaintext\", :fontcolor => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fs_2d\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_deathY\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(apex(openSIS_Y))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 2 Compose\n",
- "## 2.1 Define composition rule"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", false, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box1\", :label => \"X\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box2\", :label => \"XA\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box3\", :label => \"XY\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer1\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer2\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"junction\", :fillcolor => \"black\", :height => \"0.075\", :id => \"junction1\", :label => \"\", :shape => \"circle\", :style => \"filled\", :width => \"0.075\", :xlabel => \"XN\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"junction\", :fillcolor => \"black\", :height => \"0.075\", :id => \"junction2\", :label => \"\", :shape => \"circle\", :style => \"filled\", :width => \"0.075\", :xlabel => \"NI\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"ellipse\", :margin => \"0.05,0.025\", :width => \"0.5\", :height => \"0.5\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :len => \"1\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define the UWD-algebra\n",
- "uwd = @relation (XN,NI) begin\n",
- " X(XN)\n",
- " XA(XN,NI)\n",
- " XY(XN,NI)\n",
- "end;\n",
- "display_uwd(uwd)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Y\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ_temp1\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"σ′\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cβ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ_temp2\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ\", :shape => \"circle\", :color => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p8\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p9\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "XAY_model = oapply(uwd,Dict(\n",
- " :X=>openX,\n",
- " :XA=>openSIS_A,\n",
- " :XY=>openSIS_Y\n",
- " )) |> apex\n",
- "GraphF(XAY_model)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:2, LS:5, F:8, I:5, O:7, V:11, LV:6, LSV:3, P:9, LVV:3, LPV:10, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " X | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " A | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " Y | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_births | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " f_deathX | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 6 | \n",
- " f_newInfectiousA | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 7 | \n",
- " f_deathA | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 8 | \n",
- " f_recoveryA | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 9 | \n",
- " f_newInfectiousY | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 10 | \n",
- " f_deathY | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 11 | \n",
- " f_recoveryY | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_births | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_deathX | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_inf₁ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_inf₂ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_inf₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_inf₄ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_deathA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " ##v_f_recoveryA#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_inf₄ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " v_deathY | \n",
- " * | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " ##v_f_recoveryY#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " μ_temp1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ϕ_complement | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " σ′ | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " cβ | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " μ_temp2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " ϕ | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " σ | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " λ | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 9 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 6 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 8 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:2, LS:5, F:8, I:5, O:7, V:11, LV:6, LSV:3, P:9, LVV:3, LPV:10, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ X │\n",
- "│\u001b[1m 2 \u001b[0m│ A │\n",
- "│\u001b[1m 3 \u001b[0m│ Y │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 2 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_births │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ f_deathX │\n",
- "│\u001b[1m 3 \u001b[0m│ 6 │ f_newInfectiousA │\n",
- "│\u001b[1m 4 \u001b[0m│ 7 │ f_deathA │\n",
- "│\u001b[1m 5 \u001b[0m│ 8 │ f_recoveryA │\n",
- "│\u001b[1m 6 \u001b[0m│ 9 │ f_newInfectiousY │\n",
- "│\u001b[1m 7 \u001b[0m│ 10 │ f_deathY │\n",
- "│\u001b[1m 8 \u001b[0m│ 11 │ f_recoveryY │\n",
- "└───┴────┴──────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 5 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 8 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 7 │ 3 │\n",
- "│\u001b[1m 7 \u001b[0m│ 8 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌────┬─────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼─────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_births │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_deathX │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_inf₁ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_inf₂ │ / │\n",
- "│\u001b[1m 5 \u001b[0m│ v_inf₃ │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_inf₄ │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_deathA │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ ##v_f_recoveryA#292 │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_inf₄ │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ v_deathY │ * │\n",
- "│\u001b[1m 11 \u001b[0m│ ##v_f_recoveryY#293 │ * │\n",
- "└────┴─────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 5 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 7 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 8 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 10 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 11 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 4 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬──────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ μ_temp1 │\n",
- "│\u001b[1m 3 \u001b[0m│ ϕ_complement │\n",
- "│\u001b[1m 4 \u001b[0m│ σ′ │\n",
- "│\u001b[1m 5 \u001b[0m│ cβ │\n",
- "│\u001b[1m 6 \u001b[0m│ μ_temp2 │\n",
- "│\u001b[1m 7 \u001b[0m│ ϕ │\n",
- "│\u001b[1m 8 \u001b[0m│ σ │\n",
- "│\u001b[1m 9 \u001b[0m│ λ │\n",
- "└───┴──────────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ 4 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 5 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ 6 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 8 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ 9 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 9 │ 9 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 6 │ 10 │ 2 │\n",
- "│\u001b[1m 10 \u001b[0m│ 8 │ 11 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "XAY_model"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 3 Rewrite"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:6, LVV:2, LPV:7, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " X | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " Y | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " A | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_newInfectiousY | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 6 | \n",
- " f_deathY | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " f_deathA | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 7 | \n",
- " f_births | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 8 | \n",
- " f_deathX | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_inf₁ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_inf₂ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_inf₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_inf₄ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_deathA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_deathY | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_births | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_deathX | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " μ_temp1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " μ_temp2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " λ | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " cβ | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " ϕ | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 6 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 1 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 1 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:6, LVV:2, LPV:7, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ X │\n",
- "│\u001b[1m 2 \u001b[0m│ Y │\n",
- "│\u001b[1m 3 \u001b[0m│ A │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 2 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_newInfectiousY │\n",
- "│\u001b[1m 2 \u001b[0m│ 6 │ f_deathY │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ f_deathA │\n",
- "│\u001b[1m 4 \u001b[0m│ 7 │ f_births │\n",
- "│\u001b[1m 5 \u001b[0m│ 8 │ f_deathX │\n",
- "└───┴────┴──────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 5 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_inf₁ │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_inf₂ │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_inf₃ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_inf₄ │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_deathA │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_deathY │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_births │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_deathX │ * │\n",
- "└───┴──────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 5 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 6 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 8 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 7 │ 1 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬─────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼─────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ μ_temp1 │\n",
- "│\u001b[1m 3 \u001b[0m│ μ_temp2 │\n",
- "│\u001b[1m 4 \u001b[0m│ λ │\n",
- "│\u001b[1m 5 \u001b[0m│ cβ │\n",
- "│\u001b[1m 6 \u001b[0m│ ϕ │\n",
- "└───┴─────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 5 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 6 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 4 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 6 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 1 │ 7 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 1 │ 8 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "L = @stock_and_flow begin\n",
- " :stocks\n",
- " X\n",
- " Y\n",
- " A\n",
- "\n",
- " :parameters\n",
- " μ\n",
- " μ_temp1\n",
- " μ_temp2\n",
- " λ\n",
- " cβ\n",
- " ϕ\n",
- "\n",
- " :dynamic_variables\n",
- " v_inf₁ = cβ * NI\n",
- " v_inf₂ = v_inf₁ / N\n",
- " v_inf₃ = v_inf₂ * X\n",
- " v_inf₄ = ϕ * λ\n",
- "\n",
- " v_deathA = A * μ_temp1\n",
- " v_deathY = Y * μ_temp2\n",
- "\n",
- " v_births = N * μ\n",
- " v_deathX = X * μ\n",
- "\n",
- " :flows\n",
- " X => f_newInfectiousY(v_inf₄) => Y\n",
- " Y => f_deathY(v_deathY) => CLOUD\n",
- " A => f_deathA(v_deathA) => CLOUD\n",
- "\n",
- " CLOUD => f_births(v_births) => X\n",
- " X => f_deathX(v_deathX) => CLOUD\n",
- "\n",
- "\n",
- " \n",
- " :sums\n",
- " N = [X,Y,A]\n",
- " NI = [Y,A]\n",
- " end;\n",
- " \n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Y\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ_temp1\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ_temp2\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"λ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cβ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_4u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(L)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:3, LVV:2, LPV:4, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " A | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " X | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " Y | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_newInfectiousY | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 6 | \n",
- " f_deathY | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " f_deathA | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 7 | \n",
- " f_births | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 8 | \n",
- " f_deathX | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_inf₁ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_inf₂ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_inf₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_inf₄ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_deathA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_deathY | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_births | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_deathX | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " cβ | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ϕ | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:3, LVV:2, LPV:4, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ A │\n",
- "│\u001b[1m 2 \u001b[0m│ X │\n",
- "│\u001b[1m 3 \u001b[0m│ Y │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 2 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_newInfectiousY │\n",
- "│\u001b[1m 2 \u001b[0m│ 6 │ f_deathY │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ f_deathA │\n",
- "│\u001b[1m 4 \u001b[0m│ 7 │ f_births │\n",
- "│\u001b[1m 5 \u001b[0m│ 8 │ f_deathX │\n",
- "└───┴────┴──────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_inf₁ │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_inf₂ │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_inf₃ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_inf₄ │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_deathA │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_deathY │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_births │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_deathX │ * │\n",
- "└───┴──────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 5 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 6 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 8 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 7 │ 1 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ cβ │\n",
- "│\u001b[1m 3 \u001b[0m│ ϕ │\n",
- "└───┴───────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 7 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 8 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "I = @stock_and_flow begin\n",
- " :stocks\n",
- " A\n",
- " X\n",
- " Y\n",
- "\n",
- " :parameters\n",
- " μ\n",
- " cβ\n",
- " ϕ\n",
- "\n",
- " :dynamic_variables\n",
- " v_inf₁ = cβ * NI\n",
- " v_inf₂ = v_inf₁ / N\n",
- " v_inf₃ = v_inf₂ * X\n",
- " v_inf₄ = *(ϕ)\n",
- "\n",
- "\n",
- " v_deathA = *(A)\n",
- " v_deathY = *(Y)\n",
- "\n",
- " v_births = N * μ\n",
- " v_deathX = X * μ\n",
- "\n",
- "\n",
- " \n",
- "\n",
- "\n",
- "\n",
- " :flows\n",
- " X => f_newInfectiousY(v_inf₄) => Y\n",
- " Y => f_deathY(v_deathY) => CLOUD\n",
- " A => f_deathA(v_deathA) => CLOUD\n",
- "\n",
- " CLOUD => f_births(v_births) => X\n",
- " X => f_deathX(v_deathX) => CLOUD\n",
- "\n",
- "\n",
- " \n",
- " :sums\n",
- " N = [X,Y,A]\n",
- " NI = [Y,A]\n",
- " end;\n",
- " \n",
- "\n",
- " "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Y\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cβ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_4u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_3d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_5d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_2d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(I)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:3, LVV:3, LPV:6, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " A | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " X | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " Y | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_newInfectiousY | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 6 | \n",
- " f_deathY | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " f_deathA | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 7 | \n",
- " f_births | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 8 | \n",
- " f_deathX | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_inf₁ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_inf₂ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_inf₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_inf₄ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_deathA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_deathY | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_births | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_deathX | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " cβ | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ϕ | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 1 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 1 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:3, LVV:3, LPV:6, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ A │\n",
- "│\u001b[1m 2 \u001b[0m│ X │\n",
- "│\u001b[1m 3 \u001b[0m│ Y │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 2 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_newInfectiousY │\n",
- "│\u001b[1m 2 \u001b[0m│ 6 │ f_deathY │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ f_deathA │\n",
- "│\u001b[1m 4 \u001b[0m│ 7 │ f_births │\n",
- "│\u001b[1m 5 \u001b[0m│ 8 │ f_deathX │\n",
- "└───┴────┴──────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_inf₁ │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_inf₂ │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_inf₃ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_inf₄ │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_deathA │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_deathY │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_births │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_deathX │ * │\n",
- "└───┴──────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 5 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 6 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 8 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 7 │ 1 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ cβ │\n",
- "│\u001b[1m 3 \u001b[0m│ ϕ │\n",
- "└───┴───────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 4 │ 2 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 1 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 1 │ 8 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "R = @stock_and_flow begin\n",
- " :stocks\n",
- " A\n",
- " X\n",
- " Y\n",
- "\n",
- " :parameters\n",
- " μ\n",
- " cβ\n",
- " ϕ\n",
- "\n",
- " :dynamic_variables\n",
- " v_inf₁ = cβ * NI\n",
- " v_inf₂ = v_inf₁ / N\n",
- " v_inf₃ = v_inf₂ * X\n",
- " v_inf₄ = ϕ * v_inf₃\n",
- "\n",
- " v_deathA = A * μ\n",
- " v_deathY = Y * μ\n",
- "\n",
- " v_births = N * μ\n",
- " v_deathX = X * μ\n",
- "\n",
- " :flows\n",
- " X => f_newInfectiousY(v_inf₄) => Y\n",
- "\n",
- " Y => f_deathY(v_deathY) => CLOUD\n",
- " A => f_deathA(v_deathA) => CLOUD\n",
- "\n",
- " CLOUD => f_births(v_births) => X\n",
- " X => f_deathX(v_deathX) => CLOUD\n",
- "\n",
- "\n",
- " :sums\n",
- " N = [X,Y,A]\n",
- " NI = [Y,A]\n",
- " end;\n",
- " \n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Y\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cβ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_4u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_3d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_5d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_2d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(R)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "Rule{:DPO}(ACSetTransformation((S = FinFunction([3, 1, 2], 3, 3), SV = FinFunction([1, 2], 2, 2), LS = FinFunction([4, 5, 1, 2, 3], 5, 5), F = FinFunction([1, 2, 3, 4, 5], 5, 5), I = FinFunction([1, 2], 2, 2), O = FinFunction([4, 1, 2, 3], 4, 4), V = FinFunction([1, 2, 3, 4, 5, 6, 7, 8], 8, 8), LV = FinFunction([1, 2, 3, 4], 4, 4), LSV = FinFunction([1, 2, 3], 3, 3), P = FinFunction([1, 5, 6], 3, 6), LVV = FinFunction([1, 2], 2, 2), LPV = FinFunction([1, 2, 6, 7], 4, 7), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:3, LVV:2, LPV:4, Name:0, Op:0, Position:0}, StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:6, LVV:2, LPV:7, Name:0, Op:0, Position:0}), ACSetTransformation((S = FinFunction([1, 2, 3], 3, 3), SV = FinFunction([1, 2], 2, 2), LS = FinFunction([1, 2, 3, 4, 5], 5, 5), F = FinFunction([1, 2, 3, 4, 5], 5, 5), I = FinFunction([1, 2], 2, 2), O = FinFunction([1, 2, 3, 4], 4, 4), V = FinFunction([1, 2, 3, 4, 5, 6, 7, 8], 8, 8), LV = FinFunction([1, 2, 3, 4], 4, 4), LSV = FinFunction([1, 2, 3], 3, 3), P = FinFunction([1, 2, 3], 3, 3), LVV = FinFunction([1, 2], 2, 3), LPV = FinFunction([1, 2, 5, 6], 4, 6), Name = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Op = VarFunction{Symbol}(FinDomFunction(Union{AttrVar, Symbol}[], FinSet(0), TypeSet(Union{AttrVar, Symbol})), FinSet(0)), Position = VarFunction{Int8}(FinDomFunction(Union{AttrVar, Int8}[], FinSet(0), TypeSet(Union{AttrVar, Int8})), FinSet(0))), StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:3, LVV:2, LPV:4, Name:0, Op:0, Position:0}, StockAndFlowF {S:3, SV:2, LS:5, F:5, I:2, O:4, V:8, LV:4, LSV:3, P:3, LVV:3, LPV:6, Name:0, Op:0, Position:0}), Constraint[], false, Dict{Symbol, Dict{Int64, Union{Nothing, Function}}}(:Position => Dict(), :Op => Dict(), :Name => Dict()))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "using AlgebraicRewriting\n",
- "using AlgebraicRewriting: rewrite\n",
- "const hom = Catlab.CategoricalAlgebra.homomorphism\n",
- "rule = Rule(hom(I,L), hom(I,R))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:2, LS:5, F:8, I:5, O:7, V:11, LV:6, LSV:3, P:6, LVV:4, LPV:9, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " A | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " X | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " Y | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NI | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_newInfectiousY | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 6 | \n",
- " f_deathY | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " f_deathA | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 7 | \n",
- " f_births | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 8 | \n",
- " f_deathX | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 9 | \n",
- " f_newInfectiousA | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 10 | \n",
- " f_recoveryA | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 11 | \n",
- " f_recoveryY | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_inf₁ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_inf₂ | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_inf₃ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_inf₄ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_deathA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_deathY | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_births | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_deathX | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_inf₄ | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " ##v_f_recoveryA#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " ##v_f_recoveryY#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 1 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " cβ | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ϕ | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " ϕ_complement | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " σ′ | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " σ | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 1 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 1 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 4 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 5 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 6 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:2, LS:5, F:8, I:5, O:7, V:11, LV:6, LSV:3, P:6, LVV:4, LPV:9, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ A │\n",
- "│\u001b[1m 2 \u001b[0m│ X │\n",
- "│\u001b[1m 3 \u001b[0m│ Y │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "│\u001b[1m 2 \u001b[0m│ NI │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 2 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_newInfectiousY │\n",
- "│\u001b[1m 2 \u001b[0m│ 6 │ f_deathY │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ f_deathA │\n",
- "│\u001b[1m 4 \u001b[0m│ 7 │ f_births │\n",
- "│\u001b[1m 5 \u001b[0m│ 8 │ f_deathX │\n",
- "│\u001b[1m 6 \u001b[0m│ 9 │ f_newInfectiousA │\n",
- "│\u001b[1m 7 \u001b[0m│ 10 │ f_recoveryA │\n",
- "│\u001b[1m 8 \u001b[0m│ 11 │ f_recoveryY │\n",
- "└───┴────┴──────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │\n",
- "│\u001b[1m 3 \u001b[0m│ 7 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 8 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 3 │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 8 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌────┬─────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼─────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_inf₁ │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_inf₂ │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_inf₃ │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_inf₄ │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_deathA │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_deathY │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_births │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_deathX │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_inf₄ │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ ##v_f_recoveryA#292 │ * │\n",
- "│\u001b[1m 11 \u001b[0m│ ##v_f_recoveryY#293 │ * │\n",
- "└────┴─────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 5 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 6 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 8 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 1 │ 10 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 11 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 7 │ 1 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬──────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ cβ │\n",
- "│\u001b[1m 3 \u001b[0m│ ϕ │\n",
- "│\u001b[1m 4 \u001b[0m│ ϕ_complement │\n",
- "│\u001b[1m 5 \u001b[0m│ σ′ │\n",
- "│\u001b[1m 6 \u001b[0m│ σ │\n",
- "└───┴──────────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 4 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 9 │ 1 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 1 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 1 │ 8 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 4 │ 9 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 5 │ 10 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 6 │ 11 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "XAY_model_rewritten = rewrite(rule, XAY_model)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Y\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cβ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"σ′\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"σ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_4u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(XAY_model_rewritten)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"A\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"X\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Y\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"cβ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"ϕ_complement\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"σ′\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"σ\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_4u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Catlab.Graphics.Graphviz.Node(\"fs_5d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_2d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_newInfectiousA\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_recoveryA\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_recoveryY\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_newInfectiousY\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"fs_4u\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_births\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fs_3d\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_deathA\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fs_5d\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_deathX\", :labelfontsize => \"6\", :color => \"black:invis:black\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fs_2d\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"f_deathY\", :labelfontsize => \"6\", :color => \"black:invis:black\"))], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(XAY_model_rewritten,type=\"SF\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 3. Solve ODEs"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "3-element LArray{Int64, 1, Vector{Int64}, (:X, :A, :Y)}:\n",
- " :X => 990\n",
- " :A => 5\n",
- " :Y => 5"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define values of constant parameters\n",
- "# unit: year\n",
- "p = LVector(\n",
- " cβ=15*0.7, μ=1/15,ϕ=(0.95+0.4)/2,σ=12/4,σ′=12/4,ϕ_complement=(1.0 - ((0.95+0.4)/2))\n",
- ")\n",
- "# define initial values for stocks\n",
- "u0 = LVector(\n",
- " X=990, A=5, Y=5\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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",
- "image/svg+xml": [
- "\n",
- "\n"
- ],
- "text/html": [
- "\n",
- "\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# results are tested the same as the Anylogic model\n",
- "prob_XAY = ODEProblem(vectorfield(XAY_model_rewritten),u0,(0.0,2.0),p);\n",
- "sol = solve(prob_XAY,Tsit5(),abstol=1e-8);\n",
- "plot(sol)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n"
- ],
- "text/plain": [
- "HTML{String}(\"\\n\")"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# to have the figures plotted fix to the wider of the cells\n",
- "HTML(\"\"\"\n",
- "\n",
- "\"\"\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.9.2",
- "language": "julia",
- "name": "julia-1.9"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.9.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/diabetes_model-checkpoint.ipynb b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/diabetes_model-checkpoint.ipynb
deleted file mode 100644
index ef55a106..00000000
--- a/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/diabetes_model-checkpoint.ipynb
+++ /dev/null
@@ -1,3299 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "using GraphViz\n",
- "\n",
- "using StockFlow\n",
- "using StockFlow.Syntax\n",
- "\n",
- "using Catlab\n",
- "using Catlab.CategoricalAlgebra\n",
- "using LabelledArrays\n",
- "using OrdinaryDiffEq\n",
- "using Plots\n",
- "\n",
- "using Catlab.Graphics\n",
- "using Catlab.Programs\n",
- "using Catlab.Theories\n",
- "using Catlab.WiringDiagrams"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "display_uwd(ex) = to_graphviz(ex, box_labels=:name, junction_labels=:variable, edge_attrs=Dict(:len=>\"1\"));"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 1. Normoglycemic Population Model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:1, LS:3, F:6, I:3, O:5, V:6, LV:5, LSV:1, P:5, LVV:0, LPV:6, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " NormalWeight | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " OverWeight | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " Obese | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_DeathNormalWeight | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " f_BecomingOverWeight | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " f_DeathOverWeight | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " f_BecomingObese | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " f_DeathObese | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " f_NewBorn | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " ##v_f_DeathNormalWeight#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " ##v_f_BecomingOverWeight#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ##v_f_DeathOverWeight#294 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " ##v_f_BecomingObese#295 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " ##v_f_DeathObese#296 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " ##v_f_NewBorn#297 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rBirth | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rMortalityWeight | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rObese | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rOverWeight | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rMortalityobese | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 1 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:1, LS:3, F:6, I:3, O:5, V:6, LV:5, LSV:1, P:5, LVV:0, LPV:6, Name:0, Op:0, Position:0}\n",
- "┌───┬──────────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ NormalWeight │\n",
- "│\u001b[1m 2 \u001b[0m│ OverWeight │\n",
- "│\u001b[1m 3 \u001b[0m│ Obese │\n",
- "└───┴──────────────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_DeathNormalWeight │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ f_BecomingOverWeight │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ f_DeathOverWeight │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ f_BecomingObese │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ f_DeathObese │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ f_NewBorn │\n",
- "└───┴────┴──────────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ ##v_f_DeathNormalWeight#292 │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ ##v_f_BecomingOverWeight#293 │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ ##v_f_DeathOverWeight#294 │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ ##v_f_BecomingObese#295 │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ ##v_f_DeathObese#296 │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ ##v_f_NewBorn#297 │ * │\n",
- "└───┴──────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 5 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 6 │ 1 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬──────────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼──────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rBirth │\n",
- "│\u001b[1m 2 \u001b[0m│ rMortalityWeight │\n",
- "│\u001b[1m 3 \u001b[0m│ rObese │\n",
- "│\u001b[1m 4 \u001b[0m│ rOverWeight │\n",
- "│\u001b[1m 5 \u001b[0m│ rMortalityobese │\n",
- "└───┴──────────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 1 │ 6 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "Model_Normoglycemic = @stock_and_flow begin\n",
- " \n",
- " :stocks\n",
- " NormalWeight\n",
- " OverWeight\n",
- " Obese\n",
- "\n",
- " :parameters\n",
- " rBirth\n",
- " rMortalityWeight\n",
- " rObese\n",
- " rOverWeight\n",
- " rMortalityobese\n",
- "\n",
- " :flows\n",
- " NormalWeight => f_DeathNormalWeight(NormalWeight * rMortalityWeight) => CLOUD\n",
- " NormalWeight => f_BecomingOverWeight(NormalWeight * rOverWeight) => OverWeight\n",
- " OverWeight => f_DeathOverWeight(OverWeight * rMortalityWeight) => CLOUD\n",
- " OverWeight => f_BecomingObese(OverWeight * rObese) => Obese\n",
- " Obese => f_DeathObese(Obese * rMortalityobese) => CLOUD\n",
- " CLOUD => f_NewBorn(N * rBirth) => NormalWeight\n",
- "\n",
- "\n",
- " :sums\n",
- " N = [NormalWeight, OverWeight, Obese]\n",
- "\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": "\n\n\n\n\n",
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"NormalWeight\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"OverWeight\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Obese\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rBirth\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rMortalityWeight\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rObese\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rOverWeight\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rMortalityobese\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"fs_6u\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Catlab.Graphics.Graphviz.Node(\"fs_1d\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"s3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"sv1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(Model_Normoglycemic, rd=\"TB\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 2. Hyperglycemic Population Model\n",
- "## 2.1 Build Development of Hyperglyce Sub Model Structure"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "fOpenSubHyperglycemic (generic function with 1 method)"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "++(s1, s2) = Symbol(string(s1) * string(s2)) # infix, and works with both strings and symbols\n",
- "\n",
- "function fOpenSubHyperglycemic(pop)\n",
- " \n",
- " # The following are all symbols\n",
- " \n",
- " Prediabetic = \"Prediabetic\" ++ pop\n",
- " DevelopingDiabetic = \"DevelopingDiabetic\" ++ pop\n",
- " DeathPrediabetic = \"DeathPrediabetic\" ++ pop\n",
- " DiabeticWtComp = \"DiabeticWtComp\" ++ pop\n",
- " DiabeticEarly = \"DiabeticEarly\" ++ pop\n",
- " DevelopingEarly = \"DevelopingEarly\" ++ pop\n",
- " DeathDiabeticWtComp = \"DeathDiabeticWtComp\" ++ pop\n",
- " DevelopingLate = \"DevelopingLate\" ++ pop\n",
- " DeathDiabeticEarly = \"DeathDiabeticEarly\" ++ pop\n",
- " DiabeticLate = \"DiabeticLate\" ++ pop\n",
- " DeathDiabeticLate = \"DeathDiabeticLate\" ++ pop\n",
- "\n",
- " rDevelopingDiabetic = \"rDevelopingDiabetic\" ++ pop\n",
- " rDevelopingEarly = \"rDevelopingEarly\" ++ pop\n",
- " rMortalityDiabeticEarly = \"rMortalityDiabeticEarly\" ++ pop\n",
- " rMortalityDiabeticWtComp = \"rMortalityDiabeticWtComp\" ++ pop\n",
- "\n",
- " v_DevelopingDiabetic = \"v_DevelopingDiabetic\" ++ pop\n",
- " v_DeathPrediabetic = \"v_DeathPrediabetic\" ++ pop\n",
- " v_DevelopingEarly = \"v_DevelopingEarly\" ++ pop\n",
- " v_DeathDiabeticWtComp = \"v_DeathDiabeticWtComp\" ++ pop\n",
- " v_DevelopingLate = \"v_DevelopingLate\" ++ pop\n",
- " v_DeathDiabeticEarly = \"v_DeathDiabeticEarly\" ++ pop\n",
- " v_DeathDiabeticLate = \"v_DeathDiabeticLate\" ++ pop\n",
- "\n",
- "\n",
- " rMortalityPrediabetic = :rMortalityPrediabetic\n",
- " rMortalityDiabeticLate = :rMortalityDiabeticLate\n",
- " rDevelopingLate = :rDevelopingLate\n",
- "\n",
- " Open(\n",
- " StockAndFlowF(\n",
- " \n",
- " #stocks\n",
- " # in, out, sums\n",
- " (\n",
- " Prediabetic => (:F_NONE, (DevelopingDiabetic, DeathPrediabetic), :N),\n",
- " DiabeticWtComp => (DevelopingDiabetic, (DevelopingEarly, DeathDiabeticWtComp), :N),\n",
- " DiabeticEarly => (DevelopingEarly, (DevelopingLate, DeathDiabeticEarly), :N),\n",
- " DiabeticLate => (DevelopingLate, DeathDiabeticLate, :N)\n",
- " ),\n",
- "\n",
- " #parameters\n",
- " (\n",
- " rDevelopingDiabetic,\n",
- " rMortalityPrediabetic,\n",
- " rDevelopingEarly,\n",
- " rMortalityDiabeticEarly,\n",
- " rMortalityDiabeticLate,\n",
- " rMortalityDiabeticWtComp,\n",
- " rDevelopingLate\n",
- " ),\n",
- "\n",
- " #dynamic variables\n",
- " (\n",
- " v_DevelopingDiabetic => ((Prediabetic, rDevelopingDiabetic) => :*),\n",
- " v_DeathPrediabetic => ((Prediabetic, rMortalityPrediabetic) => :*),\n",
- " v_DevelopingEarly => ((DiabeticWtComp, rDevelopingEarly) => :*),\n",
- " v_DeathDiabeticWtComp => ((DiabeticWtComp, rMortalityDiabeticWtComp) => :*),\n",
- " v_DevelopingLate => ((DiabeticEarly, rDevelopingLate) => :*),\n",
- " v_DeathDiabeticEarly => ((DiabeticEarly, rMortalityDiabeticEarly) => :*),\n",
- " v_DeathDiabeticLate => ((DiabeticLate, rMortalityDiabeticLate) => :*),\n",
- " ),\n",
- "\n",
- " #flows\n",
- " (\n",
- " DevelopingDiabetic => v_DevelopingDiabetic,\n",
- " DeathPrediabetic => v_DeathPrediabetic,\n",
- " DevelopingEarly => v_DevelopingEarly,\n",
- " DeathDiabeticWtComp => v_DeathDiabeticWtComp,\n",
- " DevelopingLate => v_DevelopingLate,\n",
- " DeathDiabeticEarly => v_DeathDiabeticEarly,\n",
- " DeathDiabeticLate => v_DeathDiabeticLate\n",
- " ),\n",
- "\n",
- " #sums\n",
- " (\n",
- " :N\n",
- " )\n",
- "\n",
- " ),\n",
- "\n",
- " # feet\n",
- " foot(Prediabetic, :N, Prediabetic=>:N),\n",
- " foot(DiabeticWtComp, :N, DiabeticWtComp=>:N),\n",
- " foot(DiabeticEarly, :N, DiabeticEarly=>:N),\n",
- " foot(DiabeticLate, :N, DiabeticLate=>:N)\n",
- " \n",
- " )\n",
- "end"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 2.2 Build Diagnosis of Hyperglyce Sub Model Structure"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "fOpensubDiagnosis (generic function with 1 method)"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "function fOpensubDiagnosis(s)\n",
- "\n",
- " # The following are all symbols\n",
- " \n",
- " s_U = s ++ \"_U\"\n",
- " s_D = s ++ \"_D\"\n",
- "\n",
- " Diagnosis = \"Diagnosis\" ++ s\n",
- " v_Diagnosis = \"v_Diagnosis\" ++ s\n",
- " \n",
- " rs = \"r\" ++ s\n",
- "\n",
- " Open(\n",
- " StockAndFlowF(\n",
- "\n",
- " #stocks\n",
- " (\n",
- " s_U => (:F_NONE, Diagnosis, :N),\n",
- " s_D => (Diagnosis, :F_NONE, :N)\n",
- " ),\n",
- " \n",
- " #parameters\n",
- " (\n",
- " rs\n",
- " ),\n",
- " \n",
- " #dynamic variables\n",
- " (\n",
- " v_Diagnosis => ((s_U, rs) => :*)\n",
- " ),\n",
- " \n",
- " #flows\n",
- " (\n",
- " Diagnosis => v_Diagnosis\n",
- " ),\n",
- " \n",
- " #sums\n",
- " (\n",
- " :N\n",
- " )\n",
- "\n",
- " ),\n",
- " \n",
- " # feet\n",
- " foot(s_U, :N, s_U => :N),\n",
- " foot(s_D, :N, s_D => :N)\n",
- "\n",
- " )\n",
- "\n",
- "end"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 2.3 Generate Hyperglycemic Model by Composition"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": "\n\n\n\n\n",
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", false, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box1\", :label => \"Undx\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box2\", :label => \"Dx\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box3\", :label => \"Prediabetic\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box4\", :label => \"DiabeticWtComp\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box5\", :label => \"DiabeticEarly\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box6\", :label => \"DiabeticLate\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer1\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer2\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer3\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer4\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n11\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n19\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n12\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n20\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n21\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n21\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n13\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n21\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n22\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n22\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n14\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n22\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"ellipse\", :margin => \"0.05,0.025\", :width => \"0.5\", :height => \"0.5\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :len => \"1\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define the UWD-algebra of Hyperglycemic Model\n",
- "hyperglycemic_uwd = @relation (Prediabetic_U,Prediabetic_D,DiabeticWtComp_U,DiabeticWtComp_D,DiabeticEarly_U,DiabeticEarly_D,DiabeticLate_U,DiabeticLate_D) begin\n",
- " Undx(Prediabetic_U,DiabeticWtComp_U,DiabeticEarly_U,DiabeticLate_U)\n",
- " Dx(Prediabetic_D,DiabeticWtComp_D,DiabeticEarly_D,DiabeticLate_D)\n",
- " Prediabetic(Prediabetic_U,Prediabetic_D)\n",
- " DiabeticWtComp(DiabeticWtComp_U,DiabeticWtComp_D)\n",
- " DiabeticEarly(DiabeticEarly_U,DiabeticEarly_D)\n",
- " DiabeticLate(DiabeticLate_U,DiabeticLate_D)\n",
- "end;\n",
- "display_uwd(hyperglycemic_uwd)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": "\n\n\n\n\n",
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Prediabetic_U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticWtComp_U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticEarly_U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticLate_U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Prediabetic_D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticWtComp_D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticEarly_D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticLate_D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rDevelopingDiabetic_U\", :shape => \"circle\", :color => \"black\")), Catlab.Graphics.Graphviz.Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rMortalityPrediabetic\", :shape => \"circle\", :color => \"black\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p10\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p9\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p8\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# generate the Hyperglycemic population model by composition\n",
- "Model_Hyperglycemic=oapply(hyperglycemic_uwd, \n",
- " [fOpenSubHyperglycemic(\"_U\"),fOpenSubHyperglycemic(\"_D\"),fOpensubDiagnosis(\"Prediabetic\"),fOpensubDiagnosis(\"DiabeticWtComp\"),fOpensubDiagnosis(\"DiabeticEarly\"),fOpensubDiagnosis(\"DiabeticLate\")]) |> apex\n",
- "GraphF(Model_Hyperglycemic)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 3. Connection between Normoglycemic and Hyperglycemic Population Model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:5, SV:1, LS:5, F:9, I:9, O:9, V:9, LV:9, LSV:0, P:4, LVV:0, LPV:9, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " NormalWeight | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " OverWeight | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " Obese | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " Prediabetic_U | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " Prediabetic_D | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " fRecoveryToOWFromDx | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " fRecoveryToNWFromDx | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " fRecoveryToOBFromDx | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " fDevelopingPrediabeticNW | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " fRecoveryToOWFromUx | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " fRecoveryToOBFromUx | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " fRecoveryToNWFromUx | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " fDevelopingPrediabeticOW | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " fDevelopingPrediabeticOB | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 4 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 9 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 1 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 2 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 3 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " ##v_fRecoveryToOWFromDx#298 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " ##v_fRecoveryToNWFromDx#299 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ##v_fRecoveryToOBFromDx#300 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " ##v_fDevelopingPrediabeticNW#301 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " ##v_fRecoveryToOWFromUx#302 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " ##v_fRecoveryToOBFromUx#303 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " ##v_fRecoveryToNWFromUx#304 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " ##v_fDevelopingPrediabeticOW#305 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " ##v_fDevelopingPrediabeticOB#306 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 5 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 4 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 2 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 3 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rRecovery | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rIncidenceNW | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rIncidenceOW | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rIncidenceOB | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 1 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 1 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 1 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 3 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 4 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:5, SV:1, LS:5, F:9, I:9, O:9, V:9, LV:9, LSV:0, P:4, LVV:0, LPV:9, Name:0, Op:0, Position:0}\n",
- "┌───┬───────────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ NormalWeight │\n",
- "│\u001b[1m 2 \u001b[0m│ OverWeight │\n",
- "│\u001b[1m 3 \u001b[0m│ Obese │\n",
- "│\u001b[1m 4 \u001b[0m│ Prediabetic_U │\n",
- "│\u001b[1m 5 \u001b[0m│ Prediabetic_D │\n",
- "└───┴───────────────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ fRecoveryToOWFromDx │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ fRecoveryToNWFromDx │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ fRecoveryToOBFromDx │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ fDevelopingPrediabeticNW │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ fRecoveryToOWFromUx │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ fRecoveryToOBFromUx │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ fRecoveryToNWFromUx │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ fDevelopingPrediabeticOW │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ fDevelopingPrediabeticOB │\n",
- "└───┴────┴──────────────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 3 │\n",
- "│\u001b[1m 7 \u001b[0m│ 4 │ 4 │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 4 │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 8 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 9 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 4 │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ 4 │\n",
- "│\u001b[1m 6 \u001b[0m│ 7 │ 4 │\n",
- "│\u001b[1m 7 \u001b[0m│ 1 │ 5 │\n",
- "│\u001b[1m 8 \u001b[0m│ 2 │ 5 │\n",
- "│\u001b[1m 9 \u001b[0m│ 3 │ 5 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ ##v_fRecoveryToOWFromDx#298 │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ ##v_fRecoveryToNWFromDx#299 │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ ##v_fRecoveryToOBFromDx#300 │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ ##v_fDevelopingPrediabeticNW#301 │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ ##v_fRecoveryToOWFromUx#302 │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ ##v_fRecoveryToOBFromUx#303 │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ ##v_fRecoveryToNWFromUx#304 │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ ##v_fDevelopingPrediabeticOW#305 │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ ##v_fDevelopingPrediabeticOB#306 │ * │\n",
- "└───┴──────────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 5 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 5 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 5 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 6 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 4 │ 7 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 2 │ 8 │ 1 │\n",
- "│\u001b[1m 9 \u001b[0m│ 3 │ 9 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌───┬──────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rRecovery │\n",
- "│\u001b[1m 2 \u001b[0m│ rIncidenceNW │\n",
- "│\u001b[1m 3 \u001b[0m│ rIncidenceOW │\n",
- "│\u001b[1m 4 \u001b[0m│ rIncidenceOB │\n",
- "└───┴──────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 1 │ 5 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 1 │ 6 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 1 │ 7 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 3 │ 8 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 4 │ 9 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "Model_Norm_Hyper = @stock_and_flow begin\n",
- " \n",
- " :stocks\n",
- " NormalWeight\n",
- " OverWeight\n",
- " Obese\n",
- " Prediabetic_U\n",
- " Prediabetic_D\n",
- "\n",
- " :parameters\n",
- " rRecovery\n",
- " rIncidenceNW\n",
- " rIncidenceOW\n",
- " rIncidenceOB\n",
- "\n",
- " :flows\n",
- " Prediabetic_D => fRecoveryToOWFromDx(Prediabetic_D * rRecovery) => OverWeight\n",
- " Prediabetic_D => fRecoveryToNWFromDx(Prediabetic_D * rRecovery) => NormalWeight\n",
- " Prediabetic_D => fRecoveryToOBFromDx(Prediabetic_D * rRecovery) => Obese\n",
- "\n",
- " NormalWeight => fDevelopingPrediabeticNW(NormalWeight * rIncidenceNW) => Prediabetic_U\n",
- "\n",
- " Prediabetic_U => fRecoveryToOWFromUx(Prediabetic_U * rRecovery) => OverWeight\n",
- " Prediabetic_U => fRecoveryToOBFromUx(Prediabetic_U * rRecovery) => Obese\n",
- " Prediabetic_U => fRecoveryToNWFromUx(Prediabetic_U * rRecovery) => NormalWeight\n",
- "\n",
- " OverWeight => fDevelopingPrediabeticOW(OverWeight * rIncidenceOW) => Prediabetic_U\n",
- "\n",
- " Obese => fDevelopingPrediabeticOB(Obese * rIncidenceOB) => Prediabetic_U\n",
- "\n",
- " :sums\n",
- " N = [NormalWeight, OverWeight, Obese, Prediabetic_U, Prediabetic_D]\n",
- "\n",
- "\n",
- "end"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# 4 Generate Final Diabetes Model by Composition"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": "\n\n\n\n\n",
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", false, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box1\", :label => \"Normoglycemic\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box2\", :label => \"Hyperglycemic\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box3\", :label => \"Norm_Hyper\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer1\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer2\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer3\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer4\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer5\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"junction\", :fillcolor => \"black\", :height => \"0.075\", :id => \"junction1\", :label => \"\", :shape => \"circle\", :style => \"filled\", :width => \"0.075\", :xlabel => \"NormalWeight\")), Catlab.Graphics.Graphviz.Node(\"n10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"junction\", :fillcolor => \"black\", :height => \"0.075\", :id => \"junction2\", :label => \"\", :shape => \"circle\", :style => \"filled\", :width => \"0.075\", :xlabel => \"OverWeight\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n12\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n13\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n13\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n8\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n13\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"ellipse\", :margin => \"0.05,0.025\", :width => \"0.5\", :height => \"0.5\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :len => \"1\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# define the UWD-algebra of Hyperglycemic Model\n",
- "diabetes_uwd = @relation (NormalWeight,OverWeight,Obese,Prediabetic_U,Prediabetic_D) begin\n",
- " Normoglycemic(NormalWeight,OverWeight,Obese)\n",
- " Hyperglycemic(Prediabetic_U,Prediabetic_D)\n",
- " Norm_Hyper(NormalWeight,OverWeight,Obese,Prediabetic_U,Prediabetic_D)\n",
- "end;\n",
- "display_uwd(diabetes_uwd)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:11, SV:1, LS:11, F:33, I:22, O:32, V:33, LV:32, LSV:1, P:27, LVV:0, LPV:33, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " NormalWeight | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " OverWeight | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " Obese | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " Prediabetic_U | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " DiabeticWtComp_U | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " DiabeticEarly_U | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " DiabeticLate_U | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " Prediabetic_D | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " DiabeticWtComp_D | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " DiabeticEarly_D | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " DiabeticLate_D | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_DeathNormalWeight | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " f_BecomingOverWeight | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " f_DeathOverWeight | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " f_BecomingObese | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " f_DeathObese | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " f_NewBorn | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " DevelopingDiabetic_U | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " DeathPrediabetic_U | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " DevelopingEarly_U | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 10 | \n",
- " DeathDiabeticWtComp_U | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 11 | \n",
- " DevelopingLate_U | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 12 | \n",
- " DeathDiabeticEarly_U | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 13 | \n",
- " DeathDiabeticLate_U | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 14 | \n",
- " DevelopingDiabetic_D | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 15 | \n",
- " DeathPrediabetic_D | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 16 | \n",
- " DevelopingEarly_D | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 17 | \n",
- " DeathDiabeticWtComp_D | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 18 | \n",
- " DevelopingLate_D | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 19 | \n",
- " DeathDiabeticEarly_D | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 20 | \n",
- " DeathDiabeticLate_D | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 21 | \n",
- " DiagnosisPrediabetic | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 22 | \n",
- " DiagnosisDiabeticWtComp | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 23 | \n",
- " DiagnosisDiabeticEarly | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 24 | \n",
- " DiagnosisDiabeticLate | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 25 | \n",
- " fRecoveryToOWFromDx | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 26 | \n",
- " fRecoveryToNWFromDx | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 27 | \n",
- " fRecoveryToOBFromDx | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 28 | \n",
- " fDevelopingPrediabeticNW | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 29 | \n",
- " fRecoveryToOWFromUx | \n",
- "
\n",
- " \n",
- " 30 | \n",
- " 30 | \n",
- " fRecoveryToOBFromUx | \n",
- "
\n",
- " \n",
- " 31 | \n",
- " 31 | \n",
- " fRecoveryToNWFromUx | \n",
- "
\n",
- " \n",
- " 32 | \n",
- " 32 | \n",
- " fDevelopingPrediabeticOW | \n",
- "
\n",
- " \n",
- " 33 | \n",
- " 33 | \n",
- " fDevelopingPrediabeticOB | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 7 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 9 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 11 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 14 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 16 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 18 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 21 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 22 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 23 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 24 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 26 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 31 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 25 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 29 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 27 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 30 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 28 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 32 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 33 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 9 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 10 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 11 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 12 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 13 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 14 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 15 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 16 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 17 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 18 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 19 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 20 | \n",
- " 11 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 21 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 22 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 23 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 24 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 28 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 32 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 33 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 29 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 30 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 31 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 30 | \n",
- " 25 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 31 | \n",
- " 26 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 32 | \n",
- " 27 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " ##v_f_DeathNormalWeight#292 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " ##v_f_BecomingOverWeight#293 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " ##v_f_DeathOverWeight#294 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " ##v_f_BecomingObese#295 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " ##v_f_DeathObese#296 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " ##v_f_NewBorn#297 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_DevelopingDiabetic_U | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_DeathPrediabetic_U | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_DevelopingEarly_U | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " v_DeathDiabeticWtComp_U | \n",
- " * | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " v_DevelopingLate_U | \n",
- " * | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " v_DeathDiabeticEarly_U | \n",
- " * | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " v_DeathDiabeticLate_U | \n",
- " * | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " v_DevelopingDiabetic_D | \n",
- " * | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " v_DeathPrediabetic_D | \n",
- " * | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " v_DevelopingEarly_D | \n",
- " * | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " v_DeathDiabeticWtComp_D | \n",
- " * | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " v_DevelopingLate_D | \n",
- " * | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " v_DeathDiabeticEarly_D | \n",
- " * | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " v_DeathDiabeticLate_D | \n",
- " * | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " v_DiagnosisPrediabetic | \n",
- " * | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " v_DiagnosisDiabeticWtComp | \n",
- " * | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " v_DiagnosisDiabeticEarly | \n",
- " * | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " v_DiagnosisDiabeticLate | \n",
- " * | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " ##v_fRecoveryToOWFromDx#298 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " ##v_fRecoveryToNWFromDx#299 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " ##v_fRecoveryToOBFromDx#300 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " ##v_fDevelopingPrediabeticNW#301 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " ##v_fRecoveryToOWFromUx#302 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 30 | \n",
- " ##v_fRecoveryToOBFromUx#303 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 31 | \n",
- " ##v_fRecoveryToNWFromUx#304 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 32 | \n",
- " ##v_fDevelopingPrediabeticOW#305 | \n",
- " * | \n",
- "
\n",
- " \n",
- " 33 | \n",
- " ##v_fDevelopingPrediabeticOB#306 | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 4 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 5 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 5 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 6 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 6 | \n",
- " 12 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 7 | \n",
- " 13 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 8 | \n",
- " 14 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 8 | \n",
- " 15 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 9 | \n",
- " 16 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 9 | \n",
- " 17 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 10 | \n",
- " 18 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 10 | \n",
- " 19 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 11 | \n",
- " 20 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 4 | \n",
- " 21 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 5 | \n",
- " 22 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 6 | \n",
- " 23 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 7 | \n",
- " 24 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 8 | \n",
- " 25 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 8 | \n",
- " 26 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 8 | \n",
- " 27 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 1 | \n",
- " 28 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 4 | \n",
- " 29 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 4 | \n",
- " 30 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 30 | \n",
- " 4 | \n",
- " 31 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 31 | \n",
- " 2 | \n",
- " 32 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 32 | \n",
- " 3 | \n",
- " 33 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rBirth | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rMortalityWeight | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rObese | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rOverWeight | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rMortalityobese | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " rDevelopingDiabetic_U | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " rMortalityPrediabetic | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " rDevelopingEarly_U | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " rMortalityDiabeticEarly_U | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " rMortalityDiabeticLate | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " rMortalityDiabeticWtComp_U | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " rDevelopingLate | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " rDevelopingDiabetic_D | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " rMortalityPrediabetic | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " rDevelopingEarly_D | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " rMortalityDiabeticEarly_D | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " rMortalityDiabeticLate | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " rMortalityDiabeticWtComp_D | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " rDevelopingLate | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " rPrediabetic | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " rDiabeticWtComp | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " rDiabeticEarly | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " rDiabeticLate | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " rRecovery | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " rIncidenceNW | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " rIncidenceOW | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " rIncidenceOB | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 1 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 6 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 7 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 8 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 11 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 12 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 9 | \n",
- " 12 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 10 | \n",
- " 13 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 13 | \n",
- " 14 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 14 | \n",
- " 15 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 15 | \n",
- " 16 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 18 | \n",
- " 17 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 19 | \n",
- " 18 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 16 | \n",
- " 19 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 17 | \n",
- " 20 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 20 | \n",
- " 21 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 22 | \n",
- " 21 | \n",
- " 22 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 23 | \n",
- " 22 | \n",
- " 23 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 24 | \n",
- " 23 | \n",
- " 24 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 25 | \n",
- " 24 | \n",
- " 25 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 26 | \n",
- " 24 | \n",
- " 26 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 27 | \n",
- " 24 | \n",
- " 27 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 28 | \n",
- " 25 | \n",
- " 28 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 29 | \n",
- " 24 | \n",
- " 29 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 30 | \n",
- " 24 | \n",
- " 30 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 31 | \n",
- " 24 | \n",
- " 31 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 32 | \n",
- " 26 | \n",
- " 32 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 33 | \n",
- " 27 | \n",
- " 33 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:11, SV:1, LS:11, F:33, I:22, O:32, V:33, LV:32, LSV:1, P:27, LVV:0, LPV:33, Name:0, Op:0, Position:0}\n",
- "┌────┬──────────────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├────┼──────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ NormalWeight │\n",
- "│\u001b[1m 2 \u001b[0m│ OverWeight │\n",
- "│\u001b[1m 3 \u001b[0m│ Obese │\n",
- "│\u001b[1m 4 \u001b[0m│ Prediabetic_U │\n",
- "│\u001b[1m 5 \u001b[0m│ DiabeticWtComp_U │\n",
- "│\u001b[1m 6 \u001b[0m│ DiabeticEarly_U │\n",
- "│\u001b[1m 7 \u001b[0m│ DiabeticLate_U │\n",
- "│\u001b[1m 8 \u001b[0m│ Prediabetic_D │\n",
- "│\u001b[1m 9 \u001b[0m│ DiabeticWtComp_D │\n",
- "│\u001b[1m 10 \u001b[0m│ DiabeticEarly_D │\n",
- "│\u001b[1m 11 \u001b[0m│ DiabeticLate_D │\n",
- "└────┴──────────────────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 1 │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ 1 │\n",
- "│\u001b[1m 10 \u001b[0m│ 10 │ 1 │\n",
- "│\u001b[1m 11 \u001b[0m│ 11 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌────┬────┬─────────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├────┼────┼─────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_DeathNormalWeight │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ f_BecomingOverWeight │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ f_DeathOverWeight │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ f_BecomingObese │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ f_DeathObese │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ f_NewBorn │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ DevelopingDiabetic_U │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ DeathPrediabetic_U │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ DevelopingEarly_U │\n",
- "│\u001b[1m 10 \u001b[0m│ 10 │ DeathDiabeticWtComp_U │\n",
- "│\u001b[1m 11 \u001b[0m│ 11 │ DevelopingLate_U │\n",
- "│\u001b[1m 12 \u001b[0m│ 12 │ DeathDiabeticEarly_U │\n",
- "│\u001b[1m 13 \u001b[0m│ 13 │ DeathDiabeticLate_U │\n",
- "│\u001b[1m 14 \u001b[0m│ 14 │ DevelopingDiabetic_D │\n",
- "│\u001b[1m 15 \u001b[0m│ 15 │ DeathPrediabetic_D │\n",
- "│\u001b[1m 16 \u001b[0m│ 16 │ DevelopingEarly_D │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴────┴─────────────────────────┘\n",
- "\u001b[36m 17 rows omitted\u001b[0m\n",
- "┌────┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├────┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 3 │\n",
- "│\u001b[1m 4 \u001b[0m│ 7 │ 5 │\n",
- "│\u001b[1m 5 \u001b[0m│ 9 │ 6 │\n",
- "│\u001b[1m 6 \u001b[0m│ 11 │ 7 │\n",
- "│\u001b[1m 7 \u001b[0m│ 14 │ 9 │\n",
- "│\u001b[1m 8 \u001b[0m│ 16 │ 10 │\n",
- "│\u001b[1m 9 \u001b[0m│ 18 │ 11 │\n",
- "│\u001b[1m 10 \u001b[0m│ 21 │ 8 │\n",
- "│\u001b[1m 11 \u001b[0m│ 22 │ 9 │\n",
- "│\u001b[1m 12 \u001b[0m│ 23 │ 10 │\n",
- "│\u001b[1m 13 \u001b[0m│ 24 │ 11 │\n",
- "│\u001b[1m 14 \u001b[0m│ 26 │ 1 │\n",
- "│\u001b[1m 15 \u001b[0m│ 31 │ 1 │\n",
- "│\u001b[1m 16 \u001b[0m│ 25 │ 2 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴────┘\n",
- "\u001b[36m 6 rows omitted\u001b[0m\n",
- "┌────┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├────┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 7 │ 4 │\n",
- "│\u001b[1m 7 \u001b[0m│ 8 │ 4 │\n",
- "│\u001b[1m 8 \u001b[0m│ 9 │ 5 │\n",
- "│\u001b[1m 9 \u001b[0m│ 10 │ 5 │\n",
- "│\u001b[1m 10 \u001b[0m│ 11 │ 6 │\n",
- "│\u001b[1m 11 \u001b[0m│ 12 │ 6 │\n",
- "│\u001b[1m 12 \u001b[0m│ 13 │ 7 │\n",
- "│\u001b[1m 13 \u001b[0m│ 14 │ 8 │\n",
- "│\u001b[1m 14 \u001b[0m│ 15 │ 8 │\n",
- "│\u001b[1m 15 \u001b[0m│ 16 │ 9 │\n",
- "│\u001b[1m 16 \u001b[0m│ 17 │ 9 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴────┘\n",
- "\u001b[36m 16 rows omitted\u001b[0m\n",
- "┌────┬──────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼──────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ ##v_f_DeathNormalWeight#292 │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ ##v_f_BecomingOverWeight#293 │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ ##v_f_DeathOverWeight#294 │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ ##v_f_BecomingObese#295 │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ ##v_f_DeathObese#296 │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ ##v_f_NewBorn#297 │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_DevelopingDiabetic_U │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_DeathPrediabetic_U │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_DevelopingEarly_U │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ v_DeathDiabeticWtComp_U │ * │\n",
- "│\u001b[1m 11 \u001b[0m│ v_DevelopingLate_U │ * │\n",
- "│\u001b[1m 12 \u001b[0m│ v_DeathDiabeticEarly_U │ * │\n",
- "│\u001b[1m 13 \u001b[0m│ v_DeathDiabeticLate_U │ * │\n",
- "│\u001b[1m 14 \u001b[0m│ v_DevelopingDiabetic_D │ * │\n",
- "│\u001b[1m 15 \u001b[0m│ v_DeathPrediabetic_D │ * │\n",
- "│\u001b[1m 16 \u001b[0m│ v_DevelopingEarly_D │ * │\n",
- "│ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴──────────────────────────────┴─────┘\n",
- "\u001b[36m 17 rows omitted\u001b[0m\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 5 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 7 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 4 │ 8 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 5 │ 9 │ 1 │\n",
- "│\u001b[1m 9 \u001b[0m│ 5 │ 10 │ 1 │\n",
- "│\u001b[1m 10 \u001b[0m│ 6 │ 11 │ 1 │\n",
- "│\u001b[1m 11 \u001b[0m│ 6 │ 12 │ 1 │\n",
- "│\u001b[1m 12 \u001b[0m│ 7 │ 13 │ 1 │\n",
- "│\u001b[1m 13 \u001b[0m│ 8 │ 14 │ 1 │\n",
- "│\u001b[1m 14 \u001b[0m│ 8 │ 15 │ 1 │\n",
- "│\u001b[1m 15 \u001b[0m│ 9 │ 16 │ 1 │\n",
- "│\u001b[1m 16 \u001b[0m│ 9 │ 17 │ 1 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │ ⋮ │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "\u001b[36m 16 rows omitted\u001b[0m\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 6 │ 1 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌────┬────────────────────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├────┼────────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rBirth │\n",
- "│\u001b[1m 2 \u001b[0m│ rMortalityWeight │\n",
- "│\u001b[1m 3 \u001b[0m│ rObese │\n",
- "│\u001b[1m 4 \u001b[0m│ rOverWeight │\n",
- "│\u001b[1m 5 \u001b[0m│ rMortalityobese │\n",
- "│\u001b[1m 6 \u001b[0m│ rDevelopingDiabetic_U │\n",
- "│\u001b[1m 7 \u001b[0m│ rMortalityPrediabetic │\n",
- "│\u001b[1m 8 \u001b[0m│ rDevelopingEarly_U │\n",
- "│\u001b[1m 9 \u001b[0m│ rMortalityDiabeticEarly_U │\n",
- "│\u001b[1m 10 \u001b[0m│ rMortalityDiabeticLate │\n",
- "│\u001b[1m 11 \u001b[0m│ rMortalityDiabeticWtComp_U │\n",
- "│\u001b[1m 12 \u001b[0m│ rDevelopingLate │\n",
- "│\u001b[1m 13 \u001b[0m│ rDevelopingDiabetic_D │\n",
- "│\u001b[1m 14 \u001b[0m│ rMortalityPrediabetic │\n",
- "│\u001b[1m 15 \u001b[0m│ rDevelopingEarly_D │\n",
- "│\u001b[1m 16 \u001b[0m│ rMortalityDiabeticEarly_D │\n",
- "│ ⋮ │ ⋮ │\n",
- "└────┴────────────────────────────┘\n",
- "\u001b[36m 11 rows omitted\u001b[0m\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 1 │ 6 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 6 │ 7 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 7 │ 8 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 8 │ 9 │ 2 │\n",
- "│\u001b[1m 10 \u001b[0m│ 11 │ 10 │ 2 │\n",
- "│\u001b[1m 11 \u001b[0m│ 12 │ 11 │ 2 │\n",
- "│\u001b[1m 12 \u001b[0m│ 9 │ 12 │ 2 │\n",
- "│\u001b[1m 13 \u001b[0m│ 10 │ 13 │ 2 │\n",
- "│\u001b[1m 14 \u001b[0m│ 13 │ 14 │ 2 │\n",
- "│\u001b[1m 15 \u001b[0m│ 14 │ 15 │ 2 │\n",
- "│\u001b[1m 16 \u001b[0m│ 15 │ 16 │ 2 │\n",
- "│ ⋮ │ ⋮ │ ⋮ │ ⋮ │\n",
- "└─────┴──────┴──────┴──────────────┘\n",
- "\u001b[36m 17 rows omitted\u001b[0m\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "Diabetes_Model = oapply(diabetes_uwd,Dict(\n",
- " :Normoglycemic=>Open(Model_Normoglycemic,foot(:NormalWeight,:N,:NormalWeight=>:N),foot(:OverWeight,:N,:OverWeight=>:N),foot(:Obese,:N,:Obese=>:N)),\n",
- " :Hyperglycemic=>Open(Model_Hyperglycemic,foot(:Prediabetic_U,:N,:Prediabetic_U=>:N),foot(:Prediabetic_D,:N,:Prediabetic_D=>:N)),\n",
- " :Norm_Hyper=>Open(Model_Norm_Hyper,foot(:NormalWeight,:N,:NormalWeight=>:N),foot(:OverWeight,:N,:OverWeight=>:N),foot(:Obese,:N,:Obese=>:N),foot(:Prediabetic_U,:N,:Prediabetic_U=>:N),foot(:Prediabetic_D,:N,:Prediabetic_D=>:N)) \n",
- " )) |> apex"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": "\n\n\n\n\n",
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"NormalWeight\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"OverWeight\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Obese\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Prediabetic_U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticWtComp_U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticEarly_U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticLate_U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s8\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"Prediabetic_D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s9\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticWtComp_D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"s10\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"DiabeticEarly_D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p11\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p8\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p7\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p6\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"p2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(Diabetes_Model)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "11-element LArray{Float64, 1, Vector{Float64}, (:NormalWeight, :OverWeight, :Obese, :Prediabetic_U, :Prediabetic_D, :DiabeticWtComp_U, :DiabeticWtComp_D, :DiabeticEarly_U, :DiabeticEarly_D, :DiabeticLate_U, :DiabeticLate_D)}:\n",
- " :NormalWeight => 95811.0\n",
- " :OverWeight => 27709.0\n",
- " :Obese => 30770.0\n",
- " :Prediabetic_U => 13615.0\n",
- " :Prediabetic_D => 2000.0\n",
- " :DiabeticWtComp_U => 6396.0\n",
- " :DiabeticWtComp_D => 3000.0\n",
- " :DiabeticEarly_U => 0.0\n",
- " :DiabeticEarly_D => 1200.0\n",
- " :DiabeticLate_U => 0.0\n",
- " :DiabeticLate_D => 800.0"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "p = LVector(\n",
- " rBirth=12.5/1000, rMortalityWeight=4.0/1000, rOverWeight=0.03, rObese=0.06, rMortalityobese=13.0/1000,\n",
- " rDevelopingDiabetic_U=1.0/10.0, rDevelopingDiabetic_D=1.0/15.0, rMortalityPrediabetic=13.0/1000,\n",
- " rDevelopingEarly_U=1.0/10.0, rDevelopingEarly_D=1.0/15.0, rMortalityDiabeticWtComp_U=0.03, rMortalityDiabeticWtComp_D=0.027,\n",
- " rDevelopingLate=0.9, rMortalityDiabeticEarly_U=0.04+0.02, rMortalityDiabeticEarly_D=0.036+0.02,rMortalityDiabeticLate=0.04,\n",
- " rPrediabetic=0.1, rDiabeticWtComp=0.24, rDiabeticEarly=0.4, rDiabeticLate=0.6, rRecovery=0.03,\n",
- " rIncidenceNW=0.01, rIncidenceOW=0.017, rIncidenceOB=0.026\n",
- ")\n",
- "u0 = LVector(\n",
- " NormalWeight=95811.0, OverWeight=27709.0, Obese=30770.0, Prediabetic_U=13615.0, Prediabetic_D=2000.0,\n",
- " DiabeticWtComp_U=6396.0, DiabeticWtComp_D=3000.0, DiabeticEarly_U=0.0, DiabeticEarly_D=1200.0,\n",
- " DiabeticLate_U=0.0, DiabeticLate_D=800.0 \n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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9YiKilq4cOGqVavayqiEttEifOONN8x39o8//sjNze3Zs6fvbxYAADB9lJ6cUnnFhRea0dCgyEdi65s5JT4+nqbp9PR03/V4X3vtNe/2qFGjNm3aNHnyZIRQTk5OVlZWUFDQq6++GhcXN2fOnJiYmNmzZ+/YscO8qvfMM88sW7bszTffrGfS7dmzZ3tn00Y1k26PHj3a2+788ssvhw4dunDhQm+Z8ePHr1+//r777kMI5ebmnjt3Ljg4GCHkPS86f/78O++887XXXmMYZtWqVbfffnunTp0a8/706NGjtLS0vLy8TUy01oQgXL9+/csvv5yWlhYSEvKf//zHdzFi08qVK19++WWPxzNy5Mgvv/zy8guql/v888/Xr19/5syZZ5991nddxy+//PKll15yu90jRoz46quv/v73v5vzD506dapXr15t6zIsAOC6iXcEsHVNudnsOtsaGAqpaZphGLWGmWZkZLz55pvHjh1zuVwlJSVmMxEhNGDAAPMLMzAwsH///klJSR6Px+VyffTRR2YBcwT9lZ4LY7x///46Z35ZtWqVt5OOOd9bVlbWm2++mZycXFVVVVJSMnLkSPPePn36mCnoq0+fPjExMZs2bbr77ruXL1++dOnS+l+1l9lwbCujbBtby717986aNWv16tW33357SUnJ5VdBz50799e//nX37t29e/d+5JFHXn755eXLl5t3FRUV+c6143vTMIwHHnjgiy++KC8v9xbIzMycP3/+zp07+/Tp8+ijjy5YsGDFihXmXZs3b65zinQAAEAIjQnr3HCh68Ls/1Jrvs377rtv+vTpH3/8sc1mmzFjhvc04+WnEA3D4DjOt3tg/ZNuI4S889H4ioyM9G2SIoQefPDBe+6556OPPrLZbI899pi3Dr5T4fiaO3euOel2ZWVl469PHT16tFOnTk7n9VgJ5M9rbBAuXbr06aefHjNmDEKozhxatWrV+PHjzQvFr7zyyuDBg//9739bLJbMzMxhw4Zt2LDBXFXrwIEDkydPPnToUHR0NEJo9uzZCKFaXWC+/PLLMWPGDBw40DzUwIEDP/74Y7Nn1LvvvltPJQVBKCwsnDJlinfP1KlTzeW+QD3MmWXaytn81gNmlrk6oijWWpzoqnkXtm1tzp49+9RTTz300EPe5eNNqampkydPttlsgiDs3r37xhtvNPcnJSWVlpYG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991/6tSpoqKi/v37OxyOlStXVlZWfvvtt+fPn9+8eXNgYOD48eObWvPWpkQoXZny/37L2f+X7pOeHzQPeoQCAECLaFoQZmdn9+7du0uXLkePHr383pkzZ/7666833HBDSkrKpk2b+vbt2+AB586d+/XXXwuC8Oabby5evNi7f9asWTt27IiPjz9+/PjGjRt//fVXc/+8efOGDRvW1lOwSnGtPvndxnPbJnUb+81dn8C4QAAAaEFN6DWKMZ49e/aUKVPqvHfPnj1bt249cuTI1q1bn3rqqVdffdXcryjKli1bfEv+8ssvmqaZ24899tiZM2fuvfde3wK///77xo0bzUM9++yzr7zyiveufv36de7cufF1bm0kTf765LrpP80VVHHlhI+e7PMwpCAAALSsJrQI//Of/0RFRY0aNarO5uB33303adKkgIAAhNDDDz/8t7/9raqqyul0FhcXz507d9GiRbNmzUIIffzxx++9997evXvDwsIQQgMHDqzzUBMnTgwMDDQP9eqrr1ZUVJgnTh9//PF6auh2u7Oyssw6IIQIgli0aNHs2bMb/xqvHR3r287/uvrM9zcGJvxrxJsRtjCkI7fb3dL1QgghXdcVRdF1vaUr0saIosgwDE23jQvtrYfH4yFgmZSmg/ftKhiGwTAMwzTQA7+xn+ELFy7861//2rdv3+bNm+sskJOT069fP3M7OjqaJMm8vDyn0xkVFbV79+7bbrtNURSapt95551du3aZKXglOTk5vXr1MrcjIyMZhsnNza11BbFOdru9U6dOSUlJvnsafAuugz05+z9L/irYGvg/IxcnBHVr6erUZgYhz/MtXZE2hqIoCMKrgDFufB8C4AXv21UwDKMxP/Eb+xmeP3/+m2++abbS6iRJEstW93gkCIJhGFEUzZudOnXatm3b4MGDaZr+448/GpwXxvdQCCGWZb2HahBJkt4WYWtwquTMx0e+EDXpr/0fHxTZr6WrAwAAoLZGXSM8cODAvn37MjMzly5d+vPPPxcWFi5dulRVVd8y4eHhpaWl5rbH4xFFMSIiwnvvL7/84ufnx3Hctm3bGnw630NJkuR2u30P1VZccBe8vmfp63uWTuw29vPx70MKAgBA69SoFmFERMQLL7xQf5nBgwevWLHC3P7tt9/i4uK85z8///zzf/3rXzt37iRJ8vbbb1cUZe7cufUf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",
- "image/svg+xml": [
- "\n",
- "\n"
- ],
- "text/html": [
- "\n",
- "\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# results have been tested correct (same as the Anylogic model)\n",
- "prob_diabetes = ODEProblem(vectorfield(Diabetes_Model),u0,(0.0,100.0),p);\n",
- "sol_diabetes = solve(prob_diabetes,Tsit5(),abstol=1e-8);\n",
- "plot(sol_diabetes)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n"
- ],
- "text/plain": [
- "HTML{String}(\"\\n\")"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# to have the figures plotted fix to the wider of the cells\n",
- "HTML(\"\"\"\n",
- "\n",
- "\"\"\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.9.2",
- "language": "julia",
- "name": "julia-1.9"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.9.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/examples/full_fledged_schema_examples_new/composition/COVID_full_model.ipynb b/examples/full_fledged_schema_examples_new/composition/COVID_full_model.ipynb
index 508d4f87..fad47e2c 100644
--- a/examples/full_fledged_schema_examples_new/composition/COVID_full_model.ipynb
+++ b/examples/full_fledged_schema_examples_new/composition/COVID_full_model.ipynb
@@ -7,8 +7,6 @@
"metadata": {},
"outputs": [],
"source": [
- "using GraphViz\n",
- "\n",
"using StockFlow\n",
"using StockFlow.Syntax\n",
"\n",
diff --git a/examples/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.ipynb b/examples/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.ipynb
index be69510d..51ebc1da 100644
--- a/examples/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.ipynb
+++ b/examples/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.ipynb
@@ -6,8 +6,6 @@
"metadata": {},
"outputs": [],
"source": [
- "using GraphViz\n",
- "\n",
"using StockFlow\n",
"using StockFlow.Syntax\n",
"\n",
diff --git a/examples/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.ipynb b/examples/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.ipynb
index 7b34023a..6b96513e 100644
--- a/examples/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.ipynb
+++ b/examples/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.ipynb
@@ -6,7 +6,6 @@
"metadata": {},
"outputs": [],
"source": [
- "using GraphViz\n",
"\n",
"using StockFlow\n",
"using StockFlow.Syntax\n",
@@ -5277,15 +5276,15 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Julia 1.9.3",
+ "display_name": "Julia 1.10.4",
"language": "julia",
- "name": "julia-1.9"
+ "name": "julia-1.10"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
- "version": "1.9.3"
+ "version": "1.10.4"
}
},
"nbformat": 4,
diff --git a/examples/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.ipynb b/examples/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.ipynb
index 6dbcac3c..62b7228b 100644
--- a/examples/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.ipynb
+++ b/examples/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.ipynb
@@ -6,8 +6,6 @@
"metadata": {},
"outputs": [],
"source": [
- "using GraphViz\n",
- "\n",
"using StockFlow\n",
"using StockFlow.Syntax\n",
"\n",
diff --git a/examples/full_fledged_schema_examples_new/composition/diabetes_model.ipynb b/examples/full_fledged_schema_examples_new/composition/diabetes_model.ipynb
index 4752820e..4654478c 100644
--- a/examples/full_fledged_schema_examples_new/composition/diabetes_model.ipynb
+++ b/examples/full_fledged_schema_examples_new/composition/diabetes_model.ipynb
@@ -6,8 +6,6 @@
"metadata": {},
"outputs": [],
"source": [
- "using GraphViz\n",
- "\n",
"using StockFlow\n",
"using StockFlow.Syntax\n",
"\n",
diff --git a/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/diabetes_diagnose-checkpoint.ipynb b/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/diabetes_diagnose-checkpoint.ipynb
deleted file mode 100644
index e6f0f6e8..00000000
--- a/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/diabetes_diagnose-checkpoint.ipynb
+++ /dev/null
@@ -1,5169 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "using GraphViz\n",
- "\n",
- "using StockFlow\n",
- "using StockFlow.Syntax\n",
- "\n",
- "using Catlab\n",
- "using Catlab.CategoricalAlgebra\n",
- "using LabelledArrays\n",
- "using OrdinaryDiffEq\n",
- "using Plots\n",
- "\n",
- "using Catlab.Graphics\n",
- "using Catlab.Programs\n",
- "using Catlab.WiringDiagrams\n",
- "\n",
- "using Catlab.Graphics.Graphviz: Html\n",
- "using Catlab.Graphics.Graphviz\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "GraphF_typed (generic function with 5 methods)"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Functions for graphing typed Petri nets\n",
- "colors_vflow = [\"antiquewhite4\",\"antiquewhite\", \"gold\", \"saddlebrown\", \"slateblue\", \"blueviolet\", \"olive\"]\n",
- "colors_s = [\"deeppink\",\"darkorchid\",\"darkred\",\"coral\"] # red series\n",
- "colors_sv = [\"cornflowerblue\",\"cyan4\",\"cyan\",\"chartreuse\"] # green and blue series\n",
- "colors_p = [\"gold\",\"gold4\",\"darkorange1\",\"lightgoldenrod\",\"goldenrod\"] # yellow and orange\n",
- "\n",
- "flatten(fname::Symbol) = \"$fname\"\n",
- "\n",
- "function flatten(fname::Tuple)\n",
- " names = split(replace(string(fname), \"(\"=>\"\", \")\"=>\"\", \":\"=>\"\"), \",\")\n",
- " for i in 1:length(names)\n",
- " name = strip(names[i])\n",
- " if name[1:2] == \"id\"\n",
- " continue\n",
- " end\n",
- " return name\n",
- " end\n",
- " return \"id\"\n",
- "end\n",
- "\n",
- "def_stock(typed_StockFlow::ACSetTransformation, colors) = \n",
- " (p,s) -> (\"s$s\", Attributes(:label=>sname(p,s) isa Tuple where T ? Html(replace(string(sname(p,s)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(sname(p,s))\",\n",
- " :shape=>\"square\", \n",
- " :color=>\"black\", \n",
- " :style=>\"filled\", \n",
- " :fillcolor=>colors[typed_StockFlow[:S](s)]))\n",
- "\n",
- "def_parameter(typed_StockFlow::ACSetTransformation, colors) = \n",
- "(p, pp) -> (\"p$pp\", Attributes(:label=>pname(p,pp) isa Tuple where T ? Html(replace(string(pname(p,pp)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(pname(p,pp))\",\n",
- " :shape=>\"circle\", \n",
- " :color=>colors[typed_StockFlow[:P](pp)],\n",
- " :fontcolor=>colors[typed_StockFlow[:P](pp)]))\n",
- "\n",
- "def_auxiliaryVF(typed_StockFlow::ACSetTransformation, colors)=\n",
- " (p, v) -> (\"v$v\", Attributes(:label=>make_v_expr(p,v) isa Tuple where T ? Html(replace(string(make_v_expr(p,v)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(make_v_expr(p,v))\",\n",
- " :shape=>\"plaintext\", \n",
- " :fontcolor=>colors[typed_StockFlow[:V](v)]))\n",
- "\n",
- "\n",
- "def_sumV(typed_StockFlow::ACSetTransformation, colors) = \n",
- " (p, sv) -> (\"sv$sv\", Attributes(:label=>svname(p,sv) isa Tuple where T ? Html(replace(string(svname(p,sv)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(svname(p,sv))\",\n",
- " :shape=>\"circle\", \n",
- " :color=>\"black\",\n",
- " :fillcolor=>colors[typed_StockFlow[:SV](sv)], \n",
- " :style=>\"filled\")) \n",
- "\n",
- "\n",
- "def_flow_V(typed_StockFlow::ACSetTransformation, colors)=\n",
- " (p, us, ds, v, f) -> begin\n",
- " labelfontsize = \"6\"\n",
- " colorType = colors[typed_StockFlow[:F](f)]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\"\n",
- " arrowhead = \"none\"\n",
- " splines = \"ortho\"\n",
- " return ([us, \"v$v\"],Attributes(:label=>\"\", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)),\n",
- " ([\"v$v\", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) \n",
- "end\n",
- " \n",
- "def_flow_noneV(typed_StockFlow::ACSetTransformation, colors)=\n",
- " (p, us, ds, f) -> begin\n",
- " colorType = colors[typed_StockFlow[:F](f)]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\" \n",
- " ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>\"6\", :color=>color))\n",
- "end\n",
- "\n",
- "def_flow_V(colors = colors_vflow)=\n",
- " (p, us, ds, v, f) -> begin\n",
- " labelfontsize = \"6\"\n",
- " colorType = colors[f]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\"\n",
- " arrowhead = \"none\"\n",
- " splines = \"ortho\"\n",
- " return ([us, \"v$v\"],Attributes(:label=>\"\", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)),\n",
- " ([\"v$v\", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) \n",
- " \n",
- "end\n",
- " \n",
- "def_flow_noneV(colors = colors_vflow)=\n",
- " (p, us, ds, f) -> begin\n",
- " colorType = colors[f]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\" \n",
- " ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>\"6\", :color=>color))\n",
- "end\n",
- "\n",
- "GraphF_typed(typed_StockFlow::ACSetTransformation, colors_vflow = colors_vflow, colors_s = colors_s, colors_p = colors_p, colors_sv = colors_sv; schema::String=\"C\", type::String=\"SFVL\", rd::String=\"LR\") = GraphF(dom(typed_StockFlow),\n",
- " make_stock = def_stock(typed_StockFlow, colors_s), make_auxiliaryV=def_auxiliaryVF(typed_StockFlow, colors_vflow), make_sumV=def_sumV(typed_StockFlow, colors_sv), \n",
- " make_flow_V=def_flow_V(typed_StockFlow, colors_vflow), make_flow_noneV=def_flow_noneV(typed_StockFlow, colors_vflow),make_parameter=def_parameter(typed_StockFlow, colors_p),schema=schema, type=type, rd=rd\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:1, SV:1, LS:1, F:3, I:2, O:3, V:3, LV:3, LSV:0, P:3, LVV:0, LPV:3, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " Pop | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_death | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " f_progress | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " f_strata | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_death | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_progress | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_strata | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rDeath | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rProgress | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rStrata | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:1, SV:1, LS:1, F:3, I:2, O:3, V:3, LV:3, LSV:0, P:3, LVV:0, LPV:3, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ Pop │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_death │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ f_progress │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ f_strata │\n",
- "└───┴────┴────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_death │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_progress │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_strata │ * │\n",
- "└───┴────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌───┬───────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rDeath │\n",
- "│\u001b[1m 2 \u001b[0m│ rProgress │\n",
- "│\u001b[1m 3 \u001b[0m│ rStrata │\n",
- "└───┴───────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ 1 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "diabetes_type = @stock_and_flow begin\n",
- " :stocks\n",
- " Pop\n",
- "\n",
- " :parameters\n",
- " rDeath\n",
- " rProgress\n",
- " rStrata\n",
- "\n",
- " :dynamic_variables\n",
- " v_death = rDeath * Pop\n",
- " v_progress = rProgress * Pop\n",
- " v_strata = rStrata * Pop\n",
- "\n",
- " :flows\n",
- " Pop => f_death(v_death) => CLOUD\n",
- " Pop => f_progress(v_progress) => Pop \n",
- " Pop => f_strata(v_strata) => Pop\n",
- "\n",
- " :sums\n",
- " N = [Pop]\n",
- "\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Pop\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rProgress\", :shape => \"circle\", :color => \"black\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rStrata\", :shape => \"circle\", :color => \"black\")), Node(\"fs_1d\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath * Pop\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rProgress * Pop\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rStrata * Pop\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")) … Edge(NodeID[NodeID(\"v3\", \"\", \"\"), NodeID(\"s1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"f_strata\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"fs_1d\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"f_death\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(diabetes_type)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Pop\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rProgress\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rStrata\", :shape => \"circle\", :color => \"darkorange1\", :fontcolor => \"darkorange1\")), Node(\"fs_1d\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath * Pop\", :shape => \"plaintext\", :fontcolor => \"antiquewhite4\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rProgress * Pop\", :shape => \"plaintext\", :fontcolor => \"antiquewhite\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rStrata * Pop\", :shape => \"plaintext\", :fontcolor => \"gold\")), Node(\"sv1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"N\", :shape => \"circle\", :color => \"black\", :fillcolor => \"cornflowerblue\", :style => \"filled\")), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"antiquewhite:invis:antiquewhite\", :arrowhead => \"none\", :splines => \"ortho\")) … Edge(NodeID[NodeID(\"v3\", \"\", \"\"), NodeID(\"s1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"f_strata\"), :labelfontsize => \"6\", :color => \"gold:invis:gold\", :splines => \"ortho\")), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"antiquewhite4:invis:antiquewhite4\", :arrowhead => \"none\", :splines => \"ortho\")), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"fs_1d\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"f_death\"), :labelfontsize => \"6\", :color => \"antiquewhite4:invis:antiquewhite4\", :splines => \"ortho\")), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF_typed(id(diabetes_type))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Define the index name of each part"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "1:3"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "s, = parts(diabetes_type, :S)\n",
- "sv, = parts(diabetes_type, :SV)\n",
- "lsn, = parts(diabetes_type, :LS)\n",
- "f_death, f_progress, f_strata = parts(diabetes_type, :F)\n",
- "i_progress, i_strata = parts(diabetes_type, :I)\n",
- "o_death, o_progress, o_strata = parts(diabetes_type, :O)\n",
- "v_death, v_progress, v_strata = parts(diabetes_type, :V)\n",
- "lv_death, lv_progress, lv_strata = parts(diabetes_type, :LV)\n",
- "p_death, p_progress, p_strata = parts(diabetes_type, :P)\n",
- "lpv_death, lpv_progress, lpv_strata = parts(diabetes_type, :LPV)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [],
- "source": [
- "# remove names to allow for the loose ACSet transform to be natural\n",
- "diabetes_type = map(diabetes_type, Name=name->nothing, Op = op -> nothing, Position = pos -> nothing);"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Define the strata model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:2, SV:1, LS:2, F:5, I:3, O:5, V:5, LV:5, LSV:0, P:5, LVV:0, LPV:5, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " U | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " D | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_death_U | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " f_progress_U | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " f_death_D | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " f_progress_D | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " f_strata | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_death_U | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_progress_U | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_death_D | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_progress_D | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_strata | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 1 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rDeath_U | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rProgress_U | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rDeath_D | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rProgress_D | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rDiagnosis | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:2, SV:1, LS:2, F:5, I:3, O:5, V:5, LV:5, LSV:0, P:5, LVV:0, LPV:5, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ U │\n",
- "│\u001b[1m 2 \u001b[0m│ D │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_death_U │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ f_progress_U │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ f_death_D │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ f_progress_D │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ f_strata │\n",
- "└───┴────┴──────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_death_U │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_progress_U │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_death_D │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_progress_D │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_strata │ * │\n",
- "└───┴──────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 1 │ 5 │ 2 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌───┬─────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rDeath_U │\n",
- "│\u001b[1m 2 \u001b[0m│ rProgress_U │\n",
- "│\u001b[1m 3 \u001b[0m│ rDeath_D │\n",
- "│\u001b[1m 4 \u001b[0m│ rProgress_D │\n",
- "│\u001b[1m 5 \u001b[0m│ rDiagnosis │\n",
- "└───┴─────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │ 1 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "diagnosis_strata = @stock_and_flow begin\n",
- "\n",
- " :stocks\n",
- " U\n",
- " D\n",
- "\n",
- " :dynamic_variables\n",
- " v_death_U = rDeath_U * U\n",
- " v_progress_U = rProgress_U * U\n",
- " v_death_D = rDeath_D * D\n",
- " v_progress_D = rProgress_D * D\n",
- " v_strata = rDiagnosis * U\n",
- "\n",
- " :parameters\n",
- " rDeath_U\n",
- " rProgress_U\n",
- " \n",
- " rDeath_D\n",
- " rProgress_D\n",
- " \n",
- " rDiagnosis\n",
- " \n",
- " \n",
- "\n",
- " :flows\n",
- " U => f_death_U(v_death_U) => CLOUD\n",
- " U => f_progress_U(v_progress_U) => U\n",
- " \n",
- " D => f_death_D(v_death_D) => CLOUD\n",
- " D => f_progress_D(v_progress_D) => D\n",
- "\n",
- " U => f_strata(v_strata) => D\n",
- "\n",
- "\n",
- " :sums\n",
- " N = [U, D]\n",
- "\n",
- "\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath_U\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rProgress_U\", :shape => \"circle\", :color => \"black\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath_D\", :shape => \"circle\", :color => \"black\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rProgress_D\", :shape => \"circle\", :color => \"black\")), Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDiagnosis\", :shape => \"circle\", :color => \"black\")), Node(\"fs_1d\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Node(\"fs_3d\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath_U * U\", :shape => \"plaintext\", :fontcolor => \"black\")) … Edge(NodeID[NodeID(\"s2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s2\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(diagnosis_strata)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "ACSetTransformation((S = FinFunction([1, 1], 2, 1), SV = FinFunction([1], 1, 1), LS = FinFunction([1, 1], 2, 1), F = FinFunction([1, 2, 1, 2, 3], 5, 3), I = FinFunction([1, 1, 2], 3, 2), O = FinFunction([1, 2, 3, 1, 2], 5, 3), V = FinFunction([1, 2, 1, 2, 3], 5, 3), LV = FinFunction([1, 2, 1, 2, 3], 5, 3), LSV = FinFunction(1:0, 0, 0), P = FinFunction([1, 2, 1, 2, 3], 5, 3), LVV = FinFunction(1:0, 0, 0), LPV = FinFunction([1, 2, 1, 2, 3], 5, 3), Name = LooseVarFunction{Symbol, Nothing}(FinDomFunction(Union{Nothing, AttrVar}[], FinSet(0), TypeSet(Union{Nothing, AttrVar})), SetFunction(#38, TypeSet(Symbol), TypeSet(Nothing)), FinSet(0)), Op = LooseVarFunction{Symbol, Nothing}(FinDomFunction(Union{Nothing, AttrVar}[], FinSet(0), TypeSet(Union{Nothing, AttrVar})), SetFunction(#39, TypeSet(Symbol), TypeSet(Nothing)), FinSet(0)), Position = LooseVarFunction{Int8, Nothing}(FinDomFunction(Union{Nothing, AttrVar}[], FinSet(0), TypeSet(Union{Nothing, AttrVar})), SetFunction(#40, TypeSet(Int8), TypeSet(Nothing)), FinSet(0))), StockAndFlowF {S:2, SV:1, LS:2, F:5, I:3, O:5, V:5, LV:5, LSV:0, P:5, LVV:0, LPV:5, Name:0, Op:0, Position:0}, StockAndFlowFUntyped{Nothing, Nothing, Nothing} {S:1, SV:1, LS:1, F:3, I:2, O:3, V:3, LV:3, LSV:0, P:3, LVV:0, LPV:3, Name:0, Op:0, Position:0})"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "typed_diagnosis_strata=ACSetTransformation(diagnosis_strata, diabetes_type,\n",
- " S = [s, s],\n",
- " SV = [sv],\n",
- " LS = [lsn, lsn],\n",
- " F = [f_death, f_progress, f_death, f_progress, f_strata],\n",
- " I = [i_progress, i_progress, i_strata],\n",
- " O = [o_death, o_progress, o_strata, o_death, o_progress],\n",
- " V = [v_death, v_progress, v_death, v_progress, v_strata],\n",
- " LV = [lv_death, lv_progress, lv_death, lv_progress, lv_strata],\n",
- " P = [p_death, p_progress, p_death, p_progress, p_strata],\n",
- " LPV = [lpv_death, lpv_progress, lpv_death, lpv_progress, lpv_strata],\n",
- " Name=name->nothing, Op = op -> nothing, Position = pos -> nothing\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [],
- "source": [
- "@assert is_natural(typed_diagnosis_strata)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"U\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"D\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath_U\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rProgress_U\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath_D\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rProgress_D\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDiagnosis\", :shape => \"circle\", :color => \"darkorange1\", :fontcolor => \"darkorange1\")), Node(\"fs_1d\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Node(\"fs_3d\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDeath_U * U\", :shape => \"plaintext\", :fontcolor => \"antiquewhite4\")) … Edge(NodeID[NodeID(\"s2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s2\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF_typed(typed_diagnosis_strata)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Define the progress model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:4, SV:1, LS:4, F:11, I:7, O:11, V:11, LV:11, LSV:0, P:11, LVV:0, LPV:11, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " PreDiabetic | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " DiabeticWtComp | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " DiabeticEarly | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " DiabeticLate | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_DevelopingDiabetic | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " f_DeathPreDiabetic | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " f_DevelopingEarly | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " f_DeathDiabeticWtComp | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " f_DevelopingLate | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " f_DeathDiabeticEarly | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " f_DeathDiabeticLate | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " f_DiagnosePreDiabetic | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " f_DiagnoseDiabeticWtComp | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 10 | \n",
- " f_DiagnoseDiabeticEarly | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 11 | \n",
- " f_DiagnoseDiabeticLate | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 10 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 11 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 10 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 7 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 11 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_DevelopingDiabetic | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_DevelopingEarly | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_DevelopingLate | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_DeathPreDiabetic | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_DeathDiabeticWtComp | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_DeathDiabeticEarly | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_DeathDiabeticLate | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_DiagnosePreDiabetic | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_DiagnoseDiabeticWtComp | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " v_DiagnoseDiabeticEarly | \n",
- " * | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " v_DiagnoseDiabeticLate | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 4 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 1 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 2 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 3 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 4 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " rDevelopingDiabetic | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " rDevelopingEarly | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rDevelopingLate | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rMortalityPreDiabetic | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rMortalityDiabeticEarly | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " rMortalityDiabeticLate | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " rMortalityDiabeticWtComp | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " rDiagnosePreDiabetic | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " rDiagnoseDiabeticWtComp | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " rDiagnoseDiabeticEarly | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " rDiagnoseDiabeticLate | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 7 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 6 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 10 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 11 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:4, SV:1, LS:4, F:11, I:7, O:11, V:11, LV:11, LSV:0, P:11, LVV:0, LPV:11, Name:0, Op:0, Position:0}\n",
- "┌───┬────────────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ PreDiabetic │\n",
- "│\u001b[1m 2 \u001b[0m│ DiabeticWtComp │\n",
- "│\u001b[1m 3 \u001b[0m│ DiabeticEarly │\n",
- "│\u001b[1m 4 \u001b[0m│ DiabeticLate │\n",
- "└───┴────────────────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌────┬────┬──────────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├────┼────┼──────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_DevelopingDiabetic │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ f_DeathPreDiabetic │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ f_DevelopingEarly │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ f_DeathDiabeticWtComp │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ f_DevelopingLate │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ f_DeathDiabeticEarly │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ f_DeathDiabeticLate │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ f_DiagnosePreDiabetic │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ f_DiagnoseDiabeticWtComp │\n",
- "│\u001b[1m 10 \u001b[0m│ 10 │ f_DiagnoseDiabeticEarly │\n",
- "│\u001b[1m 11 \u001b[0m│ 11 │ f_DiagnoseDiabeticLate │\n",
- "└────┴────┴──────────────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 8 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 9 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 3 │\n",
- "│\u001b[1m 5 \u001b[0m│ 10 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ 4 │\n",
- "│\u001b[1m 7 \u001b[0m│ 11 │ 4 │\n",
- "└───┴─────┴────┘\n",
- "┌────┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├────┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 8 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 9 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 5 │ 3 │\n",
- "│\u001b[1m 8 \u001b[0m│ 6 │ 3 │\n",
- "│\u001b[1m 9 \u001b[0m│ 10 │ 3 │\n",
- "│\u001b[1m 10 \u001b[0m│ 7 │ 4 │\n",
- "│\u001b[1m 11 \u001b[0m│ 11 │ 4 │\n",
- "└────┴─────┴────┘\n",
- "┌────┬──────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼──────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_DevelopingDiabetic │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_DevelopingEarly │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_DevelopingLate │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_DeathPreDiabetic │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_DeathDiabeticWtComp │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_DeathDiabeticEarly │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_DeathDiabeticLate │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_DiagnosePreDiabetic │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_DiagnoseDiabeticWtComp │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ v_DiagnoseDiabeticEarly │ * │\n",
- "│\u001b[1m 11 \u001b[0m│ v_DiagnoseDiabeticLate │ * │\n",
- "└────┴──────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 5 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 6 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 4 │ 7 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 1 │ 8 │ 1 │\n",
- "│\u001b[1m 9 \u001b[0m│ 2 │ 9 │ 1 │\n",
- "│\u001b[1m 10 \u001b[0m│ 3 │ 10 │ 1 │\n",
- "│\u001b[1m 11 \u001b[0m│ 4 │ 11 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌────┬──────────────────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├────┼──────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ rDevelopingDiabetic │\n",
- "│\u001b[1m 2 \u001b[0m│ rDevelopingEarly │\n",
- "│\u001b[1m 3 \u001b[0m│ rDevelopingLate │\n",
- "│\u001b[1m 4 \u001b[0m│ rMortalityPreDiabetic │\n",
- "│\u001b[1m 5 \u001b[0m│ rMortalityDiabeticEarly │\n",
- "│\u001b[1m 6 \u001b[0m│ rMortalityDiabeticLate │\n",
- "│\u001b[1m 7 \u001b[0m│ rMortalityDiabeticWtComp │\n",
- "│\u001b[1m 8 \u001b[0m│ rDiagnosePreDiabetic │\n",
- "│\u001b[1m 9 \u001b[0m│ rDiagnoseDiabeticWtComp │\n",
- "│\u001b[1m 10 \u001b[0m│ rDiagnoseDiabeticEarly │\n",
- "│\u001b[1m 11 \u001b[0m│ rDiagnoseDiabeticLate │\n",
- "└────┴──────────────────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 7 │ 5 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ 6 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 6 │ 7 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 8 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ 9 │ 2 │\n",
- "│\u001b[1m 10 \u001b[0m│ 10 │ 10 │ 2 │\n",
- "│\u001b[1m 11 \u001b[0m│ 11 │ 11 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "diabetes_progress = @stock_and_flow begin\n",
- " :stocks\n",
- " PreDiabetic\n",
- " DiabeticWtComp\n",
- " DiabeticEarly\n",
- " DiabeticLate\n",
- "\n",
- " :parameters\n",
- " \n",
- " rDevelopingDiabetic\n",
- " rDevelopingEarly\n",
- " rDevelopingLate\n",
- " \n",
- " rMortalityPreDiabetic\n",
- " rMortalityDiabeticEarly\n",
- " rMortalityDiabeticLate\n",
- " rMortalityDiabeticWtComp\n",
- " \n",
- "\n",
- " rDiagnosePreDiabetic\n",
- " rDiagnoseDiabeticWtComp\n",
- " rDiagnoseDiabeticEarly\n",
- " rDiagnoseDiabeticLate\n",
- "\n",
- " :dynamic_variables\n",
- " v_DevelopingDiabetic = PreDiabetic * rDevelopingDiabetic\n",
- " v_DevelopingEarly = DiabeticWtComp * rDevelopingEarly\n",
- " v_DevelopingLate = DiabeticEarly * rDevelopingLate\n",
- "\n",
- " v_DeathPreDiabetic = PreDiabetic * rMortalityPreDiabetic\n",
- " v_DeathDiabeticWtComp = DiabeticWtComp * rMortalityDiabeticWtComp\n",
- " v_DeathDiabeticEarly = DiabeticEarly * rMortalityDiabeticEarly\n",
- " v_DeathDiabeticLate = DiabeticLate * rMortalityDiabeticLate\n",
- "\n",
- " v_DiagnosePreDiabetic = PreDiabetic * rDiagnosePreDiabetic\n",
- " v_DiagnoseDiabeticWtComp = DiabeticWtComp * rDiagnoseDiabeticWtComp\n",
- " v_DiagnoseDiabeticEarly = DiabeticEarly * rDiagnoseDiabeticEarly\n",
- " v_DiagnoseDiabeticLate = DiabeticLate * rDiagnoseDiabeticLate\n",
- "\n",
- " :flows\n",
- " PreDiabetic => f_DevelopingDiabetic(v_DevelopingDiabetic) => DiabeticWtComp\n",
- " PreDiabetic => f_DeathPreDiabetic(v_DeathPreDiabetic) => CLOUD\n",
- " DiabeticWtComp => f_DevelopingEarly(v_DevelopingEarly) => DiabeticEarly\n",
- " DiabeticWtComp => f_DeathDiabeticWtComp(v_DeathDiabeticWtComp) => CLOUD\n",
- " DiabeticEarly => f_DevelopingLate(v_DevelopingLate) => DiabeticLate\n",
- " DiabeticEarly => f_DeathDiabeticEarly(v_DeathDiabeticEarly) => CLOUD\n",
- " DiabeticLate => f_DeathDiabeticLate(v_DeathDiabeticLate) => CLOUD\n",
- "\n",
- " PreDiabetic => f_DiagnosePreDiabetic(v_DiagnosePreDiabetic) => PreDiabetic\n",
- " DiabeticWtComp => f_DiagnoseDiabeticWtComp(v_DiagnoseDiabeticWtComp) => DiabeticWtComp\n",
- " DiabeticEarly => f_DiagnoseDiabeticEarly(v_DiagnoseDiabeticEarly) => DiabeticEarly\n",
- " DiabeticLate => f_DiagnoseDiabeticLate(v_DiagnoseDiabeticLate) => DiabeticLate\n",
- "\n",
- " :sums\n",
- " N = [PreDiabetic, DiabeticWtComp, DiabeticEarly, DiabeticLate]\n",
- "\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "ACSetTransformation((S = FinFunction([1, 1, 1, 1], 4, 1), SV = FinFunction([1], 1, 1), LS = FinFunction([1, 1, 1, 1], 4, 1), F = FinFunction([2, 1, 2, 1, 2, 1, 1, 3, 3, 3, 3], 11, 3), I = FinFunction([2, 1, 2, 1, 2, 1, 2], 7, 2), O = FinFunction([2, 1, 3, 2, 1, 3, 2, 1, 3, 1, 3], 11, 3), V = FinFunction([2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3], 11, 3), LV = FinFunction([2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3], 11, 3), LSV = FinFunction(1:0, 0, 0), P = FinFunction([2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3], 11, 3), LVV = FinFunction(1:0, 0, 0), LPV = FinFunction([2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3], 11, 3), Name = LooseVarFunction{Symbol, Nothing}(FinDomFunction(Union{Nothing, AttrVar}[], FinSet(0), TypeSet(Union{Nothing, AttrVar})), SetFunction(#46, TypeSet(Symbol), TypeSet(Nothing)), FinSet(0)), Op = LooseVarFunction{Symbol, Nothing}(FinDomFunction(Union{Nothing, AttrVar}[], FinSet(0), TypeSet(Union{Nothing, AttrVar})), SetFunction(#47, TypeSet(Symbol), TypeSet(Nothing)), FinSet(0)), Position = LooseVarFunction{Int8, Nothing}(FinDomFunction(Union{Nothing, AttrVar}[], FinSet(0), TypeSet(Union{Nothing, AttrVar})), SetFunction(#48, TypeSet(Int8), TypeSet(Nothing)), FinSet(0))), StockAndFlowF {S:4, SV:1, LS:4, F:11, I:7, O:11, V:11, LV:11, LSV:0, P:11, LVV:0, LPV:11, Name:0, Op:0, Position:0}, StockAndFlowFUntyped{Nothing, Nothing, Nothing} {S:1, SV:1, LS:1, F:3, I:2, O:3, V:3, LV:3, LSV:0, P:3, LVV:0, LPV:3, Name:0, Op:0, Position:0})"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "typed_diabetes_progress=ACSetTransformation(diabetes_progress, diabetes_type,\n",
- " S = [s, s, s, s],\n",
- " SV = [sv],\n",
- " LS = [lsn, lsn, lsn, lsn],\n",
- " F = [f_progress, f_death, f_progress, f_death, f_progress, f_death, f_death, f_strata, f_strata, f_strata, f_strata],\n",
- " I = [i_strata, i_progress, i_strata, i_progress, i_strata, i_progress, i_strata],\n",
- " O = [o_progress, o_death, o_strata, o_progress, o_death, o_strata, o_progress, o_death, o_strata, o_death, o_strata],\n",
- " V = [v_progress, v_progress, v_progress, v_death, v_death, v_death, v_death, v_strata, v_strata, v_strata, v_strata],\n",
- " P = [p_progress, p_progress, p_progress, p_death, p_death, p_death, p_death, p_strata, p_strata, p_strata, p_strata],\n",
- " LV = [lv_progress, lv_progress, lv_progress, lv_death, lv_death, lv_death, lv_death, lv_strata, lv_strata, lv_strata, lv_strata],\n",
- " LPV = [lpv_progress, lpv_progress, lpv_progress, lpv_death, lpv_death, lpv_death, lpv_death, lpv_strata, lpv_strata, lpv_strata, lpv_strata],\n",
- " Name=name->nothing, Op = op -> nothing, Position = pos -> nothing\n",
- "\n",
- ")\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [],
- "source": [
- "@assert is_natural(typed_diabetes_progress)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"PreDiabetic\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"DiabeticWtComp\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"DiabeticEarly\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"DiabeticLate\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDevelopingDiabetic\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDevelopingEarly\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rDevelopingLate\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rMortalityPreDiabetic\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rMortalityDiabeticEarly\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rMortalityDiabeticLate\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")) … Edge(NodeID[NodeID(\"p10\", \"\", \"\"), NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p9\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p8\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p7\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF_typed(typed_diabetes_progress)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowFUntyped{Tuple{Symbol, Symbol}, Tuple{Symbol, Symbol}, Tuple{Int8, Int8}} {S:8, SV:1, LS:8, F:18, I:10, O:18, V:18, LV:18, LSV:0, P:18, LVV:0, LPV:18, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " (:U, :PreDiabetic) | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " (:D, :PreDiabetic) | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " (:U, :DiabeticWtComp) | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " (:D, :DiabeticWtComp) | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " (:U, :DiabeticEarly) | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " (:D, :DiabeticEarly) | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " (:U, :DiabeticLate) | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " (:D, :DiabeticLate) | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " (:N, :N) | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " (:f_progress_U, :f_DevelopingDiabetic) | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " (:f_progress_D, :f_DevelopingDiabetic) | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 7 | \n",
- " (:f_death_U, :f_DeathPreDiabetic) | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 8 | \n",
- " (:f_death_D, :f_DeathPreDiabetic) | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " (:f_progress_U, :f_DevelopingEarly) | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " (:f_progress_D, :f_DevelopingEarly) | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 9 | \n",
- " (:f_death_U, :f_DeathDiabeticWtComp) | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 10 | \n",
- " (:f_death_D, :f_DeathDiabeticWtComp) | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 5 | \n",
- " (:f_progress_U, :f_DevelopingLate) | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 6 | \n",
- " (:f_progress_D, :f_DevelopingLate) | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 11 | \n",
- " (:f_death_U, :f_DeathDiabeticEarly) | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 12 | \n",
- " (:f_death_D, :f_DeathDiabeticEarly) | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 13 | \n",
- " (:f_death_U, :f_DeathDiabeticLate) | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 14 | \n",
- " (:f_death_D, :f_DeathDiabeticLate) | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 15 | \n",
- " (:f_strata, :f_DiagnosePreDiabetic) | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 16 | \n",
- " (:f_strata, :f_DiagnoseDiabeticWtComp) | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 17 | \n",
- " (:f_strata, :f_DiagnoseDiabeticEarly) | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 18 | \n",
- " (:f_strata, :f_DiagnoseDiabeticLate) | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 15 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 16 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 17 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 9 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 10 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 18 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 15 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 6 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 7 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 8 | \n",
- " 4 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 16 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 9 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 10 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 11 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 12 | \n",
- " 6 | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 17 | \n",
- " 5 | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 13 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 14 | \n",
- " 8 | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 18 | \n",
- " 7 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " (:v_progress_U, :v_DevelopingDiabetic) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " (:v_progress_D, :v_DevelopingDiabetic) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " (:v_progress_U, :v_DevelopingEarly) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " (:v_progress_D, :v_DevelopingEarly) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " (:v_progress_U, :v_DevelopingLate) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " (:v_progress_D, :v_DevelopingLate) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " (:v_death_U, :v_DeathPreDiabetic) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " (:v_death_D, :v_DeathPreDiabetic) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " (:v_death_U, :v_DeathDiabeticWtComp) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " (:v_death_D, :v_DeathDiabeticWtComp) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " (:v_death_U, :v_DeathDiabeticEarly) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " (:v_death_D, :v_DeathDiabeticEarly) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " (:v_death_U, :v_DeathDiabeticLate) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " (:v_death_D, :v_DeathDiabeticLate) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " (:v_strata, :v_DiagnosePreDiabetic) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " (:v_strata, :v_DiagnoseDiabeticWtComp) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " (:v_strata, :v_DiagnoseDiabeticEarly) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " (:v_strata, :v_DiagnoseDiabeticLate) | \n",
- " (:*, :*) | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 4 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 6 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 1 | \n",
- " 7 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 2 | \n",
- " 8 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 3 | \n",
- " 9 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 4 | \n",
- " 10 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 5 | \n",
- " 11 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 6 | \n",
- " 12 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 7 | \n",
- " 13 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 8 | \n",
- " 14 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 1 | \n",
- " 15 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 3 | \n",
- " 16 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 5 | \n",
- " 17 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 7 | \n",
- " 18 | \n",
- " (2, 1) | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " (:rProgress_U, :rDevelopingDiabetic) | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " (:rProgress_D, :rDevelopingDiabetic) | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " (:rProgress_U, :rDevelopingEarly) | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " (:rProgress_D, :rDevelopingEarly) | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " (:rProgress_U, :rDevelopingLate) | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " (:rProgress_D, :rDevelopingLate) | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " (:rDeath_U, :rMortalityPreDiabetic) | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " (:rDeath_D, :rMortalityPreDiabetic) | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " (:rDeath_U, :rMortalityDiabeticEarly) | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " (:rDeath_D, :rMortalityDiabeticEarly) | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " (:rDeath_U, :rMortalityDiabeticLate) | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " (:rDeath_D, :rMortalityDiabeticLate) | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " (:rDeath_U, :rMortalityDiabeticWtComp) | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " (:rDeath_D, :rMortalityDiabeticWtComp) | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " (:rDiagnosis, :rDiagnosePreDiabetic) | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " (:rDiagnosis, :rDiagnoseDiabeticWtComp) | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " (:rDiagnosis, :rDiagnoseDiabeticEarly) | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " (:rDiagnosis, :rDiagnoseDiabeticLate) | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 4 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 5 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 6 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " 7 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " 8 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 13 | \n",
- " 9 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 14 | \n",
- " 10 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 9 | \n",
- " 11 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 10 | \n",
- " 12 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 11 | \n",
- " 13 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 12 | \n",
- " 14 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 15 | \n",
- " 15 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 16 | \n",
- " 16 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 17 | \n",
- " 17 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 18 | \n",
- " 18 | \n",
- " (1, 2) | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowFUntyped{Tuple{Symbol, Symbol}, Tuple{Symbol, Symbol}, Tuple{Int8, Int8}} {S:8, SV:1, LS:8, F:18, I:10, O:18, V:18, LV:18, LSV:0, P:18, LVV:0, LPV:18, Name:0, Op:0, Position:0}\n",
- "┌───┬───────────────────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ (:U, :PreDiabetic) │\n",
- "│\u001b[1m 2 \u001b[0m│ (:D, :PreDiabetic) │\n",
- "│\u001b[1m 3 \u001b[0m│ (:U, :DiabeticWtComp) │\n",
- "│\u001b[1m 4 \u001b[0m│ (:D, :DiabeticWtComp) │\n",
- "│\u001b[1m 5 \u001b[0m│ (:U, :DiabeticEarly) │\n",
- "│\u001b[1m 6 \u001b[0m│ (:D, :DiabeticEarly) │\n",
- "│\u001b[1m 7 \u001b[0m│ (:U, :DiabeticLate) │\n",
- "│\u001b[1m 8 \u001b[0m│ (:D, :DiabeticLate) │\n",
- "└───┴───────────────────────┘\n",
- "┌────┬──────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼──────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ (:N, :N) │\n",
- "└────┴──────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌────┬────┬────────────────────────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├────┼────┼────────────────────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ (:f_progress_U, :f_DevelopingDiabetic) │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ (:f_progress_D, :f_DevelopingDiabetic) │\n",
- "│\u001b[1m 3 \u001b[0m│ 7 │ (:f_death_U, :f_DeathPreDiabetic) │\n",
- "│\u001b[1m 4 \u001b[0m│ 8 │ (:f_death_D, :f_DeathPreDiabetic) │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ (:f_progress_U, :f_DevelopingEarly) │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ (:f_progress_D, :f_DevelopingEarly) │\n",
- "│\u001b[1m 7 \u001b[0m│ 9 │ (:f_death_U, :f_DeathDiabeticWtComp) │\n",
- "│\u001b[1m 8 \u001b[0m│ 10 │ (:f_death_D, :f_DeathDiabeticWtComp) │\n",
- "│\u001b[1m 9 \u001b[0m│ 5 │ (:f_progress_U, :f_DevelopingLate) │\n",
- "│\u001b[1m 10 \u001b[0m│ 6 │ (:f_progress_D, :f_DevelopingLate) │\n",
- "│\u001b[1m 11 \u001b[0m│ 11 │ (:f_death_U, :f_DeathDiabeticEarly) │\n",
- "│\u001b[1m 12 \u001b[0m│ 12 │ (:f_death_D, :f_DeathDiabeticEarly) │\n",
- "│\u001b[1m 13 \u001b[0m│ 13 │ (:f_death_U, :f_DeathDiabeticLate) │\n",
- "│\u001b[1m 14 \u001b[0m│ 14 │ (:f_death_D, :f_DeathDiabeticLate) │\n",
- "│\u001b[1m 15 \u001b[0m│ 15 │ (:f_strata, :f_DiagnosePreDiabetic) │\n",
- "│\u001b[1m 16 \u001b[0m│ 16 │ (:f_strata, :f_DiagnoseDiabeticWtComp) │\n",
- "│\u001b[1m 17 \u001b[0m│ 17 │ (:f_strata, :f_DiagnoseDiabeticEarly) │\n",
- "│\u001b[1m 18 \u001b[0m│ 18 │ (:f_strata, :f_DiagnoseDiabeticLate) │\n",
- "└────┴────┴────────────────────────────────────────┘\n",
- "┌────┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├────┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 15 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 4 │\n",
- "│\u001b[1m 4 \u001b[0m│ 16 │ 4 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 6 │\n",
- "│\u001b[1m 7 \u001b[0m│ 17 │ 6 │\n",
- "│\u001b[1m 8 \u001b[0m│ 9 │ 7 │\n",
- "│\u001b[1m 9 \u001b[0m│ 10 │ 8 │\n",
- "│\u001b[1m 10 \u001b[0m│ 18 │ 8 │\n",
- "└────┴─────┴────┘\n",
- "┌────┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├────┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 15 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ 3 │\n",
- "│\u001b[1m 7 \u001b[0m│ 6 │ 4 │\n",
- "│\u001b[1m 8 \u001b[0m│ 7 │ 3 │\n",
- "│\u001b[1m 9 \u001b[0m│ 8 │ 4 │\n",
- "│\u001b[1m 10 \u001b[0m│ 16 │ 3 │\n",
- "│\u001b[1m 11 \u001b[0m│ 9 │ 5 │\n",
- "│\u001b[1m 12 \u001b[0m│ 10 │ 6 │\n",
- "│\u001b[1m 13 \u001b[0m│ 11 │ 5 │\n",
- "│\u001b[1m 14 \u001b[0m│ 12 │ 6 │\n",
- "│\u001b[1m 15 \u001b[0m│ 17 │ 5 │\n",
- "│\u001b[1m 16 \u001b[0m│ 13 │ 7 │\n",
- "│\u001b[1m 17 \u001b[0m│ 14 │ 8 │\n",
- "│\u001b[1m 18 \u001b[0m│ 18 │ 7 │\n",
- "└────┴─────┴────┘\n",
- "┌────┬────────────────────────────────────────┬──────────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼────────────────────────────────────────┼──────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ (:v_progress_U, :v_DevelopingDiabetic) │ (:*, :*) │\n",
- "│\u001b[1m 2 \u001b[0m│ (:v_progress_D, :v_DevelopingDiabetic) │ (:*, :*) │\n",
- "│\u001b[1m 3 \u001b[0m│ (:v_progress_U, :v_DevelopingEarly) │ (:*, :*) │\n",
- "│\u001b[1m 4 \u001b[0m│ (:v_progress_D, :v_DevelopingEarly) │ (:*, :*) │\n",
- "│\u001b[1m 5 \u001b[0m│ (:v_progress_U, :v_DevelopingLate) │ (:*, :*) │\n",
- "│\u001b[1m 6 \u001b[0m│ (:v_progress_D, :v_DevelopingLate) │ (:*, :*) │\n",
- "│\u001b[1m 7 \u001b[0m│ (:v_death_U, :v_DeathPreDiabetic) │ (:*, :*) │\n",
- "│\u001b[1m 8 \u001b[0m│ (:v_death_D, :v_DeathPreDiabetic) │ (:*, :*) │\n",
- "│\u001b[1m 9 \u001b[0m│ (:v_death_U, :v_DeathDiabeticWtComp) │ (:*, :*) │\n",
- "│\u001b[1m 10 \u001b[0m│ (:v_death_D, :v_DeathDiabeticWtComp) │ (:*, :*) │\n",
- "│\u001b[1m 11 \u001b[0m│ (:v_death_U, :v_DeathDiabeticEarly) │ (:*, :*) │\n",
- "│\u001b[1m 12 \u001b[0m│ (:v_death_D, :v_DeathDiabeticEarly) │ (:*, :*) │\n",
- "│\u001b[1m 13 \u001b[0m│ (:v_death_U, :v_DeathDiabeticLate) │ (:*, :*) │\n",
- "│\u001b[1m 14 \u001b[0m│ (:v_death_D, :v_DeathDiabeticLate) │ (:*, :*) │\n",
- "│\u001b[1m 15 \u001b[0m│ (:v_strata, :v_DiagnosePreDiabetic) │ (:*, :*) │\n",
- "│\u001b[1m 16 \u001b[0m│ (:v_strata, :v_DiagnoseDiabeticWtComp) │ (:*, :*) │\n",
- "│\u001b[1m 17 \u001b[0m│ (:v_strata, :v_DiagnoseDiabeticEarly) │ (:*, :*) │\n",
- "│\u001b[1m 18 \u001b[0m│ (:v_strata, :v_DiagnoseDiabeticLate) │ (:*, :*) │\n",
- "└────┴────────────────────────────────────────┴──────────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ (2, 1) │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ (2, 1) │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ (2, 1) │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 4 │ (2, 1) │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │ (2, 1) │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 6 │ (2, 1) │\n",
- "│\u001b[1m 7 \u001b[0m│ 1 │ 7 │ (2, 1) │\n",
- "│\u001b[1m 8 \u001b[0m│ 2 │ 8 │ (2, 1) │\n",
- "│\u001b[1m 9 \u001b[0m│ 3 │ 9 │ (2, 1) │\n",
- "│\u001b[1m 10 \u001b[0m│ 4 │ 10 │ (2, 1) │\n",
- "│\u001b[1m 11 \u001b[0m│ 5 │ 11 │ (2, 1) │\n",
- "│\u001b[1m 12 \u001b[0m│ 6 │ 12 │ (2, 1) │\n",
- "│\u001b[1m 13 \u001b[0m│ 7 │ 13 │ (2, 1) │\n",
- "│\u001b[1m 14 \u001b[0m│ 8 │ 14 │ (2, 1) │\n",
- "│\u001b[1m 15 \u001b[0m│ 1 │ 15 │ (2, 1) │\n",
- "│\u001b[1m 16 \u001b[0m│ 3 │ 16 │ (2, 1) │\n",
- "│\u001b[1m 17 \u001b[0m│ 5 │ 17 │ (2, 1) │\n",
- "│\u001b[1m 18 \u001b[0m│ 7 │ 18 │ (2, 1) │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌────┬─────────────────────────────────────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├────┼─────────────────────────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ (:rProgress_U, :rDevelopingDiabetic) │\n",
- "│\u001b[1m 2 \u001b[0m│ (:rProgress_D, :rDevelopingDiabetic) │\n",
- "│\u001b[1m 3 \u001b[0m│ (:rProgress_U, :rDevelopingEarly) │\n",
- "│\u001b[1m 4 \u001b[0m│ (:rProgress_D, :rDevelopingEarly) │\n",
- "│\u001b[1m 5 \u001b[0m│ (:rProgress_U, :rDevelopingLate) │\n",
- "│\u001b[1m 6 \u001b[0m│ (:rProgress_D, :rDevelopingLate) │\n",
- "│\u001b[1m 7 \u001b[0m│ (:rDeath_U, :rMortalityPreDiabetic) │\n",
- "│\u001b[1m 8 \u001b[0m│ (:rDeath_D, :rMortalityPreDiabetic) │\n",
- "│\u001b[1m 9 \u001b[0m│ (:rDeath_U, :rMortalityDiabeticEarly) │\n",
- "│\u001b[1m 10 \u001b[0m│ (:rDeath_D, :rMortalityDiabeticEarly) │\n",
- "│\u001b[1m 11 \u001b[0m│ (:rDeath_U, :rMortalityDiabeticLate) │\n",
- "│\u001b[1m 12 \u001b[0m│ (:rDeath_D, :rMortalityDiabeticLate) │\n",
- "│\u001b[1m 13 \u001b[0m│ (:rDeath_U, :rMortalityDiabeticWtComp) │\n",
- "│\u001b[1m 14 \u001b[0m│ (:rDeath_D, :rMortalityDiabeticWtComp) │\n",
- "│\u001b[1m 15 \u001b[0m│ (:rDiagnosis, :rDiagnosePreDiabetic) │\n",
- "│\u001b[1m 16 \u001b[0m│ (:rDiagnosis, :rDiagnoseDiabeticWtComp) │\n",
- "│\u001b[1m 17 \u001b[0m│ (:rDiagnosis, :rDiagnoseDiabeticEarly) │\n",
- "│\u001b[1m 18 \u001b[0m│ (:rDiagnosis, :rDiagnoseDiabeticLate) │\n",
- "└────┴─────────────────────────────────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ (1, 2) │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ (1, 2) │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ (1, 2) │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 4 │ (1, 2) │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 5 │ (1, 2) │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 6 │ (1, 2) │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ 7 │ (1, 2) │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ 8 │ (1, 2) │\n",
- "│\u001b[1m 9 \u001b[0m│ 13 │ 9 │ (1, 2) │\n",
- "│\u001b[1m 10 \u001b[0m│ 14 │ 10 │ (1, 2) │\n",
- "│\u001b[1m 11 \u001b[0m│ 9 │ 11 │ (1, 2) │\n",
- "│\u001b[1m 12 \u001b[0m│ 10 │ 12 │ (1, 2) │\n",
- "│\u001b[1m 13 \u001b[0m│ 11 │ 13 │ (1, 2) │\n",
- "│\u001b[1m 14 \u001b[0m│ 12 │ 14 │ (1, 2) │\n",
- "│\u001b[1m 15 \u001b[0m│ 15 │ 15 │ (1, 2) │\n",
- "│\u001b[1m 16 \u001b[0m│ 16 │ 16 │ (1, 2) │\n",
- "│\u001b[1m 17 \u001b[0m│ 17 │ 17 │ (1, 2) │\n",
- "│\u001b[1m 18 \u001b[0m│ 18 │ 18 │ (1, 2) │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "strat_model = pullback(typed_diagnosis_strata, typed_diabetes_progress)\n",
- "apex(strat_model)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [],
- "source": [
- "stratify(typed_model1, typed_model2) = ob(pullback(typed_model1, typed_model2))\n",
- "\n",
- "typed_stratify(typed_model1, typed_model2) =\n",
- " compose(proj1(pullback(typed_model1, typed_model2)), typed_model1);"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"U
PreDiabetic\"), :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"D
PreDiabetic\"), :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"U
DiabeticWtComp\"), :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"D
DiabeticWtComp\"), :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"U
DiabeticEarly\"), :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"D
DiabeticEarly\"), :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s7\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"U
DiabeticLate\"), :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s8\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"D
DiabeticLate\"), :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"rProgress_U
rDevelopingDiabetic\"), :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"rProgress_D
rDevelopingDiabetic\"), :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")) … Edge(NodeID[NodeID(\"p14\", \"\", \"\"), NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p13\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p8\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p7\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "typed_stratified_model = typed_stratify(typed_diagnosis_strata, typed_diabetes_progress)\n",
- "GraphF_typed(typed_stratified_model)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n"
- ],
- "text/plain": [
- "HTML{String}(\"\\n\")"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# to have the figures plotted fix to the wider of the cells\n",
- "HTML(\"\"\"\n",
- "\n",
- "\"\"\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.9.3",
- "language": "julia",
- "name": "julia-1.9"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.9.3"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/sir_linear_stratification-checkpoint.ipynb b/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/sir_linear_stratification-checkpoint.ipynb
deleted file mode 100644
index d919976c..00000000
--- a/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/sir_linear_stratification-checkpoint.ipynb
+++ /dev/null
@@ -1,5022 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "38c8b82a",
- "metadata": {},
- "outputs": [],
- "source": [
- "using GraphViz\n",
- "\n",
- "using StockFlow\n",
- "using StockFlow.Syntax\n",
- "\n",
- "using Catlab\n",
- "using Catlab.CategoricalAlgebra\n",
- "using LabelledArrays\n",
- "using OrdinaryDiffEq\n",
- "using Plots\n",
- "\n",
- "using Catlab.Graphics\n",
- "using Catlab.Programs\n",
- "using Catlab.Theories\n",
- "using Catlab.WiringDiagrams\n",
- "\n",
- "using Catlab.Graphics.Graphviz: Html\n",
- "using Catlab.Graphics.Graphviz\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "id": "25d17bab",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "GraphF_typed (generic function with 5 methods)"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Functions for graphing typed Petri nets\n",
- "colors_vflow = [\"antiquewhite4\",\"antiquewhite\", \"gold\", \"saddlebrown\", \"slateblue\", \"blueviolet\", \"olive\"]\n",
- "colors_s = [\"deeppink\",\"darkorchid\",\"darkred\",\"coral\"] # red series\n",
- "colors_sv = [\"cornflowerblue\",\"cyan4\",\"cyan\",\"chartreuse\"] # green and blue series\n",
- "colors_p = [\"gold\",\"gold4\",\"darkorange1\",\"lightgoldenrod\",\"goldenrod\"] # yellow and orange\n",
- "\n",
- "flatten(fname::Symbol) = \"$fname\"\n",
- "\n",
- "function flatten(fname::Tuple)\n",
- " names = split(replace(string(fname), \"(\"=>\"\", \")\"=>\"\", \":\"=>\"\"), \",\")\n",
- " for i in 1:length(names)\n",
- " name = strip(names[i])\n",
- " if name[1:2] == \"id\"\n",
- " continue\n",
- " end\n",
- " return name\n",
- " end\n",
- " return \"id\"\n",
- "end\n",
- "\n",
- "def_stock(typed_StockFlow::ACSetTransformation, colors) = \n",
- " (p,s) -> (\"s$s\", Attributes(:label=>sname(p,s) isa Tuple where T ? Html(replace(string(sname(p,s)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(sname(p,s))\",\n",
- " :shape=>\"square\", \n",
- " :color=>\"black\", \n",
- " :style=>\"filled\", \n",
- " :fillcolor=>colors[typed_StockFlow[:S](s)]))\n",
- "\n",
- "def_parameter(typed_StockFlow::ACSetTransformation, colors) = \n",
- "(p, pp) -> (\"p$pp\", Attributes(:label=>pname(p,pp) isa Tuple where T ? Html(replace(string(pname(p,pp)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(pname(p,pp))\",\n",
- " :shape=>\"circle\", \n",
- " :color=>colors[typed_StockFlow[:P](pp)],\n",
- " :fontcolor=>colors[typed_StockFlow[:P](pp)]))\n",
- "\n",
- "def_auxiliaryVF(typed_StockFlow::ACSetTransformation, colors)=\n",
- " (p, v) -> (\"v$v\", Attributes(:label=>make_v_expr(p,v) isa Tuple where T ? Html(replace(string(make_v_expr(p,v)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(make_v_expr(p,v))\",\n",
- " :shape=>\"plaintext\", \n",
- " :fontcolor=>colors[typed_StockFlow[:V](v)]))\n",
- "\n",
- "\n",
- "def_sumV(typed_StockFlow::ACSetTransformation, colors) = \n",
- " (p, sv) -> (\"sv$sv\", Attributes(:label=>svname(p,sv) isa Tuple where T ? Html(replace(string(svname(p,sv)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(svname(p,sv))\",\n",
- " :shape=>\"circle\", \n",
- " :color=>\"black\",\n",
- " :fillcolor=>colors[typed_StockFlow[:SV](sv)], \n",
- " :style=>\"filled\")) \n",
- "\n",
- "\n",
- "def_flow_V(typed_StockFlow::ACSetTransformation, colors)=\n",
- " (p, us, ds, v, f) -> begin\n",
- " labelfontsize = \"6\"\n",
- " colorType = colors[typed_StockFlow[:F](f)]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\"\n",
- " arrowhead = \"none\"\n",
- " splines = \"ortho\"\n",
- " return ([us, \"v$v\"],Attributes(:label=>\"\", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)),\n",
- " ([\"v$v\", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) \n",
- "end\n",
- " \n",
- "def_flow_noneV(typed_StockFlow::ACSetTransformation, colors)=\n",
- " (p, us, ds, f) -> begin\n",
- " colorType = colors[typed_StockFlow[:F](f)]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\" \n",
- " ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>\"6\", :color=>color))\n",
- "end\n",
- "\n",
- "def_flow_V(colors = colors_vflow)=\n",
- " (p, us, ds, v, f) -> begin\n",
- " labelfontsize = \"6\"\n",
- " colorType = colors[f]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\"\n",
- " arrowhead = \"none\"\n",
- " splines = \"ortho\"\n",
- " return ([us, \"v$v\"],Attributes(:label=>\"\", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)),\n",
- " ([\"v$v\", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) \n",
- " \n",
- "end\n",
- " \n",
- "def_flow_noneV(colors = colors_vflow)=\n",
- " (p, us, ds, f) -> begin\n",
- " colorType = colors[f]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\" \n",
- " ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>\"6\", :color=>color))\n",
- "end\n",
- "\n",
- "GraphF_typed(typed_StockFlow::ACSetTransformation, colors_vflow = colors_vflow, colors_s = colors_s, colors_p = colors_p, colors_sv = colors_sv; schema::String=\"C\", type::String=\"SFVL\", rd::String=\"LR\") = GraphF(dom(typed_StockFlow),\n",
- " make_stock = def_stock(typed_StockFlow, colors_s), make_auxiliaryV=def_auxiliaryVF(typed_StockFlow, colors_vflow), make_sumV=def_sumV(typed_StockFlow, colors_sv), \n",
- " make_flow_V=def_flow_V(typed_StockFlow, colors_vflow), make_flow_noneV=def_flow_noneV(typed_StockFlow, colors_vflow),make_parameter=def_parameter(typed_StockFlow, colors_p),schema=schema, type=type, rd=rd\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "71cffbed",
- "metadata": {},
- "source": [
- "# 2. An example of a stratified pure linear model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "3dc07ade",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:1, SV:1, LS:1, F:4, I:3, O:3, V:4, LV:3, LSV:1, P:4, LVV:0, LPV:4, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " pop | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_aging | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " f_fstOrder | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " f_birth | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " f_death | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_aging | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_fstOrder | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_birth | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_death | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " δ | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rFstOrder | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rage | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:1, SV:1, LS:1, F:4, I:3, O:3, V:4, LV:3, LSV:1, P:4, LVV:0, LPV:4, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ pop │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_aging │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ f_fstOrder │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ f_birth │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ f_death │\n",
- "└───┴────┴────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 1 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_aging │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_fstOrder │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_birth │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_death │ * │\n",
- "└───┴────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 4 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ δ │\n",
- "│\u001b[1m 3 \u001b[0m│ rFstOrder │\n",
- "│\u001b[1m 4 \u001b[0m│ rage │\n",
- "└───┴───────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "l_type = @stock_and_flow begin \n",
- " :stocks\n",
- " pop\n",
- " \n",
- " :parameters\n",
- " μ\n",
- " δ\n",
- " rFstOrder\n",
- " rage\n",
- " \n",
- " :dynamic_variables\n",
- " v_aging = pop * rage\n",
- " v_fstOrder = pop * rFstOrder\n",
- " v_birth = N * μ\n",
- " v_death = pop * δ\n",
- " \n",
- " :flows\n",
- " pop => f_aging(v_aging) => pop\n",
- " pop => f_fstOrder(v_fstOrder) => pop\n",
- " CLOUD => f_birth(v_birth) => pop\n",
- " pop => f_death(v_death) => CLOUD\n",
- " \n",
- " :sums\n",
- " N = [pop]\n",
- " \n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "id": "e6748d4a",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"μ\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δ\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rFstOrder\", :shape => \"circle\", :color => \"darkorange1\", :fontcolor => \"darkorange1\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rage\", :shape => \"circle\", :color => \"lightgoldenrod\", :fontcolor => \"lightgoldenrod\")), Node(\"fs_3u\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Node(\"fs_4d\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop * rage\", :shape => \"plaintext\", :fontcolor => \"antiquewhite4\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop * rFstOrder\", :shape => \"plaintext\", :fontcolor => \"antiquewhite\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"N * μ\", :shape => \"plaintext\", :fontcolor => \"gold\")) … Edge(NodeID[NodeID(\"v4\", \"\", \"\"), NodeID(\"fs_4d\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => Html(\"f_death\"), :labelfontsize => \"6\", :color => \"saddlebrown:invis:saddlebrown\", :splines => \"ortho\")), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF_typed(id(l_type))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "a31d42b3",
- "metadata": {},
- "outputs": [],
- "source": [
- "# eliminate the attribute of name to enable pass the natural check\n",
- "# only eliminate the name, the other two attributes should be okay\n",
- "l_type = map(l_type, Name=name->nothing, Op=op->nothing, Position=pos->nothing);"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "id": "544e4151",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "1:4"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "s, = parts(l_type, :S)\n",
- "N, = parts(l_type, :SV)\n",
- "lsn, = parts(l_type, :LS)\n",
- "f_aging, f_fstorder, f_birth, f_death = parts(l_type, :F)\n",
- "i_aging, i_fstorder, i_birth = parts(l_type, :I)\n",
- "o_aging, o_fstorder, o_death = parts(l_type, :O)\n",
- "v_aging, v_fstorder, v_birth, v_death = parts(l_type, :V)\n",
- "lv_aging1, lv_fstorder1, lv_death1 = parts(l_type, :LV)\n",
- "lsv_birth1, = parts(l_type, :LSV)\n",
- "p_μ, p_δ, p_rfstOrder, p_rage = parts(l_type, :P)\n",
- "lpv_aging2, lpv_fstorder2, lpv_birth2, lpv_death2 = parts(l_type, :LPV)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "2bafc641",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:1, LS:3, F:9, I:6, O:8, V:9, LV:8, LSV:1, P:6, LVV:0, LPV:9, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " NormalWeight | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " OverWeight | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " Obese | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_NewBorn | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " f_DeathNormalWeight | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " f_BecomingOverWeight | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " f_DeathOverWeight | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " f_BecomingObese | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " f_DeathObese | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " f_idNW | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 8 | \n",
- " f_idOW | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 9 | \n",
- " f_idOb | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 9 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 6 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 9 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_NewBorn | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_DeathNormalWeight | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_BecomingOverWeight | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_DeathOverWeight | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_BecomingObese | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_DeathObese | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_idNW | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_idOW | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_idOb | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 1 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 2 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 3 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " δw | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rw | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " ro | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " δo | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " rage | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 6 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 6 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 6 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:1, LS:3, F:9, I:6, O:8, V:9, LV:8, LSV:1, P:6, LVV:0, LPV:9, Name:0, Op:0, Position:0}\n",
- "┌───┬──────────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ NormalWeight │\n",
- "│\u001b[1m 2 \u001b[0m│ OverWeight │\n",
- "│\u001b[1m 3 \u001b[0m│ Obese │\n",
- "└───┴──────────────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬──────────────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼──────────────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_NewBorn │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ f_DeathNormalWeight │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ f_BecomingOverWeight │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ f_DeathOverWeight │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ f_BecomingObese │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ f_DeathObese │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ f_idNW │\n",
- "│\u001b[1m 8 \u001b[0m│ 8 │ f_idOW │\n",
- "│\u001b[1m 9 \u001b[0m│ 9 │ f_idOb │\n",
- "└───┴────┴──────────────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 8 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 9 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 7 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 8 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 6 │ 3 │\n",
- "│\u001b[1m 8 \u001b[0m│ 9 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_NewBorn │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_DeathNormalWeight │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_BecomingOverWeight │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_DeathOverWeight │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_BecomingObese │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_DeathObese │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_idNW │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_idOW │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_idOb │ * │\n",
- "└───┴──────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 5 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 6 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 1 │ 7 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 2 │ 8 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 3 │ 9 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ δw │\n",
- "│\u001b[1m 3 \u001b[0m│ rw │\n",
- "│\u001b[1m 4 \u001b[0m│ ro │\n",
- "│\u001b[1m 5 \u001b[0m│ δo │\n",
- "│\u001b[1m 6 \u001b[0m│ rage │\n",
- "└───┴───────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 5 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ 6 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 6 │ 7 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 6 │ 8 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 6 │ 9 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "\n",
- "WeightModel = @stock_and_flow begin\n",
- " :stocks\n",
- " NormalWeight\n",
- " OverWeight\n",
- " Obese\n",
- " \n",
- " :parameters\n",
- " μ\n",
- " δw\n",
- " rw\n",
- " ro\n",
- " δo\n",
- " rage\n",
- " \n",
- " :dynamic_variables\n",
- " v_NewBorn = N * μ\n",
- " v_DeathNormalWeight = NormalWeight * δw\n",
- " v_BecomingOverWeight = NormalWeight * rw\n",
- " v_DeathOverWeight = OverWeight * δw\n",
- " v_BecomingObese = OverWeight * ro\n",
- " v_DeathObese = Obese * δo\n",
- " v_idNW = NormalWeight * rage\n",
- " v_idOW = OverWeight * rage\n",
- " v_idOb = Obese * rage\n",
- " \n",
- " :flows\n",
- " CLOUD => f_NewBorn(v_NewBorn) => NormalWeight\n",
- " NormalWeight => f_DeathNormalWeight(v_DeathNormalWeight) => ClOUD\n",
- " NormalWeight => f_BecomingOverWeight(v_BecomingOverWeight) => OverWeight\n",
- " OverWeight => f_DeathOverWeight(v_DeathOverWeight) => CLOUD\n",
- " \n",
- " OverWeight => f_BecomingObese(v_BecomingObese) => Obese\n",
- " Obese => f_DeathObese(v_DeathObese) => CLOUD\n",
- " NormalWeight => f_idNW(v_idNW) => NormalWeight\n",
- " OverWeight => f_idOW(v_idOW) => OverWeight\n",
- " Obese => f_idOb(v_idOb) => Obese\n",
- " \n",
- " :sums\n",
- " N = [NormalWeight, OverWeight, Obese]\n",
- " \n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "2030f949",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"NormalWeight\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"OverWeight\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Obese\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δw\", :shape => \"circle\", :color => \"black\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rw\", :shape => \"circle\", :color => \"black\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"ro\", :shape => \"circle\", :color => \"black\")), Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δo\", :shape => \"circle\", :color => \"black\")), Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rage\", :shape => \"circle\", :color => \"black\")), Node(\"fs_1u\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(WeightModel, rd=\"TB\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "27b99534",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"NormalWeight\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"OverWeight\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Obese\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"μ\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δw\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rw\", :shape => \"circle\", :color => \"darkorange1\", :fontcolor => \"darkorange1\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"ro\", :shape => \"circle\", :color => \"darkorange1\", :fontcolor => \"darkorange1\")), Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δo\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rage\", :shape => \"circle\", :color => \"lightgoldenrod\", :fontcolor => \"lightgoldenrod\")), Node(\"fs_1u\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"\", :shape => \"point\", :color => \"white\")) … Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"TB\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "typed_WeightModel=ACSetTransformation(WeightModel, l_type,\n",
- " S = [s,s,s],\n",
- " SV = [N],\n",
- " LS = [lsn,lsn,lsn], \n",
- " F = [f_birth, f_death, f_fstorder, f_death, f_fstorder, f_death, f_aging, f_aging, f_aging], \n",
- " I = [i_birth, i_aging, i_fstorder, i_aging, i_fstorder, i_aging], \n",
- " O = [o_death, o_fstorder, o_aging, o_death, o_fstorder, o_aging, o_death, o_aging],\n",
- " V = [v_birth, v_death, v_fstorder, v_death, v_fstorder, v_death, v_aging, v_aging, v_aging],\n",
- " LV = [lv_death1, lv_fstorder1, lv_death1, lv_fstorder1, lv_death1, lv_aging1, lv_aging1, lv_aging1],\n",
- " LSV = [lsv_birth1],\n",
- " P = [p_μ, p_δ, p_rfstOrder, p_rfstOrder, p_δ, p_rage],\n",
- " LPV = [lpv_birth2, lpv_death2, lpv_fstorder2, lpv_death2, lpv_fstorder2, lpv_death2, lpv_aging2, lpv_aging2, lpv_aging2],\n",
- " Name = name -> nothing, Op=op->nothing, Position=pos->nothing\n",
- ");\n",
- "@assert is_natural(typed_WeightModel)\n",
- "GraphF_typed(typed_WeightModel, rd=\"TB\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "3a0f91db",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:1, LS:3, F:9, I:6, O:8, V:9, LV:8, LSV:1, P:7, LVV:0, LPV:9, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " Child | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " Adult | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " Senior | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " f_NB | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " f_idC | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " f_DeathC | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " f_agingCA | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " f_idA | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 5 | \n",
- " f_DeathA | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 7 | \n",
- " f_agingAS | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 9 | \n",
- " f_idS | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 8 | \n",
- " f_DeathS | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 7 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 8 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 9 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_NB | \n",
- " * | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_DeathC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_idC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_agingCA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_DeathA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_idA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_agingAS | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_DeathS | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_idS | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 3 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 3 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " μ | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " δC | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " δA | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " δS | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " rageCA | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " rageAS | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " r | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 7 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 6 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 4 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 7 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:1, LS:3, F:9, I:6, O:8, V:9, LV:8, LSV:1, P:7, LVV:0, LPV:9, Name:0, Op:0, Position:0}\n",
- "┌───┬────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ Child │\n",
- "│\u001b[1m 2 \u001b[0m│ Adult │\n",
- "│\u001b[1m 3 \u001b[0m│ Senior │\n",
- "└───┴────────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬───────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼───────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ f_NB │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ f_idC │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ f_DeathC │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ f_agingCA │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ f_idA │\n",
- "│\u001b[1m 6 \u001b[0m│ 5 │ f_DeathA │\n",
- "│\u001b[1m 7 \u001b[0m│ 7 │ f_agingAS │\n",
- "│\u001b[1m 8 \u001b[0m│ 9 │ f_idS │\n",
- "│\u001b[1m 9 \u001b[0m│ 8 │ f_DeathS │\n",
- "└───┴────┴───────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 7 │ 3 │\n",
- "│\u001b[1m 6 \u001b[0m│ 8 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 4 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 6 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 7 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 8 │ 3 │\n",
- "│\u001b[1m 8 \u001b[0m│ 9 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬───────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼───────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_NB │ * │\n",
- "│\u001b[1m 2 \u001b[0m│ v_DeathC │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_idC │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_agingCA │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_DeathA │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_idA │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_agingAS │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_DeathS │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_idS │ * │\n",
- "└───┴───────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 4 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 5 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 6 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 2 │ 7 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 3 │ 8 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 3 │ 9 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ μ │\n",
- "│\u001b[1m 2 \u001b[0m│ δC │\n",
- "│\u001b[1m 3 \u001b[0m│ δA │\n",
- "│\u001b[1m 4 \u001b[0m│ δS │\n",
- "│\u001b[1m 5 \u001b[0m│ rageCA │\n",
- "│\u001b[1m 6 \u001b[0m│ rageAS │\n",
- "│\u001b[1m 7 \u001b[0m│ r │\n",
- "└───┴────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 7 │ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 5 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 7 │ 6 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 6 │ 7 │ 2 │\n",
- "│\u001b[1m 8 \u001b[0m│ 4 │ 8 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 7 │ 9 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "ageWeightModel = @stock_and_flow begin\n",
- " :stocks\n",
- " Child\n",
- " Adult\n",
- " Senior\n",
- " \n",
- " :parameters\n",
- " μ\n",
- " δC\n",
- " δA\n",
- " δS\n",
- " rageCA\n",
- " rageAS\n",
- " r\n",
- " \n",
- " :dynamic_variables\n",
- " v_NB = N * μ\n",
- " v_DeathC = Child * δC\n",
- " v_idC = Child * r\n",
- " v_agingCA = Child * rageCA\n",
- " v_DeathA = Adult * δA\n",
- " v_idA = Adult * r\n",
- " v_agingAS = Adult * rageAS\n",
- " v_DeathS = Senior * δS\n",
- " v_idS = Senior * r\n",
- " \n",
- " :flows\n",
- " CLOUD => f_NB(v_NB) => Child\n",
- " Child => f_idC(v_idC) => Child\n",
- " Child => f_DeathC(v_DeathC) => CLOUD\n",
- " Child => f_agingCA(v_agingCA) => Adult\n",
- " Adult => f_idA(v_idA) => Adult\n",
- " Adult => f_DeathA(v_DeathA) => CLOUD\n",
- " Adult => f_agingAS(v_agingAS) => Senior\n",
- " Senior => f_idS(v_idS) => Senior\n",
- " Senior => f_DeathS(v_DeathS) => CLOUD\n",
- " \n",
- " :sums\n",
- " N = [Child, Adult, Senior]\n",
- " \n",
- " \n",
- "end\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "id": "514e6f83",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Child\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Adult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Senior\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"μ\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δC\", :shape => \"circle\", :color => \"black\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δA\", :shape => \"circle\", :color => \"black\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δS\", :shape => \"circle\", :color => \"black\")), Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rageCA\", :shape => \"circle\", :color => \"black\")), Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rageAS\", :shape => \"circle\", :color => \"black\")), Node(\"p7\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"r\", :shape => \"circle\", :color => \"black\")) … Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p7\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p7\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p7\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(ageWeightModel)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "id": "4f8caeca",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Child\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Adult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Senior\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"μ\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δC\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δA\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"δS\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rageCA\", :shape => \"circle\", :color => \"lightgoldenrod\", :fontcolor => \"lightgoldenrod\")), Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rageAS\", :shape => \"circle\", :color => \"lightgoldenrod\", :fontcolor => \"lightgoldenrod\")), Node(\"p7\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"r\", :shape => \"circle\", :color => \"darkorange1\", :fontcolor => \"darkorange1\")) … Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p7\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p7\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p7\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "typed_ageWeightModel=ACSetTransformation(ageWeightModel, l_type,\n",
- " S = [s,s,s],\n",
- " SV = [N],\n",
- " LS = [lsn,lsn,lsn], \n",
- " F = [f_birth, f_fstorder, f_death, f_aging, f_fstorder, f_death, f_aging, f_fstorder, f_death], \n",
- " I = [i_birth, i_fstorder, i_aging, i_fstorder, i_aging, i_fstorder], \n",
- "O = [o_fstorder, o_death, o_aging, o_fstorder, o_death, o_aging, o_fstorder, o_death],\n",
- "V = [v_birth, v_death, v_fstorder, v_aging, v_death, v_fstorder, v_aging, v_death, v_fstorder],\n",
- " LV = [lv_death1, lv_fstorder1, lv_aging1, lv_death1, lv_fstorder1, lv_aging1, lv_death1, lv_fstorder1],\n",
- " LSV = [lsv_birth1],\n",
- " P = [p_μ, p_δ, p_δ, p_δ, p_rage, p_rage, p_rfstOrder],\n",
- " LPV = [lpv_birth2, lpv_death2, lpv_fstorder2, lpv_aging2, lpv_death2, lpv_fstorder2, lpv_aging2, lpv_death2, lpv_fstorder2],\n",
- " Name = name -> nothing, Op=op->nothing, Position=pos->nothing\n",
- ");\n",
- "@assert is_natural(typed_ageWeightModel)\n",
- "GraphF_typed(typed_ageWeightModel)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "id": "b48241ff",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"NormalWeightChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"OverWeightChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"ObeseChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"NormalWeightAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"OverWeightAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"ObeseAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s7\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"NormalWeightSenior\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s8\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"OverWeightSenior\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s9\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"ObeseSenior\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"μμ\", :shape => \"circle\", :color => \"black\")) … Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p8\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p8\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p8\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p11\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p10\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "aged_weight = pullback(typed_WeightModel, typed_ageWeightModel) |> apex |> rebuildStratifiedModelByFlattenSymbols;\n",
- "GraphF(aged_weight)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "id": "b0fa738f",
- "metadata": {},
- "outputs": [],
- "source": [
- "p_weight = LVector(\n",
- " μμ=12.5/1000,δwδC=2.0/1000,δoδC=8.0/1000,δwδA=4.0/1000,δoδA=13.0/1000,δwδS=8.0/1000,δoδS=30.0/1000,\n",
- " ragerageCA=1.0/(12.0*365.0),ragerageAS=1.0/(50.0*365.0),rwr=0.03,ror=0.06\n",
- ")\n",
- "\n",
- "u0_weight = LVector(\n",
- " NormalWeightChild=95811.0*12.0/82.0, OverWeightChild=27709.0*12.0/82.0, ObeseChild=30770.0*12.0/82.0,\n",
- " NormalWeightAdult=95811.0*50.0/82.0, OverWeightAdult=27709.0*50.0/82.0, ObeseAdult=30770.0*50.0/82.0,\n",
- " NormalWeightSenior=95811.0*20.0/82.0, OverWeightSenior=27709.0*20.0/82.0, ObeseSenior=30770.0*20.0/82.0\n",
- ");"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "id": "ad6be5bd",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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",
- "image/svg+xml": [
- "\n",
- "\n"
- ],
- "text/html": [
- "\n",
- "\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "prob_stratified_weight = ODEProblem(vectorfield(aged_weight),u0_weight,(0.0,100.0),p_weight);\n",
- "sol_stratified_weight = solve(prob_stratified_weight,Tsit5(),abstol=1e-8);\n",
- "plot(sol_stratified_weight)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "id": "22218a89",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n"
- ],
- "text/plain": [
- "HTML{String}(\"\\n\")"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# to have the figures plotted fix to the wider of the cells\n",
- "HTML(\"\"\"\n",
- "\n",
- "\"\"\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "id": "2261e0cc",
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.9.2",
- "language": "julia",
- "name": "julia-1.9"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.9.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/sir_standard_stratification-checkpoint.ipynb b/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/sir_standard_stratification-checkpoint.ipynb
deleted file mode 100644
index 88f14349..00000000
--- a/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/sir_standard_stratification-checkpoint.ipynb
+++ /dev/null
@@ -1,6473 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "d3e3fed8",
- "metadata": {},
- "outputs": [],
- "source": [
- "using GraphViz\n",
- "\n",
- "using StockFlow\n",
- "using StockFlow.Syntax\n",
- "\n",
- "using Catlab\n",
- "using Catlab.CategoricalAlgebra\n",
- "using LabelledArrays\n",
- "using OrdinaryDiffEq\n",
- "using Plots\n",
- "\n",
- "using Catlab.Graphics\n",
- "using Catlab.Programs\n",
- "using Catlab.Theories\n",
- "using Catlab.WiringDiagrams\n",
- "\n",
- "using Catlab.Graphics.Graphviz: Html\n",
- "using Catlab.Graphics.Graphviz\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "id": "500d9dc3",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "GraphF_typed (generic function with 5 methods)"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Functions for graphing typed Petri nets\n",
- "colors_vflow = [\"antiquewhite4\",\"antiquewhite\", \"gold\", \"saddlebrown\", \"slateblue\", \"blueviolet\", \"olive\"]\n",
- "colors_s = [\"deeppink\",\"darkorchid\",\"darkred\",\"coral\"] # red series\n",
- "colors_sv = [\"cornflowerblue\",\"cyan4\",\"cyan\",\"chartreuse\"] # green and blue series\n",
- "colors_p = [\"gold\",\"gold4\",\"darkorange1\",\"lightgoldenrod\",\"goldenrod\"] # yellow and orange\n",
- "\n",
- "flatten(fname::Symbol) = \"$fname\"\n",
- "\n",
- "function flatten(fname::Tuple)\n",
- " names = split(replace(string(fname), \"(\"=>\"\", \")\"=>\"\", \":\"=>\"\"), \",\")\n",
- " for i in 1:length(names)\n",
- " name = strip(names[i])\n",
- " if name[1:2] == \"id\"\n",
- " continue\n",
- " end\n",
- " return name\n",
- " end\n",
- " return \"id\"\n",
- "end\n",
- "\n",
- "def_stock(typed_StockFlow::ACSetTransformation, colors) = \n",
- " (p,s) -> (\"s$s\", Attributes(:label=>sname(p,s) isa Tuple where T ? Html(replace(string(sname(p,s)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(sname(p,s))\",\n",
- " :shape=>\"square\", \n",
- " :color=>\"black\", \n",
- " :style=>\"filled\", \n",
- " :fillcolor=>colors[typed_StockFlow[:S](s)]))\n",
- "\n",
- "def_parameter(typed_StockFlow::ACSetTransformation, colors) = \n",
- "(p, pp) -> (\"p$pp\", Attributes(:label=>pname(p,pp) isa Tuple where T ? Html(replace(string(pname(p,pp)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(pname(p,pp))\",\n",
- " :shape=>\"circle\", \n",
- " :color=>colors[typed_StockFlow[:P](pp)],\n",
- " :fontcolor=>colors[typed_StockFlow[:P](pp)]))\n",
- "\n",
- "def_auxiliaryVF(typed_StockFlow::ACSetTransformation, colors)=\n",
- " (p, v) -> (\"v$v\", Attributes(:label=>make_v_expr(p,v) isa Tuple where T ? Html(replace(string(make_v_expr(p,v)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(make_v_expr(p,v))\",\n",
- " :shape=>\"plaintext\", \n",
- " :fontcolor=>colors[typed_StockFlow[:V](v)]))\n",
- "\n",
- "\n",
- "def_sumV(typed_StockFlow::ACSetTransformation, colors) = \n",
- " (p, sv) -> (\"sv$sv\", Attributes(:label=>svname(p,sv) isa Tuple where T ? Html(replace(string(svname(p,sv)), \":\"=>\"\", \",\" => \"
\", \"(\"=>\"\", \")\"=>\"\")) : \"$(svname(p,sv))\",\n",
- " :shape=>\"circle\", \n",
- " :color=>\"black\",\n",
- " :fillcolor=>colors[typed_StockFlow[:SV](sv)], \n",
- " :style=>\"filled\")) \n",
- "\n",
- "\n",
- "def_flow_V(typed_StockFlow::ACSetTransformation, colors)=\n",
- " (p, us, ds, v, f) -> begin\n",
- " labelfontsize = \"6\"\n",
- " colorType = colors[typed_StockFlow[:F](f)]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\"\n",
- " arrowhead = \"none\"\n",
- " splines = \"ortho\"\n",
- " return ([us, \"v$v\"],Attributes(:label=>\"\", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)),\n",
- " ([\"v$v\", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) \n",
- "end\n",
- " \n",
- "def_flow_noneV(typed_StockFlow::ACSetTransformation, colors)=\n",
- " (p, us, ds, f) -> begin\n",
- " colorType = colors[typed_StockFlow[:F](f)]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\" \n",
- " ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>\"6\", :color=>color))\n",
- "end\n",
- "\n",
- "def_flow_V(colors = colors_vflow)=\n",
- " (p, us, ds, v, f) -> begin\n",
- " labelfontsize = \"6\"\n",
- " colorType = colors[f]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\"\n",
- " arrowhead = \"none\"\n",
- " splines = \"ortho\"\n",
- " return ([us, \"v$v\"],Attributes(:label=>\"\", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)),\n",
- " ([\"v$v\", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) \n",
- " \n",
- "end\n",
- " \n",
- "def_flow_noneV(colors = colors_vflow)=\n",
- " (p, us, ds, f) -> begin\n",
- " colorType = colors[f]\n",
- " color = \"$colorType\"*\":invis:\"*\"$colorType\" \n",
- " ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>\"6\", :color=>color))\n",
- "end\n",
- "\n",
- "GraphF_typed(typed_StockFlow::ACSetTransformation, colors_vflow = colors_vflow, colors_s = colors_s, colors_p = colors_p, colors_sv = colors_sv; schema::String=\"C\", type::String=\"SFVL\", rd::String=\"LR\") = GraphF(dom(typed_StockFlow),\n",
- " make_stock = def_stock(typed_StockFlow, colors_s), make_auxiliaryV=def_auxiliaryVF(typed_StockFlow, colors_vflow), make_sumV=def_sumV(typed_StockFlow, colors_sv), \n",
- " make_flow_V=def_flow_V(typed_StockFlow, colors_vflow), make_flow_noneV=def_flow_noneV(typed_StockFlow, colors_vflow),make_parameter=def_parameter(typed_StockFlow, colors_p),schema=schema, type=type, rd=rd\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "278f2f5d",
- "metadata": {},
- "outputs": [],
- "source": [
- "# using StockFlow: def_stock, def_parameter, def_auxiliaryVF, def_sumV, def_flow_V\n",
- "\n",
- "# # Functions for graphing typed Petri nets\n",
- "# colors_vflow = [\"antiquewhite4\",\"antiquewhite\", \"gold\", \"saddlebrown\", \"slateblue\", \"blueviolet\", \"olive\"]\n",
- "# colors_s = [\"deeppink\",\"darkorchid\",\"darkred\",\"coral\"] # red series\n",
- "# colors_sv = [\"cornflowerblue\",\"cyan4\",\"cyan\",\"chartreuse\"] # green and blue series\n",
- "# colors_p = [\"gold\",\"gold4\",\"darkorange1\",\"lightgoldenrod\",\"goldenrod\"] # yellow and orange\n",
- "\n",
- "\n",
- "# flatten(fname::Symbol) = \"$fname\"\n",
- "\n",
- "# function flatten(fname::Tuple)\n",
- "# names = split(replace(string(fname), \"(\"=>\"\", \")\"=>\"\", \":\"=>\"\"), \",\")\n",
- "# for i in 1:length(names)\n",
- "# name = strip(names[i])\n",
- "# if name[1:2] == \"id\"\n",
- "# continue\n",
- "# end\n",
- "# return name\n",
- "# end\n",
- "# return \"id\"\n",
- "# end\n",
- "\n",
- "\n",
- "# def_flow_noneV(colors = colors_vflow)=\n",
- "# (p, us, ds, f) -> begin\n",
- "# colorType = colors[f]\n",
- "# color = \"$colorType\"*\":invis:\"*\"$colorType\" \n",
- "# ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>\"6\", :color=>color))\n",
- "# end\n",
- "\n",
- "# GraphF_typed(typed_StockFlow::ACSetTransformation, colors_vflow = colors_vflow, colors_s = colors_s, colors_p = colors_p, colors_sv = colors_sv; schema::String=\"C\", type::String=\"SFVL\", rd::String=\"LR\") = GraphF(dom(typed_StockFlow),\n",
- "# make_stock = def_stock(typed_StockFlow, colors_s), make_auxiliaryV=def_auxiliaryVF(typed_StockFlow, colors_vflow), make_sumV=def_sumV(typed_StockFlow, colors_sv), \n",
- "# make_flow_V=def_flow_V(typed_StockFlow, colors_vflow), make_flow_noneV=def_flow_noneV(typed_StockFlow, colors_vflow),make_parameter=def_parameter(typed_StockFlow, colors_p),schema=schema, type=type, rd=rd\n",
- "# )\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "4a3c2f1f",
- "metadata": {},
- "source": [
- "# Stratify an SIR model (need graph rewriting to redefine the mixing contact part)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "8c3d692f",
- "metadata": {},
- "source": [
- "### 1.1 define the type stock and flow diagram (common part)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "id": "ea49d9a9",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:1, SV:1, LS:1, F:3, I:3, O:3, V:6, LV:4, LSV:1, P:4, LVV:3, LPV:4, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " pop | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_inf | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 5 | \n",
- " f_fstOrder | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 6 | \n",
- " f_aging | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_prevalence | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_meanInfectiousContactsPerS | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_perSIncidenceRate | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_inf | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_fstOrder | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_aging | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " c | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " β | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rFstOrder | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rAge | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:1, SV:1, LS:1, F:3, I:3, O:3, V:6, LV:4, LSV:1, P:4, LVV:3, LPV:4, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ pop │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬────────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_inf │\n",
- "│\u001b[1m 2 \u001b[0m│ 5 │ f_fstOrder │\n",
- "│\u001b[1m 3 \u001b[0m│ 6 │ f_aging │\n",
- "└───┴────┴────────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_prevalence │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_meanInfectiousContactsPerS │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_perSIncidenceRate │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_inf │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_fstOrder │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_aging │ * │\n",
- "└───┴──────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 6 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ c │\n",
- "│\u001b[1m 2 \u001b[0m│ β │\n",
- "│\u001b[1m 3 \u001b[0m│ rFstOrder │\n",
- "│\u001b[1m 4 \u001b[0m│ rAge │\n",
- "└───┴───────────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 4 │ 2 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "s_type = @stock_and_flow begin\n",
- " :stocks\n",
- " pop\n",
- " \n",
- " :parameters\n",
- " c\n",
- " β\n",
- " rFstOrder\n",
- " rAge\n",
- " \n",
- " :dynamic_variables\n",
- " v_prevalence = pop / N\n",
- " v_meanInfectiousContactsPerS = c * v_prevalence\n",
- " v_perSIncidenceRate = β * v_meanInfectiousContactsPerS\n",
- " v_inf = pop * v_perSIncidenceRate\n",
- " v_fstOrder = pop * rFstOrder\n",
- " v_aging = pop * rAge\n",
- " \n",
- " :flows\n",
- " pop => f_inf(v_inf) => pop\n",
- " pop => f_fstOrder(v_fstOrder) => pop\n",
- " pop => f_aging(v_aging) => pop\n",
- "\n",
- " \n",
- " :sums\n",
- " N = [pop]\n",
- " \n",
- " \n",
- "end\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "f9a04626",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β\", :shape => \"circle\", :color => \"black\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rFstOrder\", :shape => \"circle\", :color => \"black\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rAge\", :shape => \"circle\", :color => \"black\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop / N\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c * (pop / N)\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β * (c * (pop / N))\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop * (β * (c * (pop / N)))\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop * rFstOrder\", :shape => \"plaintext\", :fontcolor => \"black\")) … Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v3\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(s_type)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "id": "2f342d71",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rFstOrder\", :shape => \"circle\", :color => \"darkorange1\", :fontcolor => \"darkorange1\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rAge\", :shape => \"circle\", :color => \"lightgoldenrod\", :fontcolor => \"lightgoldenrod\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop / N\", :shape => \"plaintext\", :fontcolor => \"antiquewhite4\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c * (pop / N)\", :shape => \"plaintext\", :fontcolor => \"antiquewhite\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β * (c * (pop / N))\", :shape => \"plaintext\", :fontcolor => \"gold\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop * (β * (c * (pop / N)))\", :shape => \"plaintext\", :fontcolor => \"saddlebrown\")), Node(\"v5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"pop * rFstOrder\", :shape => \"plaintext\", :fontcolor => \"slateblue\")) … Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v3\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF_typed(id(s_type))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "278c0317",
- "metadata": {},
- "outputs": [],
- "source": [
- "# eliminate the attribute of name to enable pass the natural check\n",
- "# only eliminate the name, the other two attributes should be okay\n",
- "s_type = map(s_type, Name=name->nothing, Op=op->nothing, Position=pos->nothing);"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "2ee8274b",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "1:4"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "s, = parts(s_type, :S)\n",
- "N, = parts(s_type, :SV)\n",
- "lsn, = parts(s_type, :LS)\n",
- "f_inf, f_fstorder, f_aging = parts(s_type, :F)\n",
- "i_inf, i_fstorder, i_aging = parts(s_type, :I) # note, different order from previous in both inflow and outflow\n",
- "o_inf, o_fstorder, o_aging = parts(s_type, :O)\n",
- "v_IN, v_cIN, v_betacIN, v_inf, v_fstOrder, v_aging = parts(s_type, :V)\n",
- "lv_IN1, lv_inf1, lv_fstOrder1, lv_aging1 = parts(s_type, :LV)\n",
- "lsv_IN2, = parts(s_type, :LSV)\n",
- "p_c, p_beta, p_rfstOrder, p_rAge = parts(s_type, :P)\n",
- "lvv_cIN2, lvv_betacIN2, lvv_inf2 = parts(s_type, :LVV)\n",
- "lpv_cIN1, lpv_betacIN1, lpv_fstOrder2, lpv_aging2 = parts(s_type, :LPV)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "2156aeb7",
- "metadata": {},
- "source": [
- "## 1.2 define SIR model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "5a05b8e8",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:3, SV:1, LS:3, F:5, I:5, O:5, V:8, LV:6, LSV:1, P:4, LVV:3, LPV:6, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " I | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " R | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " N | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 6 | \n",
- " f_idS | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " f_inf | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 7 | \n",
- " f_idI | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " f_rec | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 8 | \n",
- " f_idR | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_prevalence | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_meanInfectiousContactsPerS | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_perSIncidenceRate | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_newInfections | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_newRecovery | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_idS | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_idI | \n",
- " * | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_idR | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 3 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " c | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " β | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " rRec | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rAge | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 4 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:3, SV:1, LS:3, F:5, I:5, O:5, V:8, LV:6, LSV:1, P:4, LVV:3, LPV:6, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ S │\n",
- "│\u001b[1m 2 \u001b[0m│ I │\n",
- "│\u001b[1m 3 \u001b[0m│ R │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ N │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬───────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 6 │ f_idS │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ f_inf │\n",
- "│\u001b[1m 3 \u001b[0m│ 7 │ f_idI │\n",
- "│\u001b[1m 4 \u001b[0m│ 5 │ f_rec │\n",
- "│\u001b[1m 5 \u001b[0m│ 8 │ f_idR │\n",
- "└───┴────┴───────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 3 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 3 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬──────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼──────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_prevalence │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_meanInfectiousContactsPerS │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_perSIncidenceRate │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_newInfections │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_newRecovery │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_idS │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_idI │ * │\n",
- "│\u001b[1m 8 \u001b[0m│ v_idR │ * │\n",
- "└───┴──────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 2 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 3 │ 8 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ c │\n",
- "│\u001b[1m 2 \u001b[0m│ β │\n",
- "│\u001b[1m 3 \u001b[0m│ rRec │\n",
- "│\u001b[1m 4 \u001b[0m│ rAge │\n",
- "└───┴───────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 4 │ 2 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 4 │ 7 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 8 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "sir = @stock_and_flow begin\n",
- " :stocks\n",
- " S\n",
- " I\n",
- " R\n",
- " \n",
- " :parameters\n",
- " c\n",
- " β\n",
- " rRec\n",
- " rAge\n",
- " \n",
- " :dynamic_variables\n",
- " v_prevalence = I / N\n",
- " v_meanInfectiousContactsPerS = c * v_prevalence\n",
- " v_perSIncidenceRate = β * v_meanInfectiousContactsPerS\n",
- " v_newInfections = S * v_perSIncidenceRate\n",
- " v_newRecovery = I * rRec\n",
- " v_idS = S * rAge\n",
- " v_idI = I * rAge\n",
- " v_idR = R * rAge\n",
- " \n",
- " :flows\n",
- " S => f_idS(v_idS) => S\n",
- " S => f_inf(v_newInfections) => I\n",
- " I => f_idI(v_idI) => I\n",
- " I => f_rec(v_newRecovery) => R\n",
- " R => f_idR(v_idR) => R\n",
- " \n",
- " :sums\n",
- " N = [S, I, R]\n",
- " \n",
- " \n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "e247b08d",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β\", :shape => \"circle\", :color => \"black\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rRec\", :shape => \"circle\", :color => \"black\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rAge\", :shape => \"circle\", :color => \"black\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"I / N\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c * (I / N)\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β * (c * (I / N))\", :shape => \"plaintext\", :fontcolor => \"black\")) … Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v3\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(sir)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "id": "d86f6392",
- "metadata": {},
- "outputs": [],
- "source": [
- "typed_aggregate_model=ACSetTransformation(sir, s_type,\n",
- " S = [s,s,s],\n",
- " SV = [N],\n",
- " LS = [lsn,lsn,lsn], \n",
- " F = [f_aging, f_inf, f_aging, f_fstorder, f_aging], \n",
- " I = [i_aging, i_inf, i_aging, i_fstorder, i_aging], #i_inf, i_fstorder, i_aging\n",
- " O = [o_aging, o_inf, o_aging, o_fstorder, o_aging],\n",
- " V = [v_IN, v_cIN, v_betacIN, v_inf, v_fstOrder, v_aging, v_aging, v_aging],\n",
- " LV = [lv_IN1, lv_inf1, lv_fstOrder1, lv_aging1, lv_aging1, lv_aging1],\n",
- " LSV = [lsv_IN2],\n",
- " P = [p_c, p_beta, p_rfstOrder, p_rAge],\n",
- " LVV = [lvv_cIN2, lvv_betacIN2, lvv_inf2],\n",
- " LPV = [lpv_cIN1, lpv_betacIN1, lpv_fstOrder2, lpv_aging2, lpv_aging2, lpv_aging2],\n",
- " Name = name -> nothing, Op=op->nothing, Position=pos->nothing\n",
- ");\n",
- "@assert is_natural(typed_aggregate_model)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "id": "5be91438",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"S\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"I\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"R\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rRec\", :shape => \"circle\", :color => \"darkorange1\", :fontcolor => \"darkorange1\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rAge\", :shape => \"circle\", :color => \"lightgoldenrod\", :fontcolor => \"lightgoldenrod\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"I / N\", :shape => \"plaintext\", :fontcolor => \"antiquewhite4\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c * (I / N)\", :shape => \"plaintext\", :fontcolor => \"antiquewhite\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β * (c * (I / N))\", :shape => \"plaintext\", :fontcolor => \"gold\")) … Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v3\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF_typed(typed_aggregate_model)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "76124883",
- "metadata": {},
- "source": [
- "## 1.3 define the age structure diagram"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "id": "8553a7cb",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:2, SV:2, LS:2, F:5, I:5, O:5, V:11, LV:7, LSV:2, P:5, LVV:6, LPV:7, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " Child | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " Adult | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " NC | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NA | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 4 | \n",
- " f_infC | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 5 | \n",
- " f_frsC | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 6 | \n",
- " f_aging | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 10 | \n",
- " f_infA | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 11 | \n",
- " f_frsA | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_INC | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_cINC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_cβINC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_infC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_fstC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_agingC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_INA | \n",
- " / | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_cINA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_cβINA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " v_infA | \n",
- " * | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " v_fstA | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 1 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 1 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 2 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 2 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 2 | \n",
- " 11 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " c_C | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " β | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " r | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " rAge | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " c_A | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 7 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 8 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 9 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 2 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 3 | \n",
- " 11 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:2, SV:2, LS:2, F:5, I:5, O:5, V:11, LV:7, LSV:2, P:5, LVV:6, LPV:7, Name:0, Op:0, Position:0}\n",
- "┌───┬───────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ Child │\n",
- "│\u001b[1m 2 \u001b[0m│ Adult │\n",
- "└───┴───────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ NC │\n",
- "│\u001b[1m 2 \u001b[0m│ NA │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────┬─────────┐\n",
- "│\u001b[1m F \u001b[0m│\u001b[1m fv \u001b[0m│\u001b[1m fname \u001b[0m│\n",
- "├───┼────┼─────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 4 │ f_infC │\n",
- "│\u001b[1m 2 \u001b[0m│ 5 │ f_frsC │\n",
- "│\u001b[1m 3 \u001b[0m│ 6 │ f_aging │\n",
- "│\u001b[1m 4 \u001b[0m│ 10 │ f_infA │\n",
- "│\u001b[1m 5 \u001b[0m│ 11 │ f_frsA │\n",
- "└───┴────┴─────────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m I \u001b[0m│\u001b[1m ifn \u001b[0m│\u001b[1m is \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌───┬─────┬────┐\n",
- "│\u001b[1m O \u001b[0m│\u001b[1m ofn \u001b[0m│\u001b[1m os \u001b[0m│\n",
- "├───┼─────┼────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 2 │\n",
- "└───┴─────┴────┘\n",
- "┌────┬──────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼──────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_INC │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_cINC │ * │\n",
- "│\u001b[1m 3 \u001b[0m│ v_cβINC │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_infC │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_fstC │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_agingC │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_INA │ / │\n",
- "│\u001b[1m 8 \u001b[0m│ v_cINA │ * │\n",
- "│\u001b[1m 9 \u001b[0m│ v_cβINA │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ v_infA │ * │\n",
- "│\u001b[1m 11 \u001b[0m│ v_fstA │ * │\n",
- "└────┴──────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 1 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 1 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 2 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 2 │ 10 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 2 │ 11 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 7 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ c_C │\n",
- "│\u001b[1m 2 \u001b[0m│ β │\n",
- "│\u001b[1m 3 \u001b[0m│ r │\n",
- "│\u001b[1m 4 \u001b[0m│ rAge │\n",
- "│\u001b[1m 5 \u001b[0m│ c_A │\n",
- "└───┴───────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 4 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 7 │ 8 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 8 │ 9 │ 2 │\n",
- "│\u001b[1m 6 \u001b[0m│ 9 │ 10 │ 2 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 2 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 3 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 8 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 2 │ 9 │ 1 │\n",
- "│\u001b[1m 7 \u001b[0m│ 3 │ 11 │ 2 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "age2 = @stock_and_flow begin\n",
- " :stocks\n",
- " Child\n",
- " Adult\n",
- " \n",
- " :parameters\n",
- " c_C\n",
- " β\n",
- " r\n",
- " rAge\n",
- " c_A\n",
- " \n",
- " :dynamic_variables\n",
- " v_INC = Child / NC\n",
- " v_cINC = c_C * v_INC\n",
- " v_cβINC = β * v_cINC\n",
- " \n",
- " v_infC = Child * v_cβINC\n",
- " v_fstC = Child * r\n",
- " v_agingC = Child * rAge\n",
- " \n",
- " \n",
- " v_INA = Adult / NA\n",
- " v_cINA = c_A * v_INA\n",
- " v_cβINA = β * v_cINA\n",
- " \n",
- " v_infA = Adult * v_cβINA\n",
- " v_fstA = Adult * r\n",
- " \n",
- " :flows\n",
- " Child => f_infC(v_infC) => Child\n",
- " Child => f_frsC(v_fstC) => Child\n",
- " Child => f_aging(v_agingC) => Adult\n",
- " Adult => f_infA(v_infA) => Adult\n",
- " Adult => f_frsA(v_fstA) => Adult\n",
- " \n",
- " \n",
- " :sums\n",
- " NC = [Child]\n",
- " NA = [Adult]\n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "id": "a7af7868",
- "metadata": {},
- "outputs": [],
- "source": [
- "typed_age_model=ACSetTransformation(age2, s_type,\n",
- " S = [s,s],\n",
- " SV = [N,N],\n",
- " LS = [lsn,lsn], \n",
- " F = [f_inf, f_fstorder, f_aging, f_inf, f_fstorder], \n",
- " I = [i_inf, i_fstorder, i_aging, i_inf, i_fstorder], \n",
- " O = [o_inf, o_fstorder, o_aging, o_inf, o_fstorder],\n",
- " V = [v_IN, v_cIN, v_betacIN, v_inf, v_fstOrder, v_aging, v_IN, v_cIN, v_betacIN, v_inf, v_fstOrder],\n",
- " LV = [lv_IN1, lv_inf1, lv_fstOrder1, lv_aging1, lv_IN1, lv_inf1, lv_fstOrder1],\n",
- " LSV = [lsv_IN2, lsv_IN2],\n",
- " P = [p_c, p_beta, p_rfstOrder, p_rAge, p_c],\n",
- " LVV = [lvv_cIN2, lvv_betacIN2, lvv_inf2, lvv_cIN2, lvv_betacIN2, lvv_inf2],\n",
- " LPV = [lpv_cIN1, lpv_betacIN1, lpv_fstOrder2, lpv_aging2, lpv_cIN1, lpv_betacIN1, lpv_fstOrder2],\n",
- " Name = name -> nothing, Op=op->nothing, Position=pos->nothing\n",
- ");\n",
- "@assert is_natural(typed_age_model)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "id": "000a4284",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Child\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Adult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"deeppink\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c_C\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β\", :shape => \"circle\", :color => \"gold4\", :fontcolor => \"gold4\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"r\", :shape => \"circle\", :color => \"darkorange1\", :fontcolor => \"darkorange1\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rAge\", :shape => \"circle\", :color => \"lightgoldenrod\", :fontcolor => \"lightgoldenrod\")), Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c_A\", :shape => \"circle\", :color => \"gold\", :fontcolor => \"gold\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"Child / NC\", :shape => \"plaintext\", :fontcolor => \"antiquewhite4\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"c_C * (Child / NC)\", :shape => \"plaintext\", :fontcolor => \"antiquewhite\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"β * (c_C * (Child / NC))\", :shape => \"plaintext\", :fontcolor => \"gold\")) … Edge(NodeID[NodeID(\"v3\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF_typed(typed_age_model)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "9a86b780",
- "metadata": {},
- "source": [
- "## 1.4 Calculate pullback and recreate the stratified model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "id": "98df443a",
- "metadata": {},
- "outputs": [],
- "source": [
- "aged_sir = pullback(typed_aggregate_model, typed_age_model) |> apex |> rebuildStratifiedModelByFlattenSymbols;"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "id": "eabc0a48",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"RChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"RAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"cc_C\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"ββ\", :shape => \"circle\", :color => \"black\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rRecr\", :shape => \"circle\", :color => \"black\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"rAgerAge\", :shape => \"circle\", :color => \"black\")) … Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v13\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v8\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(aged_sir)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "ee31b84e",
- "metadata": {},
- "source": [
- "## 1.5 Graph Rewriting to correct the non_linear mixing part"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "id": "b86ecdc4",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:4, SV:2, LS:4, F:0, I:0, O:0, V:4, LV:2, LSV:2, P:2, LVV:2, LPV:2, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " SChild | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " IChild | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " SAdult | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " IAdult | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " NNC | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NNA | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_prevalencev_INC | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_prevalencev_INA | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_meanInfectiousContactsPerSv_cINC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_meanInfectiousContactsPerSv_cINA | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " cc_C | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " cc_A | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:4, SV:2, LS:4, F:0, I:0, O:0, V:4, LV:2, LSV:2, P:2, LVV:2, LPV:2, Name:0, Op:0, Position:0}\n",
- "┌───┬────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ SChild │\n",
- "│\u001b[1m 2 \u001b[0m│ IChild │\n",
- "│\u001b[1m 3 \u001b[0m│ SAdult │\n",
- "│\u001b[1m 4 \u001b[0m│ IAdult │\n",
- "└───┴────────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ NNC │\n",
- "│\u001b[1m 2 \u001b[0m│ NNA │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────────────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼────────────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_prevalencev_INC │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_prevalencev_INA │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_meanInfectiousContactsPerSv_cINC │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_meanInfectiousContactsPerSv_cINA │ * │\n",
- "└───┴────────────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 2 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ cc_C │\n",
- "│\u001b[1m 2 \u001b[0m│ cc_A │\n",
- "└───┴───────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "LS = @stock_and_flow begin\n",
- " :stocks\n",
- " SChild\n",
- " IChild\n",
- " SAdult\n",
- " IAdult\n",
- " \n",
- " :parameters\n",
- " cc_C\n",
- " cc_A\n",
- " \n",
- " :dynamic_variables\n",
- " v_prevalencev_INC = IChild / NNC\n",
- " v_prevalencev_INA = IAdult / NNA\n",
- " v_meanInfectiousContactsPerSv_cINC = cc_C * v_prevalencev_INC\n",
- " v_meanInfectiousContactsPerSv_cINA = cc_A * v_prevalencev_INA\n",
- " \n",
- " \n",
- " :sums\n",
- " NNC = [SChild, IChild]\n",
- " NNA = [SAdult, IAdult]\n",
- " \n",
- " \n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "id": "407e1cab",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"cc_C\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"cc_A\", :shape => \"circle\", :color => \"black\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IChild / NNC\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IAdult / NNA\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"cc_C * (IChild / NNC)\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"cc_A * (IAdult / NNA)\", :shape => \"plaintext\", :fontcolor => \"black\")) … Edge(NodeID[NodeID(\"s3\", \"\", \"\"), NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s4\", \"\", \"\"), NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s2\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"sv2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v2\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(LS)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "id": "4c35c98c",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:4, SV:2, LS:4, F:0, I:0, O:0, V:4, LV:2, LSV:2, P:2, LVV:0, LPV:2, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " SChild | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " IChild | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " SAdult | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " IAdult | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " NNC | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NNA | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_prevalencev_INC | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_prevalencev_INA | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_meanInfectiousContactsPerSv_cINC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_meanInfectiousContactsPerSv_cINA | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " cc_C | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " cc_A | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:4, SV:2, LS:4, F:0, I:0, O:0, V:4, LV:2, LSV:2, P:2, LVV:0, LPV:2, Name:0, Op:0, Position:0}\n",
- "┌───┬────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ SChild │\n",
- "│\u001b[1m 2 \u001b[0m│ IChild │\n",
- "│\u001b[1m 3 \u001b[0m│ SAdult │\n",
- "│\u001b[1m 4 \u001b[0m│ IAdult │\n",
- "└───┴────────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ NNC │\n",
- "│\u001b[1m 2 \u001b[0m│ NNA │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "└────┴─────┴──────┘\n",
- "┌───┬────────────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├───┼────────────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_prevalencev_INC │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_prevalencev_INA │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_meanInfectiousContactsPerSv_cINC │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_meanInfectiousContactsPerSv_cINA │ * │\n",
- "└───┴────────────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 2 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ cc_C │\n",
- "│\u001b[1m 2 \u001b[0m│ cc_A │\n",
- "└───┴───────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "IS = @stock_and_flow begin\n",
- " :stocks\n",
- " SChild\n",
- " IChild\n",
- " SAdult\n",
- " IAdult\n",
- " \n",
- " :parameters\n",
- " cc_C\n",
- " cc_A\n",
- " \n",
- " :dynamic_variables\n",
- " v_prevalencev_INC = IChild / NNC\n",
- " v_prevalencev_INA = IAdult / NNA\n",
- " v_meanInfectiousContactsPerSv_cINC = *(cc_C)\n",
- " v_meanInfectiousContactsPerSv_cINA = *(cc_A)\n",
- " \n",
- " :sums\n",
- " NNC = [SChild, IChild]\n",
- " NNA = [SAdult, IAdult]\n",
- " \n",
- " \n",
- "end"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "id": "c2c5b462",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"cc_C\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"cc_A\", :shape => \"circle\", :color => \"black\")), Node(\"v1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IChild / NNC\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IAdult / NNA\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"(*)(cc_C)\", :shape => \"plaintext\", :fontcolor => \"black\")), Node(\"v4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"(*)(cc_A)\", :shape => \"plaintext\", :fontcolor => \"black\")) … Edge(NodeID[NodeID(\"s4\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s2\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s3\", \"\", \"\"), NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s4\", \"\", \"\"), NodeID(\"sv2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s1\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"s2\", \"\", \"\"), NodeID(\"sv1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"sv2\", \"\", \"\"), NodeID(\"v2\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"sv1\", \"\", \"\"), NodeID(\"v1\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(IS)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "id": "ff63c1f6",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowF {S:4, SV:2, LS:4, F:0, I:0, O:0, V:10, LV:2, LSV:2, P:6, LVV:10, LPV:6, Name:0, Op:0, Position:0}\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " SChild | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " IChild | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " SAdult | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " IAdult | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " NNC | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " NNA | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " v_prevalencev_INC | \n",
- " / | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " v_prevalencev_INA | \n",
- " / | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " v_CCContacts | \n",
- " * | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " v_CAContacts | \n",
- " * | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " v_ACContacts | \n",
- " * | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " v_AAContacts | \n",
- " * | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " v_prevalencev_INC_post | \n",
- " + | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " v_prevalencev_INA_post | \n",
- " + | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " v_meanInfectiousContactsPerSv_cINC | \n",
- " * | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " v_meanInfectiousContactsPerSv_cINA | \n",
- " * | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " fcc | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " fca | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " fac | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " faa | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " cc_C | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " cc_A | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 1 | \n",
- " 5 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 2 | \n",
- " 6 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 3 | \n",
- " 7 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 4 | \n",
- " 7 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 5 | \n",
- " 8 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 6 | \n",
- " 8 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 7 | \n",
- " 9 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 8 | \n",
- " 10 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 4 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 5 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 4 | \n",
- " 6 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 5 | \n",
- " 9 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 6 | \n",
- " 10 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowF {S:4, SV:2, LS:4, F:0, I:0, O:0, V:10, LV:2, LSV:2, P:6, LVV:10, LPV:6, Name:0, Op:0, Position:0}\n",
- "┌───┬────────┐\n",
- "│\u001b[1m S \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ SChild │\n",
- "│\u001b[1m 2 \u001b[0m│ IChild │\n",
- "│\u001b[1m 3 \u001b[0m│ SAdult │\n",
- "│\u001b[1m 4 \u001b[0m│ IAdult │\n",
- "└───┴────────┘\n",
- "┌────┬────────┐\n",
- "│\u001b[1m SV \u001b[0m│\u001b[1m svname \u001b[0m│\n",
- "├────┼────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ NNC │\n",
- "│\u001b[1m 2 \u001b[0m│ NNA │\n",
- "└────┴────────┘\n",
- "┌────┬─────┬──────┐\n",
- "│\u001b[1m LS \u001b[0m│\u001b[1m lss \u001b[0m│\u001b[1m lssv \u001b[0m│\n",
- "├────┼─────┼──────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 2 │\n",
- "└────┴─────┴──────┘\n",
- "┌────┬────────────────────────────────────┬─────┐\n",
- "│\u001b[1m V \u001b[0m│\u001b[1m vname \u001b[0m│\u001b[1m vop \u001b[0m│\n",
- "├────┼────────────────────────────────────┼─────┤\n",
- "│\u001b[1m 1 \u001b[0m│ v_prevalencev_INC │ / │\n",
- "│\u001b[1m 2 \u001b[0m│ v_prevalencev_INA │ / │\n",
- "│\u001b[1m 3 \u001b[0m│ v_CCContacts │ * │\n",
- "│\u001b[1m 4 \u001b[0m│ v_CAContacts │ * │\n",
- "│\u001b[1m 5 \u001b[0m│ v_ACContacts │ * │\n",
- "│\u001b[1m 6 \u001b[0m│ v_AAContacts │ * │\n",
- "│\u001b[1m 7 \u001b[0m│ v_prevalencev_INC_post │ + │\n",
- "│\u001b[1m 8 \u001b[0m│ v_prevalencev_INA_post │ + │\n",
- "│\u001b[1m 9 \u001b[0m│ v_meanInfectiousContactsPerSv_cINC │ * │\n",
- "│\u001b[1m 10 \u001b[0m│ v_meanInfectiousContactsPerSv_cINA │ * │\n",
- "└────┴────────────────────────────────────┴─────┘\n",
- "┌────┬─────┬─────┬─────────────┐\n",
- "│\u001b[1m LV \u001b[0m│\u001b[1m lvs \u001b[0m│\u001b[1m lvv \u001b[0m│\u001b[1m lvsposition \u001b[0m│\n",
- "├────┼─────┼─────┼─────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 2 │ 1 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 4 │ 2 │ 1 │\n",
- "└────┴─────┴─────┴─────────────┘\n",
- "┌─────┬───────┬──────┬───────────────┐\n",
- "│\u001b[1m LSV \u001b[0m│\u001b[1m lsvsv \u001b[0m│\u001b[1m lsvv \u001b[0m│\u001b[1m lsvsvposition \u001b[0m│\n",
- "├─────┼───────┼──────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 1 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 2 │ 2 │\n",
- "└─────┴───────┴──────┴───────────────┘\n",
- "┌───┬───────┐\n",
- "│\u001b[1m P \u001b[0m│\u001b[1m pname \u001b[0m│\n",
- "├───┼───────┤\n",
- "│\u001b[1m 1 \u001b[0m│ fcc │\n",
- "│\u001b[1m 2 \u001b[0m│ fca │\n",
- "│\u001b[1m 3 \u001b[0m│ fac │\n",
- "│\u001b[1m 4 \u001b[0m│ faa │\n",
- "│\u001b[1m 5 \u001b[0m│ cc_C │\n",
- "│\u001b[1m 6 \u001b[0m│ cc_A │\n",
- "└───┴───────┘\n",
- "┌─────┬───────┬───────┬───────────────┐\n",
- "│\u001b[1m LVV \u001b[0m│\u001b[1m lvsrc \u001b[0m│\u001b[1m lvtgt \u001b[0m│\u001b[1m lvsrcposition \u001b[0m│\n",
- "├─────┼───────┼───────┼───────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 2 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 2 │\n",
- "│\u001b[1m 3 \u001b[0m│ 1 │ 5 │ 2 │\n",
- "│\u001b[1m 4 \u001b[0m│ 2 │ 6 │ 2 │\n",
- "│\u001b[1m 5 \u001b[0m│ 3 │ 7 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 4 │ 7 │ 2 │\n",
- "│\u001b[1m 7 \u001b[0m│ 5 │ 8 │ 1 │\n",
- "│\u001b[1m 8 \u001b[0m│ 6 │ 8 │ 2 │\n",
- "│\u001b[1m 9 \u001b[0m│ 7 │ 9 │ 2 │\n",
- "│\u001b[1m 10 \u001b[0m│ 8 │ 10 │ 2 │\n",
- "└─────┴───────┴───────┴───────────────┘\n",
- "┌─────┬──────┬──────┬──────────────┐\n",
- "│\u001b[1m LPV \u001b[0m│\u001b[1m lpvp \u001b[0m│\u001b[1m lpvv \u001b[0m│\u001b[1m lpvpposition \u001b[0m│\n",
- "├─────┼──────┼──────┼──────────────┤\n",
- "│\u001b[1m 1 \u001b[0m│ 1 │ 3 │ 1 │\n",
- "│\u001b[1m 2 \u001b[0m│ 2 │ 4 │ 1 │\n",
- "│\u001b[1m 3 \u001b[0m│ 3 │ 5 │ 1 │\n",
- "│\u001b[1m 4 \u001b[0m│ 4 │ 6 │ 1 │\n",
- "│\u001b[1m 5 \u001b[0m│ 5 │ 9 │ 1 │\n",
- "│\u001b[1m 6 \u001b[0m│ 6 │ 10 │ 1 │\n",
- "└─────┴──────┴──────┴──────────────┘\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "RS = @stock_and_flow begin\n",
- " :stocks\n",
- " SChild\n",
- " IChild\n",
- " SAdult\n",
- " IAdult\n",
- " \n",
- " :parameters\n",
- " fcc\n",
- " fca\n",
- " fac\n",
- " faa\n",
- " cc_C\n",
- " cc_A\n",
- " \n",
- " :dynamic_variables\n",
- " v_prevalencev_INC = IChild / NNC\n",
- " v_prevalencev_INA = IAdult / NNA\n",
- " v_CCContacts = fcc * v_prevalencev_INC\n",
- " v_CAContacts = fca * v_prevalencev_INA\n",
- " \n",
- " v_ACContacts = fac * v_prevalencev_INC\n",
- " v_AAContacts = faa * v_prevalencev_INA\n",
- " \n",
- " v_prevalencev_INC_post = v_CCContacts + v_CAContacts\n",
- " v_prevalencev_INA_post = v_ACContacts + v_AAContacts\n",
- " v_meanInfectiousContactsPerSv_cINC = cc_C * v_prevalencev_INC_post\n",
- " v_meanInfectiousContactsPerSv_cINA = cc_A * v_prevalencev_INA_post\n",
- " \n",
- " :sums\n",
- " NNC = [SChild, IChild]\n",
- " NNA = [SAdult, IAdult]\n",
- " \n",
- " \n",
- "end\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "id": "8cef19d1",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"fcc\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"fca\", :shape => \"circle\", :color => \"black\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"fac\", :shape => \"circle\", :color => \"black\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"faa\", :shape => \"circle\", :color => \"black\")), Node(\"p5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"cc_C\", :shape => \"circle\", :color => \"black\")), Node(\"p6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"cc_A\", :shape => \"circle\", :color => \"black\")) … Edge(NodeID[NodeID(\"v2\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v2\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"v1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "GraphF(RS)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "id": "173b91d4",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "homomorphism (generic function with 4 methods)"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "using AlgebraicRewriting\n",
- "using AlgebraicRewriting: rewrite\n",
- "const hom = Catlab.CategoricalAlgebra.homomorphism"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "id": "7fbbd9fd",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Catlab.Graphics.Graphviz.Graph(\"G\", true, \"dot\", Statement[Node(\"s1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"SAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"IAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s5\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"RChild\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"s6\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"RAdult\", :shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Node(\"p1\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"fcc\", :shape => \"circle\", :color => \"black\")), Node(\"p2\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"fca\", :shape => \"circle\", :color => \"black\")), Node(\"p3\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"fac\", :shape => \"circle\", :color => \"black\")), Node(\"p4\", OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:label => \"faa\", :shape => \"circle\", :color => \"black\")) … Edge(NodeID[NodeID(\"p9\", \"\", \"\"), NodeID(\"v15\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p9\", \"\", \"\"), NodeID(\"v14\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p8\", \"\", \"\"), NodeID(\"v13\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p7\", \"\", \"\"), NodeID(\"v11\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p6\", \"\", \"\"), NodeID(\"v10\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p5\", \"\", \"\"), NodeID(\"v9\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p4\", \"\", \"\"), NodeID(\"v6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p3\", \"\", \"\"), NodeID(\"v5\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p2\", \"\", \"\"), NodeID(\"v4\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}()), Edge(NodeID[NodeID(\"p1\", \"\", \"\"), NodeID(\"v3\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Html}}(:splines => \"splines\"))"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "rule_S = Rule(hom(IS,LS), hom(IS,RS))\n",
- "aged_sir_rewritten = rewrite(rule_S, aged_sir)\n",
- "GraphF(aged_sir_rewritten)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 26,
- "id": "991dad62",
- "metadata": {},
- "outputs": [],
- "source": [
- "# define values of constant parameters\n",
- "p_stratified_sir = LVector(\n",
- " fcc=0.8, fca=0.2, fac=0.2, faa=0.8, cc_C=0.45, cc_A=0.55,\n",
- " ββ=0.8, rRecr=1.0/14.0, rAgerAge=1.0/(15.0*365.0) #which means the child age group is from 0 to 15 years old\n",
- ")\n",
- "# define initial values for stocks\n",
- "u0_stratified_sir = LVector(\n",
- " SChild=990.0, IChild=10.0, RChild=0.0,\n",
- " SAdult=4900.0, IAdult=10.0, RAdult=0.0\n",
- ");"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "id": "b55aed50",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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",
- "image/svg+xml": [
- "\n",
- "\n"
- ],
- "text/html": [
- "\n",
- "\n"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "prob_stratified_sir = ODEProblem(vectorfield(aged_sir_rewritten),u0_stratified_sir,(0.0,100.0),p_stratified_sir);\n",
- "sol_stratified_sir = solve(prob_stratified_sir,Tsit5(),abstol=1e-8);\n",
- "plot(sol_stratified_sir)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 28,
- "id": "f1f5cc74",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n"
- ],
- "text/plain": [
- "HTML{String}(\"\\n\")"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "# to have the figures plotted fix to the wider of the cells\n",
- "HTML(\"\"\"\n",
- "\n",
- "\"\"\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 29,
- "id": "79689e00",
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.9.2",
- "language": "julia",
- "name": "julia-1.9"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.9.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/examples/full_fledged_schema_examples_new/stratification/diabetes_diagnose.ipynb b/examples/full_fledged_schema_examples_new/stratification/diabetes_diagnose.ipynb
index e6f0f6e8..0b6b6162 100644
--- a/examples/full_fledged_schema_examples_new/stratification/diabetes_diagnose.ipynb
+++ b/examples/full_fledged_schema_examples_new/stratification/diabetes_diagnose.ipynb
@@ -6,8 +6,6 @@
"metadata": {},
"outputs": [],
"source": [
- "using GraphViz\n",
- "\n",
"using StockFlow\n",
"using StockFlow.Syntax\n",
"\n",
diff --git a/examples/full_fledged_schema_examples_new/stratification/sir_linear_stratification.ipynb b/examples/full_fledged_schema_examples_new/stratification/sir_linear_stratification.ipynb
index a97f2a33..4e740fbc 100644
--- a/examples/full_fledged_schema_examples_new/stratification/sir_linear_stratification.ipynb
+++ b/examples/full_fledged_schema_examples_new/stratification/sir_linear_stratification.ipynb
@@ -7,8 +7,6 @@
"metadata": {},
"outputs": [],
"source": [
- "using GraphViz\n",
- "\n",
"using StockFlow\n",
"using StockFlow.Syntax\n",
"\n",
@@ -663,7 +661,7 @@
" \n",
" :flows\n",
" CLOUD => f_NewBorn(v_NewBorn) => NormalWeight\n",
- " NormalWeight => f_DeathNormalWeight(v_DeathNormalWeight) => ClOUD\n",
+ " NormalWeight => f_DeathNormalWeight(v_DeathNormalWeight) => CLOUD\n",
" NormalWeight => f_BecomingOverWeight(v_BecomingOverWeight) => OverWeight\n",
" OverWeight => f_DeathOverWeight(v_DeathOverWeight) => CLOUD\n",
" \n",
@@ -1554,15 +1552,15 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Julia 1.9.3",
+ "display_name": "Julia 1.10.4",
"language": "julia",
- "name": "julia-1.9"
+ "name": "julia-1.10"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
- "version": "1.9.3"
+ "version": "1.10.4"
}
},
"nbformat": 4,
diff --git a/examples/full_fledged_schema_examples_new/stratification/sir_standard_stratification.ipynb b/examples/full_fledged_schema_examples_new/stratification/sir_standard_stratification.ipynb
index 7147f58c..446ae740 100644
--- a/examples/full_fledged_schema_examples_new/stratification/sir_standard_stratification.ipynb
+++ b/examples/full_fledged_schema_examples_new/stratification/sir_standard_stratification.ipynb
@@ -7,8 +7,6 @@
"metadata": {},
"outputs": [],
"source": [
- "using GraphViz\n",
- "\n",
"using StockFlow\n",
"using StockFlow.Syntax\n",
"\n",
diff --git a/examples/primitive_schema_examples/practises/solutions/.ipynb_checkpoints/SEIRVD model-checkpoint.ipynb b/examples/primitive_schema_examples/practises/solutions/.ipynb_checkpoints/SEIRVD model-checkpoint.ipynb
deleted file mode 100644
index f31fdf1e..00000000
--- a/examples/primitive_schema_examples/practises/solutions/.ipynb_checkpoints/SEIRVD model-checkpoint.ipynb
+++ /dev/null
@@ -1,1848 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "using StockFlow\n",
- "\n",
- "using Catlab\n",
- "using Catlab.CategoricalAlgebra\n",
- "using LabelledArrays\n",
- "using OrdinaryDiffEq\n",
- "using Plots\n",
- "\n",
- "using Catlab.Graphics\n",
- "using Catlab.Programs\n",
- "using Catlab.WiringDiagrams"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Problem:"
- ]
- },
- {
- "attachments": {
- "SEIRVD_composed_model.png": {
- "image/png": "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"
- }
- },
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "To build the SEIRVD stock and flow diagram model:\n",
- "![SEIRVD_composed_model.png](attachment:SEIRVD_composed_model.png)\n",
- "By composing three sub-components."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Step 1: Define Stock and Flow Diagrams for the sub-components"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1.1 Define SEIR model"
- ]
- },
- {
- "attachments": {
- "SEIR_submodel.png": {
- "image/png": "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"
- }
- },
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Model 1: SEIR model:\n",
- "![SEIR_submodel.png](attachment:SEIR_submodel.png)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The functions of flows are given by:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "frec (generic function with 1 method)"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "finc(u,p,t)=p.cβ*u.S*u.I/p.N\n",
- "finf(u,p,t)=u.E * p.rlatent\n",
- "frec(u,p,t)=u.I * p.rrec"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now, please define the stock and flow diagram of the SEIR model"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
StockAndFlowp with elements Flow = 1:3, Stock = 1:4, Link = 1:4\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 2 | \n",
- " inc | \n",
- " finc | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 2 | \n",
- " 3 | \n",
- " inf | \n",
- " finf | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 3 | \n",
- " 4 | \n",
- " rec | \n",
- " frec | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " S | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " E | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " I | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " R | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1 | \n",
- " 1 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 1 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 2 | \n",
- " 2 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 3 | \n",
- " 3 | \n",
- "
\n",
- " \n",
- "
\n",
- "
\n"
- ],
- "text/plain": [
- "StockAndFlowp with elements Flow = 1:3, Stock = 1:4, Link = 1:4\n",
- "┌──────┬───┬───┬───────┬──────┐\n",
- "│\u001b[1m Flow \u001b[0m│\u001b[1m u \u001b[0m│\u001b[1m d \u001b[0m│\u001b[1m fname \u001b[0m│\u001b[1m ϕf \u001b[0m│\n",
- "├──────┼───┼───┼───────┼──────┤\n",
- "│ 1 │ 1 │ 2 │ inc │ finc │\n",
- "│ 2 │ 2 │ 3 │ inf │ finf │\n",
- "│ 3 │ 3 │ 4 │ rec │ frec │\n",
- "└──────┴───┴───┴───────┴──────┘\n",
- "┌───────┬───────┐\n",
- "│\u001b[1m Stock \u001b[0m│\u001b[1m sname \u001b[0m│\n",
- "├───────┼───────┤\n",
- "│ 1 │ S │\n",
- "│ 2 │ E │\n",
- "│ 3 │ I │\n",
- "│ 4 │ R │\n",
- "└───────┴───────┘\n",
- "┌──────┬───┬───┐\n",
- "│\u001b[1m Link \u001b[0m│\u001b[1m s \u001b[0m│\u001b[1m t \u001b[0m│\n",
- "├──────┼───┼───┤\n",
- "│ 1 │ 1 │ 1 │\n",
- "│ 2 │ 3 │ 1 │\n",
- "│ 3 │ 2 │ 2 │\n",
- "│ 4 │ 3 │ 3 │\n",
- "└──────┴───┴───┘\n"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# StockAndFlowp(stocks,\n",
- "# (flow=>function, upstream=>downstream) => stocks linked)\n",
- "seir = StockAndFlowp((:S, :E, :I, :R), \n",
- " ((:inc=>finc, :S=>:E)=>(:S,:I),\n",
- " (:inf=>finf, :E=>:I)=>:E,\n",
- " (:rec=>frec, :I=>:R)=>:I)\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can plot the define stock and flow diagram by call function: Graph()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"S\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"E\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"I\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"R\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"fn_inc\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"invtriangle\", :color => \"#9ACEEB\", :style => \"filled\", :label => \"\", :width => \"0.1\", :height => \"0.2\")), Catlab.Graphics.Graphviz.Node(\"fn_inf\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"invtriangle\", :color => \"#9ACEEB\", :style => \"filled\", :label => \"\", :width => \"0.1\", :height => \"0.2\")), Catlab.Graphics.Graphviz.Node(\"fn_rec\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"invtriangle\", :color => \"#9ACEEB\", :style => \"filled\", :label => \"\", :width => \"0.1\", :height => \"0.2\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"S\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_inc\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"fn_inc\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"E\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"inc\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"E\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_inf\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"fn_inf\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"inf\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_rec\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"fn_rec\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"R\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"rec\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"S\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_inc\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_inc\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"E\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_inf\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_rec\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"ortho\"))"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "Graph(seir)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1.2 Define the SV model"
- ]
- },
- {
- "attachments": {
- "SV_submodel.png": {
- "image/png": "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"
- }
- },
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Model 2: SV model (simulates the vaccination process):\n",
- "![SV_submodel.png](attachment:SV_submodel.png)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The function of flow vac is given:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "fvac (generic function with 1 method)"
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "fvac(u,p,t)=u.S * p.rv"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now, please define the stock and flow diagram and plot it"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"S\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"V\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"fn_vac\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"invtriangle\", :color => \"#9ACEEB\", :style => \"filled\", :label => \"\", :width => \"0.1\", :height => \"0.2\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"S\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_vac\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"fn_vac\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"V\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"vac\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"S\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_vac\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"ortho\"))"
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# StockAndFlowp(stocks,\n",
- "# (flow=>function, upstream=>downstream) => stocks linked)\n",
- "sv = StockAndFlowp((:S, :V), \n",
- " ((:vac=>fvac, :S=>:V)=>:S)\n",
- ")\n",
- "Graph(sv)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1.3 Define the ID model"
- ]
- },
- {
- "attachments": {
- "ID_submodel.png": {
- "image/png": "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"
- }
- },
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Model 3: ID model (simulates the deaths due to infected disese)\n",
- "![ID_submodel.png](attachment:ID_submodel.png)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "fdeath (generic function with 1 method)"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "fdeath(u,p,t)=u.I * p.rd"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now, please define the stock and flow diagram and plot it"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"I\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"D\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"fn_death\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"invtriangle\", :color => \"#9ACEEB\", :style => \"filled\", :label => \"\", :width => \"0.1\", :height => \"0.2\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_death\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"fn_death\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"D\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"death\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_death\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"ortho\"))"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# StockAndFlowp(stocks,\n",
- "# (flow=>function, upstream=>downstream) => stocks linked)\n",
- "id = StockAndFlowp((:I, :D), \n",
- " ((:death=>fdeath, :I=>:D)=>:I)\n",
- ")\n",
- "Graph(id)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Step 2: Define the UWD-algebra composition rule"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Graph(\"G\", false, \"neato\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"n1\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box1\", :label => \"seir\")), Catlab.Graphics.Graphviz.Node(\"n2\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box2\", :label => \"sv\")), Catlab.Graphics.Graphviz.Node(\"n3\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:id => \"box3\", :label => \"id\")), Catlab.Graphics.Graphviz.Node(\"n4\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer1\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n5\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:height => \"0\", :id => \"outer2\", :label => \"\", :margin => \"0\", :shape => \"none\", :style => \"invis\", :width => \"0\")), Catlab.Graphics.Graphviz.Node(\"n6\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"junction\", :fillcolor => \"black\", :height => \"0.075\", :id => \"junction1\", :label => \"\", :shape => \"circle\", :style => \"filled\", :width => \"0.075\", :xlabel => \"S\")), Catlab.Graphics.Graphviz.Node(\"n7\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:comment => \"junction\", :fillcolor => \"black\", :height => \"0.075\", :id => \"junction2\", :label => \"\", :shape => \"circle\", :style => \"filled\", :width => \"0.075\", :xlabel => \"I\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n2\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n4\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n6\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n1\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n3\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"n5\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"n7\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :shape => \"ellipse\", :margin => \"0.05,0.025\", :width => \"0.5\", :height => \"0.5\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:fontname => \"Serif\", :len => \"1\"))"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "uwd_seirvd = @relation (S, I) begin\n",
- " seir(S,I)\n",
- " sv(S)\n",
- " id(I)\n",
- "end;\n",
- "display_uwd(uwd_seirvd)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Apply the composition rule to the open stock and flow diagrams"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n",
- "\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- "Graph(\"G\", true, \"dot\", Catlab.Graphics.Graphviz.Statement[Catlab.Graphics.Graphviz.Node(\"S\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"E\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"I\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"R\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"V\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"D\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"square\", :color => \"black\", :style => \"filled\", :fillcolor => \"#9ACEEB\")), Catlab.Graphics.Graphviz.Node(\"fn_inc\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"invtriangle\", :color => \"#9ACEEB\", :style => \"filled\", :label => \"\", :width => \"0.1\", :height => \"0.2\")), Catlab.Graphics.Graphviz.Node(\"fn_inf\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"invtriangle\", :color => \"#9ACEEB\", :style => \"filled\", :label => \"\", :width => \"0.1\", :height => \"0.2\")), Catlab.Graphics.Graphviz.Node(\"fn_rec\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"invtriangle\", :color => \"#9ACEEB\", :style => \"filled\", :label => \"\", :width => \"0.1\", :height => \"0.2\")), Catlab.Graphics.Graphviz.Node(\"fn_vac\", OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:shape => \"invtriangle\", :color => \"#9ACEEB\", :style => \"filled\", :label => \"\", :width => \"0.1\", :height => \"0.2\")) … Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"S\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_vac\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"fn_vac\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"V\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"vac\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_death\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"\", :labelfontsize => \"6\", :color => \"black:invis:black\", :arrowhead => \"none\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"fn_death\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"D\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:label => \"death\", :labelfontsize => \"6\", :color => \"black:invis:black\", :splines => \"ortho\")), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"S\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_inc\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_inc\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"E\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_inf\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_rec\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"S\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_vac\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}()), Catlab.Graphics.Graphviz.Edge(Catlab.Graphics.Graphviz.NodeID[Catlab.Graphics.Graphviz.NodeID(\"I\", \"\", \"\"), Catlab.Graphics.Graphviz.NodeID(\"fn_death\", \"\", \"\")], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}())], OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:rankdir => \"LR\"), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(), OrderedCollections.OrderedDict{Symbol, Union{String, Catlab.Graphics.Graphviz.Html}}(:splines => \"ortho\"))"
- ]
- },
- "execution_count": 10,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "seirvd=oapply(uwd_seirvd,Dict(\n",
- " :seir=>Open(seir,[:S],[:I]),\n",
- " :sv=>Open(sv,[:S]),\n",
- " :id=>Open(id,[:I]))) |> apex\n",
- "Graph(seirvd)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Step 3: Solve the composed model"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Define the constant parameters values, and stocks initial values. The values are given.\n",
- "Please note those values are arbitrary given for toy model running. You can try to modify those \n",
- "values based on your interested infectious diseases."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "┌ Warning: use values(kwargs) and keys(kwargs) instead of kwargs.data and kwargs.itr\n",
- "│ caller = #LVector#8 at larray.jl:30 [inlined]\n",
- "└ @ Core /Users/xiaoyanli/.julia/packages/LabelledArrays/b3BQN/src/larray.jl:30\n",
- "┌ Warning: use values(kwargs) and keys(kwargs) instead of kwargs.data and kwargs.itr\n",
- "│ caller = #LVector#8 at larray.jl:30 [inlined]\n",
- "└ @ Core /Users/xiaoyanli/.julia/packages/LabelledArrays/b3BQN/src/larray.jl:30\n"
- ]
- },
- {
- "data": {
- "text/plain": [
- "6-element LArray{Int64, 1, Vector{Int64}, (:S, :E, :I, :R, :V, :D)}:\n",
- " :S => 990\n",
- " :E => 0\n",
- " :I => 10\n",
- " :R => 0\n",
- " :V => 0\n",
- " :D => 0"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "p = LVector(\n",
- " cβ=0.2, N=1000, rrec=0.083, rv=0.02, rlatent=0.2, rd=0.0001\n",
- ")\n",
- "# define initial values for stocks\n",
- "u0 = LVector(\n",
- " S=990, E=0, I=10, R=0, V=0, D=0\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Solve the ODEs generated from the composed stock and flow diagram"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "┌ Warning: use values(kwargs) and keys(kwargs) instead of kwargs.data and kwargs.itr\n",
- "│ caller = #LVector#8 at larray.jl:30 [inlined]\n",
- "└ @ Core /Users/xiaoyanli/.julia/packages/LabelledArrays/b3BQN/src/larray.jl:30\n"
- ]
- },
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n"
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "prob = ODEProblem(vectorfield(seirvd),u0,(0.0,100.0),p);\n",
- "sol = solve(prob,Tsit5(),abstol=1e-8);\n",
- "plot(sol)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Julia 1.7.3",
- "language": "julia",
- "name": "julia-1.7"
- },
- "language_info": {
- "file_extension": ".jl",
- "mimetype": "application/julia",
- "name": "julia",
- "version": "1.7.3"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/ipynb-to-jl.sh b/ipynb-to-jl.sh
new file mode 100755
index 00000000..64106035
--- /dev/null
+++ b/ipynb-to-jl.sh
@@ -0,0 +1,9 @@
+#!/bin/env bash
+
+subdir=$1
+find ./examples/$subdir -type f -name "*.ipynb" | while read f; do
+ fname=$(basename "$f")
+ jq -j '.cells
+ | map( select(.cell_type == "code") | .source + ["\n\n"] )
+ | .[][]' "$f" > ./jlexamples/"$subdir"."$fname".jl;
+done
diff --git a/run_notebooks.jl b/run_notebooks.jl
new file mode 100644
index 00000000..c72b30fa
--- /dev/null
+++ b/run_notebooks.jl
@@ -0,0 +1,33 @@
+function modinclude(filename)
+ modname = gensym()
+ @eval module $modname
+ include($filename)
+ end
+end
+
+function main()
+ println("Starting to run notebooks ...")
+ ipynb_files = filter(contains(r".jl$"), readdir("./jlexamples"; join=true))
+ println("Checking: $ipynb_files")
+ exit_code = 0
+ errors = []
+ ok = []
+ for f in ipynb_files
+ try
+ modinclude(f)
+ catch e
+ push!(errors, (f, sprint(showerror, e)))
+ exit_code = 1
+ else
+ push!(ok, f)
+ end
+ end
+ println("OK: $ok")
+ for (f, err_msg) in errors
+ println("FAILED: $f")
+ println("Reason: $err_msg")
+ end
+ exit(exit_code)
+end
+
+main()
diff --git a/src/CausalLoop.jl b/src/CausalLoop.jl
index 7aa444e2..72bb5ce4 100644
--- a/src/CausalLoop.jl
+++ b/src/CausalLoop.jl
@@ -2,7 +2,6 @@ export TheoryCausalLoop, AbstractCausalLoop, CausalLoopUntyped, CausalLoop,
nvert, nedges, vname, np, nm,
sedge, tedge, convertToCausalLoop, vnames, epol, epols,
Polarity, POL_POSITIVE, POL_NEGATIVE,
-add_node!, add_nodes!, add_edge!, add_edges!,
outgoing_edges, incoming_edges, extract_loops, is_walk, is_circuit, walk_polarity, cl_cycles,
CausalLoopPol, to_clp, from_clp, CausalLoopPM, leg,
extract_all_nonduplicate_paths, num_loops_var_on, num_indep_loops_var_on,
@@ -21,14 +20,14 @@ import Base: *
"""
-P - sp - >
- - tp - >
+P - sp - >
+ - tp - >
V
M - sm - >
- tm - >
"""
@present TheoryCausalLoopNameless(FreeSchema) begin
-
+
V::Ob
P::Ob
M::Ob
@@ -43,14 +42,14 @@ end
"""
-P - sp - >
- - tp - >
+P - sp - >
+ - tp - >
V - vname - > Name
M - sm - >
- tm - >
"""
@present TheoryCausalLoopPM <: TheoryCausalLoopNameless begin
-
+
Name::AttrType
vname::Attr(V, Name)
@@ -80,9 +79,9 @@ const OpenCausalLoopPMOb, OpenCausalLoopPM = OpenACSetTypes(CausalLoopPMUntyped,
end
"""
- - src ->
+ - src ->
E V - vname -> Name
- - tgt ->
+ - tgt ->
"""
@present TheoryCausalLoop <: SchGraph begin
Name::AttrType
@@ -90,9 +89,9 @@ E V - vname -> Name
end
"""
- - src ->
+ - src ->
Polarity <- epol - E V - vname -> Name
- - tgt ->
+ - tgt ->
"""
@present TheoryCausalLoopPol <: TheoryCausalLoop begin
Polarity::AttrType
@@ -139,7 +138,7 @@ end
Create a CausalLoop (Graph with named vertices) with a vector of vertices, and
a vector of pairs of vertices.
-CausalLoop([:A, :B], [:A => :B, :B => :B]) will create a CausalLoop with
+CausalLoop([:A, :B], [:A => :B, :B => :B]) will create a CausalLoop with
vertices A and B, an edge A => B and an edge B => B.
"""
function CausalLoop(vs::Vector{Symbol}, es::Vector{Pair{Symbol, Symbol}})
@@ -159,14 +158,14 @@ end
Construct a CausalLoop from a StockFlow.
"""
function convertToCausalLoop(p::AbstractStockAndFlowStructure)
-
+
sns=snames(p)
fns=fnames(p)
svns=svnames(p)
flowVariableIndexs=[flowVariableIndex(p,f) for f in 1:nf(p)]
vNotf=setdiff(1:nvb(p),flowVariableIndexs)
vNotfns=[vname(p,v) for v in vNotf]
-
+
ns=Vector{Symbol}(vcat(sns,fns,svns,vNotfns))
lses=[sname(p,subpart(p,ls,:lss))=>svname(p,subpart(p,ls,:lssv)) for ls in 1:nls(p)]
@@ -211,7 +210,7 @@ Nodes: stocks, flows, sum variables, parameters, nonflow dynamic variables
Edges: morphisms in stock flow
"""
function convertToCausalLoop(p::AbstractStockAndFlowStructureF)
-
+
sns=snames(p)
fns=fnames(p)
svns=svnames(p)
@@ -219,7 +218,7 @@ function convertToCausalLoop(p::AbstractStockAndFlowStructureF)
flowVariableIndexs=[flowVariableIndex(p,f) for f in 1:nf(p)]
vNotf=setdiff(1:nvb(p),flowVariableIndexs)
vNotfns=[vname(p,v) for v in vNotf]
-
+
ns=Vector{Symbol}(vcat(sns,fns,svns,vNotfns,pns))
lses=[sname(p,subpart(p,ls,:lss))=>svname(p,subpart(p,ls,:lssv)) for ls in 1:nls(p)]
@@ -251,13 +250,13 @@ function from_clp(cl::CausalLoopPol)
end
"""
-Create a CausalLoopPol from a vector of node names, and two vectors indicating
+Create a CausalLoopPol from a vector of node names, and two vectors indicating
which indices for vertices will act as edges.
-to_clp([:A, :B], [1 => 2], Vector{Pair{Int, Int}}()) will create a
+to_clp([:A, :B], [1 => 2], Vector{Pair{Int, Int}}()) will create a
CausalLoopPol with a positive polarity edge from A to B.
"""
-function to_clp(nodes::Vector{Symbol}, reinf::Vector{Pair{Int, Int}},
+function to_clp(nodes::Vector{Symbol}, reinf::Vector{Pair{Int, Int}},
bal::Vector{Pair{Int, Int}})
ne = length(reinf) + length(bal)
@@ -283,7 +282,7 @@ Convert CausalLoopPM to CausalLoopPol.
"""
function to_clp(cl::CausalLoopPM)
to_clp(
- Vector{Symbol}(subpart(cl, :vname)),
+ Vector{Symbol}(subpart(cl, :vname)),
Vector{Pair{Int,Int}}(map(((x,y),) -> x => y, zip(subpart(cl, :sp), subpart(cl, :tp)))),
Vector{Pair{Int,Int}}(map(((x,y),) -> x => y, zip(subpart(cl, :sm), subpart(cl, :tm)))),
)
@@ -326,13 +325,13 @@ vector of polarities.
CausalLoopPM(ns::Vector{Symbol}, es::Vector{Pair{Symbol, Symbol}}, pols::Vector{Polarity}) = begin
@assert length(pols) == length(es)
-
+
c = CausalLoopPM()
-
+
ns = vectorify(ns)
es = vectorify(es)
-
+
ns_idx=state_dict(ns)
add_vertices!(c, length(ns), vname=ns)
@@ -382,13 +381,13 @@ Return source vertex index of an edge of CausalLoopPM by index.
Negative edges come after positive edges.
```julia-repl
-julia> using StockFlow; StockFlow.Syntax;
+julia> using StockFlow; StockFlow.Syntax;
julia> cl = (@cl A => +B, B => -C, C => +D);
julia> sedge(cl, 3)
2
````
The nodes are ordered A, B, C.
-The edges are ordered A => +B, C => +D, B => -C; so, the source index of the
+The edges are ordered A => +B, C => +D, B => -C; so, the source index of the
third edge is B, which has index 2.
"""
sedge(c::CausalLoopPM, e) = begin
@@ -476,8 +475,8 @@ function to_graphs_graph(cl::Union{CausalLoopPol, CausalLoop})
g
end
-"""
- CausalLoopPM, return all cycles of a causal loop as a vector of vectors of int,
+"""
+ CausalLoopPM, return all cycles of a causal loop as a vector of vectors of int,
where positive edges come before negative.
Each cycle will include each edge at most once.
@@ -489,7 +488,7 @@ function cl_cycles(cl::AbstractCausalLoop)
end
-"""
+"""
CausalLoopPol, return all cycles of a causal loop as a vector of vectors of int.
Each cycle will include each edge at most once.
@@ -646,7 +645,7 @@ function betweenness(cl::CausalLoop)
sp = all_shortest_paths(cl)
# Technically, we should probably also be mapping empty lists to that particular node, but it doesn't affect betweenness
- sp_nodes = map(paths -> (map(path -> (length(path) == 0 ? Vector{Int}() : vcat([sedge(cl, path[1])], (x -> tedge(cl, x)).(path))), paths)), sp)
+ sp_nodes = map(paths -> (map(path -> (length(path) == 0 ? Vector{Int}() : vcat([sedge(cl, path[1])], (x -> tedge(cl, x)).(path))), paths)), sp)
σₛₜ = Matrix{Int}(map(x -> length(x), sp))
@@ -664,7 +663,7 @@ function betweenness(cl::CausalLoop)
end
betweenness_cent
-
+
end
"""
@@ -746,14 +745,14 @@ function num_inputs_outputs_pols(cl::CausalLoopPol)
@assert allunique(vnames(cl))
ssvec = Dict{Symbol, Tuple{Int, Int, Int, Int}}() # name, pos in, pos out, neg in, neg out
for i in 1:nvert(cl)
- push!(ssvec,
- subpart(cl, i, :vname) =>
- ((count(x -> epol(cl, x) == POL_POSITIVE, incident(cl, i, :tgt))),
- (count(x -> epol(cl, x) == POL_POSITIVE, incident(cl, i, :src))),
- (count(x -> epol(cl, x) == POL_NEGATIVE, incident(cl, i, :tgt))),
+ push!(ssvec,
+ subpart(cl, i, :vname) =>
+ ((count(x -> epol(cl, x) == POL_POSITIVE, incident(cl, i, :tgt))),
+ (count(x -> epol(cl, x) == POL_POSITIVE, incident(cl, i, :src))),
+ (count(x -> epol(cl, x) == POL_NEGATIVE, incident(cl, i, :tgt))),
(count(x -> epol(cl, x) == POL_NEGATIVE, incident(cl, i, :src))))
)
-
+
end
ssvec
end
@@ -781,7 +780,7 @@ Return vector of all shortest paths between two nodes. Takes node indices as ar
function shortest_paths(cl::Union{CausalLoopPM, CausalLoopPol, CausalLoop}, s::Int, d::Int)
paths = Vector{Vector{Int}}()
minimum = Inf
-
+
function rec_search!(path, nodes)
if length(path) >= minimum
return
@@ -886,18 +885,18 @@ function all_shortest_paths(cl::CausalLoop)
end
- A′ = Matrix{Vector{Vector{Int}}}(undef, nvert(cl), nvert(cl))
+ A′ = Matrix{Vector{Vector{Int}}}(undef, nvert(cl), nvert(cl))
for i in 1:nvert(cl)
for j in 1:nvert(cl)
A′[i,j] = Vector{Vector{Int}}()
end
end
# empty matrix
-
+
for (s, t) in no_path_targets
V₁ = [x for (x,targs) in enumerate(A[s,:]) if !isempty(targs)]
V₂ = [x for (x,srcs) in enumerate(adj[:, t]) if !isempty(srcs)]
- inter = intersect(V₁, V₂) # nonempty paths i -> k and k -> j
+ inter = intersect(V₁, V₂) # nonempty paths i -> k and k -> j
for k in inter
for p1 in A[s, k]
@@ -923,7 +922,7 @@ function all_shortest_paths(cl::CausalLoop)
B
-
+
end
@@ -951,7 +950,7 @@ end
# made_change = false
# for node in 1:nvert(cl)
# for target in 1:nvert(cl)
-# if node == target || isempty(all_paths[node,target])
+# if node == target || isempty(all_paths[node,target])
# continue
# end
# outgoing = outgoing_edges(cl, target)
@@ -1011,8 +1010,6 @@ end
# all_paths
# end
-
-# # end
-
\ No newline at end of file
+# # end
diff --git a/src/StockFlow.jl b/src/StockFlow.jl
index f5717982..155a8a95 100644
--- a/src/StockFlow.jl
+++ b/src/StockFlow.jl
@@ -9,8 +9,8 @@ funcDynam, flowVariableIndex, funcFlow, funcFlows, funcSV, funcSVs, TransitionMa
vectorfield, funcFlowsRaw, funcFlowRaw, inflowsAll, outflowsAll,instock,outstock, stockssv, stocksv, svsv, svsstock,
vsstock, vssv, svsstockAllF, vsstockAllF, vssvAllF, StockAndFlowUntyped, StockAndFlowFUntyped, StockAndFlowStructureUntyped, StockAndFlowStructureFUntyped, StockAndFlowUntyped0, Open, snames, fnames, svnames, vnames,
object_shift_right, foot, leg, lsnames, OpenStockAndFlow, OpenStockAndFlowOb, fv, fvs, nlvv, nlpv, vtgt, vsrc, vpsrc, vptgt, pname, pnames, make_v_expr,
-vop, lvvposition, lvtgtposition, lsvvposition, lpvvposition, recreate_stratified, set_snames!, set_fnames!, set_svnames!, set_vnames!, set_pnames!, set_sname!, set_fname!, set_svname!, set_vname!, set_pname!,
-get_lss, get_lssv, get_lsvsv, get_lsvv, get_lvs, get_lvv, get_is, get_ifn, get_os, get_ofn, get_lpvp, get_lpvv, get_lvsrc, get_lvtgt, get_links,
+vop, lvvposition, lvtgtposition, lsvvposition, lpvvposition, set_snames!, set_fnames!, set_svnames!, set_vnames!, set_pnames!, set_sname!, set_fname!, set_svname!, set_vname!, set_pname!,
+get_lss, get_lssv, get_lsvsv, get_lsvv, get_lvs, get_lvv, get_is, get_ifn, get_os, get_ofn, get_lpvp, get_lpvv, get_lvsrc, get_lvtgt,
make_v_expr_nonrecursive, get_lpvpposition, get_lvsrcposition, get_lsvsvposition, get_lvsposition, ntcomponent
@@ -96,7 +96,7 @@ const StockAndFlow0 = StockAndFlowUntyped0{Symbol}
"""
StockAndFlow0(s,sv,ssv)
-
+
for an instance of the sub-schema, the program supports only have stocks, or only have sum auxiliary variables, or both stocks
and sum auxiliary variables, or have both """
StockAndFlow0(s,sv,ssv) = begin
@@ -595,13 +595,13 @@ StockAndFlowF(s,p,v,f,sv) = begin
end
""" return the stocks name with index of s """
-sname(p::AbstractStockAndFlow0,s) = subpart(p,s,:sname)
+sname(p::AbstractStockAndFlow0,s) = subpart(p,s,:sname)
""" return the flows name with index of f """
fname(p::AbstractStockAndFlowStructure,f) = subpart(p,f,:fname)
""" return the sum auxiliary variables name with index of sv """
-svname(p::AbstractStockAndFlow0,sv) = subpart(p,sv,:svname)
+svname(p::AbstractStockAndFlow0,sv) = subpart(p,sv,:svname)
""" return the auxiliary variables name with index of v """
-vname(p::AbstractStockAndFlowStructure,v) = subpart(p,v,:vname)
+vname(p::AbstractStockAndFlowStructure,v) = subpart(p,v,:vname)
""" return the auxiliary variables name with index of v """
pname(sf::AbstractStockAndFlowStructureF,p) = subpart(sf,p,:pname)
@@ -611,7 +611,7 @@ snames(p::AbstractStockAndFlow0) = [sname(p, s) for s in 1:ns(p)]
fnames(p::AbstractStockAndFlowStructure) = [fname(p, f) for f in 1:nf(p)]
""" return sum variable names """
svnames(p::AbstractStockAndFlow0) = [svname(p, sv) for sv in 1:nsv(p)]
-""" return variable names """
+""" return variable names """
vnames(p::AbstractStockAndFlowStructure) = [vname(p, v) for v in 1:nvb(p)]
""" return parameter names """
pnames(sf::AbstractStockAndFlowStructureF) = [pname(sf,p) for p in 1:np(sf)]
@@ -817,12 +817,12 @@ outflowsAll(p::AbstractStockAndFlowStructure) = [((outflows(p, s) for s in 1:ns(
-"""
+"""
funcDynam(p::AbstractStockAndFlow,v)
return the functions of variables give index v """
funcDynam(p::AbstractStockAndFlow,v) = subpart(p,v,:funcDynam)
-"""
+"""
funcDynam(sf::AbstractStockAndFlowF,v)
return the functions of variables give index v """
funcDynam(sf::AbstractStockAndFlowF,v) = begin
diff --git a/src/visualization.jl b/src/visualization.jl
index 16b99587..f0ebd4ae 100644
--- a/src/visualization.jl
+++ b/src/visualization.jl
@@ -1,40 +1,38 @@
using Catlab.CategoricalAlgebra
-using Catlab.Graphics.Graphviz
-import Catlab.Graphics.Graphviz: Graph, Subgraph
-import Base.Iterators: flatten
+using Catlab.Graphics.Graphviz: Attributes, Node, Edge, Digraph
+using Base.Iterators: flatten
using StatsBase
-using Catlab.Graphics
-export display_uwd, GraphF, GraphRB, GraphCL
+export display_uwd, GraphF, GraphRB, GraphCL, Graph
display_uwd(ex) = to_graphviz(ex, box_labels=:name, junction_labels=:variable, edge_attrs=Dict(:len=>"1"))
def_stock(p, s) = ("s$s", Attributes(:label=>"$(sname(p, s))",
- :shape=>"square",
- :color=>"black",
- :style=>"filled",
+ :shape=>"square",
+ :color=>"black",
+ :style=>"filled",
:fillcolor=>"#9ACEEB"))
def_parameter(p, pp) = ("p$pp", Attributes(:label=>"$(pname(p, pp))",
- :shape=>"circle",
+ :shape=>"circle",
:color=>"black"))
def_auxiliaryV(p, v) = ("v$v", Attributes(:label=>"$(vname(p, v))",
- :shape=>"plaintext",
+ :shape=>"plaintext",
:fontcolor=>"black"))
#def_auxiliaryVF(p, v) = ("v$v", Attributes(:label=>"$(vname(p, v))"*"="*"$(make_v_expr(p,v))",
-# :shape=>"plaintext",
+# :shape=>"plaintext",
# :fontcolor=>"black"))
def_auxiliaryVF(p, v) = ("v$v", Attributes(:label=>p isa AbstractStockAndFlowF ? "$(make_v_expr(p,v))" : "$(vname(p, v))",
- :shape=>"plaintext",
+ :shape=>"plaintext",
:fontcolor=>"black"))
def_sumV(p, sv) = ("sv$sv", Attributes(:label=>"$(svname(p, sv))",
- :shape=>"circle",
+ :shape=>"circle",
:color=>"black",
- :fillcolor=>"cornflowerblue",
+ :fillcolor=>"cornflowerblue",
:style=>"filled"))
# currently, we use invisible fake stock nodes as outer clouds
@@ -42,7 +40,7 @@ def_sumV(p, sv) = ("sv$sv", Attributes(:label=>"$(svname(p, sv))",
# "u" indicates this cloud node is an upstream cloud to a half-edge inflow
# "d" indicates this cloud node is a downstream cloud to a half-edge outflow
def_cloud(c, type) = ("fs_$c"*type, Attributes(:label=>"",
- :shape=>"point",
+ :shape=>"point",
:color=>"white"))
# function of define the flow with auxiliary variables are also output, e.g., type = "SFVL" or "SFV"
@@ -63,7 +61,7 @@ end
def_flow_noneV(p, us, ds, f) = ([us, ds],Attributes(:label=>"$(fname(p,f))", :labelfontsize=>"6", :color=>"black:invis:black"))
# s: string of the source name
-# t: string of the target name
+# t: string of the target name
def_link(s,t) = ([s, t])
"""
@@ -79,7 +77,7 @@ function GraphCL(c::CausalLoop)
stmts=vcat(NNodes,Edges)
- g = Graphviz.Digraph("G", stmts;graph_attrs=Attributes(:rankdir=>"LR"))
+ g = Digraph("G", stmts;graph_attrs=Attributes(:rankdir=>"LR"))
return g
end
@@ -118,11 +116,168 @@ function GraphCL(c::CausalLoopPol; schema="BASE")
stmts=vcat(NNodes,Edges)
- g = Graphviz.Digraph("G", stmts;graph_attrs=Attributes(:rankdir=>"LR"))
+ g = Digraph("G", stmts;graph_attrs=Attributes(:rankdir=>"LR"))
return g
end
+# schema: "c": the full schema
+# "c0": the simple schema
+# the type parameter is only used for schema C, which means if schema=C0, all the component will be plot out anyway, since C0 is quite simple
+# type: "SFVL": include all component
+# "SF": only include stocks and flows
+# "SFV": only include stocks, flows, variables (include both auxiliary variables and sum auxiliary variables)
+
+function Graph(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_auxiliaryV::Function=def_auxiliaryV,
+ make_sumV::Function=def_sumV, make_cloud::Function=def_cloud,
+ make_flow_V::Function=def_flow_V, make_flow_noneV::Function=def_flow_noneV,
+ make_link::Function=def_link,
+ schema::String="C", type::String="SFVL", rd::String="LR")
+
+# only full schema C has Flows
+ if schema == "C" begin
+ inflows=inflowsAll(p)
+ outflows=outflowsAll(p)
+ innerFlows=intersect(inflows,outflows)
+ edgeInFlows=symdiff(inflows,innerFlows)
+ edgeOutFlows=symdiff(outflows,innerFlows)
+ end
+ end
+
+ stockNodes = [Node(make_stock(p,s)...) for s in 1:ns(p)]
+
+
+ if occursin("V", type)
+ if schema == "C"
+ vNodes = [Node(make_auxiliaryV(p,v)...) for v in 1:nvb(p)]
+
+ end
+ svNodes = [Node(make_sumV(p,sv)...) for sv in 1:nsv(p)]
+
+ end
+
+ if schema == "C" begin
+ boundInFlowNodes = [Node(make_cloud(edgeInFlows[s],"u")...) for s in 1:length(edgeInFlows)] #id is e.g., "fs_1u"
+ boundOutFlowNodes = [Node(make_cloud(edgeOutFlows[s],"d")...) for s in 1:length(edgeOutFlows)] #id is e.g., "fs_1d"
+ end
+ end
+ stmts_nodes = if schema == "C"
+ if occursin("V", type) # SFVL or SFV
+ vcat(stockNodes, boundInFlowNodes, boundOutFlowNodes, vNodes, svNodes)
+ else # SF
+ vcat(stockNodes, boundInFlowNodes, boundOutFlowNodes)
+ end
+ else # schema == C0
+ vcat(stockNodes, svNodes)
+ end
+
+ # define edges of flows
+ if schema == "C" begin
+ edges_inner=map(1:length(innerFlows)) do k
+ flow_index=innerFlows[k]
+ fv=flowVariableIndex(p,flow_index)
+ stock_index_outfrom = first(outstock(p,flow_index))
+ stock_index_into = first(instock(p,flow_index))
+ if occursin("V", type)
+ flow=make_flow_V(p,"s$stock_index_outfrom", "s$stock_index_into", fv, flow_index)
+ [Edge(flow[1]...),Edge(flow[2]...)]
+ else
+ [Edge(make_flow_noneV(p,"s$stock_index_outfrom", "s$stock_index_into", flow_index)...)]
+ end
+ end |> flatten |> collect
+
+ edges_inflow=map(1:length(edgeInFlows)) do k
+ flow_index=edgeInFlows[k]
+ fv=flowVariableIndex(p,flow_index)
+ stock_index_into = first(instock(p,flow_index))
+ if occursin("V", type)
+ flow=make_flow_V(p,"fs_$flow_index"*"u", "s$stock_index_into", fv, flow_index)
+ [Edge(flow[1]...),Edge(flow[2]...)]
+ else
+ [Edge(make_flow_noneV(p,"fs_$flow_index"*"u", "s$stock_index_into", flow_index)...)]
+ end
+ end |> flatten |> collect
+
+ edges_outflow=map(1:length(edgeOutFlows)) do k
+ flow_index=edgeOutFlows[k]
+ fv=flowVariableIndex(p,flow_index)
+ stock_index_outfrom = first(outstock(p,flow_index))
+ if occursin("V", type)
+ flow=make_flow_V(p,"s$stock_index_outfrom", "fs_$flow_index"*"d", fv, flow_index)
+ [Edge(flow[1]...),Edge(flow[2]...)]
+ else
+ [Edge(make_flow_noneV(p,"s$stock_index_outfrom", "fs_$flow_index"*"d", flow_index)...)]
+ end
+ end |> flatten |> collect
+
+ stmts_edges_flows = if schema == "C"
+ vcat(edges_inner,edges_inflow,edges_outflow)
+ end
+ end
+ end
+
+ # linkages from S to sv
+ edges_lsv()=begin
+ subEdges = Vector{Edge}[]
+ for k in 1:nsv(p)
+ subEdges = vcat(map(stockssv(p,k)) do m
+ [Edge(make_link("s$m", "sv$k")...)]
+ end, subEdges)
+ end
+ return subEdges |> flatten |> collect
+ end
+
+ if schema == "C" && occursin("L", type) begin
+ # plot the linkages
+ # linkages from S to v
+ edges_lv()=begin
+ subEdges = Vector{Edge}[]
+ for k in 1:nvb(p)
+ subEdges = vcat(map(stocksv(p,k)) do m
+ [Edge(make_link("s$m", "v$k")...)]
+ end, subEdges)
+ end
+ return subEdges |> flatten |> collect
+ end
+
+ # linkages from sv to v
+ edges_lsvv()=begin
+ subEdges = Vector{Edge}[]
+ for k in 1:nvb(p)
+ subEdges = vcat(map(svsv(p,k)) do m
+ [Edge(make_link("sv$m", "v$k")...)]
+ end, subEdges)
+ end
+ return subEdges |> flatten |> collect
+ end
+ end
+ end
+
+ stmts_edges_links = if schema == "C0"
+ edges_lsv()
+ else
+ if occursin("L", type)
+ vcat(edges_lv(), edges_lsv(), edges_lsvv())
+ end
+ end
+
+ stmts = if schema == "C0"
+ vcat(stmts_nodes, stmts_edges_links)
+ else
+ if occursin("L", type)
+ vcat(stmts_nodes, stmts_edges_flows, stmts_edges_links)
+ else
+ vcat(stmts_nodes, stmts_edges_flows)
+ end
+ end
+
+ graph_attrs = Attributes(:rankdir=>rd)
+ edge_attrs = Attributes(:splines=>"splines")
+
+ g = Digraph("G", stmts; graph_attrs=graph_attrs, edge_attrs=edge_attrs)
+ return g
+
+end
# schema: "c": the full schema
@@ -160,7 +315,7 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
svNodes = [Node(make_sumV(p,sv)...) for sv in 1:nsv(p)]
end
-
+
if schema == "C" begin
boundInFlowNodes = [Node(make_cloud(edgeInFlows[s],"u")...) for s in 1:length(edgeInFlows)] #id is e.g., "fs_1u"
boundOutFlowNodes = [Node(make_cloud(edgeOutFlows[s],"d")...) for s in 1:length(edgeOutFlows)] #id is e.g., "fs_1d"
@@ -175,9 +330,9 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
else # schema == C0
vcat(stockNodes, svNodes)
end
-
+
# define edges of flows
- if schema == "C" begin
+ if schema == "C" begin
edges_inner=map(1:length(innerFlows)) do k
flow_index=innerFlows[k]
fv=flowVariableIndex(p,flow_index)
@@ -209,7 +364,7 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
stock_index_outfrom = first(outstock(p,flow_index))
if occursin("V", type)
flow=make_flow_V(p,"s$stock_index_outfrom", "fs_$flow_index"*"d", fv, flow_index)
- [Edge(flow[1]...),Edge(flow[2]...)]
+ [Edge(flow[1]...),Edge(flow[2]...)]
else
[Edge(make_flow_noneV(p,"s$stock_index_outfrom", "fs_$flow_index"*"d", flow_index)...)]
end
@@ -218,12 +373,12 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
stmts_edges_flows = if schema == "C"
vcat(edges_inner,edges_inflow,edges_outflow)
end
- end
+ end
end
# linkages from S to sv
edges_lsv()=begin
- subEdges = Vector{Edge}[]
+ subEdges = Vector{Edge}[]
for k in 1:nsv(p)
subEdges = vcat(map(stockssv(p,k)) do m
[Edge(make_link("s$m", "sv$k")...)]
@@ -236,7 +391,7 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
# plot the linkages
# linkages from S to v
edges_lv()=begin
- subEdges = Vector{Edge}[]
+ subEdges = Vector{Edge}[]
for k in 1:nvb(p)
subEdges = vcat(map(stocksv(p,k)) do m
[Edge(make_link("s$m", "v$k")...)]
@@ -247,7 +402,7 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
# linkages from sv to v
edges_lsvv()=begin
- subEdges = Vector{Edge}[]
+ subEdges = Vector{Edge}[]
for k in 1:nvb(p)
subEdges = vcat(map(svsv(p,k)) do m
[Edge(make_link("sv$m", "v$k")...)]
@@ -258,7 +413,7 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
# linkages from v to v
edges_lvv()=begin
- subEdges = Vector{Edge}[]
+ subEdges = Vector{Edge}[]
for k in 1:nvb(p)
subEdges = vcat(map(vsrc(p,k)) do m
[Edge(make_link("v$m", "v$k")...)]
@@ -269,7 +424,7 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
# linkages from p to v ###################################
edges_lpv()=begin
- subEdges = Vector{Edge}[]
+ subEdges = Vector{Edge}[]
for k in 1:nvb(p)
subEdges = vcat(map(vpsrc(p,k)) do m
[Edge(make_link("p$m", "v$k")...)]
@@ -279,7 +434,7 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
end
end
- end
+ end
stmts_edges_links = if schema == "C0"
edges_lsv()
@@ -302,7 +457,7 @@ function GraphF(p::AbstractStockAndFlow0; make_stock::Function=def_stock, make_a
graph_attrs = Attributes(:rankdir=>rd)
edge_attrs = Attributes(:splines=>"splines")
- g = Graphviz.Digraph("G", stmts; graph_attrs=graph_attrs, edge_attrs=edge_attrs)
+ g = Digraph("G", stmts; graph_attrs=graph_attrs, edge_attrs=edge_attrs)
return g
end
@@ -312,7 +467,7 @@ end
"""
Graph reinforcing and balancing loops of a causal loop diagram.
-"""
+"""
function GraphRB(c::Union{CausalLoopPM, CausalLoopPol} ; cycle_color=:yellow, edge_label_color=:lightblue)
NNodes = [Node("n$n", Attributes(:label=>"$(vname(c, n))",:shape=>"square")) for n in 1:nvert(c)]
Edges = Vector{Edge}()
@@ -328,23 +483,23 @@ function GraphRB(c::Union{CausalLoopPM, CausalLoopPol} ; cycle_color=:yellow, ed
error("Unknown Polarity $pol_int.")
end
new_node_index = length(NNodes) + 1
-
+
# Graphviz doesn't allow us to have an edge from an edge, so we put a node
- # in the middle of each edge and use that instead.
-
+ # in the middle of each edge and use that instead.
+
# Intermediate node in edge, with label
push!(NNodes, Node("n$new_node_index", Attributes(:label => "$pol", :penwidth => "0", :style => "filled", :shape => "cds", :fillcolor => "$edge_label_color", )))
# edge to intermediate
- push!(Edges, Graphviz.Edge(["n$(sedge(c,k))", "n$new_node_index"],Attributes(:color=>"blue", :arrowhead=>"none")))
+ push!(Edges, Edge(["n$(sedge(c,k))", "n$new_node_index"],Attributes(:color=>"blue", :arrowhead=>"none")))
# edge from intermediate
- push!(Edges, Graphviz.Edge(["n$new_node_index", "n$(tedge(c,k))"],Attributes(:color=>"blue")))
+ push!(Edges, Edge(["n$new_node_index", "n$(tedge(c,k))"],Attributes(:color=>"blue")))
# mapping of edge to its intermediate node
push!(edge_to_intermediate_node, k => new_node_index)
end
for (edges, polarity) ∈ extract_loops(c)
- if polarity == POL_POSITIVE
+ if polarity == POL_POSITIVE
label = "R" # reinforcing
elseif polarity == POL_NEGATIVE
label = "B" # balancing
@@ -356,15 +511,15 @@ function GraphRB(c::Union{CausalLoopPM, CausalLoopPol} ; cycle_color=:yellow, ed
push!(NNodes, Node("n$new_node_index", Attributes(:label => "$label", :shape => "circle", :fillcolor => "$cycle_color", :style => "filled")))
for edge ∈ edges
edge_node = edge_to_intermediate_node[edge]
- push!(Edges, Graphviz.Edge(["n$edge_node", "n$new_node_index"], Attributes(:color=>"$cycle_color", :style=>"dashed")))
+ push!(Edges, Edge(["n$edge_node", "n$new_node_index"], Attributes(:color=>"$cycle_color", :style=>"dashed")))
end
-
+
end
-
-
+
+
stmts=vcat(NNodes,Edges)
- g = Graphviz.Digraph("G", stmts;graph_attrs=Attributes(:rankdir=>"LR"))
+ g = Digraph("G", stmts;graph_attrs=Attributes(:rankdir=>"LR"))
return g
end
@@ -377,20 +532,9 @@ end
# all_loops = extract_loops(c)
# all_loop_sequences = [edges for (edges, _) in all_loops]
# for (edges, polarity) in all_loops
-# if
+# if
# # if an edge is only in one loop, we can collapse it entirely.
# # If an edge is in multiple loops, we need to keep this subgraph.
# end
# end
-
-
-
-
-
-
-
-
-
-
-
diff --git a/validate-notebook-examples.sh b/validate-notebook-examples.sh
new file mode 100755
index 00000000..92507461
--- /dev/null
+++ b/validate-notebook-examples.sh
@@ -0,0 +1,8 @@
+#!/bin/env bash
+
+mkdir -p jlexamples
+./ipynb-to-jl.sh "full_fledged_schema_examples"
+./ipynb-to-jl.sh "full_fledged_schema_examples_new"
+rm jlexamples/full_fledged_schema_examples*checkpoint*
+julia -p auto --project="." -e 'include("./run_notebooks.jl")'
+rm -rf jlexamples/