diff --git a/.appveyor.yml b/.appveyor.yml index f7f514dc..39e05537 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -13,7 +13,7 @@ matrix: - julia_version: nightly branches: only: - - master + - main - /release-.*/ notifications: - provider: Email diff --git a/.github/workflows/CompatHelper.yml b/.github/workflows/CompatHelper.yml deleted file mode 100644 index d48734a3..00000000 --- a/.github/workflows/CompatHelper.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: CompatHelper -on: - schedule: - - cron: 0 0 1 * * - workflow_dispatch: -jobs: - CompatHelper: - runs-on: ubuntu-latest - steps: - - name: Pkg.add("CompatHelper") - run: julia -e 'using Pkg; Pkg.add("CompatHelper")' - - name: CompatHelper.main() - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }} - run: julia -e 'using CompatHelper; CompatHelper.main()' diff --git a/.github/workflows/TagBot.yml b/.github/workflows/TagBot.yml index f49313b6..b2e776dd 100644 --- a/.github/workflows/TagBot.yml +++ b/.github/workflows/TagBot.yml @@ -4,6 +4,22 @@ on: types: - created workflow_dispatch: + inputs: + lookback: + default: 3 +permissions: + actions: read + checks: read + contents: write + deployments: read + issues: read + discussions: read + packages: read + pages: read + pull-requests: read + repository-projects: read + security-events: read + statuses: read jobs: TagBot: if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot' @@ -11,5 +27,4 @@ jobs: steps: - uses: JuliaRegistries/TagBot@v1 with: - token: ${{ secrets.GITHUB_TOKEN }} - ssh: ${{ secrets.DOCUMENTER_KEY }} + token: ${{ secrets.SERVICE_TOKEN }} diff --git a/.github/workflows/julia_ci.yml b/.github/workflows/julia_ci.yml new file mode 100644 index 00000000..9dabe35f --- /dev/null +++ b/.github/workflows/julia_ci.yml @@ -0,0 +1,50 @@ +name: Julia CI/CD + +on: + schedule: + - cron: 0 0 * * * + push: + branches: ["main"] + tags: ["*"] + pull_request: + workflow_dispatch: + inputs: + action: + description: "Action" + required: true + default: "test" + type: choice + options: + - test + - release + version: + description: "Tag and release version:" + required: false + +permissions: + actions: read + checks: read + contents: write + deployments: read + discussions: read + issues: read + packages: read + pages: read + pull-requests: write + repository-projects: read + security-events: read + statuses: read + +jobs: + CI: + if: github.event_name == 'pull_request' || github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.action == 'test') + uses: AlgebraicJulia/.github/.github/workflows/julia_ci.yml@main + secrets: inherit + CompatHelper: + if: github.event_name == 'schedule' + uses: AlgebraicJulia/.github/.github/workflows/julia_compat.yml@main + secrets: inherit + Release: + if: github.event_name == 'workflow_dispatch' && inputs.action == 'release' && inputs.version != '' + uses: AlgebraicJulia/.github/.github/workflows/julia_release.yml@main + secrets: inherit diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index 1b874699..00000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Tests - -on: [push, pull_request] - -jobs: - test: - runs-on: ${{ matrix.os }} - strategy: - matrix: - julia-version: ['1.9'] - os: [ubuntu-latest, macOS-latest] - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@latest - with: - version: ${{ matrix.julia-version }} - - uses: julia-actions/cache@v1 - - uses: julia-actions/julia-buildpkg@v1 - - uses: julia-actions/julia-runtest@v1 -# TODO: Needs to be set up on codecov.io -# - uses: julia-actions/julia-processcoverage@v1 -# - uses: codecov/codecov-action@v3 diff --git a/.github/workflows/validate-notebooks.yml b/.github/workflows/validate-notebooks.yml deleted file mode 100644 index 06cf8297..00000000 --- a/.github/workflows/validate-notebooks.yml +++ /dev/null @@ -1,50 +0,0 @@ -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: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Setup Julia - uses: julia-actions/setup-julia@v1 - with: - version: 1.9 - - name: Cache Julia dependencies - uses: julia-actions/cache@v1 - - name: Add IJulia Jupyter kernel - run: julia --color=yes --project=. -e 'ENV["JULIA_PKG_PRECOMPILE_AUTO"]=0; using Pkg; pkg"add IJulia"' - - name: Install Julia dependencies - run: julia --color=yes --project=. -e 'import Pkg; Pkg.instantiate(); Pkg.resolve(); Pkg.precompile()' - - uses: yaananth/run-notebook@v2 - env: - RUNNER: ${{ toJson(runner) }} - SECRETS: ${{ toJson(secrets) }} - GITHUB: ${{ toJson(github) }} - with: - notebook: "examples/full_fledged_schema_examples_new/stratification/diabetes_diagnose.ipynb" - - uses: yaananth/run-notebook@v2 - env: - RUNNER: ${{ toJson(runner) }} - SECRETS: ${{ toJson(secrets) }} - GITHUB: ${{ toJson(github) }} - with: - notebook: "examples/full_fledged_schema_examples_new/composition/diabetes_model.ipynb" - - uses: yaananth/run-notebook@v2 - env: - RUNNER: ${{ toJson(runner) }} - SECRETS: ${{ toJson(secrets) }} - GITHUB: ${{ toJson(github) }} - with: - notebook: "examples/full_fledged_schema_examples_new/CausalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb" - - uses: actions/upload-artifact@v3 - if: always() - with: - name: output - path: ${{ RUNNER.temp }}/nb-runner - env: - RUNNER: ${{ toJson(runner) }} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..7a73a41b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/README.md b/README.md index 2ef014b0..b886b636 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,79 @@ # AlgebraicStockFlow -[![Tests](https://github.com/AlgebraicJulia/StockFlow.jl/actions/workflows/tests.yml/badge.svg)](https://github.com/AlgebraicJulia/StockFlow.jl/actions/workflows/tests.yml) - +[![Stable Documentation](https://img.shields.io/badge/docs-stable-blue.svg)](https://algebraicjulia.github.io/StockFlow.jl/dev/) +[![CI/CD](https://github.com/AlgebraicJulia/StockFlow.jl/actions/workflows/julia_ci.yml/badge.svg)](https://github.com/AlgebraicJulia/StockFlow.jl/actions/workflows/julia_ci.yml) +[![Code Coverage](https://codecov.io/gh/AlgebraicJulia/StockFlow.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/AlgebraicJulia/StockFlow.jl) StockFlow.jl is a Julia library for the creation and execution of [stock and flow modeling diagrams](https://en.wikipedia.org/wiki/System_dynamics#Stock_and_flow_diagrams), designed with model composition and stratification in mind through a [categorical approach](https://arxiv.org/abs/2211.01290). -Stock-flow diagrams are used to represent systems where its population can move between different states, such as tracking how many people have been infected or recovered from a disease. By providing initial values, and values for the parameters, we can solve the differential equation which the stock-flow diagram represents, which gives us a graph for how the population varies over time. +Stock-flow diagrams are used to represent systems where its population can move between different states, such as tracking how many people have been infected or recovered from a disease. By providing initial values, and values for the parameters, we can solve the differential equation which the stock-flow diagram represents, which gives us a graph for how the population varies over time. In this particular schema, stock-flow diagrams consist of stocks, flows, dynamic variables, sum variables, parameters, and the links between them. -* Stocks represent accumulations of a population in a particular state, such as 'susceptible', 'infected', 'recovered', etc. -* Flows represent transitions between states. A flow can go from a stock to a stock, from nothing to a stock, or from a stock to nothing, the latter two representing a population entering or leaving a model. Flows are dependent on a dynamic variable, which determines its rate. -* Dynamic variables are the equations which determine flow rates. For instance, if the rate at which people move from uninfected to infected is the uninfected stock S times the parameter c, we can say v\_infectionRate = c * S, and use this as a flow variable. Dynamic variables can contain stocks, sum variables, parameters and other dynamic variables (but the definition can't be circular; you can't set a dynamic variable equal to itself, for instance). Currently supports common binary and unary operations such as addition, multiplication, log, exp. -* Sum variables represent the sum of a subpopulation. The value of a sum variable is the sum of all the stocks which link to it. Common examples include the sum of the entire population N, the sum of infected individuals NI, or the sum of a particular subpopulation NS. -* Parameters are variables for which the particular values are defined outside the model definition. You can provide parameters and initial values, then solve the differential equation. +- Stocks represent accumulations of a population in a particular state, such as 'susceptible', 'infected', 'recovered', etc. +- Flows represent transitions between states. A flow can go from a stock to a stock, from nothing to a stock, or from a stock to nothing, the latter two representing a population entering or leaving a model. Flows are dependent on a dynamic variable, which determines its rate. +- Dynamic variables are the equations which determine flow rates. For instance, if the rate at which people move from uninfected to infected is the uninfected stock S times the parameter c, we can say v_infectionRate = c \* S, and use this as a flow variable. Dynamic variables can contain stocks, sum variables, parameters and other dynamic variables (but the definition can't be circular; you can't set a dynamic variable equal to itself, for instance). Currently supports common binary and unary operations such as addition, multiplication, log, exp. +- Sum variables represent the sum of a subpopulation. The value of a sum variable is the sum of all the stocks which link to it. Common examples include the sum of the entire population N, the sum of infected individuals NI, or the sum of a particular subpopulation NS. +- Parameters are variables for which the particular values are defined outside the model definition. You can provide parameters and initial values, then solve the differential equation. Stock-flow diagrams can be created and manipulated using the `StockFlow` and `StockFlow.Syntax` modules, the latter of which includes the domain specific language for easier creation. -Stock-flow diagrams can be composed and stratified - that is, combined on stocks and sum variables or split into subpopulations. One can also do algebraic rewriting for more manual, specific fixes, such as preventing a dynamic variable from unnecessarily being computed twice, or substituting one parameter for another. - -Examples of the domain specific language, composition, stratification and algebraic rewriting can be seen in the [examples](examples) folder. In particular, full\_fledged\_schema\_examples\_new contains examples which use the domain specific language. - - - - ## Example interpretation of a stock and flow diagram using an ODE solver - - From the [SEIR Composition Example](examples/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.ipynb): - - ```julia - seir = @stock_and_flow begin - :stocks - S - E - I - R - - :parameters - μ - β - tlatent - trecovery - δ - - :flows - ☁ => fbirth(μ * N) => S # dynamic variables can be defined implicitly or with :dynamic_variables - S => fincid(β * S * I / N) => E - S => fdeathS(S * δ) => ☁ - E => finf(E / tlatent) => I - E => fdeathE(E * δ) => ☁ - I => frec(I / trecovery) => R - I => fdeathI(I * δ) => ☁ - R => fdeathR(R * δ) => ☁ - - :sums - N = [S, E, I, R] - - end - - # define parameter values and initial values of stocks - # define constant parameters - p_measles = LVector( - β=49.598, μ=0.03/12, δ=0.03/12, tlatent=8.0/30, trecovery=5.0/30 - ) - - # define initial values for stocks - u0_measles = LVector( - S=90000.0-930.0, E=0.0, I=930.0, R=773545.0 - ) - - prob_measles = ODEProblem(vectorfield(seir),u0_measles,(0.0,120.0),p_measles); - sol_measles = solve(prob_measles,Tsit5(),abstol=1e-8); - plot(sol_measles) - ``` - - See the full example for additional comments and the chickenpox model. - ## Note - - This library is under active development and does not yet have an official release. - +Stock-flow diagrams can be composed and stratified - that is, combined on stocks and sum variables or split into subpopulations. One can also do algebraic rewriting for more manual, specific fixes, such as preventing a dynamic variable from unnecessarily being computed twice, or substituting one parameter for another. + +Examples of the domain specific language, composition, stratification and algebraic rewriting can be seen in the [examples](examples) folder. In particular, full_fledged_schema_examples_new contains examples which use the domain specific language. + +## Example interpretation of a stock and flow diagram using an ODE solver + +From the [SEIR Composition Example](examples/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.ipynb): + +```julia +seir = @stock_and_flow begin + :stocks + S + E + I + R + + :parameters + μ + β + tlatent + trecovery + δ + + :flows + ☁ => fbirth(μ * N) => S # dynamic variables can be defined implicitly or with :dynamic_variables + S => fincid(β * S * I / N) => E + S => fdeathS(S * δ) => ☁ + E => finf(E / tlatent) => I + E => fdeathE(E * δ) => ☁ + I => frec(I / trecovery) => R + I => fdeathI(I * δ) => ☁ + R => fdeathR(R * δ) => ☁ + + :sums + N = [S, E, I, R] + +end + +# define parameter values and initial values of stocks +# define constant parameters +p_measles = LVector( + β=49.598, μ=0.03/12, δ=0.03/12, tlatent=8.0/30, trecovery=5.0/30 +) + +# define initial values for stocks +u0_measles = LVector( + S=90000.0-930.0, E=0.0, I=930.0, R=773545.0 +) + +prob_measles = ODEProblem(vectorfield(seir),u0_measles,(0.0,120.0),p_measles); +sol_measles = solve(prob_measles,Tsit5(),abstol=1e-8); +plot(sol_measles) +``` + +See the full example for additional comments and the chickenpox model. + +## Note + +This library is under active development and does not yet have an official release. diff --git a/docs/Project.toml b/docs/Project.toml index cc5fcc18..8da6fd73 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,5 +1,12 @@ [deps] +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" +OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" StockFlow = "58c4a0e8-2944-4d18-9fa2-e17726aee9e5" +TikzPictures = "37f6aa50-8035-52d0-81c2-5a1d08754b2d" diff --git a/docs/literate/Covid19_composition_model_in_paper.jl b/docs/literate/Covid19_composition_model_in_paper.jl new file mode 100644 index 00000000..0bec72a0 --- /dev/null +++ b/docs/literate/Covid19_composition_model_in_paper.jl @@ -0,0 +1,111 @@ +# # COVID-19 Composition Model + +using StockFlow + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.WiringDiagrams + +display_uwd(ex) = to_graphviz(ex, box_labels=:name, junction_labels=:variable, edge_attrs=Dict(:len=>"1")); + +# Define functions ϕ of flows in the SEIRH model +fNewIncidence(u,p,t)=p.β*u.S*u.I/p.N +fNewInfectious(u,p,t)=u.E*p.ri +fNewRecovery(u,p,t)=u.I/p.tr * (1.0-p.fH ) +fWaningImmunityR(u,p,t)=u.R/p.tw +fHICUAdmission(u,p,t) = u.I/p.tr * p.fH * p.fICU +fHNICUAdmission(u,p,t) = u.I/p.tr * p.fH * (1.0-p.fICU) +fOutICU(u,p,t) = u.HICU/p.tICU +fRecoveryH(u,p,t)= u.HNICU/p.tH + +# StockAndFlowp(stocks, +# (flow=>function, upstream=>downstream) => stocks linked) +seirh = StockAndFlowp((:S, :E, :I, :R, :HICU, :HNICU), + ((:NewIncidence=>fNewIncidence, :S=>:E) => (:S, :I), + (:NewInfectious=>fNewInfectious, :E=>:I) => :E, + (:NewRecovery=>fNewRecovery, :I=>:R) => :I, + (:WaningImmunityR=>fWaningImmunityR, :R=>:S) => :R, + (:HICUAdmission=>fHICUAdmission, :I=>:HICU) => :I, + (:HNICUAdmission=>fHNICUAdmission, :I=>:HNICU) => :I, + (:OutICU=>fOutICU, :HICU=>:HNICU) => :HICU, + (:RecoveryH=>fRecoveryH, :HNICU=>:R) => :HNICU)) + +# Graph(primitive stock-flow model, direction of the diagram - the default value is "LR" from left to right; +# users could also use "TB" from top to bottom) +# Graph(seirh) + +# Define functions ϕ of flows in the Vaccine model +fFirstdoseVaccine(u,p,t) = u.S * p.rv +fSeconddoseVaccine(u,p,t) = u.VP * p.rv +fWaningImmunityVP(u,p,t) = u.VP / p.tw +fWaningImmunityVF(u,p,t) = u.VF / p.tw +fNewIncidenceVP(u,p,t) = p.β*u.VP*u.I*(1.0-p.eP)/p.N +fNewIncidenceVF(u,p,t) = p.β*u.VF*u.I*(1.0-p.eF)/p.N + +# Stock and flow diagram of Vaccine model +v = StockAndFlowp((:S, :E, :I, :VP, :VF), + ((:FirstdoseVaccine=>fFirstdoseVaccine, :S=>:VP) => :S, + (:SeconddoseVaccine=>fSeconddoseVaccine, :VP=>:VF) => :VP, + (:WaningImmunityVP=>fWaningImmunityVP, :VP=>:S) => :VP, + (:WaningImmunityVF=>fWaningImmunityVF, :VF=>:VP) => :VF, + (:NewIncidenceVP=>fNewIncidenceVP, :VP=>:E) => (:VP, :I), + (:NewIncidenceVF=>fNewIncidenceVF, :VF=>:E) => (:VF, :I))) + +# Graph(v,"TB") + +# Define functions ϕ of flows in the Persist Asymptomaticity model +fNewPersistentAsymptomaticity(u,p,t) = u.E * p.ria +fNewRecoveryIA(u,p,t) = u.IA / p.tr + +# Stock and flow diagram of Persistent Asymptomaticity Model +ia = StockAndFlowp((:E, :IA, :R), + ((:NewPersistentAsymptomaticity=>fNewPersistentAsymptomaticity, :E=>:IA) => :E, + (:NewRecoveryIA=>fNewRecoveryIA, :IA=>:R) => :IA)) + +# Graph(ia) + +covid = @relation (S, E, I, R) begin + modelA(S,E,I,R) + modelB(S,E,I) + modelC(E,R) +end; +display_uwd(covid) + +# Open three Stock and Flow Diagrams +openseirh = Open(seirh, [:S], [:E], [:I], [:R]) +openv = Open(v, [:S], [:E], [:I]) +openia = Open(ia, [:E], [:R]) +# Compose those three models according the UWD-algebra +openCOVID19 = oapply(covid, [openseirh, openv, openia]) +# Generate the composed model (Stock and Flow Diagram) +COVID19 = apex(openCOVID19) + +# Graph(COVID19) + +# Define constant parameters +p_COVID19 = LVector( + β=0.8, N=38010001.0, tr=12.22, tw=2*365.0, + fH=0.002, fICU=0.23, tICU=6.0, tH = 12.0, + rv=0.01, eP=0.6, eF=0.85, ri=0.207, ria=0.138 +) +# Define initial values for stocks +u0_COVID19 = LVector( + S=38010000.0, E=0.0, I=1.0, IA=0.0, R=0.0, HICU=0.0, HNICU=0.0, VP=0.0, VF=0.0 +) + +# Check the dependencies of links of all flows' functions +# checkfls(COVID19, u0_COVID19, p_COVID19) + +# Solve the ODEs +prob_COVID19 = ODEProblem(vectorfield(COVID19),u0_COVID19,(0.0,300.0),p_COVID19); +sol_COVID19 = solve(prob_COVID19,Tsit5(),abstol=1e-8); +plot(sol_COVID19) + +# Flow of ```FirstdoseVaccine``` +ϕFirstdoseVaccine = map(x->fFirstdoseVaccine(sol_COVID19.u[x],p_COVID19,sol_COVID19.t[x]),collect(1:length(sol_COVID19.t))) 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 new file mode 100644 index 00000000..8fbc55ad --- /dev/null +++ b/docs/literate/full_fledged_schema_examples_new/CasualLoopDiagrams/convert_from_SEIR_stockFlowDiagram.jl @@ -0,0 +1,55 @@ +# # Convert from SEIR Stock Flow Diagram + +using GraphViz + +using StockFlow +using StockFlow.Syntax + +seir = @stock_and_flow begin + :stocks + S + E + I + R + + :parameters + μ + β + tlatent + trecovery + δ + + :dynamic_variables + v_birth = μ * N + v_incid₁ = I / N + v_incid₂ = S * v_incid₁ + v_incid₃ = β * v_incid₂ + v_inf = E / tlatent + v_rec = I / trecovery + v_deathS = S * δ + v_deathE = E * δ + v_deathI = I * δ + v_deathR = R * δ + + :flows + CLOUD => f_birth(v_birth) => S + S => f_incid(v_incid₃) => E + S => v_deathS(v_deathS) => CLOUD + E => f_inf(v_inf) => I + E => f_deathE(v_deathE) => CLOUD + I => f_rec(v_rec) => R + I => f_deathI(v_deathI) => CLOUD + R => f_deathR(v_deathR) => CLOUD + + :sums + N = [S,E,I,R] + +end + +GraphF(seir) + +seir_causalLoop = convertToCausalLoop(seir) + +Graph(seir_causalLoop) + + 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 new file mode 100644 index 00000000..b0173366 --- /dev/null +++ b/docs/literate/full_fledged_schema_examples_new/composition/COVID_full_model.jl @@ -0,0 +1,369 @@ +# # COVID Full Model + +using GraphViz + +using StockFlow +using StockFlow.Syntax + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.WiringDiagrams + +display_uwd(ex) = to_graphviz(ex, box_labels=:name, junction_labels=:variable, edge_attrs=Dict(:len=>"1")); + +seir = @stock_and_flow begin + + :stocks + S + E + IA + IYU + IYN + R + + :parameters + β + rLatent + rIncubation + rDevelop + rRecovery + rw + + :dynamic_variables + v_NewIncidence₁ = β * NIC + v_NewIncidence₂ = v_NewIncidence₁ / N # λ + v_NewIncidence₃ = v_NewIncidence₂ * S + + + v_NewInfectious = E * rLatent + v_BecomingSymptomatic = IA * rIncubation + v_SymptomicsNotDevelopingComplications = IYU * rDevelop + v_NewRecovery = IYN * rRecovery + v_WaningImmunityR = R * rw + + :flows + S => fNewIncidence(v_NewIncidence₃) => E + E => fNewInfectious(v_NewInfectious) => IA + IA => fBecomingSymptomatic(v_BecomingSymptomatic) => IYU + IYU => fSymptomicsNotDevelopingComplications(v_SymptomicsNotDevelopingComplications) => IYN + IYN => fNewRecovery(v_NewRecovery) => R + R => fWaningImmunityR(v_WaningImmunityR) => S + + + + :sums + N = [S, E, IA, IYU, IYN, R] + NIC = [IA, IYU, IYN] + NI = [IA, IYU, IYN] + +end + + +GraphF(seir) + +v = @stock_and_flow begin + :stocks + S + E + VP + VF + + + :parameters + rv + rw + λ + eP_complement # 1.0 - eP + eF_complement # 1.0 - eF + + + :dynamic_variables + v_NewIncidenceVP = VP * eP_complement + v_NewIncidenceVF = VF * eF_complement + + v_infVP = v_NewIncidenceVP * λ + v_infVF = v_NewIncidenceVF * λ + + + :flows + S => fFirstdoseVaccine(S * rv) => VP + VP => fWaningImmunityVP(VP * rw) => S + VP => fSeconddoseVaccine(VP * rv) => VF + VF => fWaningImmunityVF(VF * rw) => VP + VP => fNewIncidenceVP(v_infVP) => E + VF => fNewIncidenceVF(v_infVF) => E + + + + :sums + N = [S, E, VP, VF] + NIC = [] +end + +GraphF(v;rd="TB") + +ia = @stock_and_flow begin + :stocks + IA + IA2 + IA3 + R + + :parameters + rIncubationIA + rDevelopIA2 + rRecoveryIA3 + + :flows + IA => fDevelopmentOfPersistentAsymptomaticity(IA * rIncubationIA) => IA2 + IA2 => fProgressionIA2_IA3(IA2 * rDevelopIA2) => IA3 + IA3 => fNewrecoveryIA3(IA3 * rRecoveryIA3) => R + + :sums + N = [IA, IA2, IA3, R] + NIC = [IA, IA2, IA3] + NI = [IA, IA2, IA3] +end + +GraphF(ia) + +h = @stock_and_flow begin + :stocks + IYU + HICU + HNICU + R + D + + :parameters + rAdmICU + rAdmNICU + rOutICU + rrH + rDeathICU + rDeathNICU + + :dynamic_variables + v_HICUAdmission = IYU * rAdmICU + v_HNICUAdmission = IYU * rAdmNICU + v_OutICU = HICU * rOutICU + v_RecoveryH = HNICU * rrH + v_NewDeathsHICU = HICU * rDeathICU + v_NewDeathsHNICU = HNICU * rDeathNICU + + :flows + IYU => f_HICUAdmission(v_HICUAdmission) => HICU + IYU => f_HNICUAdmission(v_HNICUAdmission) => HNICU + HICU => f_OutICU(v_OutICU) => HNICU + HNICU => f_RecoveryH(v_RecoveryH) => R + HICU => f_NewDeathsHICU(v_NewDeathsHICU) => D + HNICU => f_NewDeathsHNICU(v_NewDeathsHNICU) => D + + :sums + N = [IYU, HICU, HNICU, R] + NIC = [IYU] + NI = [IYU, HICU, HNICU] + + + end + +GraphF(h;rd="TB") + +footIYUN=foot(:IYU, (:NI,:NIC,:N), (:IYU=>:NI, :IYU=>:NIC, :IYU=>:N)) +GraphF(footIYUN;schema="C0") + +footRN=foot(:R, :N, :R=>:N) +GraphF(footRN;schema="C0") + + +footIAN=foot(:IA, (:NI,:NIC,:N), (:IA=>:NI, :IA=>:NIC, :IA=>:N)) +GraphF(footIAN;schema="C0") + +footSN=foot(:S, :N, :S=>:N) +GraphF(footSN;schema="C0") + +footEN=foot(:E, :N, :E=>:N) +GraphF(footEN;schema="C0") + +footNIC=foot((),:NIC,()) +GraphF(footNIC;schema="C0") + +covid = @relation (footSN, footEN, footIAN, footIYUN, footRN, footNIC) begin + modelA(footSN, footEN, footIAN, footIYUN, footRN, footNIC) + modelB(footSN, footEN, footNIC) + modelC(footIAN, footRN) + modelD(footIYUN, footRN) +end; +display_uwd(covid) + +open_modelA=Open(seir, footSN, footEN, footIAN, footIYUN, footRN, footNIC) +open_modelB=Open(v,footSN,footEN, footNIC) +open_modelC=Open(ia,footIAN,footRN) +open_modelD=Open(h,footIYUN,footRN) +# Compose those three models according the UWD-algebra +openCOVID19 = oapply(covid, [open_modelA, open_modelB, open_modelC, open_modelD]) +# composed model +COVID19=apex(openCOVID19) + +GraphF(COVID19) + +L = @stock_and_flow begin + :stocks + VP + VF + E + + :parameters + eP_complement + eF_complement + λ + β + + + :flows + VP => fNewIncidenceVP(v_infVP) => E + VF => fNewIncidenceVF(v_infVF) => E + + :dynamic_variables + v_NewIncidence₁ = β * NIC + v_NewIncidence₂ = v_NewIncidence₁ / N # λ + + v_NewIncidenceVP = VP * eP_complement + v_NewIncidenceVF = VF * eF_complement + + v_infVP = v_NewIncidenceVP * λ + v_infVF = v_NewIncidenceVF * λ + + + :sums + N = [VP, VF, E] + NIC = [] +end; + +GraphF(L) + +I = @stock_and_flow begin + :stocks + VP + VF + E + + :parameters + eP_complement + eF_complement + β + + :flows + VP => fNewIncidenceVP(v_infVP) => E + VF => fNewIncidenceVF(v_infVF) => E + + :dynamic_variables + v_NewIncidence₁ = β * NIC + v_NewIncidence₂ = v_NewIncidence₁ / N # λ + v_NewIncidenceVP = VP * eP_complement + v_NewIncidenceVF = VF * eF_complement + + + v_infVP = *(v_NewIncidenceVP) + v_infVF = *(v_NewIncidenceVF) + + :sums + N = [VP, VF, E] + NIC = [] +end; + +GraphF(I) + +R = @stock_and_flow begin + :stocks + VP + VF + E + + :parameters + eP_complement + eF_complement + β + + :flows + VP => fNewIncidenceVP(v_infVP) => E + VF => fNewIncidenceVF(v_infVF) => E + + :dynamic_variables + v_NewIncidence₁ = β * NIC + v_NewIncidence₂ = v_NewIncidence₁ / N # λ + + v_NewIncidenceVP = VP * eP_complement + v_NewIncidenceVF = VF * eF_complement + + + v_infVP = v_NewIncidenceVP * v_NewIncidence₂ + v_infVF = v_NewIncidenceVF * v_NewIncidence₂ + + + :sums + N = [VP, VF, E] + NIC = [] +end; + +GraphF(R) + +using AlgebraicRewriting +using AlgebraicRewriting: rewrite +const hom = Catlab.CategoricalAlgebra.homomorphism + +rule = Rule(hom(I,L), hom(I,R)) + +Covid19_rewritten = rewrite(rule, COVID19) +GraphF(Covid19_rewritten) + +Covid19_rewritten + +GraphF(Covid19_rewritten; type="SF", rd="TB") + +# define constant parameters +p_COVID19_raw = LVector( + β=0.8, tLatent=2.9, tIncubation=2.72, tDevelop=6.0, tRecovery=3.5,tw=2*365.0, + fH=0.002, fICU=0.23, tICU=6.0, tH = 12.0, tOutICU=6.0, fractionIA=0.4 +) + + +p_COVID19 = LVector( + β=p_COVID19_raw.β, rLatent=1.0/p_COVID19_raw.tLatent, rIncubation=(1.0-p_COVID19_raw.fractionIA)/p_COVID19_raw.tIncubation, + 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, + rv=0.01, eP=0.6, eF=0.85, rIncubationIA=p_COVID19_raw.fractionIA/p_COVID19_raw.tIncubation, + rDevelopIA2=1.0/p_COVID19_raw.tDevelop, rRecoveryIA3=1.0/p_COVID19_raw.tRecovery, + rAdmICU=p_COVID19_raw.fH*p_COVID19_raw.fICU/p_COVID19_raw.tDevelop, + rAdmNICU=p_COVID19_raw.fH*(1.0-p_COVID19_raw.fICU)/p_COVID19_raw.tDevelop, + rrH=1.0/p_COVID19_raw.tH, rOutICU=1.0/p_COVID19_raw.tOutICU,rDeathICU=0.085, rDeathNICU=0.018, + eP_complement = 0.4, eF_complement = 0.15 +) +# define initial values for stocks +u0_COVID19 = LVector( + 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, + D=0.0, IA2=0.0, IA3=0.0, IYN=0.0 +) + +# results are tested the same as the Anylogic model +prob_COVID19 = ODEProblem(vectorfield(Covid19_rewritten),u0_COVID19,(0.0,100.0),p_COVID19); +sol_COVID19 = solve(prob_COVID19,Tsit5(),abstol=1e-8); +plot(sol_COVID19) + +# to have the figures plotted fix to the wider of the cells +HTML(""" + +""") + + + 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 new file mode 100644 index 00000000..284711af --- /dev/null +++ b/docs/literate/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.jl @@ -0,0 +1,97 @@ +# # SEIR Full Model Measles Chickenpox + +using GraphViz + +using StockFlow +using StockFlow.Syntax + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.Theories +using Catlab.WiringDiagrams + +seir = @stock_and_flow begin + :stocks + S + E + I + R + + :parameters + μ + β + tlatent + trecovery + δ + + :flows + CLOUD => fbirth(μ * N) => S + S => fincid(β * S * I / N) => E + S => fdeathS(S * δ) => CLOUD + E => finf(E / tlatent) => I + E => fdeathE(E * δ) => CLOUD + I => frec(I / trecovery) => R + I => fdeathI(I * δ) => CLOUD + R => fdeathR(R * δ) => CLOUD + + :sums + N = [S, E, I, R] + +end + + + +GraphF(seir) + +# define parameter values and initial values of stocks +# define constant parameters +p_measles = LVector( + β=49.598, μ=0.03/12, δ=0.03/12, tlatent=8.0/30, trecovery=5.0/30 +) +# define initial values for stocks +u0_measles = LVector( + S=90000.0-930.0, E=0.0, I=930.0, R=773545.0 +) + +# solve the ODEs +# The model results are compared with the same model built by Anylogic, and the resules are the same! +prob_measles = ODEProblem(vectorfield(seir),u0_measles,(0.0,120.0),p_measles); +sol_measles = solve(prob_measles,Tsit5(),abstol=1e-8); +plot(sol_measles) + +# define parameter values and initial values of stocks +# define constant parameters +p_chickenpox = LVector( + β=18.0, μ=0.03/12.0, δ=0.03/12.0, tlatent=14.0/30.0, trecovery=5.0/30.0 +) +# define initial values for stocks +u0_chickenpox = LVector( + S=295354.0, E=0.0, I=1000.0, R=567191.0 +) + +# solve the ODEs +# The model results are compared with the same model built by Anylogic, and the resules are the same! +prob_chickenpox = ODEProblem(vectorfield(seir),u0_chickenpox,(0.0,120.0),p_chickenpox); +sol_chickenpox = solve(prob_chickenpox,Tsit5(),abstol=1e-8); +plot(sol_chickenpox) + +sol_chickenpox + +# to have the figures plotted fix to the wider of the cells +HTML(""" + +""") + + + 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 new file mode 100644 index 00000000..a7d7c38b --- /dev/null +++ b/docs/literate/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.jl @@ -0,0 +1,231 @@ +# # Composed Open Population SIRV Model + +using GraphViz + +using StockFlow +using StockFlow.Syntax + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.Theories +using Catlab.WiringDiagrams + +sir = @stock_and_flow begin + + :stocks + S + I + R + + :parameters + rbirth + cbeta + rrecovery + rdeath + + :dynamic_variables + v_inf₁ = I / N + v_inf₂ = v_inf₁ * cbeta + v_inf₃ = v_inf₂ * S + + :flows + CLOUD => f_birth(rbirth * N) => S + S => f_inf(v_inf₃) => I + I => f_rec(rrecovery * I) => R + S => f_deathS(S * rdeath) => CLOUD + I => f_deathI(I * rdeath) => CLOUD + R => f_deathR(R * rdeath) => CLOUD + + + :sums + N = [I, R, S] + +end + +GraphF(sir) + +svi = @stock_and_flow begin + + :stocks + S + V + I + + :parameters + rvaccine + rdeath + lambda + evaccine_complement # 1.0 - evaccine + + :dynamic_variables + v_vacV = evaccine_complement * V + v_infV = v_vacV * lambda + + + :flows + S => f_vacc(S * rvaccine) => V + V => f_deathV(V * rdeath) => CLOUD + V => f_infV(v_infV) => I + + :sums + N = [V, I, S] + +end + +GraphF(svi) + +# Define the UWD-algebra +sirv_uwd = @relation (S,I) begin + seir(S,I) + svi(S,I) +end; +display_uwd(sirv_uwd) + +# Define a foot of the structured multicospan +footS=foot(:S, :N, :S=>:N) +GraphF(footS;schema="C0") + + +# Define a foot of the structured multicospan +footI=foot(:I, :N, :I=>:N) +GraphF(footI;schema="C0") + + +# Open sir and svi stock and flow diagram with the feet defined before +open_sir=Open(sir, footS, footI) +open_svi=Open(svi, footS, footI) + +# Compose those two models according the UWD-algebra +open_sirv = oapply(sirv_uwd, [open_sir, open_svi]) + +# The composed stock and flow diagram is the apex of the composed open stock and flow diagram +sirv = apex(open_sirv) + +GraphF(sirv) + +L = @stock_and_flow begin + :stocks + V + I + + :parameters + lambda + cbeta + evaccine_complement + + :dynamic_variables + v_inf₁ = I / N + v_inf₂ = v_inf₁ * cbeta + + v_vacV = evaccine_complement * V + + + v_infV = v_vacV * lambda + + + :flows + V => f_infV(v_infV) => I + + :sums + N = [V, I] + end; + + + +GraphF(L) + +I = @stock_and_flow begin + :stocks + V + I + + :parameters + cbeta + evaccine_complement + + :dynamic_variables + v_inf₁ = I / N + v_inf₂ = v_inf₁ * cbeta + v_vacV = evaccine_complement * V + v_infV = *(v_vacV) + + + :flows + V => f_infV(v_infV) => I + + :sums + N = [V, I] + end; + + + +GraphF(I) + +R = @stock_and_flow begin + :stocks + V + I + + :parameters + cbeta + evaccine_complement + + :dynamic_variables + v_inf₁ = I / N + v_inf₂ = v_inf₁ * cbeta + + v_vacV = evaccine_complement * V + + v_infV = v_vacV * v_inf₂ + + :flows + V => f_infV(v_infV) => I + + :sums + N = [V, I] + end; + + + +GraphF(R) + +using AlgebraicRewriting +using AlgebraicRewriting: rewrite +const hom = Catlab.CategoricalAlgebra.homomorphism +rule = Rule(hom(I,L), hom(I,R)) + +sirv_rewritten = rewrite(rule, sirv) +GraphF(sirv_rewritten) + +# define values of constant parameters +p = LVector( + cbeta=0.1, rbirth=0.001, rdeath=0.001, rrecovery=0.05, # for model sir + rvaccine=0.01, evaccine=0.3, evaccine_complement = 0.7 # for model svi +) +# define initial values for stocks +u0 = LVector( + S=990.0, I=10.0, R=0.0, V=0.0 +) + +prob_sirv = ODEProblem(vectorfield(sirv_rewritten),u0,(0.0,100.0),p); +sol_sirv = solve(prob_sirv,Tsit5(),abstol=1e-8); +plot(sol_sirv) + +# to have the figures plotted fix to the wider of the cells +HTML(""" + +""") + + + 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 new file mode 100644 index 00000000..b7e52cdf --- /dev/null +++ b/docs/literate/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.jl @@ -0,0 +1,320 @@ +# # Curable Sexually-Transmitted Diseases Model + +using GraphViz + +using StockFlow +using StockFlow.Syntax + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.Theories +using Catlab.WiringDiagrams + +openX = Open( + (@stock_and_flow begin + + :stocks + X + + :parameters + μ + + :dynamic_variables + v_births = N * μ + v_deathX = X * μ + + :flows + CLOUD => f_births(v_births) => X + X => f_deathX(v_deathX) => CLOUD + + :sums + N = [X] + + end + ), + ## feet + foot(:X,:N,:X=>:N) + +) + +GraphF(apex(openX)) + +# going to compose all μ in Rewriting. Shouldn't be necessary on params. +openSIS_A = Open( + (@stock_and_flow begin + + :stocks + X + A + + :parameters + μ_temp1 + ϕ_complement + σ′ + cβ + + :dynamic_variables + v_inf₁ = cβ * NI + v_inf₂ = v_inf₁ / N + v_inf₃ = v_inf₂ * X + v_inf₄ = v_inf₃ * ϕ_complement + + v_deathA = A * μ_temp1 + + :flows + X => f_newInfectiousA(v_inf₄) => A + A => f_deathA(v_deathA) => CLOUD + A => f_recoveryA(A * σ′) => X + + :sums + N = [X, A] + NI = [A] + + end + ), + ## feet + foot(:X,:N,:X=>:N), + foot((),:NI,()) + +) + +GraphF(apex(openSIS_A)) + +openSIS_Y = Open( + (@stock_and_flow begin + + :stocks + X + Y + + :parameters + μ_temp2 + ϕ + σ + λ + + :dynamic_variables + v_inf₄ = ϕ * λ + ## at present, lambda needs to come second + ## in algebraic rewriting, position of variables matters for homomorphisms. + ## When we later have *(ϕ), phi comes first, because it's the only variable + + v_deathY = Y * μ_temp2 + + :flows + X => f_newInfectiousY(v_inf₄) => Y + Y => f_deathY(v_deathY) => CLOUD + Y => f_recoveryY(Y * σ) => X + + :sums + N = [X, Y] + NI = [Y] + +end + ), + + ## feet + foot(:X,:N,:X=>:N), + foot((),:NI,()) + +) + +GraphF(apex(openSIS_Y)) + +# define the UWD-algebra +uwd = @relation (XN,NI) begin + X(XN) + XA(XN,NI) + XY(XN,NI) +end; +display_uwd(uwd) + +XAY_model = oapply(uwd,Dict( + :X=>openX, + :XA=>openSIS_A, + :XY=>openSIS_Y + )) |> apex +GraphF(XAY_model) + +XAY_model + +L = @stock_and_flow begin + :stocks + X + Y + A + + :parameters + μ + μ_temp1 + μ_temp2 + λ + cβ + ϕ + + :dynamic_variables + v_inf₁ = cβ * NI + v_inf₂ = v_inf₁ / N + v_inf₃ = v_inf₂ * X + v_inf₄ = ϕ * λ + + v_deathA = A * μ_temp1 + v_deathY = Y * μ_temp2 + + v_births = N * μ + v_deathX = X * μ + + :flows + X => f_newInfectiousY(v_inf₄) => Y + Y => f_deathY(v_deathY) => CLOUD + A => f_deathA(v_deathA) => CLOUD + + CLOUD => f_births(v_births) => X + X => f_deathX(v_deathX) => CLOUD + + + + :sums + N = [X,Y,A] + NI = [Y,A] + end; + + + +GraphF(L) + +I = @stock_and_flow begin + :stocks + A + X + Y + + :parameters + μ + cβ + ϕ + + :dynamic_variables + v_inf₁ = cβ * NI + v_inf₂ = v_inf₁ / N + v_inf₃ = v_inf₂ * X + v_inf₄ = *(ϕ) + + + v_deathA = *(A) + v_deathY = *(Y) + + v_births = N * μ + v_deathX = X * μ + + + + + + + :flows + X => f_newInfectiousY(v_inf₄) => Y + Y => f_deathY(v_deathY) => CLOUD + A => f_deathA(v_deathA) => CLOUD + + CLOUD => f_births(v_births) => X + X => f_deathX(v_deathX) => CLOUD + + + + :sums + N = [X,Y,A] + NI = [Y,A] + end; + + + + +GraphF(I) + +R = @stock_and_flow begin + :stocks + A + X + Y + + :parameters + μ + cβ + ϕ + + :dynamic_variables + v_inf₁ = cβ * NI + v_inf₂ = v_inf₁ / N + v_inf₃ = v_inf₂ * X + v_inf₄ = ϕ * v_inf₃ + + v_deathA = A * μ + v_deathY = Y * μ + + v_births = N * μ + v_deathX = X * μ + + :flows + X => f_newInfectiousY(v_inf₄) => Y + + Y => f_deathY(v_deathY) => CLOUD + A => f_deathA(v_deathA) => CLOUD + + CLOUD => f_births(v_births) => X + X => f_deathX(v_deathX) => CLOUD + + + :sums + N = [X,Y,A] + NI = [Y,A] + end; + + + +GraphF(R) + +using AlgebraicRewriting +using AlgebraicRewriting: rewrite +const hom = Catlab.CategoricalAlgebra.homomorphism +rule = Rule(hom(I,L), hom(I,R)) + +XAY_model_rewritten = rewrite(rule, XAY_model) + +GraphF(XAY_model_rewritten) + +GraphF(XAY_model_rewritten,type="SF") + +# define values of constant parameters +# unit: year +p = LVector( + cβ=15*0.7, μ=1/15,ϕ=(0.95+0.4)/2,σ=12/4,σ′=12/4,ϕ_complement=(1.0 - ((0.95+0.4)/2)) +) +# define initial values for stocks +u0 = LVector( + X=990, A=5, Y=5 +) + +# results are tested the same as the Anylogic model +prob_XAY = ODEProblem(vectorfield(XAY_model_rewritten),u0,(0.0,2.0),p); +sol = solve(prob_XAY,Tsit5(),abstol=1e-8); +plot(sol) + +# to have the figures plotted fix to the wider of the cells +HTML(""" + +""") + + + 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 new file mode 100644 index 00000000..de6d775a --- /dev/null +++ b/docs/literate/full_fledged_schema_examples_new/composition/diabetes_model.jl @@ -0,0 +1,297 @@ +# # Diabetes Model + +using GraphViz + +using StockFlow +using StockFlow.Syntax + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.Theories +using Catlab.WiringDiagrams + +display_uwd(ex) = to_graphviz(ex, box_labels=:name, junction_labels=:variable, edge_attrs=Dict(:len=>"1")); + +Model_Normoglycemic = @stock_and_flow begin + + :stocks + NormalWeight + OverWeight + Obese + + :parameters + rBirth + rMortalityWeight + rObese + rOverWeight + rMortalityobese + + :flows + NormalWeight => f_DeathNormalWeight(NormalWeight * rMortalityWeight) => CLOUD + NormalWeight => f_BecomingOverWeight(NormalWeight * rOverWeight) => OverWeight + OverWeight => f_DeathOverWeight(OverWeight * rMortalityWeight) => CLOUD + OverWeight => f_BecomingObese(OverWeight * rObese) => Obese + Obese => f_DeathObese(Obese * rMortalityobese) => CLOUD + CLOUD => f_NewBorn(N * rBirth) => NormalWeight + + + :sums + N = [NormalWeight, OverWeight, Obese] + +end + +GraphF(Model_Normoglycemic, rd="TB") + +++(s1, s2) = Symbol(string(s1) * string(s2)) # infix, and works with both strings and symbols + +function fOpenSubHyperglycemic(pop) + + ## The following are all symbols + + Prediabetic = "Prediabetic" ++ pop + DevelopingDiabetic = "DevelopingDiabetic" ++ pop + DeathPrediabetic = "DeathPrediabetic" ++ pop + DiabeticWtComp = "DiabeticWtComp" ++ pop + DiabeticEarly = "DiabeticEarly" ++ pop + DevelopingEarly = "DevelopingEarly" ++ pop + DeathDiabeticWtComp = "DeathDiabeticWtComp" ++ pop + DevelopingLate = "DevelopingLate" ++ pop + DeathDiabeticEarly = "DeathDiabeticEarly" ++ pop + DiabeticLate = "DiabeticLate" ++ pop + DeathDiabeticLate = "DeathDiabeticLate" ++ pop + + rDevelopingDiabetic = "rDevelopingDiabetic" ++ pop + rDevelopingEarly = "rDevelopingEarly" ++ pop + rMortalityDiabeticEarly = "rMortalityDiabeticEarly" ++ pop + rMortalityDiabeticWtComp = "rMortalityDiabeticWtComp" ++ pop + + v_DevelopingDiabetic = "v_DevelopingDiabetic" ++ pop + v_DeathPrediabetic = "v_DeathPrediabetic" ++ pop + v_DevelopingEarly = "v_DevelopingEarly" ++ pop + v_DeathDiabeticWtComp = "v_DeathDiabeticWtComp" ++ pop + v_DevelopingLate = "v_DevelopingLate" ++ pop + v_DeathDiabeticEarly = "v_DeathDiabeticEarly" ++ pop + v_DeathDiabeticLate = "v_DeathDiabeticLate" ++ pop + + + rMortalityPrediabetic = :rMortalityPrediabetic + rMortalityDiabeticLate = :rMortalityDiabeticLate + rDevelopingLate = :rDevelopingLate + + Open( + StockAndFlowF( + + ## stocks + ## in, out, sums + ( + Prediabetic => (:F_NONE, (DevelopingDiabetic, DeathPrediabetic), :N), + DiabeticWtComp => (DevelopingDiabetic, (DevelopingEarly, DeathDiabeticWtComp), :N), + DiabeticEarly => (DevelopingEarly, (DevelopingLate, DeathDiabeticEarly), :N), + DiabeticLate => (DevelopingLate, DeathDiabeticLate, :N) + ), + + ## parameters + ( + rDevelopingDiabetic, + rMortalityPrediabetic, + rDevelopingEarly, + rMortalityDiabeticEarly, + rMortalityDiabeticLate, + rMortalityDiabeticWtComp, + rDevelopingLate + ), + + ## dynamic variables + ( + v_DevelopingDiabetic => ((Prediabetic, rDevelopingDiabetic) => :*), + v_DeathPrediabetic => ((Prediabetic, rMortalityPrediabetic) => :*), + v_DevelopingEarly => ((DiabeticWtComp, rDevelopingEarly) => :*), + v_DeathDiabeticWtComp => ((DiabeticWtComp, rMortalityDiabeticWtComp) => :*), + v_DevelopingLate => ((DiabeticEarly, rDevelopingLate) => :*), + v_DeathDiabeticEarly => ((DiabeticEarly, rMortalityDiabeticEarly) => :*), + v_DeathDiabeticLate => ((DiabeticLate, rMortalityDiabeticLate) => :*), + ), + + ## flows + ( + DevelopingDiabetic => v_DevelopingDiabetic, + DeathPrediabetic => v_DeathPrediabetic, + DevelopingEarly => v_DevelopingEarly, + DeathDiabeticWtComp => v_DeathDiabeticWtComp, + DevelopingLate => v_DevelopingLate, + DeathDiabeticEarly => v_DeathDiabeticEarly, + DeathDiabeticLate => v_DeathDiabeticLate + ), + + ## sums + ( + :N + ) + + ), + + ## feet + foot(Prediabetic, :N, Prediabetic=>:N), + foot(DiabeticWtComp, :N, DiabeticWtComp=>:N), + foot(DiabeticEarly, :N, DiabeticEarly=>:N), + foot(DiabeticLate, :N, DiabeticLate=>:N) + + ) +end + +function fOpensubDiagnosis(s) + + ## The following are all symbols + + s_U = s ++ "_U" + s_D = s ++ "_D" + + Diagnosis = "Diagnosis" ++ s + v_Diagnosis = "v_Diagnosis" ++ s + + rs = "r" ++ s + + Open( + StockAndFlowF( + + ## stocks + ( + s_U => (:F_NONE, Diagnosis, :N), + s_D => (Diagnosis, :F_NONE, :N) + ), + + ## parameters + ( + rs + ), + + ## dynamic variables + ( + v_Diagnosis => ((s_U, rs) => :*) + ), + + ## flows + ( + Diagnosis => v_Diagnosis + ), + + ## sums + ( + :N + ) + + ), + + ## feet + foot(s_U, :N, s_U => :N), + foot(s_D, :N, s_D => :N) + + ) + +end + +# define the UWD-algebra of Hyperglycemic Model +hyperglycemic_uwd = @relation (Prediabetic_U,Prediabetic_D,DiabeticWtComp_U,DiabeticWtComp_D,DiabeticEarly_U,DiabeticEarly_D,DiabeticLate_U,DiabeticLate_D) begin + Undx(Prediabetic_U,DiabeticWtComp_U,DiabeticEarly_U,DiabeticLate_U) + Dx(Prediabetic_D,DiabeticWtComp_D,DiabeticEarly_D,DiabeticLate_D) + Prediabetic(Prediabetic_U,Prediabetic_D) + DiabeticWtComp(DiabeticWtComp_U,DiabeticWtComp_D) + DiabeticEarly(DiabeticEarly_U,DiabeticEarly_D) + DiabeticLate(DiabeticLate_U,DiabeticLate_D) +end; +display_uwd(hyperglycemic_uwd) + +# generate the Hyperglycemic population model by composition +Model_Hyperglycemic=oapply(hyperglycemic_uwd, + [fOpenSubHyperglycemic("_U"),fOpenSubHyperglycemic("_D"),fOpensubDiagnosis("Prediabetic"),fOpensubDiagnosis("DiabeticWtComp"),fOpensubDiagnosis("DiabeticEarly"),fOpensubDiagnosis("DiabeticLate")]) |> apex +GraphF(Model_Hyperglycemic) + +Model_Norm_Hyper = @stock_and_flow begin + + :stocks + NormalWeight + OverWeight + Obese + Prediabetic_U + Prediabetic_D + + :parameters + rRecovery + rIncidenceNW + rIncidenceOW + rIncidenceOB + + :flows + Prediabetic_D => fRecoveryToOWFromDx(Prediabetic_D * rRecovery) => OverWeight + Prediabetic_D => fRecoveryToNWFromDx(Prediabetic_D * rRecovery) => NormalWeight + Prediabetic_D => fRecoveryToOBFromDx(Prediabetic_D * rRecovery) => Obese + + NormalWeight => fDevelopingPrediabeticNW(NormalWeight * rIncidenceNW) => Prediabetic_U + + Prediabetic_U => fRecoveryToOWFromUx(Prediabetic_U * rRecovery) => OverWeight + Prediabetic_U => fRecoveryToOBFromUx(Prediabetic_U * rRecovery) => Obese + Prediabetic_U => fRecoveryToNWFromUx(Prediabetic_U * rRecovery) => NormalWeight + + OverWeight => fDevelopingPrediabeticOW(OverWeight * rIncidenceOW) => Prediabetic_U + + Obese => fDevelopingPrediabeticOB(Obese * rIncidenceOB) => Prediabetic_U + + :sums + N = [NormalWeight, OverWeight, Obese, Prediabetic_U, Prediabetic_D] + + +end + +# define the UWD-algebra of Hyperglycemic Model +diabetes_uwd = @relation (NormalWeight,OverWeight,Obese,Prediabetic_U,Prediabetic_D) begin + Normoglycemic(NormalWeight,OverWeight,Obese) + Hyperglycemic(Prediabetic_U,Prediabetic_D) + Norm_Hyper(NormalWeight,OverWeight,Obese,Prediabetic_U,Prediabetic_D) +end; +display_uwd(diabetes_uwd) + +Diabetes_Model = oapply(diabetes_uwd,Dict( + :Normoglycemic=>Open(Model_Normoglycemic,foot(:NormalWeight,:N,:NormalWeight=>:N),foot(:OverWeight,:N,:OverWeight=>:N),foot(:Obese,:N,:Obese=>:N)), + :Hyperglycemic=>Open(Model_Hyperglycemic,foot(:Prediabetic_U,:N,:Prediabetic_U=>:N),foot(:Prediabetic_D,:N,:Prediabetic_D=>: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)) + )) |> apex + +GraphF(Diabetes_Model) + +p = LVector( + rBirth=12.5/1000, rMortalityWeight=4.0/1000, rOverWeight=0.03, rObese=0.06, rMortalityobese=13.0/1000, + rDevelopingDiabetic_U=1.0/10.0, rDevelopingDiabetic_D=1.0/15.0, rMortalityPrediabetic=13.0/1000, + rDevelopingEarly_U=1.0/10.0, rDevelopingEarly_D=1.0/15.0, rMortalityDiabeticWtComp_U=0.03, rMortalityDiabeticWtComp_D=0.027, + rDevelopingLate=0.9, rMortalityDiabeticEarly_U=0.04+0.02, rMortalityDiabeticEarly_D=0.036+0.02,rMortalityDiabeticLate=0.04, + rPrediabetic=0.1, rDiabeticWtComp=0.24, rDiabeticEarly=0.4, rDiabeticLate=0.6, rRecovery=0.03, + rIncidenceNW=0.01, rIncidenceOW=0.017, rIncidenceOB=0.026 +) +u0 = LVector( + NormalWeight=95811.0, OverWeight=27709.0, Obese=30770.0, Prediabetic_U=13615.0, Prediabetic_D=2000.0, + DiabeticWtComp_U=6396.0, DiabeticWtComp_D=3000.0, DiabeticEarly_U=0.0, DiabeticEarly_D=1200.0, + DiabeticLate_U=0.0, DiabeticLate_D=800.0 +) + +## results have been tested correct (same as the Anylogic model) +prob_diabetes = ODEProblem(vectorfield(Diabetes_Model),u0,(0.0,100.0),p); +sol_diabetes = solve(prob_diabetes,Tsit5(),abstol=1e-8); +plot(sol_diabetes) + +## to have the figures plotted fix to the wider of the cells +HTML(""" + +""") + + + diff --git a/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_composed.jpg b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_composed.jpg new file mode 100644 index 00000000..dc7e9bf7 Binary files /dev/null and b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_composed.jpg differ diff --git a/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_compose.jpg b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_compose.jpg new file mode 100644 index 00000000..4393f9cd Binary files /dev/null and b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_compose.jpg differ diff --git a/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_A.jpg b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_A.jpg new file mode 100644 index 00000000..7fa12c92 Binary files /dev/null and b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_A.jpg differ diff --git a/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_B.jpg b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_B.jpg new file mode 100644 index 00000000..3f9e0336 Binary files /dev/null and b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_B.jpg differ diff --git a/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_C.jpg b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_C.jpg new file mode 100644 index 00000000..302b1326 Binary files /dev/null and b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_C.jpg differ diff --git a/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_D.jpg b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_D.jpg new file mode 100644 index 00000000..983e025a Binary files /dev/null and b/docs/literate/full_fledged_schema_examples_new/composition/figures/COVID_full_model_D.jpg differ diff --git a/docs/literate/full_fledged_schema_examples_new/composition/figures/math_equation.png b/docs/literate/full_fledged_schema_examples_new/composition/figures/math_equation.png new file mode 100644 index 00000000..090d7f5b Binary files /dev/null and b/docs/literate/full_fledged_schema_examples_new/composition/figures/math_equation.png differ 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 new file mode 100644 index 00000000..a39f8794 --- /dev/null +++ b/docs/literate/full_fledged_schema_examples_new/stratification/diabetes_diagnose.jl @@ -0,0 +1,314 @@ +# # Diabetes Diagnose + +using GraphViz + +using StockFlow +using StockFlow.Syntax + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.WiringDiagrams + +using Catlab.Graphics.Graphviz: Html +using Catlab.Graphics.Graphviz + + +# Functions for graphing typed Petri nets +colors_vflow = ["antiquewhite4","antiquewhite", "gold", "saddlebrown", "slateblue", "blueviolet", "olive"] +colors_s = ["deeppink","darkorchid","darkred","coral"] # red series +colors_sv = ["cornflowerblue","cyan4","cyan","chartreuse"] # green and blue series +colors_p = ["gold","gold4","darkorange1","lightgoldenrod","goldenrod"] # yellow and orange + +flatten(fname::Symbol) = "$fname" + +function flatten(fname::Tuple) + names = split(replace(string(fname), "("=>"", ")"=>"", ":"=>""), ",") + for i in 1:length(names) + name = strip(names[i]) + if name[1:2] == "id" + continue + end + return name + end + return "id" +end + +def_stock(typed_StockFlow::ACSetTransformation, colors) = + (p,s) -> ("s$s", Attributes(:label=>sname(p,s) isa Tuple where T ? Html(replace(string(sname(p,s)), ":"=>"", "," => "
", "("=>"", ")"=>"")) : "$(sname(p,s))", + :shape=>"square", + :color=>"black", + :style=>"filled", + :fillcolor=>colors[typed_StockFlow[:S](s)])) + +def_parameter(typed_StockFlow::ACSetTransformation, colors) = +(p, pp) -> ("p$pp", Attributes(:label=>pname(p,pp) isa Tuple where T ? Html(replace(string(pname(p,pp)), ":"=>"", "," => "
", "("=>"", ")"=>"")) : "$(pname(p,pp))", + :shape=>"circle", + :color=>colors[typed_StockFlow[:P](pp)], + :fontcolor=>colors[typed_StockFlow[:P](pp)])) + +def_auxiliaryVF(typed_StockFlow::ACSetTransformation, colors)= + (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))", + :shape=>"plaintext", + :fontcolor=>colors[typed_StockFlow[:V](v)])) + + +def_sumV(typed_StockFlow::ACSetTransformation, colors) = + (p, sv) -> ("sv$sv", Attributes(:label=>svname(p,sv) isa Tuple where T ? Html(replace(string(svname(p,sv)), ":"=>"", "," => "
", "("=>"", ")"=>"")) : "$(svname(p,sv))", + :shape=>"circle", + :color=>"black", + :fillcolor=>colors[typed_StockFlow[:SV](sv)], + :style=>"filled")) + + +def_flow_V(typed_StockFlow::ACSetTransformation, colors)= + (p, us, ds, v, f) -> begin + labelfontsize = "6" + colorType = colors[typed_StockFlow[:F](f)] + color = "$colorType"*":invis:"*"$colorType" + arrowhead = "none" + splines = "ortho" + return ([us, "v$v"],Attributes(:label=>"", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)), + (["v$v", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) +end + +def_flow_noneV(typed_StockFlow::ACSetTransformation, colors)= + (p, us, ds, f) -> begin + colorType = colors[typed_StockFlow[:F](f)] + color = "$colorType"*":invis:"*"$colorType" + ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>"6", :color=>color)) +end + +def_flow_V(colors = colors_vflow)= + (p, us, ds, v, f) -> begin + labelfontsize = "6" + colorType = colors[f] + color = "$colorType"*":invis:"*"$colorType" + arrowhead = "none" + splines = "ortho" + return ([us, "v$v"],Attributes(:label=>"", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)), + (["v$v", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) + +end + +def_flow_noneV(colors = colors_vflow)= + (p, us, ds, f) -> begin + colorType = colors[f] + color = "$colorType"*":invis:"*"$colorType" + ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>"6", :color=>color)) +end + +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), + make_stock = def_stock(typed_StockFlow, colors_s), make_auxiliaryV=def_auxiliaryVF(typed_StockFlow, colors_vflow), make_sumV=def_sumV(typed_StockFlow, colors_sv), + 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 +) + +diabetes_type = @stock_and_flow begin + :stocks + Pop + + :parameters + rDeath + rProgress + rStrata + + :dynamic_variables + v_death = rDeath * Pop + v_progress = rProgress * Pop + v_strata = rStrata * Pop + + :flows + Pop => f_death(v_death) => CLOUD + Pop => f_progress(v_progress) => Pop + Pop => f_strata(v_strata) => Pop + + :sums + N = [Pop] + +end + +GraphF(diabetes_type) + +GraphF_typed(id(diabetes_type)) + +s, = parts(diabetes_type, :S) +sv, = parts(diabetes_type, :SV) +lsn, = parts(diabetes_type, :LS) +f_death, f_progress, f_strata = parts(diabetes_type, :F) +i_progress, i_strata = parts(diabetes_type, :I) +o_death, o_progress, o_strata = parts(diabetes_type, :O) +v_death, v_progress, v_strata = parts(diabetes_type, :V) +lv_death, lv_progress, lv_strata = parts(diabetes_type, :LV) +p_death, p_progress, p_strata = parts(diabetes_type, :P) +lpv_death, lpv_progress, lpv_strata = parts(diabetes_type, :LPV) + +# remove names to allow for the loose ACSet transform to be natural +diabetes_type = map(diabetes_type, Name=name->nothing, Op = op -> nothing, Position = pos -> nothing); + +diagnosis_strata = @stock_and_flow begin + + :stocks + U + D + + :dynamic_variables + v_death_U = rDeath_U * U + v_progress_U = rProgress_U * U + v_death_D = rDeath_D * D + v_progress_D = rProgress_D * D + v_strata = rDiagnosis * U + + :parameters + rDeath_U + rProgress_U + + rDeath_D + rProgress_D + + rDiagnosis + + + + :flows + U => f_death_U(v_death_U) => CLOUD + U => f_progress_U(v_progress_U) => U + + D => f_death_D(v_death_D) => CLOUD + D => f_progress_D(v_progress_D) => D + + U => f_strata(v_strata) => D + + + :sums + N = [U, D] + + +end + +GraphF(diagnosis_strata) + +typed_diagnosis_strata=ACSetTransformation(diagnosis_strata, diabetes_type, + S = [s, s], + SV = [sv], + LS = [lsn, lsn], + F = [f_death, f_progress, f_death, f_progress, f_strata], + I = [i_progress, i_progress, i_strata], + O = [o_death, o_progress, o_strata, o_death, o_progress], + V = [v_death, v_progress, v_death, v_progress, v_strata], + LV = [lv_death, lv_progress, lv_death, lv_progress, lv_strata], + P = [p_death, p_progress, p_death, p_progress, p_strata], + LPV = [lpv_death, lpv_progress, lpv_death, lpv_progress, lpv_strata], + Name=name->nothing, Op = op -> nothing, Position = pos -> nothing +) + +@assert is_natural(typed_diagnosis_strata) + +GraphF_typed(typed_diagnosis_strata) + +diabetes_progress = @stock_and_flow begin + :stocks + PreDiabetic + DiabeticWtComp + DiabeticEarly + DiabeticLate + + :parameters + + rDevelopingDiabetic + rDevelopingEarly + rDevelopingLate + + rMortalityPreDiabetic + rMortalityDiabeticEarly + rMortalityDiabeticLate + rMortalityDiabeticWtComp + + + rDiagnosePreDiabetic + rDiagnoseDiabeticWtComp + rDiagnoseDiabeticEarly + rDiagnoseDiabeticLate + + :dynamic_variables + v_DevelopingDiabetic = PreDiabetic * rDevelopingDiabetic + v_DevelopingEarly = DiabeticWtComp * rDevelopingEarly + v_DevelopingLate = DiabeticEarly * rDevelopingLate + + v_DeathPreDiabetic = PreDiabetic * rMortalityPreDiabetic + v_DeathDiabeticWtComp = DiabeticWtComp * rMortalityDiabeticWtComp + v_DeathDiabeticEarly = DiabeticEarly * rMortalityDiabeticEarly + v_DeathDiabeticLate = DiabeticLate * rMortalityDiabeticLate + + v_DiagnosePreDiabetic = PreDiabetic * rDiagnosePreDiabetic + v_DiagnoseDiabeticWtComp = DiabeticWtComp * rDiagnoseDiabeticWtComp + v_DiagnoseDiabeticEarly = DiabeticEarly * rDiagnoseDiabeticEarly + v_DiagnoseDiabeticLate = DiabeticLate * rDiagnoseDiabeticLate + + :flows + PreDiabetic => f_DevelopingDiabetic(v_DevelopingDiabetic) => DiabeticWtComp + PreDiabetic => f_DeathPreDiabetic(v_DeathPreDiabetic) => CLOUD + DiabeticWtComp => f_DevelopingEarly(v_DevelopingEarly) => DiabeticEarly + DiabeticWtComp => f_DeathDiabeticWtComp(v_DeathDiabeticWtComp) => CLOUD + DiabeticEarly => f_DevelopingLate(v_DevelopingLate) => DiabeticLate + DiabeticEarly => f_DeathDiabeticEarly(v_DeathDiabeticEarly) => CLOUD + DiabeticLate => f_DeathDiabeticLate(v_DeathDiabeticLate) => CLOUD + + PreDiabetic => f_DiagnosePreDiabetic(v_DiagnosePreDiabetic) => PreDiabetic + DiabeticWtComp => f_DiagnoseDiabeticWtComp(v_DiagnoseDiabeticWtComp) => DiabeticWtComp + DiabeticEarly => f_DiagnoseDiabeticEarly(v_DiagnoseDiabeticEarly) => DiabeticEarly + DiabeticLate => f_DiagnoseDiabeticLate(v_DiagnoseDiabeticLate) => DiabeticLate + + :sums + N = [PreDiabetic, DiabeticWtComp, DiabeticEarly, DiabeticLate] + +end + +typed_diabetes_progress=ACSetTransformation(diabetes_progress, diabetes_type, + S = [s, s, s, s], + SV = [sv], + LS = [lsn, lsn, lsn, lsn], + F = [f_progress, f_death, f_progress, f_death, f_progress, f_death, f_death, f_strata, f_strata, f_strata, f_strata], + I = [i_strata, i_progress, i_strata, i_progress, i_strata, i_progress, i_strata], + O = [o_progress, o_death, o_strata, o_progress, o_death, o_strata, o_progress, o_death, o_strata, o_death, o_strata], + V = [v_progress, v_progress, v_progress, v_death, v_death, v_death, v_death, v_strata, v_strata, v_strata, v_strata], + P = [p_progress, p_progress, p_progress, p_death, p_death, p_death, p_death, p_strata, p_strata, p_strata, p_strata], + LV = [lv_progress, lv_progress, lv_progress, lv_death, lv_death, lv_death, lv_death, lv_strata, lv_strata, lv_strata, lv_strata], + LPV = [lpv_progress, lpv_progress, lpv_progress, lpv_death, lpv_death, lpv_death, lpv_death, lpv_strata, lpv_strata, lpv_strata, lpv_strata], + Name=name->nothing, Op = op -> nothing, Position = pos -> nothing + +) + + + +@assert is_natural(typed_diabetes_progress) + +GraphF_typed(typed_diabetes_progress) + +strat_model = pullback(typed_diagnosis_strata, typed_diabetes_progress) +apex(strat_model) + +stratify(typed_model1, typed_model2) = ob(pullback(typed_model1, typed_model2)) + +typed_stratify(typed_model1, typed_model2) = + compose(proj1(pullback(typed_model1, typed_model2)), typed_model1); + +typed_stratified_model = typed_stratify(typed_diagnosis_strata, typed_diabetes_progress) +GraphF_typed(typed_stratified_model) + +# to have the figures plotted fix to the wider of the cells +HTML(""" + +""") + + + 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 new file mode 100644 index 00000000..47d6ff93 --- /dev/null +++ b/docs/literate/full_fledged_schema_examples_new/stratification/sir_linear_stratification.md @@ -0,0 +1,310 @@ +using GraphViz + +using StockFlow +using StockFlow.Syntax + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.Theories +using Catlab.WiringDiagrams + +using Catlab.Graphics.Graphviz: Html +using Catlab.Graphics.Graphviz + + + +# Functions for graphing typed Petri nets +colors_vflow = ["antiquewhite4","antiquewhite", "gold", "saddlebrown", "slateblue", "blueviolet", "olive"] +colors_s = ["deeppink","darkorchid","darkred","coral"] # red series +colors_sv = ["cornflowerblue","cyan4","cyan","chartreuse"] # green and blue series +colors_p = ["gold","gold4","darkorange1","lightgoldenrod","goldenrod"] # yellow and orange + +flatten(fname::Symbol) = "$fname" + +function flatten(fname::Tuple) + names = split(replace(string(fname), "("=>"", ")"=>"", ":"=>""), ",") + for i in 1:length(names) + name = strip(names[i]) + if name[1:2] == "id" + continue + end + return name + end + return "id" +end + +def_stock(typed_StockFlow::ACSetTransformation, colors) = + (p,s) -> ("s$s", Attributes(:label=>sname(p,s) isa Tuple where T ? Html(replace(string(sname(p,s)), ":"=>"", "," => "
", "("=>"", ")"=>"")) : "$(sname(p,s))", + :shape=>"square", + :color=>"black", + :style=>"filled", + :fillcolor=>colors[typed_StockFlow[:S](s)])) + +def_parameter(typed_StockFlow::ACSetTransformation, colors) = +(p, pp) -> ("p$pp", Attributes(:label=>pname(p,pp) isa Tuple where T ? Html(replace(string(pname(p,pp)), ":"=>"", "," => "
", "("=>"", ")"=>"")) : "$(pname(p,pp))", + :shape=>"circle", + :color=>colors[typed_StockFlow[:P](pp)], + :fontcolor=>colors[typed_StockFlow[:P](pp)])) + +def_auxiliaryVF(typed_StockFlow::ACSetTransformation, colors)= + (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))", + :shape=>"plaintext", + :fontcolor=>colors[typed_StockFlow[:V](v)])) + + +def_sumV(typed_StockFlow::ACSetTransformation, colors) = + (p, sv) -> ("sv$sv", Attributes(:label=>svname(p,sv) isa Tuple where T ? Html(replace(string(svname(p,sv)), ":"=>"", "," => "
", "("=>"", ")"=>"")) : "$(svname(p,sv))", + :shape=>"circle", + :color=>"black", + :fillcolor=>colors[typed_StockFlow[:SV](sv)], + :style=>"filled")) + + +def_flow_V(typed_StockFlow::ACSetTransformation, colors)= + (p, us, ds, v, f) -> begin + labelfontsize = "6" + colorType = colors[typed_StockFlow[:F](f)] + color = "$colorType"*":invis:"*"$colorType" + arrowhead = "none" + splines = "ortho" + return ([us, "v$v"],Attributes(:label=>"", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)), + (["v$v", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) +end + +def_flow_noneV(typed_StockFlow::ACSetTransformation, colors)= + (p, us, ds, f) -> begin + colorType = colors[typed_StockFlow[:F](f)] + color = "$colorType"*":invis:"*"$colorType" + ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>"6", :color=>color)) +end + +def_flow_V(colors = colors_vflow)= + (p, us, ds, v, f) -> begin + labelfontsize = "6" + colorType = colors[f] + color = "$colorType"*":invis:"*"$colorType" + arrowhead = "none" + splines = "ortho" + return ([us, "v$v"],Attributes(:label=>"", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)), + (["v$v", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) + +end + +def_flow_noneV(colors = colors_vflow)= + (p, us, ds, f) -> begin + colorType = colors[f] + color = "$colorType"*":invis:"*"$colorType" + ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>"6", :color=>color)) +end + +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), + make_stock = def_stock(typed_StockFlow, colors_s), make_auxiliaryV=def_auxiliaryVF(typed_StockFlow, colors_vflow), make_sumV=def_sumV(typed_StockFlow, colors_sv), + 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 +) + +l_type = @stock_and_flow begin + :stocks + pop + + :parameters + μ + δ + rFstOrder + rage + + :dynamic_variables + v_aging = pop * rage + v_fstOrder = pop * rFstOrder + v_birth = N * μ + v_death = pop * δ + + :flows + pop => f_aging(v_aging) => pop + pop => f_fstOrder(v_fstOrder) => pop + CLOUD => f_birth(v_birth) => pop + pop => f_death(v_death) => CLOUD + + :sums + N = [pop] + +end + +GraphF_typed(id(l_type)) + +# eliminate the attribute of name to enable pass the natural check +# only eliminate the name, the other two attributes should be okay +l_type = map(l_type, Name=name->nothing, Op=op->nothing, Position=pos->nothing); + +s, = parts(l_type, :S) +N, = parts(l_type, :SV) +lsn, = parts(l_type, :LS) +f_aging, f_fstorder, f_birth, f_death = parts(l_type, :F) +i_aging, i_fstorder, i_birth = parts(l_type, :I) +o_aging, o_fstorder, o_death = parts(l_type, :O) +v_aging, v_fstorder, v_birth, v_death = parts(l_type, :V) +lv_aging1, lv_fstorder1, lv_death1 = parts(l_type, :LV) +lsv_birth1, = parts(l_type, :LSV) +p_μ, p_δ, p_rfstOrder, p_rage = parts(l_type, :P) +lpv_aging2, lpv_fstorder2, lpv_birth2, lpv_death2 = parts(l_type, :LPV) + + +WeightModel = @stock_and_flow begin + :stocks + NormalWeight + OverWeight + Obese + + :parameters + μ + δw + rw + ro + δo + rage + + :dynamic_variables + v_NewBorn = N * μ + v_DeathNormalWeight = NormalWeight * δw + v_BecomingOverWeight = NormalWeight * rw + v_DeathOverWeight = OverWeight * δw + v_BecomingObese = OverWeight * ro + v_DeathObese = Obese * δo + v_idNW = NormalWeight * rage + v_idOW = OverWeight * rage + v_idOb = Obese * rage + + :flows + CLOUD => f_NewBorn(v_NewBorn) => NormalWeight + NormalWeight => f_DeathNormalWeight(v_DeathNormalWeight) => ClOUD + NormalWeight => f_BecomingOverWeight(v_BecomingOverWeight) => OverWeight + OverWeight => f_DeathOverWeight(v_DeathOverWeight) => CLOUD + + OverWeight => f_BecomingObese(v_BecomingObese) => Obese + Obese => f_DeathObese(v_DeathObese) => CLOUD + NormalWeight => f_idNW(v_idNW) => NormalWeight + OverWeight => f_idOW(v_idOW) => OverWeight + Obese => f_idOb(v_idOb) => Obese + + :sums + N = [NormalWeight, OverWeight, Obese] + +end + +GraphF(WeightModel, rd="TB") + +typed_WeightModel=ACSetTransformation(WeightModel, l_type, + S = [s,s,s], + SV = [N], + LS = [lsn,lsn,lsn], + F = [f_birth, f_death, f_fstorder, f_death, f_fstorder, f_death, f_aging, f_aging, f_aging], + I = [i_birth, i_aging, i_fstorder, i_aging, i_fstorder, i_aging], + O = [o_death, o_fstorder, o_aging, o_death, o_fstorder, o_aging, o_death, o_aging], + V = [v_birth, v_death, v_fstorder, v_death, v_fstorder, v_death, v_aging, v_aging, v_aging], + LV = [lv_death1, lv_fstorder1, lv_death1, lv_fstorder1, lv_death1, lv_aging1, lv_aging1, lv_aging1], + LSV = [lsv_birth1], + P = [p_μ, p_δ, p_rfstOrder, p_rfstOrder, p_δ, p_rage], + LPV = [lpv_birth2, lpv_death2, lpv_fstorder2, lpv_death2, lpv_fstorder2, lpv_death2, lpv_aging2, lpv_aging2, lpv_aging2], + Name = name -> nothing, Op=op->nothing, Position=pos->nothing +); +@assert is_natural(typed_WeightModel) +GraphF_typed(typed_WeightModel, rd="TB") + +ageWeightModel = @stock_and_flow begin + :stocks + Child + Adult + Senior + + :parameters + μ + δC + δA + δS + rageCA + rageAS + r + + :dynamic_variables + v_NB = N * μ + v_DeathC = Child * δC + v_idC = Child * r + v_agingCA = Child * rageCA + v_DeathA = Adult * δA + v_idA = Adult * r + v_agingAS = Adult * rageAS + v_DeathS = Senior * δS + v_idS = Senior * r + + :flows + CLOUD => f_NB(v_NB) => Child + Child => f_idC(v_idC) => Child + Child => f_DeathC(v_DeathC) => CLOUD + Child => f_agingCA(v_agingCA) => Adult + Adult => f_idA(v_idA) => Adult + Adult => f_DeathA(v_DeathA) => CLOUD + Adult => f_agingAS(v_agingAS) => Senior + Senior => f_idS(v_idS) => Senior + Senior => f_DeathS(v_DeathS) => CLOUD + + :sums + N = [Child, Adult, Senior] + + +end + + +GraphF(ageWeightModel) + +typed_ageWeightModel=ACSetTransformation(ageWeightModel, l_type, + S = [s,s,s], + SV = [N], + LS = [lsn,lsn,lsn], + F = [f_birth, f_fstorder, f_death, f_aging, f_fstorder, f_death, f_aging, f_fstorder, f_death], + I = [i_birth, i_fstorder, i_aging, i_fstorder, i_aging, i_fstorder], +O = [o_fstorder, o_death, o_aging, o_fstorder, o_death, o_aging, o_fstorder, o_death], +V = [v_birth, v_death, v_fstorder, v_aging, v_death, v_fstorder, v_aging, v_death, v_fstorder], + LV = [lv_death1, lv_fstorder1, lv_aging1, lv_death1, lv_fstorder1, lv_aging1, lv_death1, lv_fstorder1], + LSV = [lsv_birth1], + P = [p_μ, p_δ, p_δ, p_δ, p_rage, p_rage, p_rfstOrder], + LPV = [lpv_birth2, lpv_death2, lpv_fstorder2, lpv_aging2, lpv_death2, lpv_fstorder2, lpv_aging2, lpv_death2, lpv_fstorder2], + Name = name -> nothing, Op=op->nothing, Position=pos->nothing +); +@assert is_natural(typed_ageWeightModel) +GraphF_typed(typed_ageWeightModel) + +aged_weight = pullback(typed_WeightModel, typed_ageWeightModel) |> apex |> rebuildStratifiedModelByFlattenSymbols; +GraphF(aged_weight) + +p_weight = LVector( + μμ=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, + ragerageCA=1.0/(12.0*365.0),ragerageAS=1.0/(50.0*365.0),rwr=0.03,ror=0.06 +) + +u0_weight = LVector( + NormalWeightChild=95811.0*12.0/82.0, OverWeightChild=27709.0*12.0/82.0, ObeseChild=30770.0*12.0/82.0, + NormalWeightAdult=95811.0*50.0/82.0, OverWeightAdult=27709.0*50.0/82.0, ObeseAdult=30770.0*50.0/82.0, + NormalWeightSenior=95811.0*20.0/82.0, OverWeightSenior=27709.0*20.0/82.0, ObeseSenior=30770.0*20.0/82.0 +); + +prob_stratified_weight = ODEProblem(vectorfield(aged_weight),u0_weight,(0.0,100.0),p_weight); +sol_stratified_weight = solve(prob_stratified_weight,Tsit5(),abstol=1e-8); +plot(sol_stratified_weight) + +## to have the figures plotted fix to the wider of the cells +## HTML(""" +## +## """) + + + 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 new file mode 100644 index 00000000..01789bb7 --- /dev/null +++ b/docs/literate/full_fledged_schema_examples_new/stratification/sir_standard_stratification.jl @@ -0,0 +1,449 @@ +# # SIR Standard Stratification + +using GraphViz + +using StockFlow +using StockFlow.Syntax + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.Theories +using Catlab.WiringDiagrams + +using Catlab.Graphics.Graphviz: Html +using Catlab.Graphics.Graphviz + + + +# Functions for graphing typed Petri nets +colors_vflow = ["antiquewhite4","antiquewhite", "gold", "saddlebrown", "slateblue", "blueviolet", "olive"] +colors_s = ["deeppink","darkorchid","darkred","coral"] # red series +colors_sv = ["cornflowerblue","cyan4","cyan","chartreuse"] # green and blue series +colors_p = ["gold","gold4","darkorange1","lightgoldenrod","goldenrod"] # yellow and orange + +flatten(fname::Symbol) = "$fname" + +function flatten(fname::Tuple) + names = split(replace(string(fname), "("=>"", ")"=>"", ":"=>""), ",") + for i in 1:length(names) + name = strip(names[i]) + if name[1:2] == "id" + continue + end + return name + end + return "id" +end + +def_stock(typed_StockFlow::ACSetTransformation, colors) = + (p,s) -> ("s$s", Attributes(:label=>sname(p,s) isa Tuple where T ? Html(replace(string(sname(p,s)), ":"=>"", "," => "
", "("=>"", ")"=>"")) : "$(sname(p,s))", + :shape=>"square", + :color=>"black", + :style=>"filled", + :fillcolor=>colors[typed_StockFlow[:S](s)])) + +def_parameter(typed_StockFlow::ACSetTransformation, colors) = +(p, pp) -> ("p$pp", Attributes(:label=>pname(p,pp) isa Tuple where T ? Html(replace(string(pname(p,pp)), ":"=>"", "," => "
", "("=>"", ")"=>"")) : "$(pname(p,pp))", + :shape=>"circle", + :color=>colors[typed_StockFlow[:P](pp)], + :fontcolor=>colors[typed_StockFlow[:P](pp)])) + +def_auxiliaryVF(typed_StockFlow::ACSetTransformation, colors)= + (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))", + :shape=>"plaintext", + :fontcolor=>colors[typed_StockFlow[:V](v)])) + + +def_sumV(typed_StockFlow::ACSetTransformation, colors) = + (p, sv) -> ("sv$sv", Attributes(:label=>svname(p,sv) isa Tuple where T ? Html(replace(string(svname(p,sv)), ":"=>"", "," => "
", "("=>"", ")"=>"")) : "$(svname(p,sv))", + :shape=>"circle", + :color=>"black", + :fillcolor=>colors[typed_StockFlow[:SV](sv)], + :style=>"filled")) + + +def_flow_V(typed_StockFlow::ACSetTransformation, colors)= + (p, us, ds, v, f) -> begin + labelfontsize = "6" + colorType = colors[typed_StockFlow[:F](f)] + color = "$colorType"*":invis:"*"$colorType" + arrowhead = "none" + splines = "ortho" + return ([us, "v$v"],Attributes(:label=>"", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)), + (["v$v", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) +end + +def_flow_noneV(typed_StockFlow::ACSetTransformation, colors)= + (p, us, ds, f) -> begin + colorType = colors[typed_StockFlow[:F](f)] + color = "$colorType"*":invis:"*"$colorType" + ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>"6", :color=>color)) +end + +def_flow_V(colors = colors_vflow)= + (p, us, ds, v, f) -> begin + labelfontsize = "6" + colorType = colors[f] + color = "$colorType"*":invis:"*"$colorType" + arrowhead = "none" + splines = "ortho" + return ([us, "v$v"],Attributes(:label=>"", :labelfontsize=>labelfontsize, :color=>color, :arrowhead=>arrowhead, :splines=>splines)), + (["v$v", ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>labelfontsize, :color=>color, :splines=>splines)) + +end + +def_flow_noneV(colors = colors_vflow)= + (p, us, ds, f) -> begin + colorType = colors[f] + color = "$colorType"*":invis:"*"$colorType" + ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>"6", :color=>color)) +end + +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), + make_stock = def_stock(typed_StockFlow, colors_s), make_auxiliaryV=def_auxiliaryVF(typed_StockFlow, colors_vflow), make_sumV=def_sumV(typed_StockFlow, colors_sv), + 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 +) + +# using StockFlow: def_stock, def_parameter, def_auxiliaryVF, def_sumV, def_flow_V + +# # Functions for graphing typed Petri nets +# colors_vflow = ["antiquewhite4","antiquewhite", "gold", "saddlebrown", "slateblue", "blueviolet", "olive"] +# colors_s = ["deeppink","darkorchid","darkred","coral"] # red series +# colors_sv = ["cornflowerblue","cyan4","cyan","chartreuse"] # green and blue series +# colors_p = ["gold","gold4","darkorange1","lightgoldenrod","goldenrod"] # yellow and orange + + +# flatten(fname::Symbol) = "$fname" + +# function flatten(fname::Tuple) +# names = split(replace(string(fname), "("=>"", ")"=>"", ":"=>""), ",") +# for i in 1:length(names) +# name = strip(names[i]) +# if name[1:2] == "id" +# continue +# end +# return name +# end +# return "id" +# end + + +# def_flow_noneV(colors = colors_vflow)= +# (p, us, ds, f) -> begin +# colorType = colors[f] +# color = "$colorType"*":invis:"*"$colorType" +# ([us, ds],Attributes(:label=>Html(flatten(fname(p,f))), :labelfontsize=>"6", :color=>color)) +# end + +# 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), +# make_stock = def_stock(typed_StockFlow, colors_s), make_auxiliaryV=def_auxiliaryVF(typed_StockFlow, colors_vflow), make_sumV=def_sumV(typed_StockFlow, colors_sv), +# 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 +# ) + + +s_type = @stock_and_flow begin + :stocks + pop + + :parameters + c + β + rFstOrder + rAge + + :dynamic_variables + v_prevalence = pop / N + v_meanInfectiousContactsPerS = c * v_prevalence + v_perSIncidenceRate = β * v_meanInfectiousContactsPerS + v_inf = pop * v_perSIncidenceRate + v_fstOrder = pop * rFstOrder + v_aging = pop * rAge + + :flows + pop => f_inf(v_inf) => pop + pop => f_fstOrder(v_fstOrder) => pop + pop => f_aging(v_aging) => pop + + + :sums + N = [pop] + + +end + + +GraphF(s_type) + +GraphF_typed(id(s_type)) + +# eliminate the attribute of name to enable pass the natural check +# only eliminate the name, the other two attributes should be okay +s_type = map(s_type, Name=name->nothing, Op=op->nothing, Position=pos->nothing); + +s, = parts(s_type, :S) +N, = parts(s_type, :SV) +lsn, = parts(s_type, :LS) +f_inf, f_fstorder, f_aging = parts(s_type, :F) +i_inf, i_fstorder, i_aging = parts(s_type, :I) # note, different order from previous in both inflow and outflow +o_inf, o_fstorder, o_aging = parts(s_type, :O) +v_IN, v_cIN, v_betacIN, v_inf, v_fstOrder, v_aging = parts(s_type, :V) +lv_IN1, lv_inf1, lv_fstOrder1, lv_aging1 = parts(s_type, :LV) +lsv_IN2, = parts(s_type, :LSV) +p_c, p_beta, p_rfstOrder, p_rAge = parts(s_type, :P) +lvv_cIN2, lvv_betacIN2, lvv_inf2 = parts(s_type, :LVV) +lpv_cIN1, lpv_betacIN1, lpv_fstOrder2, lpv_aging2 = parts(s_type, :LPV) + +sir = @stock_and_flow begin + :stocks + S + I + R + + :parameters + c + β + rRec + rAge + + :dynamic_variables + v_prevalence = I / N + v_meanInfectiousContactsPerS = c * v_prevalence + v_perSIncidenceRate = β * v_meanInfectiousContactsPerS + v_newInfections = S * v_perSIncidenceRate + v_newRecovery = I * rRec + v_idS = S * rAge + v_idI = I * rAge + v_idR = R * rAge + + :flows + S => f_idS(v_idS) => S + S => f_inf(v_newInfections) => I + I => f_idI(v_idI) => I + I => f_rec(v_newRecovery) => R + R => f_idR(v_idR) => R + + :sums + N = [S, I, R] + + +end + +GraphF(sir) + +typed_aggregate_model=ACSetTransformation(sir, s_type, + S = [s,s,s], + SV = [N], + LS = [lsn,lsn,lsn], + F = [f_aging, f_inf, f_aging, f_fstorder, f_aging], + I = [i_aging, i_inf, i_aging, i_fstorder, i_aging], #i_inf, i_fstorder, i_aging + O = [o_aging, o_inf, o_aging, o_fstorder, o_aging], + V = [v_IN, v_cIN, v_betacIN, v_inf, v_fstOrder, v_aging, v_aging, v_aging], + LV = [lv_IN1, lv_inf1, lv_fstOrder1, lv_aging1, lv_aging1, lv_aging1], + LSV = [lsv_IN2], + P = [p_c, p_beta, p_rfstOrder, p_rAge], + LVV = [lvv_cIN2, lvv_betacIN2, lvv_inf2], + LPV = [lpv_cIN1, lpv_betacIN1, lpv_fstOrder2, lpv_aging2, lpv_aging2, lpv_aging2], + Name = name -> nothing, Op=op->nothing, Position=pos->nothing +); +@assert is_natural(typed_aggregate_model) + +GraphF_typed(typed_aggregate_model) + +age2 = @stock_and_flow begin + :stocks + Child + Adult + + :parameters + c_C + β + r + rAge + c_A + + :dynamic_variables + v_INC = Child / NC + v_cINC = c_C * v_INC + v_cβINC = β * v_cINC + + v_infC = Child * v_cβINC + v_fstC = Child * r + v_agingC = Child * rAge + + + v_INA = Adult / NA + v_cINA = c_A * v_INA + v_cβINA = β * v_cINA + + v_infA = Adult * v_cβINA + v_fstA = Adult * r + + :flows + Child => f_infC(v_infC) => Child + Child => f_frsC(v_fstC) => Child + Child => f_aging(v_agingC) => Adult + Adult => f_infA(v_infA) => Adult + Adult => f_frsA(v_fstA) => Adult + + + :sums + NC = [Child] + NA = [Adult] +end + +typed_age_model=ACSetTransformation(age2, s_type, + S = [s,s], + SV = [N,N], + LS = [lsn,lsn], + F = [f_inf, f_fstorder, f_aging, f_inf, f_fstorder], + I = [i_inf, i_fstorder, i_aging, i_inf, i_fstorder], + O = [o_inf, o_fstorder, o_aging, o_inf, o_fstorder], + V = [v_IN, v_cIN, v_betacIN, v_inf, v_fstOrder, v_aging, v_IN, v_cIN, v_betacIN, v_inf, v_fstOrder], + LV = [lv_IN1, lv_inf1, lv_fstOrder1, lv_aging1, lv_IN1, lv_inf1, lv_fstOrder1], + LSV = [lsv_IN2, lsv_IN2], + P = [p_c, p_beta, p_rfstOrder, p_rAge, p_c], + LVV = [lvv_cIN2, lvv_betacIN2, lvv_inf2, lvv_cIN2, lvv_betacIN2, lvv_inf2], + LPV = [lpv_cIN1, lpv_betacIN1, lpv_fstOrder2, lpv_aging2, lpv_cIN1, lpv_betacIN1, lpv_fstOrder2], + Name = name -> nothing, Op=op->nothing, Position=pos->nothing +); +@assert is_natural(typed_age_model) + +GraphF_typed(typed_age_model) + +aged_sir = pullback(typed_aggregate_model, typed_age_model) |> apex |> rebuildStratifiedModelByFlattenSymbols; + +GraphF(aged_sir) + +LS = @stock_and_flow begin + :stocks + SChild + IChild + SAdult + IAdult + + :parameters + cc_C + cc_A + + :dynamic_variables + v_prevalencev_INC = IChild / NNC + v_prevalencev_INA = IAdult / NNA + v_meanInfectiousContactsPerSv_cINC = cc_C * v_prevalencev_INC + v_meanInfectiousContactsPerSv_cINA = cc_A * v_prevalencev_INA + + + :sums + NNC = [SChild, IChild] + NNA = [SAdult, IAdult] + + +end + +GraphF(LS) + +IS = @stock_and_flow begin + :stocks + SChild + IChild + SAdult + IAdult + + :parameters + cc_C + cc_A + + :dynamic_variables + v_prevalencev_INC = IChild / NNC + v_prevalencev_INA = IAdult / NNA + v_meanInfectiousContactsPerSv_cINC = *(cc_C) + v_meanInfectiousContactsPerSv_cINA = *(cc_A) + + :sums + NNC = [SChild, IChild] + NNA = [SAdult, IAdult] + + +end + +GraphF(IS) + +RS = @stock_and_flow begin + :stocks + SChild + IChild + SAdult + IAdult + + :parameters + fcc + fca + fac + faa + cc_C + cc_A + + :dynamic_variables + v_prevalencev_INC = IChild / NNC + v_prevalencev_INA = IAdult / NNA + v_CCContacts = fcc * v_prevalencev_INC + v_CAContacts = fca * v_prevalencev_INA + + v_ACContacts = fac * v_prevalencev_INC + v_AAContacts = faa * v_prevalencev_INA + + v_prevalencev_INC_post = v_CCContacts + v_CAContacts + v_prevalencev_INA_post = v_ACContacts + v_AAContacts + v_meanInfectiousContactsPerSv_cINC = cc_C * v_prevalencev_INC_post + v_meanInfectiousContactsPerSv_cINA = cc_A * v_prevalencev_INA_post + + :sums + NNC = [SChild, IChild] + NNA = [SAdult, IAdult] + + +end + + +GraphF(RS) + +using AlgebraicRewriting +using AlgebraicRewriting: rewrite +const hom = Catlab.CategoricalAlgebra.homomorphism + +rule_S = Rule(hom(IS,LS), hom(IS,RS)) +aged_sir_rewritten = rewrite(rule_S, aged_sir) +GraphF(aged_sir_rewritten) + +# define values of constant parameters +p_stratified_sir = LVector( + fcc=0.8, fca=0.2, fac=0.2, faa=0.8, cc_C=0.45, cc_A=0.55, + ββ=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 +) +# define initial values for stocks +u0_stratified_sir = LVector( + SChild=990.0, IChild=10.0, RChild=0.0, + SAdult=4900.0, IAdult=10.0, RAdult=0.0 +); + +prob_stratified_sir = ODEProblem(vectorfield(aged_sir_rewritten),u0_stratified_sir,(0.0,100.0),p_stratified_sir); +sol_stratified_sir = solve(prob_stratified_sir,Tsit5(),abstol=1e-8); +plot(sol_stratified_sir) + +# to have the figures plotted fix to the wider of the cells +HTML(""" + +""") + + + diff --git a/docs/make.jl b/docs/make.jl index 6161bd54..f6bdfd9f 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -49,10 +49,25 @@ makedocs( pages = Any[ "StockFlow.jl" => "index.md", "Serialization" => "json.md", + "Example" => Any[ + "generated/Covid19_composition_model_in_paper.md", + "generated/full_fledged_schema_examples_new/CasualLoopDiagrams/convert_from_SEIR_stockFlowDiagram.md", + "generated/full_fledged_schema_examples_new/composition/composed_open_population_SIRV_model.md", + "generated/full_fledged_schema_examples_new/composition/COVID_full_model.md", + "generated/full_fledged_schema_examples_new/composition/curable_sexually_transmitted_diseases_model.md", + "generated/full_fledged_schema_examples_new/composition/diabetes_model.md", + "generated/full_fledged_schema_examples_new/composition/SEIR_full_model_measles_chickenpox.md", + "generated/full_fledged_schema_examples_new/stratification/diabetes_diagnose.md", + "generated/full_fledged_schema_examples_new/stratification/sir_standard_stratification.md" + ], + "Exercises" => Any[ + "practices/SEIRVD/SEIRVD_model_hard.md", + "practices/SIRV/SIRV_composition_model_simple.md" + ] ] ) -@info "Deploying docs" +@info "Deploying do cs" deploydocs( target = "build", repo = "github.com/AlgebraicJulia/StockFlow.jl.git", diff --git a/docs/src/json.md b/docs/src/json.md index e0551bb1..ffb75ece 100644 --- a/docs/src/json.md +++ b/docs/src/json.md @@ -1,5 +1,4 @@ -# # Serializing Stock and Flow Models. - +# Serializing Stock and Flow Models ```@example JSON using StockFlow diff --git a/docs/src/practices/SEIRVD/ID_submodel.png b/docs/src/practices/SEIRVD/ID_submodel.png new file mode 100644 index 00000000..1dc148cd Binary files /dev/null and b/docs/src/practices/SEIRVD/ID_submodel.png differ diff --git a/docs/src/practices/SEIRVD/SEIRVD_composed_model.png b/docs/src/practices/SEIRVD/SEIRVD_composed_model.png new file mode 100644 index 00000000..ce670cbe Binary files /dev/null and b/docs/src/practices/SEIRVD/SEIRVD_composed_model.png differ diff --git a/docs/src/practices/SEIRVD/SEIRVD_model_hard.md b/docs/src/practices/SEIRVD/SEIRVD_model_hard.md new file mode 100644 index 00000000..71e7bc7d --- /dev/null +++ b/docs/src/practices/SEIRVD/SEIRVD_model_hard.md @@ -0,0 +1,119 @@ +# Problem: SEIRVD Model + +```julia +using StockFlow + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.WiringDiagrams +``` + +To build the SEIRVD stock and flow diagram model: +![SEIRVD_composed_model.png](SEIRVD_composed_model.png) +By composing three sub-components. + +## Step 1: Define Stock and Flow Diagrams for the sub-components + +### 1.1 Define SEIR model + +**Model 1: SEIR model** +![SEIR_submodel.png](SEIR_submodel.png) + +The functions of flows are given by: + +```julia +finc(u,p,t)=p.cβ*u.S*u.I/p.N +finf(u,p,t)=u.E * p.rlatent +frec(u,p,t)=u.I * p.rrec +``` + +Now, please define the stock and flow diagram of the SEIR model: + +```julia +# StockAndFlowp(stocks, +# (flow=>function, upstream=>downstream) => stocks linked) +``` + +You can plot the define stock and flow diagram by call function: ```Graph()``` + +```julia +Graph() +``` + +### 1.2 Define the SV model + +**Model 2: SV model** (simulates the vaccination process): +![SV_submodel.png](SV_submodel.png) + +The function of flow vac is given + +```julia +fvac(u,p,t)=u.S * p.rv +``` + +Now, please define the stock and flow diagram and plot it + +```julia +# StockAndFlowp(stocks, +# (flow=>function, upstream=>downstream) => stocks linked) +``` + +### 1.3 Define the ID model + +**Model 3: ID model** (simulates the deaths due to infected disese) +![ID_submodel.png](ID_submodel.png) + +```julia +fdeath(u,p,t)=u.I * p.rd +``` + +Now, please define the stock and flow diagram and plot it + +```julia +# StockAndFlowp(stocks, +# (flow=>function, upstream=>downstream) => stocks linked) +``` + +## Step 2: Define the UWD-algebra composition rule + +```julia +uwd_seirvd = @relation (S, I) begin + +end; +display_uwd(uwd_seirvd) +``` + +Apply the composition rule to the open stock and flow diagrams + +```julia +seirvd=oapply(uwd_seirvd,Dict()) |> apex +Graph(seirvd) +``` + +## Step 3: Solve the composed model + +Define the constant parameters values, and stocks initial values. The values are given. Please note those values are arbitrary given for toy model running. You can try to modify those values based on your interested infectious diseases. + +```julia +p = LVector( + cβ=0.2, N=1000, rrec=0.083, rv=0.02, rlatent=0.2, rd=0.0001 +) +# Define initial values for stocks +u0 = LVector( + S=990, E=0, I=10, R=0, V=0, D=0 +) +``` + +Solve the ODEs generated from the composed stock and flow diagram + +```julia +prob = ODEProblem(vectorfield(seirvd),u0,(0.0,100.0),p); +sol = solve(prob,Tsit5(),abstol=1e-8); +plot(sol) +``` diff --git a/docs/src/practices/SEIRVD/SEIR_submodel.png b/docs/src/practices/SEIRVD/SEIR_submodel.png new file mode 100644 index 00000000..288022b5 Binary files /dev/null and b/docs/src/practices/SEIRVD/SEIR_submodel.png differ diff --git a/docs/src/practices/SEIRVD/SV_submodel.png b/docs/src/practices/SEIRVD/SV_submodel.png new file mode 100644 index 00000000..a0a5c1a5 Binary files /dev/null and b/docs/src/practices/SEIRVD/SV_submodel.png differ diff --git a/docs/src/practices/SIRV/SIRV_composed_model.png b/docs/src/practices/SIRV/SIRV_composed_model.png new file mode 100644 index 00000000..bfca0cff Binary files /dev/null and b/docs/src/practices/SIRV/SIRV_composed_model.png differ diff --git a/docs/src/practices/SIRV/SIRV_composition_model_simple.md b/docs/src/practices/SIRV/SIRV_composition_model_simple.md new file mode 100644 index 00000000..c851e721 --- /dev/null +++ b/docs/src/practices/SIRV/SIRV_composition_model_simple.md @@ -0,0 +1,134 @@ +``` +using StockFlow + +using Catlab +using Catlab.CategoricalAlgebra +using LabelledArrays +using OrdinaryDiffEq +using Plots + +using Catlab.Graphics +using Catlab.Programs +using Catlab.WiringDiagrams +``` + +# Problem: SIRV Model + +To compose a SIRV model as follows: +![SIRV_composed_model.png](SIRV_composed_model.png) + +## Step 1. Define sub-components + +### 1.1 Define SIR model + +![SIR_Submodel.png](SIR_Submodel.png) + +The definition of the SIR model are as follows: + +```julia +# Define functions ϕ of flows in the SIR model +fNewIncidence(u,p,t)=p.cβ*u.S*u.I/p.N +fNewRecovery(u,p,t)=u.I/p.tr + +# StockAndFlowp(stocks, +# (flow=>function, upstream=>d +sir = StockAndFlowp((:S, :I, :R), + ((:NewIncidence=>fNewIncidence, :S=>:I)=>(:S,:I), + (:NewRecovery=>fNewRecovery, :I=>:R)=>:I) +) +``` + +Now, we just created a Stock and Flow Diagram of a SIR model with the primitive schema. We can plot the Stock and Flow Diagram: + +```julia +Graph(sir) +``` + +### 1.2 Define SVI model + +The SVI stock and flow Diagram is as follows: +![SVI_submodel.png](SVI_submodel.png) + + +```julia +# Define functions ϕ of flows in the SVI model +fNewIncidenceFromV(u,p,t)=p.cβ*u.V*u.I*(1-p.e)/p.N +fNewVaccinated(u,p,t)=u.S*p.rv + + +# StockAndFlowp(stocks, +# (flow=>function, upstream=>do +Graph(svi) +``` + + +### Composition method 1 -- via structured cospan + +#### Open SIR stock and flow Diagram as a structured cospan, with the left leg [:R], and with the right leg [:S, :I] + +```julia + +``` + +#### Open SVI stock and flow Diagram as a structured cospan, with the left leg [:S,:I], and with the right leg [:V] + +```julia + +``` + +#### Now, we can compose those two structured cospan with the common foot [:S,:I]. And the composed model is the SIRV model we need + +```julia +sirv1=apex() +``` + +```julia +Graph(sirv1) +``` + +### Composition method 2 -- via uwd-algebra + +#### Define the composition rule of the uwd-algebra + +```julia +uwd_sirv = +display_uwd(uwd_sirv) +``` + +```julia +sirv2=oapply(uwd_sirv,Dict()) |> apex +``` + +```julia +Graph(sirv2) +``` + +### Solve the SIRV model + +Define constant parameters and initial values + +```julia +p_sirv = LVector( + cβ=0.2, N=1000, tr=12, rv=0.02, e=0.9 +) +# Define initial values for stocks +u0_sirv = LVector( + S=990, I=10, R=0, V=0 +) +``` + +#### Model results of sirv1 generated by the method of composing the structured cospan + +```julia +prob_sirv1 = ODEProblem(vectorfield(sirv1),u0_sirv,(0.0,100.0),p_sirv); +sol_sirv1 = solve(prob_sirv1,Tsit5(),abstol=1e-8); +plot(sol_sirv1) +``` + +#### Model results of sirv2 generated by the method of composing using uwd-algebra + +```julia +prob_sirv2 = ODEProblem(vectorfield(sirv2),u0_sirv,(0,100.0),p_sirv) +sol_sirv2 = solve(prob_sirv2,Tsit5(),sbstol=1e-8); +plot(sol_sirv2) +``` diff --git a/docs/src/practices/SIRV/SIR_Submodel.png b/docs/src/practices/SIRV/SIR_Submodel.png new file mode 100644 index 00000000..5b0018fb Binary files /dev/null and b/docs/src/practices/SIRV/SIR_Submodel.png differ diff --git a/docs/src/practices/SIRV/SVI_submodel.png b/docs/src/practices/SIRV/SVI_submodel.png new file mode 100644 index 00000000..e8f65f1d Binary files /dev/null and b/docs/src/practices/SIRV/SVI_submodel.png differ 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 new file mode 100644 index 00000000..7362fe16 --- /dev/null +++ b/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/.ipynb_checkpoints/convert_from_SEIR_stockFlowDiagram-checkpoint.ipynb @@ -0,0 +1,1072 @@ +{ + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1S
2E
3I
4R
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
441
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_birth
24f_incid
37v_deathS
45f_inf
58f_deathE
66f_rec
79f_deathI
810f_deathR
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
222
343
464
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
121
231
342
452
563
673
784
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_birth*
2v_incid₁/
3v_incid₂*
4v_incid₃*
5v_inf/
6v_rec/
7v_deathS*
8v_deathE*
9v_deathI*
10v_deathR*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1321
2131
3251
4361
5171
6281
7391
84101
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
2122
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2β
3tlatent
4trecovery
5δ
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1232
2342
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1111
2241
3352
4462
5572
6582
7592
85102
\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\nG\n\n\n\ns1\n\nS\n\n\n\nv3\nS * (I / N)\n\n\n\ns1->v3\n\n\n\n\n\nv4\nβ * (S * (I / N))\n\n\n\ns1->v4\n\n\n\n\n\n\nv7\nS * δ\n\n\n\ns1->v7\n\n\n\n\n\n\ns1->v7\n\n\n\n\n\nsv1\n\nN\n\n\n\ns1->sv1\n\n\n\n\n\ns2\n\nE\n\n\n\nv5\nE / tlatent\n\n\n\ns2->v5\n\n\n\n\n\n\ns2->v5\n\n\n\n\n\nv8\nE * δ\n\n\n\ns2->v8\n\n\n\n\n\n\ns2->v8\n\n\n\n\n\ns2->sv1\n\n\n\n\n\ns3\n\nI\n\n\n\nv2\nI / N\n\n\n\ns3->v2\n\n\n\n\n\nv6\nI / trecovery\n\n\n\ns3->v6\n\n\n\n\n\n\ns3->v6\n\n\n\n\n\nv9\nI * δ\n\n\n\ns3->v9\n\n\n\n\n\n\ns3->v9\n\n\n\n\n\ns3->sv1\n\n\n\n\n\ns4\n\nR\n\n\n\nv10\nR * δ\n\n\n\ns4->v10\n\n\n\n\n\n\ns4->v10\n\n\n\n\n\ns4->sv1\n\n\n\n\n\np1\n\nμ\n\n\n\nv1\nμ * N\n\n\n\np1->v1\n\n\n\n\n\np2\n\nβ\n\n\n\np2->v4\n\n\n\n\n\np3\n\ntlatent\n\n\n\np3->v5\n\n\n\n\n\np4\n\ntrecovery\n\n\n\np4->v6\n\n\n\n\n\np5\n\nδ\n\n\n\np5->v7\n\n\n\n\n\np5->v8\n\n\n\n\n\np5->v9\n\n\n\n\n\np5->v10\n\n\n\n\n\nfs_1u\n\n\n\n\nfs_1u->v1\n\n\n\n\n\n\nfs_3d\n\n\n\n\nfs_5d\n\n\n\n\nfs_7d\n\n\n\n\nfs_8d\n\n\n\n\nv1->s1\n\n\n\n\nf_birth\n\n\n\nv2->v3\n\n\n\n\n\nv3->v4\n\n\n\n\n\nv4->s2\n\n\n\n\nf_incid\n\n\n\nv5->s3\n\n\n\n\nf_inf\n\n\n\nv6->s4\n\n\n\n\nf_rec\n\n\n\nv7->fs_3d\n\n\n\n\nv_deathS\n\n\n\nv8->fs_5d\n\n\n\n\nf_deathE\n\n\n\nv9->fs_7d\n\n\n\n\nf_deathI\n\n\n\nv10->fs_8d\n\n\n\n\nf_deathR\n\n\n\nsv1->v1\n\n\n\n\n\nsv1->v2\n\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Est
1113
2213
3313
4413
5135
61314
7314
8115
928
10310
1117
1229
13311
14412
1551
1662
1783
18104
1961
2071
2182
2292
23103
24113
25124
26165
27176
28188
291910
30207
31209
322011
332012
341415
35156
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Nnname
1S
2E
3I
4R
5f_birth
6f_incid
7v_deathS
8f_inf
9f_deathE
10f_rec
11f_deathI
12f_deathR
13N
14v_incid₁
15v_incid₂
16μ
17β
18tlatent
19trecovery
20δ
\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\nG\n\n\n\nn1\nS\n\n\n\nn7\nv_deathS\n\n\n\nn1->n7\n\n\n\n\n\nn13\nN\n\n\n\nn1->n13\n\n\n\n\n\nn15\nv_incid₂\n\n\n\nn1->n15\n\n\n\n\n\nn2\nE\n\n\n\nn8\nf_inf\n\n\n\nn2->n8\n\n\n\n\n\nn9\nf_deathE\n\n\n\nn2->n9\n\n\n\n\n\nn2->n13\n\n\n\n\n\nn3\nI\n\n\n\nn10\nf_rec\n\n\n\nn3->n10\n\n\n\n\n\nn11\nf_deathI\n\n\n\nn3->n11\n\n\n\n\n\nn3->n13\n\n\n\n\n\nn14\nv_incid₁\n\n\n\nn3->n14\n\n\n\n\n\nn4\nR\n\n\n\nn12\nf_deathR\n\n\n\nn4->n12\n\n\n\n\n\nn4->n13\n\n\n\n\n\nn5\nf_birth\n\n\n\nn5->n1\n\n\n\n\n\nn6\nf_incid\n\n\n\nn6->n1\n\n\n\n\n\nn6->n2\n\n\n\n\n\nn7->n1\n\n\n\n\n\nn8->n2\n\n\n\n\n\nn8->n3\n\n\n\n\n\nn9->n2\n\n\n\n\n\nn10->n3\n\n\n\n\n\nn10->n4\n\n\n\n\n\nn11->n3\n\n\n\n\n\nn12->n4\n\n\n\n\n\nn13->n5\n\n\n\n\n\nn13->n14\n\n\n\n\n\nn14->n15\n\n\n\n\n\nn15->n6\n\n\n\n\n\nn16\nμ\n\n\n\nn16->n5\n\n\n\n\n\nn17\nβ\n\n\n\nn17->n6\n\n\n\n\n\nn18\ntlatent\n\n\n\nn18->n8\n\n\n\n\n\nn19\ntrecovery\n\n\n\nn19->n10\n\n\n\n\n\nn20\nδ\n\n\n\nn20->n7\n\n\n\n\n\nn20->n9\n\n\n\n\n\nn20->n11\n\n\n\n\n\nn20->n12\n\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/convert_from_SEIR_stockFlowDiagram.ipynb b/examples/full_fledged_schema_examples_new/CausalLoopDiagrams/convert_from_SEIR_stockFlowDiagram.ipynb index 7362fe16..c47d3dec 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 @@ -662,7 +662,428 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\nG\n\n\n\ns1\n\nS\n\n\n\nv3\nS * (I / N)\n\n\n\ns1->v3\n\n\n\n\n\nv4\nβ * (S * (I / N))\n\n\n\ns1->v4\n\n\n\n\n\n\nv7\nS * δ\n\n\n\ns1->v7\n\n\n\n\n\n\ns1->v7\n\n\n\n\n\nsv1\n\nN\n\n\n\ns1->sv1\n\n\n\n\n\ns2\n\nE\n\n\n\nv5\nE / tlatent\n\n\n\ns2->v5\n\n\n\n\n\n\ns2->v5\n\n\n\n\n\nv8\nE * δ\n\n\n\ns2->v8\n\n\n\n\n\n\ns2->v8\n\n\n\n\n\ns2->sv1\n\n\n\n\n\ns3\n\nI\n\n\n\nv2\nI / N\n\n\n\ns3->v2\n\n\n\n\n\nv6\nI / trecovery\n\n\n\ns3->v6\n\n\n\n\n\n\ns3->v6\n\n\n\n\n\nv9\nI * δ\n\n\n\ns3->v9\n\n\n\n\n\n\ns3->v9\n\n\n\n\n\ns3->sv1\n\n\n\n\n\ns4\n\nR\n\n\n\nv10\nR * δ\n\n\n\ns4->v10\n\n\n\n\n\n\ns4->v10\n\n\n\n\n\ns4->sv1\n\n\n\n\n\np1\n\nμ\n\n\n\nv1\nμ * N\n\n\n\np1->v1\n\n\n\n\n\np2\n\nβ\n\n\n\np2->v4\n\n\n\n\n\np3\n\ntlatent\n\n\n\np3->v5\n\n\n\n\n\np4\n\ntrecovery\n\n\n\np4->v6\n\n\n\n\n\np5\n\nδ\n\n\n\np5->v7\n\n\n\n\n\np5->v8\n\n\n\n\n\np5->v9\n\n\n\n\n\np5->v10\n\n\n\n\n\nfs_1u\n\n\n\n\nfs_1u->v1\n\n\n\n\n\n\nfs_3d\n\n\n\n\nfs_5d\n\n\n\n\nfs_7d\n\n\n\n\nfs_8d\n\n\n\n\nv1->s1\n\n\n\n\nf_birth\n\n\n\nv2->v3\n\n\n\n\n\nv3->v4\n\n\n\n\n\nv4->s2\n\n\n\n\nf_incid\n\n\n\nv5->s3\n\n\n\n\nf_inf\n\n\n\nv6->s4\n\n\n\n\nf_rec\n\n\n\nv7->fs_3d\n\n\n\n\nv_deathS\n\n\n\nv8->fs_5d\n\n\n\n\nf_deathE\n\n\n\nv9->fs_7d\n\n\n\n\nf_deathI\n\n\n\nv10->fs_8d\n\n\n\n\nf_deathR\n\n\n\nsv1->v1\n\n\n\n\n\nsv1->v2\n\n\n\n\n\n", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v3\n", + "S * (I / N)\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "β * (S * (I / N))\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "S * δ\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "v5\n", + "E / tlatent\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "E * δ\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v2\n", + "I / N\n", + "\n", + "\n", + "\n", + "s3->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "I / trecovery\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "I * δ\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v10\n", + "R * δ\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v1\n", + "μ * N\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "tlatent\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "trecovery\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "δ\n", + "\n", + "\n", + "\n", + "p5->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_birth\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_incid\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_inf\n", + "\n", + "\n", + "\n", + "v6->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_rec\n", + "\n", + "\n", + "\n", + "v7->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "v_deathS\n", + "\n", + "\n", + "\n", + "v8->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathE\n", + "\n", + "\n", + "\n", + "v9->fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathI\n", + "\n", + "\n", + "\n", + "v10->fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathR\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\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\"))" ] @@ -1033,7 +1454,331 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\nG\n\n\n\nn1\nS\n\n\n\nn7\nv_deathS\n\n\n\nn1->n7\n\n\n\n\n\nn13\nN\n\n\n\nn1->n13\n\n\n\n\n\nn15\nv_incid₂\n\n\n\nn1->n15\n\n\n\n\n\nn2\nE\n\n\n\nn8\nf_inf\n\n\n\nn2->n8\n\n\n\n\n\nn9\nf_deathE\n\n\n\nn2->n9\n\n\n\n\n\nn2->n13\n\n\n\n\n\nn3\nI\n\n\n\nn10\nf_rec\n\n\n\nn3->n10\n\n\n\n\n\nn11\nf_deathI\n\n\n\nn3->n11\n\n\n\n\n\nn3->n13\n\n\n\n\n\nn14\nv_incid₁\n\n\n\nn3->n14\n\n\n\n\n\nn4\nR\n\n\n\nn12\nf_deathR\n\n\n\nn4->n12\n\n\n\n\n\nn4->n13\n\n\n\n\n\nn5\nf_birth\n\n\n\nn5->n1\n\n\n\n\n\nn6\nf_incid\n\n\n\nn6->n1\n\n\n\n\n\nn6->n2\n\n\n\n\n\nn7->n1\n\n\n\n\n\nn8->n2\n\n\n\n\n\nn8->n3\n\n\n\n\n\nn9->n2\n\n\n\n\n\nn10->n3\n\n\n\n\n\nn10->n4\n\n\n\n\n\nn11->n3\n\n\n\n\n\nn12->n4\n\n\n\n\n\nn13->n5\n\n\n\n\n\nn13->n14\n\n\n\n\n\nn14->n15\n\n\n\n\n\nn15->n6\n\n\n\n\n\nn16\nμ\n\n\n\nn16->n5\n\n\n\n\n\nn17\nβ\n\n\n\nn17->n6\n\n\n\n\n\nn18\ntlatent\n\n\n\nn18->n8\n\n\n\n\n\nn19\ntrecovery\n\n\n\nn19->n10\n\n\n\n\n\nn20\nδ\n\n\n\nn20->n7\n\n\n\n\n\nn20->n9\n\n\n\n\n\nn20->n11\n\n\n\n\n\nn20->n12\n\n\n\n\n\n", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "S\n", + "\n", + "\n", + "\n", + "n7\n", + "v_deathS\n", + "\n", + "\n", + "\n", + "n1->n7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n13\n", + "N\n", + "\n", + "\n", + "\n", + "n1->n13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n15\n", + "v_incid₂\n", + "\n", + "\n", + "\n", + "n1->n15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "E\n", + "\n", + "\n", + "\n", + "n8\n", + "f_inf\n", + "\n", + "\n", + "\n", + "n2->n8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n9\n", + "f_deathE\n", + "\n", + "\n", + "\n", + "n2->n9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n2->n13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n3\n", + "I\n", + "\n", + "\n", + "\n", + "n10\n", + "f_rec\n", + "\n", + "\n", + "\n", + "n3->n10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n11\n", + "f_deathI\n", + "\n", + "\n", + "\n", + "n3->n11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n3->n13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n14\n", + "v_incid₁\n", + "\n", + "\n", + "\n", + "n3->n14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4\n", + "R\n", + "\n", + "\n", + "\n", + "n12\n", + "f_deathR\n", + "\n", + "\n", + "\n", + "n4->n12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4->n13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n5\n", + "f_birth\n", + "\n", + "\n", + "\n", + "n5->n1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n6\n", + "f_incid\n", + "\n", + "\n", + "\n", + "n6->n1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n6->n2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n7->n1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n8->n2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n8->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n9->n2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n10->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n10->n4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n11->n3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n12->n4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n13->n5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n13->n14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n14->n15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n15->n6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n16\n", + "μ\n", + "\n", + "\n", + "\n", + "n16->n5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n17\n", + "β\n", + "\n", + "\n", + "\n", + "n17->n6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n18\n", + "tlatent\n", + "\n", + "\n", + "\n", + "n18->n8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n19\n", + "trecovery\n", + "\n", + "\n", + "\n", + "n19->n10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n20\n", + "δ\n", + "\n", + "\n", + "\n", + "n20->n7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n20->n9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n20->n11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n20->n12\n", + "\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}}())" ] @@ -1056,7 +1801,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.2", + "display_name": "Julia 1.9.3", "language": "julia", "name": "julia-1.9" }, @@ -1064,7 +1809,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.2" + "version": "1.9.3" } }, "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 new file mode 100644 index 00000000..426fab1c --- /dev/null +++ b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/COVID_full_model-checkpoint.ipynb @@ -0,0 +1,10947 @@ +{ + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1S
2E
3IA
4IYU
5IYN
6R
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NIC
3NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
432
533
641
742
843
951
1052
1153
1261
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
13fNewIncidence
24fNewInfectious
35fBecomingSymptomatic
46fSymptomicsNotDevelopingComplications
57fNewRecovery
68fWaningImmunityR
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
161
212
323
434
545
656
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
222
333
444
555
666
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_NewIncidence₁*
2v_NewIncidence₂/
3v_NewIncidence₃*
4v_NewInfectious*
5v_BecomingSymptomatic*
6v_SymptomicsNotDevelopingComplications*
7v_NewRecovery*
8v_WaningImmunityR*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1132
2241
3351
4461
5571
6681
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1212
2122
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1β
2rLatent
3rIncubation
4rDevelop
5rRecovery
6rw
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2231
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1111
2242
3352
4462
5572
6682
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v3\n", + "((β * NIC) / N) * S\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "v4\n", + "E * rLatent\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "IA\n", + "\n", + "\n", + "\n", + "v5\n", + "IA * rIncubation\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv3\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s3->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "IYU\n", + "\n", + "\n", + "\n", + "v6\n", + "IYU * rDevelop\n", + "\n", + "\n", + "\n", + "s4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "IYN\n", + "\n", + "\n", + "\n", + "v7\n", + "IYN * rRecovery\n", + "\n", + "\n", + "\n", + "s5->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v8\n", + "R * rw\n", + "\n", + "\n", + "\n", + "s6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v1\n", + "β * NIC\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rLatent\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rIncubation\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rDevelop\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rRecovery\n", + "\n", + "\n", + "\n", + "p5->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(β * NIC) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->s2\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidence\n", + "\n", + "\n", + "\n", + "v4->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewInfectious\n", + "\n", + "\n", + "\n", + "v5->s4\n", + "\n", + "\n", + "\n", + "\n", + "fBecomingSymptomatic\n", + "\n", + "\n", + "\n", + "v6->s5\n", + "\n", + "\n", + "\n", + "\n", + "fSymptomicsNotDevelopingComplications\n", + "\n", + "\n", + "\n", + "v7->s6\n", + "\n", + "\n", + "\n", + "\n", + "fNewRecovery\n", + "\n", + "\n", + "\n", + "v8->s1\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityR\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1S
2E
3VP
4VF
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NIC
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
441
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
15fFirstdoseVaccine
26fWaningImmunityVP
37fSeconddoseVaccine
48fWaningImmunityVF
53fNewIncidenceVP
64fNewIncidenceVF
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
121
252
362
413
543
634
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
223
333
453
544
664
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_NewIncidenceVP*
2v_NewIncidenceVF*
3v_infVP*
4v_infVF*
5##v_fFirstdoseVaccine#292*
6##v_fWaningImmunityVP#293*
7##v_fSeconddoseVaccine#294*
8##v_fWaningImmunityVF#295*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1311
2421
3151
4361
5371
6481
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rv
2rw
3λ
4eP_complement
5eF_complement
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1131
2241
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1412
2522
3332
4342
5152
6262
7172
8282
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v5\n", + "S * rv\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "VP\n", + "\n", + "\n", + "\n", + "v1\n", + "VP * eP_complement\n", + "\n", + "\n", + "\n", + "s3->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3\n", + "(VP * eP_complement) * λ\n", + "\n", + "\n", + "\n", + "s3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "VP * rw\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "VP * rv\n", + "\n", + "\n", + "\n", + "s3->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "VF\n", + "\n", + "\n", + "\n", + "v2\n", + "VF * eF_complement\n", + "\n", + "\n", + "\n", + "s4->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "(VF * eF_complement) * λ\n", + "\n", + "\n", + "\n", + "s4->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "VF * rw\n", + "\n", + "\n", + "\n", + "s4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rv\n", + "\n", + "\n", + "\n", + "p1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "λ\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "eP_complement\n", + "\n", + "\n", + "\n", + "p4->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "eF_complement\n", + "\n", + "\n", + "\n", + "p5->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->s2\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVP\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVF\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "fFirstdoseVaccine\n", + "\n", + "\n", + "\n", + "v6->s1\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityVP\n", + "\n", + "\n", + "\n", + "v7->s4\n", + "\n", + "\n", + "\n", + "\n", + "fSeconddoseVaccine\n", + "\n", + "\n", + "\n", + "v8->s3\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityVF\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1IA
2IA2
3IA3
4R
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NIC
3NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
212
313
421
522
623
731
832
933
1041
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11fDevelopmentOfPersistentAsymptomaticity
22fProgressionIA2_IA3
33fNewrecoveryIA3
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
112
223
334
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
222
333
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1##v_fDevelopmentOfPersistentAsymptomaticity#296*
2##v_fProgressionIA2_IA3#297*
3##v_fNewrecoveryIA3#298*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1111
2221
3331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rIncubationIA
2rDevelopIA2
3rRecoveryIA3
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1112
2222
3332
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "IA\n", + "\n", + "\n", + "\n", + "v1\n", + "IA * rIncubationIA\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "s1->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv3\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s1->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "IA2\n", + "\n", + "\n", + "\n", + "v2\n", + "IA2 * rDevelopIA2\n", + "\n", + "\n", + "\n", + "s2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "IA3\n", + "\n", + "\n", + "\n", + "v3\n", + "IA3 * rRecoveryIA3\n", + "\n", + "\n", + "\n", + "s3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rIncubationIA\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rDevelopIA2\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rRecoveryIA3\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->s2\n", + "\n", + "\n", + "\n", + "\n", + "fDevelopmentOfPersistentAsymptomaticity\n", + "\n", + "\n", + "\n", + "v2->s3\n", + "\n", + "\n", + "\n", + "\n", + "fProgressionIA2_IA3\n", + "\n", + "\n", + "\n", + "v3->s4\n", + "\n", + "\n", + "\n", + "\n", + "fNewrecoveryIA3\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1IYU
2HICU
3HNICU
4R
5D
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NIC
3NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
212
313
421
523
631
733
841
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_HICUAdmission
22f_HNICUAdmission
33f_OutICU
44f_RecoveryH
55f_NewDeathsHICU
66f_NewDeathsHNICU
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
112
223
333
444
555
665
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
332
452
543
663
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_HICUAdmission*
2v_HNICUAdmission*
3v_OutICU*
4v_RecoveryH*
5v_NewDeathsHICU*
6v_NewDeathsHNICU*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1111
2121
3231
4341
5251
6361
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rAdmICU
2rAdmNICU
3rOutICU
4rrH
5rDeathICU
6rDeathNICU
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1112
2222
3332
4442
5552
6662
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "IYU\n", + "\n", + "\n", + "\n", + "v1\n", + "IYU * rAdmICU\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "IYU * rAdmNICU\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "s1->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv3\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s1->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "HICU\n", + "\n", + "\n", + "\n", + "v3\n", + "HICU * rOutICU\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "HICU * rDeathICU\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "HNICU\n", + "\n", + "\n", + "\n", + "v4\n", + "HNICU * rrH\n", + "\n", + "\n", + "\n", + "s3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "HNICU * rDeathNICU\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "D\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rAdmICU\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rAdmNICU\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rOutICU\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rrH\n", + "\n", + "\n", + "\n", + "p4->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rDeathICU\n", + "\n", + "\n", + "\n", + "p5->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rDeathNICU\n", + "\n", + "\n", + "\n", + "p6->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_HICUAdmission\n", + "\n", + "\n", + "\n", + "v2->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_HNICUAdmission\n", + "\n", + "\n", + "\n", + "v3->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_OutICU\n", + "\n", + "\n", + "\n", + "v4->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_RecoveryH\n", + "\n", + "\n", + "\n", + "v5->s5\n", + "\n", + "\n", + "\n", + "\n", + "f_NewDeathsHICU\n", + "\n", + "\n", + "\n", + "v6->s5\n", + "\n", + "\n", + "\n", + "\n", + "f_NewDeathsHNICU\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "IYU\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "s1->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv3\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv3\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "IA\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "s1->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv3\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv3\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NIC\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "modelA\n", + "\n", + "\n", + "\n", + "\n", + "n11\n", + "\n", + "footSN\n", + "\n", + "\n", + "\n", + "n1--n11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n12\n", + "\n", + "footEN\n", + "\n", + "\n", + "\n", + "n1--n12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n13\n", + "\n", + "footIAN\n", + "\n", + "\n", + "\n", + "n1--n13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n14\n", + "\n", + "footIYUN\n", + "\n", + "\n", + "\n", + "n1--n14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n15\n", + "\n", + "footRN\n", + "\n", + "\n", + "\n", + "n1--n15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n16\n", + "\n", + "footNIC\n", + "\n", + "\n", + "\n", + "n1--n16\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "modelB\n", + "\n", + "\n", + "\n", + "n2--n11\n", + "\n", + "\n", + "\n", + "\n", + "n2--n12\n", + "\n", + "\n", + "\n", + "\n", + "n2--n16\n", + "\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "modelC\n", + "\n", + "\n", + "\n", + "n3--n13\n", + "\n", + "\n", + "\n", + "\n", + "n3--n15\n", + "\n", + "\n", + "\n", + "\n", + "n4\n", + "\n", + "modelD\n", + "\n", + "\n", + "\n", + "n4--n14\n", + "\n", + "\n", + "\n", + "\n", + "n4--n15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n5--n11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n6--n12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n7--n13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n8--n14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n9--n15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n10--n16\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1S
2E
3IA
4IYU
5IYN
6R
7VP
8VF
9IA2
10IA3
11HICU
12HNICU
13D
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NIC
3NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
432
533
641
742
843
951
1052
1153
1261
1371
1481
1591
1692
1793
18101
19102
20103
21111
22113
23121
24123
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
13fNewIncidence
24fNewInfectious
35fBecomingSymptomatic
46fSymptomicsNotDevelopingComplications
57fNewRecovery
68fWaningImmunityR
713fFirstdoseVaccine
814fWaningImmunityVP
915fSeconddoseVaccine
1016fWaningImmunityVF
1111fNewIncidenceVP
1212fNewIncidenceVF
1317fDevelopmentOfPersistentAsymptomaticity
1418fProgressionIA2_IA3
1519fNewrecoveryIA3
1620f_HICUAdmission
1721f_HNICUAdmission
1822f_OutICU
1923f_RecoveryH
2024f_NewDeathsHICU
2125f_NewDeathsHNICU
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
161
212
323
434
545
656
781
8112
9122
1077
11107
1298
13139
141410
15156
161611
171712
181812
19196
202013
212113
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
222
333
444
555
666
771
887
997
10117
11108
12128
13133
14149
151510
16164
17174
181811
192011
201912
212112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_NewIncidence₁*
2v_NewIncidence₂/
3v_NewIncidence₃*
4v_NewInfectious*
5v_BecomingSymptomatic*
6v_SymptomicsNotDevelopingComplications*
7v_NewRecovery*
8v_WaningImmunityR*
9v_NewIncidenceVP*
10v_NewIncidenceVF*
11v_infVP*
12v_infVF*
13##v_fFirstdoseVaccine#292*
14##v_fWaningImmunityVP#293*
15##v_fSeconddoseVaccine#294*
16##v_fWaningImmunityVF#295*
17##v_fDevelopmentOfPersistentAsymptomaticity#296*
18##v_fProgressionIA2_IA3#297*
19##v_fNewrecoveryIA3#298*
20v_HICUAdmission*
21v_HNICUAdmission*
22v_OutICU*
23v_RecoveryH*
24v_NewDeathsHICU*
25v_NewDeathsHNICU*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1132
2241
3351
4461
5571
6681
7791
88101
91131
107141
117151
128161
133171
149181
1510191
164201
174211
1811221
1912231
2011241
2112251
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1212
2122
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1β
2rLatent
3rIncubation
4rDevelop
5rRecovery
6rw
7rv
8rw
9λ
10eP_complement
11eF_complement
12rIncubationIA
13rDevelopIA2
14rRecoveryIA3
15rAdmICU
16rAdmNICU
17rOutICU
18rrH
19rDeathICU
20rDeathNICU
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2231
39111
410121
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1111
2242
3352
4462
5572
6682
71092
811102
99112
109122
117132
128142
137152
148162
1512172
1613182
1714192
1815202
1916212
2017222
2118232
2219242
2320252
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v3\n", + "((β * NIC) / N) * S\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v13\n", + "S * rv\n", + "\n", + "\n", + "\n", + "s1->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "v4\n", + "E * rLatent\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "IA\n", + "\n", + "\n", + "\n", + "v5\n", + "IA * rIncubation\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v17\n", + "IA * rIncubationIA\n", + "\n", + "\n", + "\n", + "s3->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv3\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s3->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "IYU\n", + "\n", + "\n", + "\n", + "v6\n", + "IYU * rDevelop\n", + "\n", + "\n", + "\n", + "s4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v20\n", + "IYU * rAdmICU\n", + "\n", + "\n", + "\n", + "s4->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v21\n", + "IYU * rAdmNICU\n", + "\n", + "\n", + "\n", + "s4->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "IYN\n", + "\n", + "\n", + "\n", + "v7\n", + "IYN * rRecovery\n", + "\n", + "\n", + "\n", + "s5->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v8\n", + "R * rw\n", + "\n", + "\n", + "\n", + "s6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7\n", + "\n", + "VP\n", + "\n", + "\n", + "\n", + "v9\n", + "VP * eP_complement\n", + "\n", + "\n", + "\n", + "s7->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "(VP * eP_complement) * λ\n", + "\n", + "\n", + "\n", + "s7->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v14\n", + "VP * rw\n", + "\n", + "\n", + "\n", + "s7->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v15\n", + "VP * rv\n", + "\n", + "\n", + "\n", + "s7->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8\n", + "\n", + "VF\n", + "\n", + "\n", + "\n", + "v10\n", + "VF * eF_complement\n", + "\n", + "\n", + "\n", + "s8->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v12\n", + "(VF * eF_complement) * λ\n", + "\n", + "\n", + "\n", + "s8->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v16\n", + "VF * rw\n", + "\n", + "\n", + "\n", + "s8->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9\n", + "\n", + "IA2\n", + "\n", + "\n", + "\n", + "v18\n", + "IA2 * rDevelopIA2\n", + "\n", + "\n", + "\n", + "s9->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10\n", + "\n", + "IA3\n", + "\n", + "\n", + "\n", + "v19\n", + "IA3 * rRecoveryIA3\n", + "\n", + "\n", + "\n", + "s10->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11\n", + "\n", + "HICU\n", + "\n", + "\n", + "\n", + "v22\n", + "HICU * rOutICU\n", + "\n", + "\n", + "\n", + "s11->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v24\n", + "HICU * rDeathICU\n", + "\n", + "\n", + "\n", + "s11->v24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->v24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12\n", + "\n", + "HNICU\n", + "\n", + "\n", + "\n", + "v23\n", + "HNICU * rrH\n", + "\n", + "\n", + "\n", + "s12->v23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12->v23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v25\n", + "HNICU * rDeathNICU\n", + "\n", + "\n", + "\n", + "s12->v25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12->v25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s13\n", + "\n", + "D\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v1\n", + "β * NIC\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rLatent\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rIncubation\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rDevelop\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rRecovery\n", + "\n", + "\n", + "\n", + "p5->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "rv\n", + "\n", + "\n", + "\n", + "p7->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p8->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "λ\n", + "\n", + "\n", + "\n", + "p9->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10\n", + "\n", + "eP_complement\n", + "\n", + "\n", + "\n", + "p10->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p11\n", + "\n", + "eF_complement\n", + "\n", + "\n", + "\n", + "p11->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p12\n", + "\n", + "rIncubationIA\n", + "\n", + "\n", + "\n", + "p12->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p13\n", + "\n", + "rDevelopIA2\n", + "\n", + "\n", + "\n", + "p13->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p14\n", + "\n", + "rRecoveryIA3\n", + "\n", + "\n", + "\n", + "p14->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p15\n", + "\n", + "rAdmICU\n", + "\n", + "\n", + "\n", + "p15->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p16\n", + "\n", + "rAdmNICU\n", + "\n", + "\n", + "\n", + "p16->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p17\n", + "\n", + "rOutICU\n", + "\n", + "\n", + "\n", + "p17->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p18\n", + "\n", + "rrH\n", + "\n", + "\n", + "\n", + "p18->v23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p19\n", + "\n", + "rDeathICU\n", + "\n", + "\n", + "\n", + "p19->v24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p20\n", + "\n", + "rDeathNICU\n", + "\n", + "\n", + "\n", + "p20->v25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(β * NIC) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->s2\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidence\n", + "\n", + "\n", + "\n", + "v4->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewInfectious\n", + "\n", + "\n", + "\n", + "v5->s4\n", + "\n", + "\n", + "\n", + "\n", + "fBecomingSymptomatic\n", + "\n", + "\n", + "\n", + "v6->s5\n", + "\n", + "\n", + "\n", + "\n", + "fSymptomicsNotDevelopingComplications\n", + "\n", + "\n", + "\n", + "v7->s6\n", + "\n", + "\n", + "\n", + "\n", + "fNewRecovery\n", + "\n", + "\n", + "\n", + "v8->s1\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityR\n", + "\n", + "\n", + "\n", + "v9->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11->s2\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVP\n", + "\n", + "\n", + "\n", + "v12->s2\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVF\n", + "\n", + "\n", + "\n", + "v13->s7\n", + "\n", + "\n", + "\n", + "\n", + "fFirstdoseVaccine\n", + "\n", + "\n", + "\n", + "v14->s1\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityVP\n", + "\n", + "\n", + "\n", + "v15->s8\n", + "\n", + "\n", + "\n", + "\n", + "fSeconddoseVaccine\n", + "\n", + "\n", + "\n", + "v16->s7\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityVF\n", + "\n", + "\n", + "\n", + "v17->s9\n", + "\n", + "\n", + "\n", + "\n", + "fDevelopmentOfPersistentAsymptomaticity\n", + "\n", + "\n", + "\n", + "v18->s10\n", + "\n", + "\n", + "\n", + "\n", + "fProgressionIA2_IA3\n", + "\n", + "\n", + "\n", + "v19->s6\n", + "\n", + "\n", + "\n", + "\n", + "fNewrecoveryIA3\n", + "\n", + "\n", + "\n", + "v20->s11\n", + "\n", + "\n", + "\n", + "\n", + "f_HICUAdmission\n", + "\n", + "\n", + "\n", + "v21->s12\n", + "\n", + "\n", + "\n", + "\n", + "f_HNICUAdmission\n", + "\n", + "\n", + "\n", + "v22->s12\n", + "\n", + "\n", + "\n", + "\n", + "f_OutICU\n", + "\n", + "\n", + "\n", + "v23->s6\n", + "\n", + "\n", + "\n", + "\n", + "f_RecoveryH\n", + "\n", + "\n", + "\n", + "v24->s13\n", + "\n", + "\n", + "\n", + "\n", + "f_NewDeathsHICU\n", + "\n", + "\n", + "\n", + "v25->s13\n", + "\n", + "\n", + "\n", + "\n", + "f_NewDeathsHNICU\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "VP\n", + "\n", + "\n", + "\n", + "v3\n", + "VP * eP_complement\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "(VP * eP_complement) * λ\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "VF\n", + "\n", + "\n", + "\n", + "v4\n", + "VF * eF_complement\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "(VF * eF_complement) * λ\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "eP_complement\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "eF_complement\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "λ\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v1\n", + "β * NIC\n", + "\n", + "\n", + "\n", + "p4->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(β * NIC) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVP\n", + "\n", + "\n", + "\n", + "v6->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVF\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "VP\n", + "\n", + "\n", + "\n", + "v3\n", + "VP * eP_complement\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "(*)(VP * eP_complement)\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "VF\n", + "\n", + "\n", + "\n", + "v4\n", + "VF * eF_complement\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "(*)(VF * eF_complement)\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "eP_complement\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "eF_complement\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v1\n", + "β * NIC\n", + "\n", + "\n", + "\n", + "p3->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(β * NIC) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVP\n", + "\n", + "\n", + "\n", + "v6->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVF\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "VP\n", + "\n", + "\n", + "\n", + "v3\n", + "VP * eP_complement\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "(VP * eP_complement) * ((β * NIC) / N)\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "VF\n", + "\n", + "\n", + "\n", + "v4\n", + "VF * eF_complement\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "(VF * eF_complement) * ((β * NIC) / N)\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "eP_complement\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "eF_complement\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v1\n", + "β * NIC\n", + "\n", + "\n", + "\n", + "p3->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(β * NIC) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVP\n", + "\n", + "\n", + "\n", + "v6->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVF\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "VP\n", + "\n", + "\n", + "\n", + "v3\n", + "VP * eP_complement\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "(VP * eP_complement) * ((β * NIC) / N)\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v14\n", + "VP * rw\n", + "\n", + "\n", + "\n", + "s1->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v15\n", + "VP * rv\n", + "\n", + "\n", + "\n", + "s1->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "VF\n", + "\n", + "\n", + "\n", + "v4\n", + "VF * eF_complement\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "(VF * eF_complement) * ((β * NIC) / N)\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v16\n", + "VF * rw\n", + "\n", + "\n", + "\n", + "s2->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "v8\n", + "E * rLatent\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v7\n", + "((β * NIC) / N) * S\n", + "\n", + "\n", + "\n", + "s4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v13\n", + "S * rv\n", + "\n", + "\n", + "\n", + "s4->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "IA\n", + "\n", + "\n", + "\n", + "v9\n", + "IA * rIncubation\n", + "\n", + "\n", + "\n", + "s5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v17\n", + "IA * rIncubationIA\n", + "\n", + "\n", + "\n", + "s5->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NIC\n", + "\n", + "\n", + "\n", + "s5->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv3\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s5->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "IYU\n", + "\n", + "\n", + "\n", + "v10\n", + "IYU * rDevelop\n", + "\n", + "\n", + "\n", + "s6->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v20\n", + "IYU * rAdmICU\n", + "\n", + "\n", + "\n", + "s6->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v21\n", + "IYU * rAdmNICU\n", + "\n", + "\n", + "\n", + "s6->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7\n", + "\n", + "IYN\n", + "\n", + "\n", + "\n", + "v11\n", + "IYN * rRecovery\n", + "\n", + "\n", + "\n", + "s7->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v12\n", + "R * rw\n", + "\n", + "\n", + "\n", + "s8->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9\n", + "\n", + "IA2\n", + "\n", + "\n", + "\n", + "v18\n", + "IA2 * rDevelopIA2\n", + "\n", + "\n", + "\n", + "s9->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10\n", + "\n", + "IA3\n", + "\n", + "\n", + "\n", + "v19\n", + "IA3 * rRecoveryIA3\n", + "\n", + "\n", + "\n", + "s10->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11\n", + "\n", + "HICU\n", + "\n", + "\n", + "\n", + "v22\n", + "HICU * rOutICU\n", + "\n", + "\n", + "\n", + "s11->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v24\n", + "HICU * rDeathICU\n", + "\n", + "\n", + "\n", + "s11->v24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->v24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12\n", + "\n", + "HNICU\n", + "\n", + "\n", + "\n", + "v23\n", + "HNICU * rrH\n", + "\n", + "\n", + "\n", + "s12->v23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12->v23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v25\n", + "HNICU * rDeathNICU\n", + "\n", + "\n", + "\n", + "s12->v25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12->v25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s12->sv3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s13\n", + "\n", + "D\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "eP_complement\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "eF_complement\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v1\n", + "β * NIC\n", + "\n", + "\n", + "\n", + "p3->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rLatent\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rIncubation\n", + "\n", + "\n", + "\n", + "p5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rDevelop\n", + "\n", + "\n", + "\n", + "p6->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "rRecovery\n", + "\n", + "\n", + "\n", + "p7->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p8->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "rv\n", + "\n", + "\n", + "\n", + "p9->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p10->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p11\n", + "\n", + "rIncubationIA\n", + "\n", + "\n", + "\n", + "p11->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p12\n", + "\n", + "rDevelopIA2\n", + "\n", + "\n", + "\n", + "p12->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p13\n", + "\n", + "rRecoveryIA3\n", + "\n", + "\n", + "\n", + "p13->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p14\n", + "\n", + "rAdmICU\n", + "\n", + "\n", + "\n", + "p14->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p15\n", + "\n", + "rAdmNICU\n", + "\n", + "\n", + "\n", + "p15->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p16\n", + "\n", + "rOutICU\n", + "\n", + "\n", + "\n", + "p16->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p17\n", + "\n", + "rrH\n", + "\n", + "\n", + "\n", + "p17->v23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p18\n", + "\n", + "rDeathICU\n", + "\n", + "\n", + "\n", + "p18->v24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p19\n", + "\n", + "rDeathNICU\n", + "\n", + "\n", + "\n", + "p19->v25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(β * NIC) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVP\n", + "\n", + "\n", + "\n", + "v6->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVF\n", + "\n", + "\n", + "\n", + "v7->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidence\n", + "\n", + "\n", + "\n", + "v8->s5\n", + "\n", + "\n", + "\n", + "\n", + "fNewInfectious\n", + "\n", + "\n", + "\n", + "v9->s6\n", + "\n", + "\n", + "\n", + "\n", + "fBecomingSymptomatic\n", + "\n", + "\n", + "\n", + "v10->s7\n", + "\n", + "\n", + "\n", + "\n", + "fSymptomicsNotDevelopingComplications\n", + "\n", + "\n", + "\n", + "v11->s8\n", + "\n", + "\n", + "\n", + "\n", + "fNewRecovery\n", + "\n", + "\n", + "\n", + "v12->s4\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityR\n", + "\n", + "\n", + "\n", + "v13->s1\n", + "\n", + "\n", + "\n", + "\n", + "fFirstdoseVaccine\n", + "\n", + "\n", + "\n", + "v14->s4\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityVP\n", + "\n", + "\n", + "\n", + "v15->s2\n", + "\n", + "\n", + "\n", + "\n", + "fSeconddoseVaccine\n", + "\n", + "\n", + "\n", + "v16->s1\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityVF\n", + "\n", + "\n", + "\n", + "v17->s9\n", + "\n", + "\n", + "\n", + "\n", + "fDevelopmentOfPersistentAsymptomaticity\n", + "\n", + "\n", + "\n", + "v18->s10\n", + "\n", + "\n", + "\n", + "\n", + "fProgressionIA2_IA3\n", + "\n", + "\n", + "\n", + "v19->s8\n", + "\n", + "\n", + "\n", + "\n", + "fNewrecoveryIA3\n", + "\n", + "\n", + "\n", + "v20->s11\n", + "\n", + "\n", + "\n", + "\n", + "f_HICUAdmission\n", + "\n", + "\n", + "\n", + "v21->s12\n", + "\n", + "\n", + "\n", + "\n", + "f_HNICUAdmission\n", + "\n", + "\n", + "\n", + "v22->s12\n", + "\n", + "\n", + "\n", + "\n", + "f_OutICU\n", + "\n", + "\n", + "\n", + "v23->s8\n", + "\n", + "\n", + "\n", + "\n", + "f_RecoveryH\n", + "\n", + "\n", + "\n", + "v24->s13\n", + "\n", + "\n", + "\n", + "\n", + "f_NewDeathsHICU\n", + "\n", + "\n", + "\n", + "v25->s13\n", + "\n", + "\n", + "\n", + "\n", + "f_NewDeathsHNICU\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1VP
2VF
3E
4S
5IA
6IYU
7IYN
8R
9IA2
10IA3
11HICU
12HNICU
13D
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NIC
3NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
441
551
652
753
861
962
1063
1171
1272
1373
1481
1591
1692
1793
18101
19102
20103
21111
22113
23121
24123
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
15fNewIncidenceVP
26fNewIncidenceVF
37fNewIncidence
48fNewInfectious
59fBecomingSymptomatic
610fSymptomicsNotDevelopingComplications
711fNewRecovery
812fWaningImmunityR
913fFirstdoseVaccine
1014fWaningImmunityVP
1115fSeconddoseVaccine
1216fWaningImmunityVF
1317fDevelopmentOfPersistentAsymptomaticity
1418fProgressionIA2_IA3
1519fNewrecoveryIA3
1620f_HICUAdmission
1721f_HNICUAdmission
1822f_OutICU
1923f_RecoveryH
2024f_NewDeathsHICU
2125f_NewDeathsHNICU
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
113
223
384
433
545
656
767
878
9104
1091
11121
12112
13139
141410
15158
161611
171712
181812
19198
202013
212113
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
222
334
443
555
666
777
888
994
10101
11111
12122
13135
14149
151510
16166
17176
181811
192011
201912
212112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_NewIncidence₁*
2v_NewIncidence₂/
3v_NewIncidenceVP*
4v_NewIncidenceVF*
5v_infVP*
6v_infVF*
7v_NewIncidence₃*
8v_NewInfectious*
9v_BecomingSymptomatic*
10v_SymptomicsNotDevelopingComplications*
11v_NewRecovery*
12v_WaningImmunityR*
13##v_fFirstdoseVaccine#292*
14##v_fWaningImmunityVP#293*
15##v_fSeconddoseVaccine#294*
16##v_fWaningImmunityVF#295*
17##v_fDevelopmentOfPersistentAsymptomaticity#296*
18##v_fProgressionIA2_IA3#297*
19##v_fNewrecoveryIA3#298*
20v_HICUAdmission*
21v_HNICUAdmission*
22v_OutICU*
23v_RecoveryH*
24v_NewDeathsHICU*
25v_NewDeathsHNICU*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1131
2241
3472
4381
5591
66101
77111
88121
94131
101141
111151
122161
135171
149181
1510191
166201
176211
1811221
1912231
2011241
2112251
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1212
2122
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1eP_complement
2eF_complement
3β
4rLatent
5rIncubation
6rDevelop
7rRecovery
8rw
9rv
10rw
11rIncubationIA
12rDevelopIA2
13rRecoveryIA3
14rAdmICU
15rAdmNICU
16rOutICU
17rrH
18rDeathICU
19rDeathNICU
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2351
3252
4461
5262
6271
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1311
2132
3242
4482
5592
66102
77112
88122
99132
1010142
119152
1210162
1311172
1412182
1513192
1614202
1715212
1816222
1917232
2018242
2119252
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "VP\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "VF\n", + "\n", + "\n", + "\n", + "s1->s2\n", + "\n", + "\n", + "\n", + "\n", + "fSeconddoseVaccine\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "s1->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVP\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "s1->s4\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityVP\n", + "\n", + "\n", + "\n", + "s2->s1\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityVF\n", + "\n", + "\n", + "\n", + "s2->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidenceVF\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "IA\n", + "\n", + "\n", + "\n", + "s3->s5\n", + "\n", + "\n", + "\n", + "\n", + "fNewInfectious\n", + "\n", + "\n", + "\n", + "s4->s1\n", + "\n", + "\n", + "\n", + "\n", + "fFirstdoseVaccine\n", + "\n", + "\n", + "\n", + "s4->s3\n", + "\n", + "\n", + "\n", + "\n", + "fNewIncidence\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "IYU\n", + "\n", + "\n", + "\n", + "s5->s6\n", + "\n", + "\n", + "\n", + "\n", + "fBecomingSymptomatic\n", + "\n", + "\n", + "\n", + "s9\n", + "\n", + "IA2\n", + "\n", + "\n", + "\n", + "s5->s9\n", + "\n", + "\n", + "\n", + "\n", + "fDevelopmentOfPersistentAsymptomaticity\n", + "\n", + "\n", + "\n", + "s7\n", + "\n", + "IYN\n", + "\n", + "\n", + "\n", + "s6->s7\n", + "\n", + "\n", + "\n", + "\n", + "fSymptomicsNotDevelopingComplications\n", + "\n", + "\n", + "\n", + "s11\n", + "\n", + "HICU\n", + "\n", + "\n", + "\n", + "s6->s11\n", + "\n", + "\n", + "\n", + "\n", + "f_HICUAdmission\n", + "\n", + "\n", + "\n", + "s12\n", + "\n", + "HNICU\n", + "\n", + "\n", + "\n", + "s6->s12\n", + "\n", + "\n", + "\n", + "\n", + "f_HNICUAdmission\n", + "\n", + "\n", + "\n", + "s8\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "s7->s8\n", + "\n", + "\n", + "\n", + "\n", + "fNewRecovery\n", + "\n", + "\n", + "\n", + "s8->s4\n", + "\n", + "\n", + "\n", + "\n", + "fWaningImmunityR\n", + "\n", + "\n", + "\n", + "s10\n", + "\n", + "IA3\n", + "\n", + "\n", + "\n", + "s9->s10\n", + "\n", + "\n", + "\n", + "\n", + "fProgressionIA2_IA3\n", + "\n", + "\n", + "\n", + "s10->s8\n", + "\n", + "\n", + "\n", + "\n", + "fNewrecoveryIA3\n", + "\n", + "\n", + "\n", + "s11->s12\n", + "\n", + "\n", + "\n", + "\n", + "f_OutICU\n", + "\n", + "\n", + "\n", + "s13\n", + "\n", + "D\n", + "\n", + "\n", + "\n", + "s11->s13\n", + "\n", + "\n", + "\n", + "\n", + "f_NewDeathsHICU\n", + "\n", + "\n", + "\n", + "s12->s8\n", + "\n", + "\n", + "\n", + "\n", + "f_RecoveryH\n", + "\n", + "\n", + "\n", + "s12->s13\n", + "\n", + "\n", + "\n", + "\n", + "f_NewDeathsHNICU\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "eP_complement\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "eF_complement\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rLatent\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rIncubation\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rDevelop\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "rRecovery\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "rv\n", + "\n", + "\n", + "\n", + "p10\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p11\n", + "\n", + "rIncubationIA\n", + "\n", + "\n", + "\n", + "p12\n", + "\n", + "rDevelopIA2\n", + "\n", + "\n", + "\n", + "p13\n", + "\n", + "rRecoveryIA3\n", + "\n", + "\n", + "\n", + "p14\n", + "\n", + "rAdmICU\n", + "\n", + "\n", + "\n", + "p15\n", + "\n", + "rAdmNICU\n", + "\n", + "\n", + "\n", + "p16\n", + "\n", + "rOutICU\n", + "\n", + "\n", + "\n", + "p17\n", + "\n", + "rrH\n", + "\n", + "\n", + "\n", + "p18\n", + "\n", + "rDeathICU\n", + "\n", + "\n", + "\n", + "p19\n", + "\n", + "rDeathNICU\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", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "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 new file mode 100644 index 00000000..bb242e7e --- /dev/null +++ b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/SEIR_full_model_measles_chickenpox-checkpoint.ipynb @@ -0,0 +1,1645 @@ +{ + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1S
2E
3I
4R
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
441
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11fbirth
24fincid
35fdeathS
46finf
57fdeathE
68frec
79fdeathI
810fdeathR
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
222
343
464
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
121
231
342
452
563
673
784
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1##v_fbirth#292*
2##v_fincid#293*
3##v_fincid#294*
4##v_fincid#295/
5##v_fdeathS#296*
6##v_finf#297/
7##v_fdeathE#298*
8##v_frec#299/
9##v_fdeathI#300*
10##v_fdeathR#301*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1122
2332
3151
4261
5271
6381
7391
84101
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
2142
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2β
3tlatent
4trecovery
5δ
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1231
2341
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1111
2221
3552
4362
5572
6482
7592
85102
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v2\n", + "β * S\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "((β * S) * I) / N\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "S * δ\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "E\n", + "\n", + "\n", + "\n", + "v6\n", + "E / tlatent\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "E * δ\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v3\n", + "(β * S) * I\n", + "\n", + "\n", + "\n", + "s3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "I / trecovery\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "I * δ\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v10\n", + "R * δ\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v1\n", + "μ * N\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "tlatent\n", + "\n", + "\n", + "\n", + "p3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "trecovery\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "δ\n", + "\n", + "\n", + "\n", + "p5->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "fbirth\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "fincid\n", + "\n", + "\n", + "\n", + "v5->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fdeathS\n", + "\n", + "\n", + "\n", + "v6->s3\n", + "\n", + "\n", + "\n", + "\n", + "finf\n", + "\n", + "\n", + "\n", + "v7->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fdeathE\n", + "\n", + "\n", + "\n", + "v8->s4\n", + "\n", + "\n", + "\n", + "\n", + "frec\n", + "\n", + "\n", + "\n", + "v9->fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "fdeathI\n", + "\n", + "\n", + "\n", + "v10->fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "fdeathR\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v4\n", + "\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", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "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/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PfHEE5mZmStWrBg7dmzwCp9//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", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "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 new file mode 100644 index 00000000..7ed4aa67 --- /dev/null +++ b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/composed_open_population_SIRV_model-checkpoint.ipynb @@ -0,0 +1,5293 @@ +{ + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1S
2I
3R
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_birth
23f_inf
35f_rec
46f_deathS
57f_deathI
68f_deathR
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
222
333
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
121
241
332
452
563
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_inf₁/
2v_inf₂*
3v_inf₃*
4##v_f_birth#292*
5##v_f_rec#293*
6##v_f_deathS#294*
7##v_f_deathI#295*
8##v_f_deathR#296*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1211
2132
3252
4161
5271
6381
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
2142
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rbirth
2cbeta
3rrecovery
4rdeath
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2231
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1222
2141
3351
4462
5472
6482
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v3\n", + "((I / N) * cbeta) * S\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "S * rdeath\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v1\n", + "I / N\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "rrecovery * I\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "I * rdeath\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v8\n", + "R * rdeath\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rbirth\n", + "\n", + "\n", + "\n", + "v4\n", + "rbirth * N\n", + "\n", + "\n", + "\n", + "p1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "cbeta\n", + "\n", + "\n", + "\n", + "v2\n", + "(I / N) * cbeta\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rrecovery\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rdeath\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_inf\n", + "\n", + "\n", + "\n", + "v4->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_birth\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_rec\n", + "\n", + "\n", + "\n", + "v6->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathS\n", + "\n", + "\n", + "\n", + "v7->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathI\n", + "\n", + "\n", + "\n", + "v8->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathR\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v4\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1S
2V
3I
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
13f_vacc
24f_deathV
32f_infV
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
112
233
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
222
332
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_vacV*
2v_infV*
3##v_f_vacc#297*
4##v_f_deathV#298*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1212
2131
3241
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rvaccine
2rdeath
3lambda
4evaccine_complement
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1411
2322
3132
4242
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v3\n", + "S * rvaccine\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "V\n", + "\n", + "\n", + "\n", + "v1\n", + "evaccine_complement * V\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(evaccine_complement * V) * lambda\n", + "\n", + "\n", + "\n", + "s2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "V * rdeath\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rvaccine\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rdeath\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "lambda\n", + "\n", + "\n", + "\n", + "p3->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "evaccine_complement\n", + "\n", + "\n", + "\n", + "p4->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_infV\n", + "\n", + "\n", + "\n", + "v3->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_vacc\n", + "\n", + "\n", + "\n", + "v4->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathV\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "seir\n", + "\n", + "\n", + "\n", + "\n", + "n5\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "n1--n5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n6\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "n1--n6\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "svi\n", + "\n", + "\n", + "\n", + "n2--n5\n", + "\n", + "\n", + "\n", + "\n", + "n2--n6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n3--n5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4--n6\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1S
2I
3R
4V
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
441
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_birth
23f_inf
35f_rec
46f_deathS
57f_deathI
68f_deathR
711f_vacc
812f_deathV
910f_infV
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
222
333
474
592
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
121
241
332
452
563
671
784
894
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_inf₁/
2v_inf₂*
3v_inf₃*
4##v_f_birth#292*
5##v_f_rec#293*
6##v_f_deathS#294*
7##v_f_deathI#295*
8##v_f_deathR#296*
9v_vacV*
10v_infV*
11##v_f_vacc#297*
12##v_f_deathV#298*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1211
2132
3252
4161
5271
6381
7492
81111
94121
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
2142
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rbirth
2cbeta
3rrecovery
4rdeath
5rvaccine
6rdeath
7lambda
8evaccine_complement
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2231
39101
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1222
2141
3351
4462
5472
6482
7891
87102
95112
106122
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v3\n", + "((I / N) * cbeta) * S\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "S * rdeath\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "S * rvaccine\n", + "\n", + "\n", + "\n", + "s1->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v1\n", + "I / N\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "rrecovery * I\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "I * rdeath\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v8\n", + "R * rdeath\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "V\n", + "\n", + "\n", + "\n", + "v9\n", + "evaccine_complement * V\n", + "\n", + "\n", + "\n", + "s4->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10\n", + "(evaccine_complement * V) * lambda\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v12\n", + "V * rdeath\n", + "\n", + "\n", + "\n", + "s4->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rbirth\n", + "\n", + "\n", + "\n", + "v4\n", + "rbirth * N\n", + "\n", + "\n", + "\n", + "p1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "cbeta\n", + "\n", + "\n", + "\n", + "v2\n", + "(I / N) * cbeta\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rrecovery\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rdeath\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rvaccine\n", + "\n", + "\n", + "\n", + "p5->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rdeath\n", + "\n", + "\n", + "\n", + "p6->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "lambda\n", + "\n", + "\n", + "\n", + "p7->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "evaccine_complement\n", + "\n", + "\n", + "\n", + "p8->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_inf\n", + "\n", + "\n", + "\n", + "v4->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_birth\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_rec\n", + "\n", + "\n", + "\n", + "v6->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathS\n", + "\n", + "\n", + "\n", + "v7->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathI\n", + "\n", + "\n", + "\n", + "v8->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathR\n", + "\n", + "\n", + "\n", + "v9->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_infV\n", + "\n", + "\n", + "\n", + "v11->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_vacc\n", + "\n", + "\n", + "\n", + "v12->fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathV\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v4\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1V
2I
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_infV
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_inf₁/
2v_inf₂*
3v_vacV*
4v_infV*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1211
2132
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1lambda
2cbeta
3evaccine_complement
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2341
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1222
2331
3142
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "V\n", + "\n", + "\n", + "\n", + "v3\n", + "evaccine_complement * V\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "(evaccine_complement * V) * lambda\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v1\n", + "I / N\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "lambda\n", + "\n", + "\n", + "\n", + "p1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "cbeta\n", + "\n", + "\n", + "\n", + "v2\n", + "(I / N) * cbeta\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "evaccine_complement\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_infV\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1V
2I
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_infV
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_inf₁/
2v_inf₂*
3v_vacV*
4v_infV*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1211
2132
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1cbeta
2evaccine_complement
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2341
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1122
2231
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "V\n", + "\n", + "\n", + "\n", + "v3\n", + "evaccine_complement * V\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "(*)(evaccine_complement * V)\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v1\n", + "I / N\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "cbeta\n", + "\n", + "\n", + "\n", + "v2\n", + "(I / N) * cbeta\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "evaccine_complement\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_infV\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1V
2I
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_infV
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_inf₁/
2v_inf₂*
3v_vacV*
4v_infV*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1211
2132
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1cbeta
2evaccine_complement
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2341
3242
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1122
2231
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "V\n", + "\n", + "\n", + "\n", + "v3\n", + "evaccine_complement * V\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "(evaccine_complement * V) * ((I / N) * cbeta)\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v1\n", + "I / N\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "cbeta\n", + "\n", + "\n", + "\n", + "v2\n", + "(I / N) * cbeta\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "evaccine_complement\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_infV\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "V\n", + "\n", + "\n", + "\n", + "v3\n", + "evaccine_complement * V\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "(evaccine_complement * V) * ((I / N) * cbeta)\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v12\n", + "V * rdeath\n", + "\n", + "\n", + "\n", + "s1->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v1\n", + "I / N\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "rrecovery * I\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "I * rdeath\n", + "\n", + "\n", + "\n", + "s2->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v5\n", + "((I / N) * cbeta) * S\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "S * rdeath\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "S * rvaccine\n", + "\n", + "\n", + "\n", + "s3->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v10\n", + "R * rdeath\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "cbeta\n", + "\n", + "\n", + "\n", + "v2\n", + "(I / N) * cbeta\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "evaccine_complement\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rbirth\n", + "\n", + "\n", + "\n", + "v6\n", + "rbirth * N\n", + "\n", + "\n", + "\n", + "p3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rrecovery\n", + "\n", + "\n", + "\n", + "p4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rdeath\n", + "\n", + "\n", + "\n", + "p5->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rvaccine\n", + "\n", + "\n", + "\n", + "p6->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "rdeath\n", + "\n", + "\n", + "\n", + "p7->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2u\n", + "\n", + "\n", + "\n", + "\n", + "fs_2u->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_9d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_infV\n", + "\n", + "\n", + "\n", + "v5->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_inf\n", + "\n", + "\n", + "\n", + "v6->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_birth\n", + "\n", + "\n", + "\n", + "v7->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_rec\n", + "\n", + "\n", + "\n", + "v8->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathS\n", + "\n", + "\n", + "\n", + "v9->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathI\n", + "\n", + "\n", + "\n", + "v10->fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathR\n", + "\n", + "\n", + "\n", + "v11->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_vacc\n", + "\n", + "\n", + "\n", + "v12->fs_9d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathV\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v6\n", + "\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", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "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 new file mode 100644 index 00000000..48a236f4 --- /dev/null +++ b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/curable_sexually_transmitted_diseases_model-checkpoint.ipynb @@ -0,0 +1,6394 @@ +{ + "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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "v2\n", + "X * μ\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v1\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_births\n", + "\n", + "\n", + "\n", + "v2->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathX\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "v3\n", + "((cβ * NI) / N) * X\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "(((cβ * NI) / N) * X) * ϕ_complement\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "A\n", + "\n", + "\n", + "\n", + "v5\n", + "A * μ_temp1\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "A * σ′\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s2->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ_temp1\n", + "\n", + "\n", + "\n", + "p1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "ϕ_complement\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "σ′\n", + "\n", + "\n", + "\n", + "p3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1\n", + "cβ * NI\n", + "\n", + "\n", + "\n", + "p4->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(cβ * NI) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousA\n", + "\n", + "\n", + "\n", + "v5->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathA\n", + "\n", + "\n", + "\n", + "v6->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_recoveryA\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "v1\n", + "ϕ * λ\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "Y\n", + "\n", + "\n", + "\n", + "v2\n", + "Y * μ_temp2\n", + "\n", + "\n", + "\n", + "s2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3\n", + "Y * σ\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s2->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ_temp2\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "ϕ\n", + "\n", + "\n", + "\n", + "p2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "σ\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "λ\n", + "\n", + "\n", + "\n", + "p4->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousY\n", + "\n", + "\n", + "\n", + "v2->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathY\n", + "\n", + "\n", + "\n", + "v3->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_recoveryY\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "\n", + "n6\n", + "\n", + "XN\n", + "\n", + "\n", + "\n", + "n1--n6\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "XA\n", + "\n", + "\n", + "\n", + "n2--n6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n7\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "n2--n7\n", + "\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "XY\n", + "\n", + "\n", + "\n", + "n3--n6\n", + "\n", + "\n", + "\n", + "\n", + "n3--n7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4--n6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n5--n7\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "v2\n", + "X * μ\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "((cβ * NI) / N) * X\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "(((cβ * NI) / N) * X) * ϕ_complement\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "ϕ * λ\n", + "\n", + "\n", + "\n", + "s1->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "A\n", + "\n", + "\n", + "\n", + "v7\n", + "A * μ_temp1\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "A * σ′\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s2->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Y\n", + "\n", + "\n", + "\n", + "v10\n", + "Y * μ_temp2\n", + "\n", + "\n", + "\n", + "s3->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "Y * σ\n", + "\n", + "\n", + "\n", + "s3->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v1\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "μ_temp1\n", + "\n", + "\n", + "\n", + "p2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "ϕ_complement\n", + "\n", + "\n", + "\n", + "p3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "σ′\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3\n", + "cβ * NI\n", + "\n", + "\n", + "\n", + "p5->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "μ_temp2\n", + "\n", + "\n", + "\n", + "p6->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "ϕ\n", + "\n", + "\n", + "\n", + "p7->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "σ\n", + "\n", + "\n", + "\n", + "p8->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "λ\n", + "\n", + "\n", + "\n", + "p9->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_births\n", + "\n", + "\n", + "\n", + "v2->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathX\n", + "\n", + "\n", + "\n", + "v4\n", + "(cβ * NI) / N\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousA\n", + "\n", + "\n", + "\n", + "v7->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathA\n", + "\n", + "\n", + "\n", + "v8->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_recoveryA\n", + "\n", + "\n", + "\n", + "v9->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousY\n", + "\n", + "\n", + "\n", + "v10->fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathY\n", + "\n", + "\n", + "\n", + "v11->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_recoveryY\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v3\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1X
2A
3Y
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
322
431
532
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_births
22f_deathX
36f_newInfectiousA
47f_deathA
58f_recoveryA
69f_newInfectiousY
710f_deathY
811f_recoveryY
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
251
332
481
563
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
121
231
342
452
561
673
783
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_births*
2v_deathX*
3v_inf₁*
4v_inf₂/
5v_inf₃*
6v_inf₄*
7v_deathA*
8##v_f_recoveryA#292*
9v_inf₄*
10v_deathY*
11##v_f_recoveryY#293*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1121
2152
3271
4281
53101
63111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1111
2232
3142
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2μ_temp1
3ϕ_complement
4σ′
5
6μ_temp2
7ϕ
8σ
9λ
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1341
2451
3561
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1112
2122
3531
4362
5272
6482
7791
8992
96102
108112
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1X
2Y
3A
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
322
431
532
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_newInfectiousY
26f_deathY
35f_deathA
47f_births
58f_deathX
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
141
212
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
251
322
433
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_inf₁*
2v_inf₂/
3v_inf₃*
4v_inf₄*
5v_deathA*
6v_deathY*
7v_births*
8v_deathX*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1132
2351
3261
4181
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1212
2122
3171
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2μ_temp1
3μ_temp2
4λ
5
6ϕ
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2231
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1511
2641
3442
4252
5362
6172
7182
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "v3\n", + "((cβ * NI) / N) * X\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "ϕ * λ\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "X * μ\n", + "\n", + "\n", + "\n", + "s1->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "Y\n", + "\n", + "\n", + "\n", + "v6\n", + "Y * μ_temp2\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s2->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "A\n", + "\n", + "\n", + "\n", + "v5\n", + "A * μ_temp1\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v7\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "μ_temp1\n", + "\n", + "\n", + "\n", + "p2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "μ_temp2\n", + "\n", + "\n", + "\n", + "p3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "λ\n", + "\n", + "\n", + "\n", + "p4->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1\n", + "cβ * NI\n", + "\n", + "\n", + "\n", + "p5->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "ϕ\n", + "\n", + "\n", + "\n", + "p6->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_4u\n", + "\n", + "\n", + "\n", + "\n", + "fs_4u->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(cβ * NI) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousY\n", + "\n", + "\n", + "\n", + "v5->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathA\n", + "\n", + "\n", + "\n", + "v6->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathY\n", + "\n", + "\n", + "\n", + "v7->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_births\n", + "\n", + "\n", + "\n", + "v8->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathX\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1A
2X
3Y
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
212
321
431
532
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_newInfectiousY
26f_deathY
35f_deathA
47f_births
58f_deathX
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
142
213
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
131
212
352
423
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_inf₁*
2v_inf₂/
3v_inf₃*
4v_inf₄*
5v_deathA*
6v_deathY*
7v_births*
8v_deathX*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1232
2151
3361
4281
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1212
2122
3171
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2
3ϕ
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2231
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1211
2341
3172
4182
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "A\n", + "\n", + "\n", + "\n", + "v5\n", + "(*)(A)\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s1->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "v3\n", + "((cβ * NI) / N) * X\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "(*)(ϕ)\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "X * μ\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Y\n", + "\n", + "\n", + "\n", + "v6\n", + "(*)(Y)\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v7\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1\n", + "cβ * NI\n", + "\n", + "\n", + "\n", + "p2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "ϕ\n", + "\n", + "\n", + "\n", + "p3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_4u\n", + "\n", + "\n", + "\n", + "\n", + "fs_4u->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(cβ * NI) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousY\n", + "\n", + "\n", + "\n", + "v5->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathA\n", + "\n", + "\n", + "\n", + "v6->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathY\n", + "\n", + "\n", + "\n", + "v7->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_births\n", + "\n", + "\n", + "\n", + "v8->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathX\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1A
2X
3Y
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
212
321
431
532
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_newInfectiousY
26f_deathY
35f_deathA
47f_births
58f_deathX
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
142
213
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
131
212
352
423
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_inf₁*
2v_inf₂/
3v_inf₃*
4v_inf₄*
5v_deathA*
6v_deathY*
7v_births*
8v_deathX*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1232
2151
3361
4281
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1212
2122
3171
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2
3ϕ
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2231
3342
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1211
2341
3152
4162
5172
6182
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "A\n", + "\n", + "\n", + "\n", + "v5\n", + "A * μ\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s1->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "v3\n", + "((cβ * NI) / N) * X\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "ϕ * (((cβ * NI) / N) * X)\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "X * μ\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Y\n", + "\n", + "\n", + "\n", + "v6\n", + "Y * μ\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "p1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1\n", + "cβ * NI\n", + "\n", + "\n", + "\n", + "p2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "ϕ\n", + "\n", + "\n", + "\n", + "p3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_4u\n", + "\n", + "\n", + "\n", + "\n", + "fs_4u->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(cβ * NI) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousY\n", + "\n", + "\n", + "\n", + "v5->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathA\n", + "\n", + "\n", + "\n", + "v6->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathY\n", + "\n", + "\n", + "\n", + "v7->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_births\n", + "\n", + "\n", + "\n", + "v8->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathX\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1A
2X
3Y
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
2NI
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
212
321
431
532
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_newInfectiousY
26f_deathY
35f_deathA
47f_births
58f_deathX
69f_newInfectiousA
710f_recoveryA
811f_recoveryY
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
142
213
372
461
582
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
131
212
352
423
562
671
783
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_inf₁*
2v_inf₂/
3v_inf₃*
4v_inf₄*
5v_deathA*
6v_deathY*
7v_births*
8v_deathX*
9v_inf₄*
10##v_f_recoveryA#292*
11##v_f_recoveryY#293*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1232
2151
3361
4281
51101
63111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1212
2122
3171
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2
3ϕ
4ϕ_complement
5σ′
6σ
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1121
2231
3342
4391
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1211
2341
3152
4162
5172
6182
7492
85102
96112
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "A\n", + "\n", + "\n", + "\n", + "v5\n", + "A * μ\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10\n", + "A * σ′\n", + "\n", + "\n", + "\n", + "s1->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NI\n", + "\n", + "\n", + "\n", + "s1->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "v3\n", + "((cβ * NI) / N) * X\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "ϕ * (((cβ * NI) / N) * X)\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "X * μ\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "(((cβ * NI) / N) * X) * ϕ_complement\n", + "\n", + "\n", + "\n", + "s2->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Y\n", + "\n", + "\n", + "\n", + "v6\n", + "Y * μ\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "Y * σ\n", + "\n", + "\n", + "\n", + "s3->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "p1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1\n", + "cβ * NI\n", + "\n", + "\n", + "\n", + "p2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "ϕ\n", + "\n", + "\n", + "\n", + "p3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "ϕ_complement\n", + "\n", + "\n", + "\n", + "p4->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "σ′\n", + "\n", + "\n", + "\n", + "p5->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "σ\n", + "\n", + "\n", + "\n", + "p6->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_4u\n", + "\n", + "\n", + "\n", + "\n", + "fs_4u->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "(cβ * NI) / N\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousY\n", + "\n", + "\n", + "\n", + "v5->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathA\n", + "\n", + "\n", + "\n", + "v6->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathY\n", + "\n", + "\n", + "\n", + "v7->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_births\n", + "\n", + "\n", + "\n", + "v8->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathX\n", + "\n", + "\n", + "\n", + "v9->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousA\n", + "\n", + "\n", + "\n", + "v10->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_recoveryA\n", + "\n", + "\n", + "\n", + "v11->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_recoveryY\n", + "\n", + "\n", + "\n", + "sv1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "A\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "X\n", + "\n", + "\n", + "\n", + "s1->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_recoveryA\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "s1->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathA\n", + "\n", + "\n", + "\n", + "s2->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousA\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Y\n", + "\n", + "\n", + "\n", + "s2->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_newInfectiousY\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "s2->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathX\n", + "\n", + "\n", + "\n", + "s3->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_recoveryY\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "s3->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_deathY\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "ϕ\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "ϕ_complement\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "σ′\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "σ\n", + "\n", + "\n", + "\n", + "fs_4u\n", + "\n", + "\n", + "\n", + "\n", + "fs_4u->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_births\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", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "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 new file mode 100644 index 00000000..ef55a106 --- /dev/null +++ b/examples/full_fledged_schema_examples_new/composition/.ipynb_checkpoints/diabetes_model-checkpoint.ipynb @@ -0,0 +1,3299 @@ +{ + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1NormalWeight
2OverWeight
3Obese
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_DeathNormalWeight
22f_BecomingOverWeight
33f_DeathOverWeight
44f_BecomingObese
55f_DeathObese
66f_NewBorn
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
161
222
343
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
332
442
553
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1##v_f_DeathNormalWeight#292*
2##v_f_BecomingOverWeight#293*
3##v_f_DeathOverWeight#294*
4##v_f_BecomingObese#295*
5##v_f_DeathObese#296*
6##v_f_NewBorn#297*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1111
2121
3231
4241
5351
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1161
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rBirth
2rMortalityWeight
3rObese
4rOverWeight
5rMortalityobese
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1212
2422
3232
4342
5552
6162
\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\nG\n\n\n\ns1\n\nNormalWeight\n\n\n\nv1\nNormalWeight * rMortalityWeight\n\n\n\ns1->v1\n\n\n\n\n\n\ns1->v1\n\n\n\n\n\nv2\nNormalWeight * rOverWeight\n\n\n\ns1->v2\n\n\n\n\n\n\ns1->v2\n\n\n\n\n\nsv1\n\nN\n\n\n\ns1->sv1\n\n\n\n\n\ns2\n\nOverWeight\n\n\n\nv3\nOverWeight * rMortalityWeight\n\n\n\ns2->v3\n\n\n\n\n\n\ns2->v3\n\n\n\n\n\nv4\nOverWeight * rObese\n\n\n\ns2->v4\n\n\n\n\n\n\ns2->v4\n\n\n\n\n\ns2->sv1\n\n\n\n\n\ns3\n\nObese\n\n\n\nv5\nObese * rMortalityobese\n\n\n\ns3->v5\n\n\n\n\n\n\ns3->v5\n\n\n\n\n\ns3->sv1\n\n\n\n\n\np1\n\nrBirth\n\n\n\nv6\nN * rBirth\n\n\n\np1->v6\n\n\n\n\n\np2\n\nrMortalityWeight\n\n\n\np2->v1\n\n\n\n\n\np2->v3\n\n\n\n\n\np3\n\nrObese\n\n\n\np3->v4\n\n\n\n\n\np4\n\nrOverWeight\n\n\n\np4->v2\n\n\n\n\n\np5\n\nrMortalityobese\n\n\n\np5->v5\n\n\n\n\n\nfs_6u\n\n\n\n\nfs_6u->v6\n\n\n\n\n\n\nfs_1d\n\n\n\n\nfs_3d\n\n\n\n\nfs_5d\n\n\n\n\nv1->fs_1d\n\n\n\n\nf_DeathNormalWeight\n\n\n\nv2->s2\n\n\n\n\nf_BecomingOverWeight\n\n\n\nv3->fs_3d\n\n\n\n\nf_DeathOverWeight\n\n\n\nv4->s3\n\n\n\n\nf_BecomingObese\n\n\n\nv5->fs_5d\n\n\n\n\nf_DeathObese\n\n\n\nv6->s1\n\n\n\n\nf_NewBorn\n\n\n\nsv1->v6\n\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\nG\n\n\n\nn1\n\nUndx\n\n\n\n\nn15\n\nPrediabetic_U\n\n\n\nn1--n15\n\n\n\n\n\nn17\n\nDiabeticWtComp_U\n\n\n\nn1--n17\n\n\n\n\n\nn19\n\nDiabeticEarly_U\n\n\n\nn1--n19\n\n\n\n\n\nn21\n\nDiabeticLate_U\n\n\n\nn1--n21\n\n\n\n\nn2\n\nDx\n\n\n\n\nn16\n\nPrediabetic_D\n\n\n\nn2--n16\n\n\n\n\n\nn18\n\nDiabeticWtComp_D\n\n\n\nn2--n18\n\n\n\n\n\nn20\n\nDiabeticEarly_D\n\n\n\nn2--n20\n\n\n\n\n\nn22\n\nDiabeticLate_D\n\n\n\nn2--n22\n\n\n\n\nn3\n\nPrediabetic\n\n\n\nn3--n15\n\n\n\n\nn3--n16\n\n\n\n\nn4\n\nDiabeticWtComp\n\n\n\nn4--n17\n\n\n\n\nn4--n18\n\n\n\n\nn5\n\nDiabeticEarly\n\n\n\nn5--n19\n\n\n\n\nn5--n20\n\n\n\n\nn6\n\nDiabeticLate\n\n\n\nn6--n21\n\n\n\n\nn6--n22\n\n\n\n\n\nn7--n15\n\n\n\n\n\nn8--n16\n\n\n\n\n\nn9--n17\n\n\n\n\n\nn10--n18\n\n\n\n\n\nn11--n19\n\n\n\n\n\nn12--n20\n\n\n\n\n\nn13--n21\n\n\n\n\n\nn14--n22\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\nG\n\n\n\ns1\n\nPrediabetic_U\n\n\n\nv1\nPrediabetic_U * rDevelopingDiabetic_U\n\n\n\ns1->v1\n\n\n\n\n\n\ns1->v1\n\n\n\n\n\nv2\nPrediabetic_U * rMortalityPrediabetic\n\n\n\ns1->v2\n\n\n\n\n\n\ns1->v2\n\n\n\n\n\nv15\nPrediabetic_U * rPrediabetic\n\n\n\ns1->v15\n\n\n\n\n\n\ns1->v15\n\n\n\n\n\nsv1\n\nN\n\n\n\ns1->sv1\n\n\n\n\n\ns2\n\nDiabeticWtComp_U\n\n\n\nv3\nDiabeticWtComp_U * rDevelopingEarly_U\n\n\n\ns2->v3\n\n\n\n\n\n\ns2->v3\n\n\n\n\n\nv4\nDiabeticWtComp_U * rMortalityDiabeticWtComp_U\n\n\n\ns2->v4\n\n\n\n\n\n\ns2->v4\n\n\n\n\n\nv16\nDiabeticWtComp_U * rDiabeticWtComp\n\n\n\ns2->v16\n\n\n\n\n\n\ns2->v16\n\n\n\n\n\ns2->sv1\n\n\n\n\n\ns3\n\nDiabeticEarly_U\n\n\n\nv5\nDiabeticEarly_U * rDevelopingLate\n\n\n\ns3->v5\n\n\n\n\n\n\ns3->v5\n\n\n\n\n\nv6\nDiabeticEarly_U * rMortalityDiabeticEarly_U\n\n\n\ns3->v6\n\n\n\n\n\n\ns3->v6\n\n\n\n\n\nv17\nDiabeticEarly_U * rDiabeticEarly\n\n\n\ns3->v17\n\n\n\n\n\n\ns3->v17\n\n\n\n\n\ns3->sv1\n\n\n\n\n\ns4\n\nDiabeticLate_U\n\n\n\nv7\nDiabeticLate_U * rMortalityDiabeticLate\n\n\n\ns4->v7\n\n\n\n\n\n\ns4->v7\n\n\n\n\n\nv18\nDiabeticLate_U * rDiabeticLate\n\n\n\ns4->v18\n\n\n\n\n\n\ns4->v18\n\n\n\n\n\ns4->sv1\n\n\n\n\n\ns5\n\nPrediabetic_D\n\n\n\nv8\nPrediabetic_D * rDevelopingDiabetic_D\n\n\n\ns5->v8\n\n\n\n\n\n\ns5->v8\n\n\n\n\n\nv9\nPrediabetic_D * rMortalityPrediabetic\n\n\n\ns5->v9\n\n\n\n\n\n\ns5->v9\n\n\n\n\n\ns5->sv1\n\n\n\n\n\ns6\n\nDiabeticWtComp_D\n\n\n\nv10\nDiabeticWtComp_D * rDevelopingEarly_D\n\n\n\ns6->v10\n\n\n\n\n\n\ns6->v10\n\n\n\n\n\nv11\nDiabeticWtComp_D * rMortalityDiabeticWtComp_D\n\n\n\ns6->v11\n\n\n\n\n\n\ns6->v11\n\n\n\n\n\ns6->sv1\n\n\n\n\n\ns7\n\nDiabeticEarly_D\n\n\n\nv12\nDiabeticEarly_D * rDevelopingLate\n\n\n\ns7->v12\n\n\n\n\n\n\ns7->v12\n\n\n\n\n\nv13\nDiabeticEarly_D * rMortalityDiabeticEarly_D\n\n\n\ns7->v13\n\n\n\n\n\n\ns7->v13\n\n\n\n\n\ns7->sv1\n\n\n\n\n\ns8\n\nDiabeticLate_D\n\n\n\nv14\nDiabeticLate_D * rMortalityDiabeticLate\n\n\n\ns8->v14\n\n\n\n\n\n\ns8->v14\n\n\n\n\n\ns8->sv1\n\n\n\n\n\np1\n\nrDevelopingDiabetic_U\n\n\n\np1->v1\n\n\n\n\n\np2\n\nrMortalityPrediabetic\n\n\n\np2->v2\n\n\n\n\n\np3\n\nrDevelopingEarly_U\n\n\n\np3->v3\n\n\n\n\n\np4\n\nrMortalityDiabeticEarly_U\n\n\n\np4->v6\n\n\n\n\n\np5\n\nrMortalityDiabeticLate\n\n\n\np5->v7\n\n\n\n\n\np6\n\nrMortalityDiabeticWtComp_U\n\n\n\np6->v4\n\n\n\n\n\np7\n\nrDevelopingLate\n\n\n\np7->v5\n\n\n\n\n\np8\n\nrDevelopingDiabetic_D\n\n\n\np8->v8\n\n\n\n\n\np9\n\nrMortalityPrediabetic\n\n\n\np9->v9\n\n\n\n\n\np10\n\nrDevelopingEarly_D\n\n\n\np10->v10\n\n\n\n\n\np11\n\nrMortalityDiabeticEarly_D\n\n\n\np11->v13\n\n\n\n\n\np12\n\nrMortalityDiabeticLate\n\n\n\np12->v14\n\n\n\n\n\np13\n\nrMortalityDiabeticWtComp_D\n\n\n\np13->v11\n\n\n\n\n\np14\n\nrDevelopingLate\n\n\n\np14->v12\n\n\n\n\n\np15\n\nrPrediabetic\n\n\n\np15->v15\n\n\n\n\n\np16\n\nrDiabeticWtComp\n\n\n\np16->v16\n\n\n\n\n\np17\n\nrDiabeticEarly\n\n\n\np17->v17\n\n\n\n\n\np18\n\nrDiabeticLate\n\n\n\np18->v18\n\n\n\n\n\nfs_2d\n\n\n\n\nfs_4d\n\n\n\n\nfs_6d\n\n\n\n\nfs_7d\n\n\n\n\nfs_9d\n\n\n\n\nfs_11d\n\n\n\n\nfs_13d\n\n\n\n\nfs_14d\n\n\n\n\nv1->s2\n\n\n\n\nDevelopingDiabetic_U\n\n\n\nv2->fs_2d\n\n\n\n\nDeathPrediabetic_U\n\n\n\nv3->s3\n\n\n\n\nDevelopingEarly_U\n\n\n\nv4->fs_4d\n\n\n\n\nDeathDiabeticWtComp_U\n\n\n\nv5->s4\n\n\n\n\nDevelopingLate_U\n\n\n\nv6->fs_6d\n\n\n\n\nDeathDiabeticEarly_U\n\n\n\nv7->fs_7d\n\n\n\n\nDeathDiabeticLate_U\n\n\n\nv8->s6\n\n\n\n\nDevelopingDiabetic_D\n\n\n\nv9->fs_9d\n\n\n\n\nDeathPrediabetic_D\n\n\n\nv10->s7\n\n\n\n\nDevelopingEarly_D\n\n\n\nv11->fs_11d\n\n\n\n\nDeathDiabeticWtComp_D\n\n\n\nv12->s8\n\n\n\n\nDevelopingLate_D\n\n\n\nv13->fs_13d\n\n\n\n\nDeathDiabeticEarly_D\n\n\n\nv14->fs_14d\n\n\n\n\nDeathDiabeticLate_D\n\n\n\nv15->s5\n\n\n\n\nDiagnosisPrediabetic\n\n\n\nv16->s6\n\n\n\n\nDiagnosisDiabeticWtComp\n\n\n\nv17->s7\n\n\n\n\nDiagnosisDiabeticEarly\n\n\n\nv18->s8\n\n\n\n\nDiagnosisDiabeticLate\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1NormalWeight
2OverWeight
3Obese
4Prediabetic_U
5Prediabetic_D
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
441
551
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11fRecoveryToOWFromDx
22fRecoveryToNWFromDx
33fRecoveryToOBFromDx
44fDevelopingPrediabeticNW
55fRecoveryToOWFromUx
66fRecoveryToOBFromUx
77fRecoveryToNWFromUx
88fDevelopingPrediabeticOW
99fDevelopingPrediabeticOB
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
121
271
312
452
533
663
744
884
994
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
141
282
393
454
564
674
715
825
935
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1##v_fRecoveryToOWFromDx#298*
2##v_fRecoveryToNWFromDx#299*
3##v_fRecoveryToOBFromDx#300*
4##v_fDevelopingPrediabeticNW#301*
5##v_fRecoveryToOWFromUx#302*
6##v_fRecoveryToOBFromUx#303*
7##v_fRecoveryToNWFromUx#304*
8##v_fDevelopingPrediabeticOW#305*
9##v_fDevelopingPrediabeticOB#306*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1511
2521
3531
4141
5451
6461
7471
8281
9391
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rRecovery
2rIncidenceNW
3rIncidenceOW
4rIncidenceOB
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1112
2122
3132
4242
5152
6162
7172
8382
9492
\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\nG\n\n\n\nn1\n\nNormoglycemic\n\n\n\n\nn9\n\nNormalWeight\n\n\n\nn1--n9\n\n\n\n\n\nn10\n\nOverWeight\n\n\n\nn1--n10\n\n\n\n\n\nn11\n\nObese\n\n\n\nn1--n11\n\n\n\n\nn2\n\nHyperglycemic\n\n\n\n\nn12\n\nPrediabetic_U\n\n\n\nn2--n12\n\n\n\n\n\nn13\n\nPrediabetic_D\n\n\n\nn2--n13\n\n\n\n\nn3\n\nNorm_Hyper\n\n\n\nn3--n9\n\n\n\n\nn3--n10\n\n\n\n\nn3--n11\n\n\n\n\nn3--n12\n\n\n\n\nn3--n13\n\n\n\n\n\nn4--n9\n\n\n\n\n\nn5--n10\n\n\n\n\n\nn6--n11\n\n\n\n\n\nn7--n12\n\n\n\n\n\nn8--n13\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1NormalWeight
2OverWeight
3Obese
4Prediabetic_U
5DiabeticWtComp_U
6DiabeticEarly_U
7DiabeticLate_U
8Prediabetic_D
9DiabeticWtComp_D
10DiabeticEarly_D
11DiabeticLate_D
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
441
551
661
771
881
991
10101
11111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_DeathNormalWeight
22f_BecomingOverWeight
33f_DeathOverWeight
44f_BecomingObese
55f_DeathObese
66f_NewBorn
77DevelopingDiabetic_U
88DeathPrediabetic_U
99DevelopingEarly_U
1010DeathDiabeticWtComp_U
1111DevelopingLate_U
1212DeathDiabeticEarly_U
1313DeathDiabeticLate_U
1414DevelopingDiabetic_D
1515DeathPrediabetic_D
1616DevelopingEarly_D
1717DeathDiabeticWtComp_D
1818DevelopingLate_D
1919DeathDiabeticEarly_D
2020DeathDiabeticLate_D
2121DiagnosisPrediabetic
2222DiagnosisDiabeticWtComp
2323DiagnosisDiabeticEarly
2424DiagnosisDiabeticLate
2525fRecoveryToOWFromDx
2626fRecoveryToNWFromDx
2727fRecoveryToOBFromDx
2828fDevelopingPrediabeticNW
2929fRecoveryToOWFromUx
3030fRecoveryToOBFromUx
3131fRecoveryToNWFromUx
3232fDevelopingPrediabeticOW
3333fDevelopingPrediabeticOB
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
161
222
343
475
596
6117
7149
81610
91811
10218
11229
122310
132411
14261
15311
16252
17292
18273
19303
20284
21324
22334
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
332
442
553
674
784
895
9105
10116
11126
12137
13148
14158
15169
16179
171810
181910
192011
20214
21225
22236
23247
24281
25322
26333
27294
28304
29314
30258
31268
32278
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1##v_f_DeathNormalWeight#292*
2##v_f_BecomingOverWeight#293*
3##v_f_DeathOverWeight#294*
4##v_f_BecomingObese#295*
5##v_f_DeathObese#296*
6##v_f_NewBorn#297*
7v_DevelopingDiabetic_U*
8v_DeathPrediabetic_U*
9v_DevelopingEarly_U*
10v_DeathDiabeticWtComp_U*
11v_DevelopingLate_U*
12v_DeathDiabeticEarly_U*
13v_DeathDiabeticLate_U*
14v_DevelopingDiabetic_D*
15v_DeathPrediabetic_D*
16v_DevelopingEarly_D*
17v_DeathDiabeticWtComp_D*
18v_DevelopingLate_D*
19v_DeathDiabeticEarly_D*
20v_DeathDiabeticLate_D*
21v_DiagnosisPrediabetic*
22v_DiagnosisDiabeticWtComp*
23v_DiagnosisDiabeticEarly*
24v_DiagnosisDiabeticLate*
25##v_fRecoveryToOWFromDx#298*
26##v_fRecoveryToNWFromDx#299*
27##v_fRecoveryToOBFromDx#300*
28##v_fDevelopingPrediabeticNW#301*
29##v_fRecoveryToOWFromUx#302*
30##v_fRecoveryToOBFromUx#303*
31##v_fRecoveryToNWFromUx#304*
32##v_fDevelopingPrediabeticOW#305*
33##v_fDevelopingPrediabeticOB#306*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1111
2121
3231
4241
5351
6471
7481
8591
95101
106111
116121
127131
138141
148151
159161
169171
1710181
1810191
1911201
204211
215221
226231
237241
248251
258261
268271
271281
284291
294301
304311
312321
323331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1161
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rBirth
2rMortalityWeight
3rObese
4rOverWeight
5rMortalityobese
6rDevelopingDiabetic_U
7rMortalityPrediabetic
8rDevelopingEarly_U
9rMortalityDiabeticEarly_U
10rMortalityDiabeticLate
11rMortalityDiabeticWtComp_U
12rDevelopingLate
13rDevelopingDiabetic_D
14rMortalityPrediabetic
15rDevelopingEarly_D
16rMortalityDiabeticEarly_D
17rMortalityDiabeticLate
18rMortalityDiabeticWtComp_D
19rDevelopingLate
20rPrediabetic
21rDiabeticWtComp
22rDiabeticEarly
23rDiabeticLate
24rRecovery
25rIncidenceNW
26rIncidenceOW
27rIncidenceOB
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1212
2422
3232
4342
5552
6162
7672
8782
9892
1011102
1112112
129122
1310132
1413142
1514152
1615162
1718172
1819182
1916192
2017202
2120212
2221222
2322232
2423242
2524252
2624262
2724272
2825282
2924292
3024302
3124312
3226322
3327332
\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\nG\n\n\n\ns1\n\nNormalWeight\n\n\n\nv1\nNormalWeight * rMortalityWeight\n\n\n\ns1->v1\n\n\n\n\n\n\ns1->v1\n\n\n\n\n\nv2\nNormalWeight * rOverWeight\n\n\n\ns1->v2\n\n\n\n\n\n\ns1->v2\n\n\n\n\n\nv28\nNormalWeight * rIncidenceNW\n\n\n\ns1->v28\n\n\n\n\n\n\ns1->v28\n\n\n\n\n\nsv1\n\nN\n\n\n\ns1->sv1\n\n\n\n\n\ns2\n\nOverWeight\n\n\n\nv3\nOverWeight * rMortalityWeight\n\n\n\ns2->v3\n\n\n\n\n\n\ns2->v3\n\n\n\n\n\nv4\nOverWeight * rObese\n\n\n\ns2->v4\n\n\n\n\n\n\ns2->v4\n\n\n\n\n\nv32\nOverWeight * rIncidenceOW\n\n\n\ns2->v32\n\n\n\n\n\n\ns2->v32\n\n\n\n\n\ns2->sv1\n\n\n\n\n\ns3\n\nObese\n\n\n\nv5\nObese * rMortalityobese\n\n\n\ns3->v5\n\n\n\n\n\n\ns3->v5\n\n\n\n\n\nv33\nObese * rIncidenceOB\n\n\n\ns3->v33\n\n\n\n\n\n\ns3->v33\n\n\n\n\n\ns3->sv1\n\n\n\n\n\ns4\n\nPrediabetic_U\n\n\n\nv7\nPrediabetic_U * rDevelopingDiabetic_U\n\n\n\ns4->v7\n\n\n\n\n\n\ns4->v7\n\n\n\n\n\nv8\nPrediabetic_U * rMortalityPrediabetic\n\n\n\ns4->v8\n\n\n\n\n\n\ns4->v8\n\n\n\n\n\nv21\nPrediabetic_U * rPrediabetic\n\n\n\ns4->v21\n\n\n\n\n\n\ns4->v21\n\n\n\n\n\nv29\nPrediabetic_U * rRecovery\n\n\n\ns4->v29\n\n\n\n\n\n\ns4->v29\n\n\n\n\n\nv30\nPrediabetic_U * rRecovery\n\n\n\ns4->v30\n\n\n\n\n\n\ns4->v30\n\n\n\n\n\nv31\nPrediabetic_U * rRecovery\n\n\n\ns4->v31\n\n\n\n\n\n\ns4->v31\n\n\n\n\n\ns4->sv1\n\n\n\n\n\ns5\n\nDiabeticWtComp_U\n\n\n\nv9\nDiabeticWtComp_U * rDevelopingEarly_U\n\n\n\ns5->v9\n\n\n\n\n\n\ns5->v9\n\n\n\n\n\nv10\nDiabeticWtComp_U * rMortalityDiabeticWtComp_U\n\n\n\ns5->v10\n\n\n\n\n\n\ns5->v10\n\n\n\n\n\nv22\nDiabeticWtComp_U * rDiabeticWtComp\n\n\n\ns5->v22\n\n\n\n\n\n\ns5->v22\n\n\n\n\n\ns5->sv1\n\n\n\n\n\ns6\n\nDiabeticEarly_U\n\n\n\nv11\nDiabeticEarly_U * rDevelopingLate\n\n\n\ns6->v11\n\n\n\n\n\n\ns6->v11\n\n\n\n\n\nv12\nDiabeticEarly_U * rMortalityDiabeticEarly_U\n\n\n\ns6->v12\n\n\n\n\n\n\ns6->v12\n\n\n\n\n\nv23\nDiabeticEarly_U * rDiabeticEarly\n\n\n\ns6->v23\n\n\n\n\n\n\ns6->v23\n\n\n\n\n\ns6->sv1\n\n\n\n\n\ns7\n\nDiabeticLate_U\n\n\n\nv13\nDiabeticLate_U * rMortalityDiabeticLate\n\n\n\ns7->v13\n\n\n\n\n\n\ns7->v13\n\n\n\n\n\nv24\nDiabeticLate_U * rDiabeticLate\n\n\n\ns7->v24\n\n\n\n\n\n\ns7->v24\n\n\n\n\n\ns7->sv1\n\n\n\n\n\ns8\n\nPrediabetic_D\n\n\n\nv14\nPrediabetic_D * rDevelopingDiabetic_D\n\n\n\ns8->v14\n\n\n\n\n\n\ns8->v14\n\n\n\n\n\nv15\nPrediabetic_D * rMortalityPrediabetic\n\n\n\ns8->v15\n\n\n\n\n\n\ns8->v15\n\n\n\n\n\nv25\nPrediabetic_D * rRecovery\n\n\n\ns8->v25\n\n\n\n\n\n\ns8->v25\n\n\n\n\n\nv26\nPrediabetic_D * rRecovery\n\n\n\ns8->v26\n\n\n\n\n\n\ns8->v26\n\n\n\n\n\nv27\nPrediabetic_D * rRecovery\n\n\n\ns8->v27\n\n\n\n\n\n\ns8->v27\n\n\n\n\n\ns8->sv1\n\n\n\n\n\ns9\n\nDiabeticWtComp_D\n\n\n\nv16\nDiabeticWtComp_D * rDevelopingEarly_D\n\n\n\ns9->v16\n\n\n\n\n\n\ns9->v16\n\n\n\n\n\nv17\nDiabeticWtComp_D * rMortalityDiabeticWtComp_D\n\n\n\ns9->v17\n\n\n\n\n\n\ns9->v17\n\n\n\n\n\ns9->sv1\n\n\n\n\n\ns10\n\nDiabeticEarly_D\n\n\n\nv18\nDiabeticEarly_D * rDevelopingLate\n\n\n\ns10->v18\n\n\n\n\n\n\ns10->v18\n\n\n\n\n\nv19\nDiabeticEarly_D * rMortalityDiabeticEarly_D\n\n\n\ns10->v19\n\n\n\n\n\n\ns10->v19\n\n\n\n\n\ns10->sv1\n\n\n\n\n\ns11\n\nDiabeticLate_D\n\n\n\nv20\nDiabeticLate_D * rMortalityDiabeticLate\n\n\n\ns11->v20\n\n\n\n\n\n\ns11->v20\n\n\n\n\n\ns11->sv1\n\n\n\n\n\np1\n\nrBirth\n\n\n\nv6\nN * rBirth\n\n\n\np1->v6\n\n\n\n\n\np2\n\nrMortalityWeight\n\n\n\np2->v1\n\n\n\n\n\np2->v3\n\n\n\n\n\np3\n\nrObese\n\n\n\np3->v4\n\n\n\n\n\np4\n\nrOverWeight\n\n\n\np4->v2\n\n\n\n\n\np5\n\nrMortalityobese\n\n\n\np5->v5\n\n\n\n\n\np6\n\nrDevelopingDiabetic_U\n\n\n\np6->v7\n\n\n\n\n\np7\n\nrMortalityPrediabetic\n\n\n\np7->v8\n\n\n\n\n\np8\n\nrDevelopingEarly_U\n\n\n\np8->v9\n\n\n\n\n\np9\n\nrMortalityDiabeticEarly_U\n\n\n\np9->v12\n\n\n\n\n\np10\n\nrMortalityDiabeticLate\n\n\n\np10->v13\n\n\n\n\n\np11\n\nrMortalityDiabeticWtComp_U\n\n\n\np11->v10\n\n\n\n\n\np12\n\nrDevelopingLate\n\n\n\np12->v11\n\n\n\n\n\np13\n\nrDevelopingDiabetic_D\n\n\n\np13->v14\n\n\n\n\n\np14\n\nrMortalityPrediabetic\n\n\n\np14->v15\n\n\n\n\n\np15\n\nrDevelopingEarly_D\n\n\n\np15->v16\n\n\n\n\n\np16\n\nrMortalityDiabeticEarly_D\n\n\n\np16->v19\n\n\n\n\n\np17\n\nrMortalityDiabeticLate\n\n\n\np17->v20\n\n\n\n\n\np18\n\nrMortalityDiabeticWtComp_D\n\n\n\np18->v17\n\n\n\n\n\np19\n\nrDevelopingLate\n\n\n\np19->v18\n\n\n\n\n\np20\n\nrPrediabetic\n\n\n\np20->v21\n\n\n\n\n\np21\n\nrDiabeticWtComp\n\n\n\np21->v22\n\n\n\n\n\np22\n\nrDiabeticEarly\n\n\n\np22->v23\n\n\n\n\n\np23\n\nrDiabeticLate\n\n\n\np23->v24\n\n\n\n\n\np24\n\nrRecovery\n\n\n\np24->v25\n\n\n\n\n\np24->v26\n\n\n\n\n\np24->v27\n\n\n\n\n\np24->v29\n\n\n\n\n\np24->v30\n\n\n\n\n\np24->v31\n\n\n\n\n\np25\n\nrIncidenceNW\n\n\n\np25->v28\n\n\n\n\n\np26\n\nrIncidenceOW\n\n\n\np26->v32\n\n\n\n\n\np27\n\nrIncidenceOB\n\n\n\np27->v33\n\n\n\n\n\nfs_6u\n\n\n\n\nfs_6u->v6\n\n\n\n\n\n\nfs_1d\n\n\n\n\nfs_3d\n\n\n\n\nfs_5d\n\n\n\n\nfs_8d\n\n\n\n\nfs_10d\n\n\n\n\nfs_12d\n\n\n\n\nfs_13d\n\n\n\n\nfs_15d\n\n\n\n\nfs_17d\n\n\n\n\nfs_19d\n\n\n\n\nfs_20d\n\n\n\n\nv1->fs_1d\n\n\n\n\nf_DeathNormalWeight\n\n\n\nv2->s2\n\n\n\n\nf_BecomingOverWeight\n\n\n\nv3->fs_3d\n\n\n\n\nf_DeathOverWeight\n\n\n\nv4->s3\n\n\n\n\nf_BecomingObese\n\n\n\nv5->fs_5d\n\n\n\n\nf_DeathObese\n\n\n\nv6->s1\n\n\n\n\nf_NewBorn\n\n\n\nv7->s5\n\n\n\n\nDevelopingDiabetic_U\n\n\n\nv8->fs_8d\n\n\n\n\nDeathPrediabetic_U\n\n\n\nv9->s6\n\n\n\n\nDevelopingEarly_U\n\n\n\nv10->fs_10d\n\n\n\n\nDeathDiabeticWtComp_U\n\n\n\nv11->s7\n\n\n\n\nDevelopingLate_U\n\n\n\nv12->fs_12d\n\n\n\n\nDeathDiabeticEarly_U\n\n\n\nv13->fs_13d\n\n\n\n\nDeathDiabeticLate_U\n\n\n\nv14->s9\n\n\n\n\nDevelopingDiabetic_D\n\n\n\nv15->fs_15d\n\n\n\n\nDeathPrediabetic_D\n\n\n\nv16->s10\n\n\n\n\nDevelopingEarly_D\n\n\n\nv17->fs_17d\n\n\n\n\nDeathDiabeticWtComp_D\n\n\n\nv18->s11\n\n\n\n\nDevelopingLate_D\n\n\n\nv19->fs_19d\n\n\n\n\nDeathDiabeticEarly_D\n\n\n\nv20->fs_20d\n\n\n\n\nDeathDiabeticLate_D\n\n\n\nv21->s8\n\n\n\n\nDiagnosisPrediabetic\n\n\n\nv22->s9\n\n\n\n\nDiagnosisDiabeticWtComp\n\n\n\nv23->s10\n\n\n\n\nDiagnosisDiabeticEarly\n\n\n\nv24->s11\n\n\n\n\nDiagnosisDiabeticLate\n\n\n\nv25->s2\n\n\n\n\nfRecoveryToOWFromDx\n\n\n\nv26->s1\n\n\n\n\nfRecoveryToNWFromDx\n\n\n\nv27->s3\n\n\n\n\nfRecoveryToOBFromDx\n\n\n\nv28->s4\n\n\n\n\nfDevelopingPrediabeticNW\n\n\n\nv29->s2\n\n\n\n\nfRecoveryToOWFromUx\n\n\n\nv30->s3\n\n\n\n\nfRecoveryToOBFromUx\n\n\n\nv31->s1\n\n\n\n\nfRecoveryToNWFromUx\n\n\n\nv32->s4\n\n\n\n\nfDevelopingPrediabeticOW\n\n\n\nv33->s4\n\n\n\n\nfDevelopingPrediabeticOB\n\n\n\nsv1->v6\n\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": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd1wUR/sA8Gf3Cr13kK7A0YuASkcRRcGOHbvESow19ooliiUmMbY3lhRNFEVFKSIdBUFpCqL03jtc3d8fm/d+9wIqIoLAfD/5+Lmd25udu3A8zM7MMxhBEIAgCIIgQxXe3w1AEARBkP6EAiGCIAgypKFAiCAIggxpKBAiCIIgQxoKhAiCIMiQhgIhgiAIMqShQIggCIIMaSgQIgiCIEMaCoQIgiDIkIYCIYIgCDKkDapA2NjYuGfPnv5uxcBDEASPx+vvVgw8PB4PZSjsAS6X299NGJDQ59Yz3fmSDqpAWFlZ+fvvv/d3KwYeHo/HZDL7uxUDD5PJRL+beqC1tbW/mzAgoc+tB3g8HofD+ehpgyoQIgiCIMinQoEQQRAEGdJQIEQQBEGGNBQIEQRBkCENBUIEQRBkSEOBEEEQBBnSUCBEEARBhjQUCBEEQZAhbbAFwlr7tTkNKNkHgiAI0l3U/m5AL6PX5bsEc0MnUgylsf5uC4IgX1ZNTU1+fn5/t6KPtLa2ioqK9ncr+pmhoaGIiEivVzvYAqF45v39NgHjgjn3x1Mt5VEsRJDBbO/evUFBQQoKCv3dkL5AEASGDenfaQUFBceOHVuyZEmv1zzYAiEAzNPFRakwMYRzexzVTmlI/9wgyODG5XK3bdu2atWq/m4I0hdWrlzZncShPTDYxghJUzXx687U6eGc0BI0XoggCIJ8yOAMhADgpoYFjqP6RHL+yUMbDCEIgiDvNWgDIQCMUcJCJ1K/fcq7mI1iIYIgCNK1wRwIAcBUFoucRDn8knc4FcVCBEEQpAuDPBACwHBJLNaT+tc73oanXB4aMUQQBEH+1+APhACgIgpRk6kp1cTCSC4L9QwRBEEQAUMiEAKANB1CJlLbuTAphNPI7u/WIAgy6NTV1bW0tPAPW1tbW1tbv/RFX7x48fDhQwBobGxksVhkIUEQdXV1bPa/v+l4PF5dXR1BdH1D7OrVq8XFxe+rn81mHz16lMvl9nbDvy5DJRACgDAFbo6l6EthTvc5ZV/85xNBkKFFRUVFX1+/ra2NPNy+ffv27du/9EVjYmL++OMPAJgzZ86pU6fIwhcvXsjKyl66dIk8jIqKGj58+PsC4ZUrVz4QCFks1rZt2zqv3vvtt9/OnTvXC2/g6zCEAiEAUDA4O4YyWwcfc4/zqh4NGCII0psoFMqvv/76vmf5MVIQl8ttamriH7a2tvKjDovF4vfq+ARPFuTs7BwZGUk+joqKsrW1jYqK4h86OzvjON5lMx4/fjxq1CjBBvB4XQwgsVgsJpPJP8zNzX3z5k2XLRmIhlYgJG0zww9Y4a4POJFlKBYiCNJr9u/f7+/v39jY2KH83LlzKioqDAbD2Ng4MTGRLNTS0jpw4ICWlparq2tERISzs7OPj4+BgYGSktKDBw8OHjyor68vLy9/5swZ8vyAgAB1dXUrKytlZeWzZ892uISTk1NsbCwZRCMjI7dv3x4XF0c+FRkZ6ezsDADBwcEGBgYmJiZaWlr//PMP+ayjo2N8fDwAVFVVjRs3Tl9fn8FgbN++3cXFhV/5mTNn9PX1lZWVySQ+T548OXv27OXLl3V1defOndubn2A/GYQp1rpjwXB8mBg2J4Lzgy1l4fCh+NcAggxKr+qJ0paPn/b5NMRBT6pjBkdra2s7O7uAgIC9e/fyC5OSkr7//vukpKThw4f/9ttvM2fOfPPmjbCwcH19/evXr/Py8nAcDwsLi46ODg4Ovnr16vXr1xcsWLB169a8vLyMjIxRo0YtX75cVFTU09Nz/fr1VCq1pKTE2tp64sSJurq6/KtYWVlhGPbixQsrK6vExMQ///xTSUkpOztbS0vr2bNnP/74Y15e3tKlSx8/fmxkZPTu3Tt7e3tbW1t1dfX6+nqy3/n999+rq6uHhYUxmUx3d3fB8c76+vrc3Ny6ujoGg7F8+XIXF5e1a9c2NzcHBAR82U+5rwzRQAgAzirYk0lUz1BuTgOxz4qCcpIiyCBwNYeXXN0Xd3oclPHdFl382jhy5MioUaME058+ePBg+vTpw4cPB4BFixZ9//33L1++JO9Gfvvtt1Tqv7+E9fT0JkyYAAAuLi719fVr164FAGNjY3Fx8cLCQgMDA01NzVu3br1+/bq9vV1EROTFixeCgZBKpdrZ2UVGRtJoNF1dXVFRUScnp8jISAMDAzExMSMjo9OnTzMYjLKysrKyMgDQ1taOiYmZN28ev4ZHjx7dvXsXwzBhYeEVK1bwRxwBwM/PD8MwWVlZa2vrrKwsKyurXv0s+9/QDYQAwJDG4j2pU8M4OY3c/zhShCn93SAEQT7PEet+/hrr6+tPmTLlyJEj/JKamho5OTnyMYZh8vLy1dXV5KHgvhmSkpLkAzqdTqFQxMXF+Yfk4Jynp6eMjMyUKVOoVGpoaGjnwUInJ6eoqCgajebk5AQADg4ON27cqKiocHFxwXG8oqKiqqrq77//Jk82MTFRVlYWfHljYyO/DVJSUoJP8Q+FhIQERwoHjSEdCAFAUQQiJlGXx3CdH3DuuFGVe3+jKwRBhpZ9+/aZmJg4Ozvr6OgAgK6ubkhICPlUU1NTXl4e2Tv8JM3NzeHh4W1tbXQ6ncvlbtmypfM5Li4u/v7+GIatW7cOABwcHFavXl1eXj59+nQA0NfXj4mJ+cBcHgMDg+fPn48YMQIAkpKSPtweKpX6hTaC6BdoeAyEKXDNmTJZHbe9y0npk5sqCIIMYpqamkuWLLl//z556OPjk5KScvjw4ejo6EWLFjk7OxsYGHxqnWJiYqqqqidPnnz69Kmvr2/n+TgAYGlpCQBhYWGjR48GAFlZWXl5+ejoaHKmzNy5cxsaGlavXh0TExMREbF79+53794Jvnznzp0bN248c+bMwYMHb9269eG9D42NjUNDQ69fv86fqjqgUQQHdQe62tra69evr1+//lNfiAE4qmAaYjD3CVdLAjOSGVojhgRBcLlcGo3W3w0ZYDgcDoVC4c9KR7qJxWIJCQn1SlUPHjxQUlKytrbuldo+U3t7u4uLi5iYGABYWVnhOO7k5KSvry8iIuLt7R0WFhYWFmZtbX3y5ElyXLC9vd3JyYncb53H44mLi9vY2JBV8Xi8sWPH8qu1s7OTkJBwc3MLCgqKiIjw9PR0c3MzNjZWVVVlsVgKCgqmpqYAgOO4tLS0o6MjGfkAQE5ObsSIEbNnz8YwjEql+vj4vH79+s6dO2lpabq6uo6OjnQ6vbm52dbWVlZWVl9ff8yYMRkZGUpKSi4uLvn5+eQIIpvNHjduHPlzzmazjYyMVFVV9fX15eTkMjMzORzOyJEj++YTvnfvnpqa2ieNUBIEQRAEhfKRG+bY+1ZZDkRv376dMGHC27dve1xDai0xNYw7Xxfbb0XBh0w05HK5LBaL/EIi3dfW1kaj0fiTHZBuampqkpCQ6JWqVq9ebWJigjbm7RV1dXUsFktJSamhocHLy2vq1KkbNmzo70b9j5UrV1pbW69YsaL7L+HxeN35Kx/9Mfs/zGSxxCnU2ApiShingdXfrUEQBOkrVVVVTk5OmpqaRkZGZmZmq1ev7u8W9R30x2xHCsIQNpG68RnX9i4n0I3CkB4yHUMEQYYwPT29rKys/m5F/0A9wi7QcDgzmrLDAnd+gDa4RxDkE7S2tsbFxcXGxjY3N39+bWVlZfX19fzD/Px8wWkyubm5/ETbHdy4cSM9Pf0DNZ85c6a2tvbzWzg4oED4XguH448mULck8jY943JQNEQQ5GMuXryorq6+adOmbdu2aWhonD59+jMrPHjw4LZt28jHVVVVOjo6hw4dIg/fvn2rp6f3vg0uIiIiOkwK7eDAgQP85Yx8d+/e3bx582e2eSBCgfBDLOSw51Opr+sJ12BOaevgmVWEIEivCwsLW79+/Z07dxISEmJjY0NCQnbv3h0YGPjRF3YOSADAZDIrKio6pNK2t7cXPLSyspKWliYP6+rqBBf2/frrr1OnTuUf1tfXt7e3d3kVwX5hdXX1h8PnYIUC4UfICsG98dTxarj1He7jUhQLEQTp2unTp5ctW+bg4EAeWltbr1mz5sSJEwAwceJEfkoXFoulra2dnZ0NAFevXtXU1HR1ddXQ0OCHzOHDh+/YsUNPT2/q1KnOzs5v3rwpLS0FgKioqGXLlpWXl5N3R8k9JQAgOjqawWA4OjpqaGgcO3aMrGTmzJnk9kzNzc2enp6mpqYWFhZbtmwRXMt/7do1ExMTIyOj8ePHs9ns3NzcAwcOPHnyZOTIkZ6enn3xkX010GSZj8Mx2GmB2yljCyO5y/WxXRYUlJkUQb5OrKIcbk15H1yIqqROU9ESLHn16tX8+fMFS8aMGUOmpfby8rp8+fKsWbMA4N69e3Jycvr6+ikpKTt27EhISBg2bFh2draTk5O9vb2CgkJ9fX1hYWFubi65+s3Q0DA6OnrOnDmRkZEbN24cPXp0XFzcxIkTo6Kifvnll9ra2jlz5ty+fXvUqFF1dXW2trYODg6jR49mMplkB/H48eM8Ho+sbdGiRYIjjhUVFVlZWRwOx8bGJjAw0Nvbe9euXQ8ePLh9+/aX//y+LigQdpeLCvZ8KnVhJMctmHPdhaIqioIhgnx12l8lscvy+uBCdE2DDoGwqamJnyCUJC4uzmazeTzevHnztmzZUlxcPGzYsCtXrixatAgAbt++bWlpmZWVlZWV1d7eLisrm5SU5OHhAQBr1qzhrwF3dnaOiopyc3NramrS0tJydHSMiorS19cvLS21t7cPDQ2VkZEhE7Cx2ezhw4c/efKEzCxDCgsL27RpE7na1dfXNzg4mP+Ur68vjuN0Ot3e3n4wbS7YAygQfgJlEQiZQD2cyrMK5Fx0pE5SR7EQQb4uku7zPn7SlzF8+PCcnBzBkpycHA0NDRzHpaSkJk+e/McffyxevDgiIuLy5csAUF1dXV1dHR4eTp7s5eXFz4LNT9INAE5OTrt3746MjHR0dAQAR0fH5cuX6+npWVlZSUpKVldXM5lMfiWmpqZmZmaCbRAMzx3yGPAP6XR65x2AhxQUCD8NjsEOc9xZBZv/hBuuhR2xpgihPSsQBAGYOHHir7/+unr1amFhYQBgs9m//PILeTsUABYtWrRx40Y6nT5hwgR5eXkAYDAYeXl5gvtUdMnZ2Tk7O/uvv/5yd3cHACMjo4KCgvv375MDhAwGg8lk7tu3731Z64yMjJ49e+bm5gYACQkJH74WnU4fTKm0uw9NlukJOyXsxTRqSQvY3uVk1KEZNAiCwObNm+Xl5R0dHX/77bdr166RyUJ37dpFPuvm5tbQ0HD48GHyvigALF++PD8/f+3atWFhYUFBQevWrSsv72J0U0FBwcjI6Pbt22SPEMOwUaNG3b17l9xrycnJyczMbMaMGcHBwQ8fPty7dy9/Y3rS1q1bz5w5s2vXroMHD166dOnDqbRNTU0TEhLOnj37559/9sZHMmCgHmEPyQjBzbGU/7zhuT7g7LSgrDMaOqlJEQTpgoiIyJMnT65evRoREUEQxNy5c5csWUL2DgGAQqGcOnUqJSVl4sSJZImYmFhycvK5c+euXr0qIiIyatQoWVlZAFi/fr2MjIxgzTt37szMzNTT0yMP16xZo6+vb29vTx7evXv3t99+u337NofDMTc3ZzAYADB79mxjY2MAMDc3j4uLCwoKkpCQ8Pf3/+6778hXrV+/nrwcALi6upIdSjMzs5s3b8bFxQluTz8UoKTbn+tdI+ETxRWjwmVHyjCxARkNUdLtnkFJt3sGJd3uS21tbfn5+QwGo7m5ecGCBcOHDz9+/Hh/N6qHUNLtr5euJBY9meqkglvd4Vx/izLQIAjyFWGxWIsWLVJTUzMxMVFUVNyzZ09/t+hrhP6Y7QUUDHaY4x7q2KIo7u184hc7ihLqXCEI8hWQkpJKTEzs71Z87VCPsNeQ+dgY0mB2m/3nO9Q1RJChqK6uLjQ0NCQkRDBxWkFBAbmyHvk6oUDYm+g4HBpJue9O9X/JmxrGLes6HS6CIIPTmTNndHR0jh07FhAQMGLEiMOHD5PlxcXFFy9e7N+2IR+AAmHvGymPJU+jmsmCeSD7UjZv8ExGQhDk/R48eLB9+/aQkJDw8PCQkJDo6Ogffvjhxo0bgueUlJR0npBZX19fU1MjWMJkMgsKCjqspuByucXFxUNznd+XhgLhF0HHYZ8VJXwi9XwWz/UB500DioYIMsj99NNPK1assLGxIQ9NTEzWrl176tQp8pDNZk+dOnX69Ona2tr+/v5kYWlp6dixY0ePHu3o6Dhu3DhyI4jg4ODhw4f7+PhMmDBh+vTp5Jlnz57V0NCYNWuWpqbmP//80+dvbpBDk2W+IBNZLN6L+tMrnv09zlojylZTHKWhQZAv6lV1dmVrF7sa9ToVcSV92eGCJa9fv/bx8REsGTVq1NGjR8nHb9++PXz48MyZM0tLS01MTCZMmGBpafnNN9+4urru2LEDAPz8/A4cOHDy5Mnjx4+fOXNm2rRpANDU1AQAsbGxJ0+eTE1NlZeXz8nJcXBwcHFxEUzDhnwmFAi/LAoG643waVrYunieeSDnpzEUV9UBudYQQQaElPK0nLrcPriQuZJxh0DY0tIiKioqWCIiIsLhcHg8HgDIycnNmDEDAFRVVSdNmhQWFmZkZBQcHOzp6Unu0CQnJ3f37l0AGDFixLFjxxobGydMmKCkpAQAd+/eZTAYT548IauVkpJKTk4eP358H7zNIQIFwr6gLobdcaPcK+Qti+GOUcR+sMXR5hUI8iUsMJ7VX5cePnx4hz0c3rx5o6WlheM4AEhISPDTm0lJSTU2NjY0NHC53IqKCvKOqJCQELlU/Mcff7x69ert27dXrVr1zTffBAQE1NTUsFis3Nx/A/zSpUvV1dX79L0NdigQ9h1PDXysKn7oJdfsNud7M8o6I5yGhmgRZLDw9PT85ZdfVq1aJSYmBgBMJvPs2bNz5swhny0pKamsrFRUVASAlJQUX19fRUVFRUVFOzs7FxcXwXrodPry5cuXL19eXFysrq6+b98+Y2PjsrKyrVu39v2bGiJQIOxTolQ4NJKyeATu95R7MZt3ejTFTQ11DRFkMPjuu+/Cw8PHjBmzcuVKCoVy+fJlcXHx7du3k8+KiYktWbJk5cqV0dHR5eXl5K4UJ06cWLx48bZt2zQ0NLKzs7lc7ubNm1evXm1lZaWhofHkyRNDQ0NxcXFfX98LFy6sWLHCy8urqakpNDT0+PHj5BYWSK9AgbAfjJDCgt2p9wp5q+O4hjLYCVt8uCQKhwgysAkJCYWGht64cSM6OprH461Zs2bevHlklkstLa0ffvjByMjo6tWr8vLy8fHxZGrfBQsWGBgY3L59Ozk5WUdHhxxE9PDwiIqKio+PJ3fZxTCMTM99+fLlBw8eiIiIeHh4SEtL9/O7HVwGUtLtwsJCd3f3I0eOTJkypcsT+iXp9udgcuF0Ju+HNK7PCHynOUWm6w3FvjiUdLtnUNLtnkFJt5GeQUm3AQA2bNigqanZ3Nzc3w3pNUIU2GKKZ86gtbDB4B/26QweC6VmQxAE6VsDJhD+5z//cXBw0NHR6e+G9D5FEThnT3kyiRpawjP8h3MjFyWjQRAE6TsDIxCWlZX99ddf69at6++GfEGG0tgDd+oFB8qJdJ7NHU54CYqGCDKQpKSkJCcnp6SkdLnRfDcdPHiwqqoKAK5evRobG/u+02pqavbt29ezS1y/fj06Orr756ekpLS2/n/e5OLi4vz8/J5d+qs1MALhli1b3N3dnzx5UlxcnJmZ+Tk/Z185FxXs2RTqFjN8bTx3bDDnWSUKhwgyMIwZM2b16tXfffediYmJu7u7YPDovrNnz5J5R9++fVtZWfm+0+rr60+fPt3NOiMiIry9vfmH7969q6io6H6TbGxsBNdHnj59eu/evd1/+YDQ3UDIZDKPHTs2efJkLy+v8+fPdznFJi0tbd68ee7u7idOnOByud2pNjk5+eTJk6tWrQoODhYsz8jIIKs6fvw4l8u1t7evrKwMDw8vLi7OyMgoKyvrZrMHIgxgljaeMYM6Vxf3juB6hXJf1qBwiCADwM8//xwZGZmfn5+bm3v+/Hkej1dfXw8ARUVFBQUF5Dl1dXU5OTkdfkNWVlby18uTduzY4eXlRT5msVivX78uKirq/Is3Ly+vc1SrqqrKzc0lTyYIoqKiorCwsK6ujmzMtm3byPxtpObm5szMzLq6us9/+wNXdye87dixIyoq6uTJk62tratWreJwOKtXrxY8ob6+3tXVdevWrTY2Nn5+fiwW6/vvv/9otRcuXGAymUlJSWpqah4eHmRhQ0ODi4vLxo0bR48evWHDhvb29p07d5JPNTY22tnZWVhYfMp7HJCoOCzXxxcOx89n8SaHcm0VsD2WuKksWmWBIF87MTExCwuLgoKCoqIiY2PjGTNmpKWlOTg4HD58eMmSJS9evFBWVi4rK7t165apqSkArF69OigoSFdXV1FRkR8gFy9e7ODgsHr16vj4+AULFmhoaNTU1IiJiQUHB8vKygIAj8ebM2dOaWlpXl7exIkTf/31VwzDqqur582bV1ZWJi4u3traevfuXSkpqd27d5eXl7u5uQkJCcXFxS1fvtza2nr9+vVcLtfPz++ff/4xNDTMz8//9ddf3dzc+vOD6z/dDYRxcXGrVq2yt7cHgPnz58fGxnYIhNeuXTM1Nd28eTMABAQELFy4cMuWLRQKJS8vb8mSJYGBgTIyMgBQXV09bdq0P//8c9iwYQBw7tw5ACDXlvL9/vvvhoaG27ZtA4CTJ0/OmTNn27Zt5CT1bdu2iYuLv6+RXC63qamJrJM0ZswYIyOjbr7HrxAVYLUBLBmO/ZpNTHjEsVXAdpljZrK9fBXuf/VyvYMdl8vFcZyfNwvppl78YevcQ6rPaW6vZvVK5R8mpiIsoSXauZwgiJSUlMePH//4448A0NzcbG9v/9tvvwHAzp07aTRaVlYWjuM3btzw9fVNSEh4+PBhSEjIq1evJCUlf/vtt847S5iYmGRnZ5MLAHx9fc+cOUPemWxoaBg7duyKFSuamposLS3v37/v6em5efNmMzOz0NBQAAgICNi8efPff/8dEBBw9OjRziOOFy5ciIuLe/PmjaSkJEEQPbuX28fI5RCfdH53lgh2NxCOHz8+MDBw2rRpbW1tjx49WrNmTYcTUlJSRo8eTT4eM2ZMaWlpeXm5mpqatra2g4PD2LFjw8LCcByfMGGCp6cnGQXfR7Cq0aNHV1RUlJaWamhoAAD57/uwWKz29vbnz5/zS1RUVPT09Lr5Hr9aVIA1erBUBy7lYJ5huIUsbDHm2cj32v1SLpfLZrPRerhPxWazoavfxciHsdls8qP7fGQ+a0GtZczWCmavVP5RnQOhq6srhUKRk5Pz8/ObO3duYWEhjuP8LSnu37/v4OBA7tDLYrGSkpKYTGZERMT06dMlJSUBYMGCBStXruxQp5iY2M2bN2NjYysrK/Pz8/k7F+I4vmjRIgCQkJCYOXPm48ePPT0979+//80335w/fx4AWltb4+LiPtD+4ODgFStWkJcml+1//mfypZG/rLp/Po/HI3O9flh3f/dt3rx54sSJysrKPB5v6tSp8+fP73BCRUUFv+8lLCwsKipKBkIAOHDgAJvNdnd353A4U6dO3bNnz4evVVFRMWLECPIxnU4XFxcvLy//cAgkiYiIKCgoDNadoIUBNlnAOlO4/Ia3OA7TEodt5pTxvZGhjezZCAsLf35VQwpBEGhBfQ+w2eze+mGjUDpubKbq2J+bE0VERFhZWQmWiImJ0el08nFdXR2Hw+GPxh06dIjH4zU3NysrK5MlVCq18ydz/Pjx+/fvb9++XUFB4e7du8nJyWQ5nU7nrxMXExOrrKzk8XiNjY0sFou8BI1G27hx4wda29jYSEbBDxMTExNcvd3U1PSB23JfGo1G+6Qfnm72ILv7HZ47d66JiUlERASLxZo3b96GDRvIjj+fuLh4W1sb/9pMJlMwecSmTZsuXbpEp9P9/Pw+ei3BqgiCaG9v7608FIOAEAVWMfAV+vifubyNT7l0Cmw1xWdo4xR0fw5Bvm5mZmaampodcmcbGBiEh4eTj7OyssgNCAVFRESsWrVqwoQJAHDhwgV+eXt7e0ZGhomJCQAkJSU5OjriOG5sbGxsbLxw4ULBGoSFhbvsRZmamkZHRy9YsODDzWYwGElJSeS4GAAkJiYuW7asO+93AOlWICQIIiQk5NmzZzQajUajLV68uHMedA0Njby8PPJxfn4+hmFkdxAA6urqJkyYsG7dOg6HQ94j/fCWkoJVFRYW8ng8flUIiYrDwuH4guH4g0LihzTu1iTet0b4Mn1c/COJhBAE6TeHDh0aP358U1OTubl5SUlJZmbmhQsXFi9efOLEic2bN1tYWFy4cKHz/UkbG5uTJ0/SaLQXL16Eh4fr6+uT5cLCwuvXr1++fHlaWlpycjI5DHn8+PH58+cXFRWNGDEiNze3urr6hx9+MDY2zs7O3rVrl7S0tGAfcdu2bTY2Nt9+++2YMWNycnKcnJz40U7Q3r1758+f39DQoK6uHhIS0tzcvHjx4i/0EfWXbi2fwDBMW1s7KiqKPIyMjNTV1QUAHo938uRJcrHLnDlzgoKCyIUN58+fnzx5Mvl/tKamxsXFxcvLa/fu3fv37584caK7u/uHp+rOmTPn/v37paWlZFUeHh7d6b8PQRjAZA0sajL1hislroLQ+ou9JZFb2IyGrBCkHxw8eLDDn+wyMjKCy95NTExSUlJkZWVjYmJaWlrIFKlSUlIJCQkSEhIvX7785Zdfjhw5oqCgAAA+Pj5kWNq1a9fSpUujoqK0tbVv375NBiE5ObkjR46cO3cuLS1NVFT06dOn5GxEFxeXmJgYCoUSExOD4/jSpUsBQOyPwlUAACAASURBVEVF5enTp/zRpQULFjg6OgKAqqrqy5cv1dXVY2NjhYWFGQxGl+9rwoQJ0dHRdDo9LS3N1dX1xYsXA2I08dMQ3RMREaGmpmZlZWVkZKSvr5+RkUEQBJPJBIDnz5+T52zZskVeXt7MzExXVzc7O5ssbGxsvHTpkmBVFy5caG5uJh9v2rRJRkaGTqeLiIjIyMhcuXKFLN+2bZu8vLy5ubmOjk5WVlY3G5mTk6Orq9vNkwef/CbexqccuausmeGcqDJe91/I4XBaW1u/XMMGq9bWVjab3d+tGHgaGxt7q6pVq1b9/PPPvVUb8pVbsWIFuYq9+8gdBT562ifsPsFmswsKCmg02rBhw/hj1O3t7UJCQvwZ5FVVVZWVlQYGBp0HsT9VdXV1RUXFJ1U14Haf+BKa2XAlh3f2FU8IhzWG+LzhuNjH7n+j3Sd6Bu0+0TNo94mvU3t7+7ffftuh8NixY1/PDbkvt/vEJ3yHaTTa8OHDOxR2mMCjoKBA9us/n7y8PNp5sgfEabDGEF9tiIeXED+/4n2fxJ4/HPdl4IbSaDoNgiDvRaPROsyyAYAh8vcx+mN2cMIA3NQwNzVKYTN+IZs3LpgzXBJbaYDP1MaFP7evjiBIFyIiIng8HpVK1dDQ6PE+OZs3b964caOysvKFCxdGjBjh7Ozc5WlVVVX+/v4nT57swSUuXbqkpaU1duzYDuUUCsXOzq7z+fHx8a2trXQ6XV1dfdiwYR/tXQ1EAyPpNtJjGuLYAStK4RzaBmP8j3e8YX+w18VzX6DkpQjS2zw8PHbs2HHo0CEHBwcHB4fOCyG649q1a2RG0MrKysbGxved1tjYeOXKlW7W+ejRo4kTJ/IPq6qqPlBzZ4sXL964ceOBAwemTp0qJyc3b948cn+MwQQFwiGBisM0LTzYnZoyjSovjE0L41oEcs5k8qrb+7tlCDKI/Pzzz2FhYe/evauqqhJMup2VlcXfwKG4uDg1NbW9/X++e3l5eenp6YIzNtatW8fP/Nnc3JySkpKdnd15bXhGRkaHbN1kbRkZGfzMR3X/RTZm9erV5KpEUnV1dVJS0oe39Nm7d29YWFhqamp2dnZdXd306dM/5VMZANCt0aFFQxzbY4ntssCflBG/veHtSWY7q+ALdIlxSjAkhgIQ5MsTFhY2MTEpLi4uKioyMjKaNGlScXGxg4PDjh075s2bV1BQoKamlpWV9ffff48cOZIgiMWLF8fGxurp6dFoNA6HQ1bi6+tLJt2OiYlZsmQJg8GorKxkMplhYWHkPAwulztt2rT29vacnBxbW9vr169jGFZeXj5z5kwWiyUlJVVcXHzv3j0FBYVjx47l5+d7e3sLCQndv39/zZo1ZNJtDoezcuXKsLAwc3Pzt2/fBgQECHYcu6SiovKf//xHVVU1OTm5Qw6dAQ0FwqEIx2CsKjZWldLEptzK4519xVsZS5mpw52nizsoYziaVYMMWBUFUa2NRX1wIXEZHYVhYzoUNjU11dXVZWRkhIWFkVlgWlpaPD09yewtW7duVVRUDAoKwjDszp07q1atSkpKunfv3tOnT9PT00VFRf/888979+51qNPKyurNmzdkwsx169adOXPmwIEDANDY2Dh9+vSFCxe2trZaWVkFBgZOnz5906ZNLi4u5Ak//fTT5s2bAwMD9+/ff/To0bCwsA41//LLLxkZGdnZ2aKiogDQoZP6PsrKykpKSpmZmSgQIoOEBA0W6+ELdYm8etbtEqpfAreGCbN1sNk6uLUCiofIwNNcn9tQ9aoPLoRT6J0Lp0yZQqPR1NTUdu3aNWvWrIKCAgqFMnv2bPLZhw8furi4kAGSzWa/ePGCyWRGR0dPnTqVDEXe3t5kHm1BQkJCv/32W3R0dGtra0FBAX/HAgqFMmfOHAAQFRWdNm1aVFTU9OnTHz58uHbtWjLpdn19fUJCwgfeQkhIyNKlS8lLQ6clAB9Ao9E6pzsf0FAgRAAA1ERhiym+xRR/VU/89Y63IJLL4cEsHWyWNm4ljyIiMmDomi3px6t3TrotKirKn2bZ2NjIT8BNo9HIVACtra2KiopkIYVCERIS6lDn4cOHIyMjd+/eraKicuvWrZiYGLKcSqXy17CKioqSSbdbWlr4NSgoKBw6dOgDrW1paelBjpiGhoaSkpLOS+kGNBQIkf9hKI3tt6Lst4KXNcTNXN7cJ1wOD2ZoYdO1cVsFdNcUQXrOwsJCUlKyw0ZLhoaGDx48IB9nZGQI7vNAio2NXbZsGZkULScnh1/OZDJfvnxJ7lKekJDg5uaG47iZmZmysjKZWY1PWFiYxepij0Zzc/OIiIjOawc/gMlkbt68WV9fn79T3uCAAiHSNXM5zFyO4m8NqbXE7TzeyhhuLRO8NLGpmrizCiaEFiMiyCfy9/d3c3Orq6szMzMrKSl59erV9evXFy9eHBAQsGbNGgsLi2vXrnXe4cjOzu7o0aMsFuvFixexsbH8rpiIiMi33367YMGCtLS0zMzMP//8EwBOnDjh7e2dm5s7YsSIvLy8mpqaH3/80dTU9M2bN5s2bVJRUemQdNvW1tbX15dMuu3m5ubk5NRly69duxYXF1dYWPjs2TNFRcU7d+58fu6wrwoKhMhHmMliZrKUfVbwtpEIzCcOvODOiSDGqeGeGpiHOi6PNjFEEAAA+OmnnzQ1NQVL5OTkTp8+zT9kMBgvX778559/srKylJSUtm/fDgDi4uJPnz69du1aSUnJf/7zn7i4OHJ7whUrVpAPtm/frqWllZmZaW1tvXr16nfv3gGAgoLCL7/84uTkdOXKFU1NzWfPnpGJ0Ozt7Z89exYYGJiVlTVs2DByxFFJSSk1NTUmJobsFy5btoycd0qW//XXX69fv9bW1jY1Ne3yfR04cKChoQEARo0atWfPHv6+s4PJJ+Qa/fqhXKM986m5Rqva4UEh714h8biUZyiNTdLAPdQxczlsqN03RblGewblGkV65qvINYogJAVhWKyHL9YDFo8SXUYEF/HmRvAaWIT7MNx9GDZODVdA3UQEGWja2to6jF8CwNmzZ6WkpPqlPX0JBUKk5+g4jFPDxqlRAkZBXhMRUkzczCVWx7F1JbFxapibGm6nhKHUpggyIAgJCX333XcdCgfh1oNdQSnWkN6hLYF9w8AD3ShVC2gnR1GEcNidzFW4zh4bzDn0khdfQXAG1bojBOkoIiIiPDz8yZMnWVlZbW1tgk+tW7euuLj4fS+MjIw8duxYzy7q5+dXUFDQ5VPJyclFRf/mFiAIIjw8nNw4HQDYbHZ4eHiHFfQ4jltYWFhYWFAolOTk5NTUVIIg+ubOf21tbXR0tGDJ06dPP5z1rXehQIj0MioODsrYPitKnCe1dB5tgzGllkmsjefKXWNPeMQ5nMqLqyBYKCgig46Hh8fRo0d//PHHhQsXKisrL1q0iJ/burm5+QMr0PPz8+Pi4rp5lb179+7fv59/2NLS0jkBKenixYtHjhwhH2dmZo4fP/7HH38kDxMTE2fOnEmj0W7evEmuyicxmcw5c+aMHz8+Jibm6dOnixcv5mcD+KJSUlK8vb0FS1asWPHkyZM+uDQJ3RpFviAJGkzWwCZrUACgjgkx5byocuLbBF52A2EpjzkoY3ZK+GhFTKqLHB0IMvAcOXKEXFBfVFQ0d+7cpUuX/vPPPwBw4MABJSUl8pyCgoK8vDxlZWUDAwPB17a2tj5//lxbW1tdXZ1f2NbWlpGRISIiYmhoiON4S0tLWVkZjuO5ubkiIiIqKip79+7lr8fncrlv3rypqqpiMBgKCgpOTk4HDx4kn4qMjJw6dWpUVBT/0NHRkcfjFRcXV1ZW5ubmUigUTU3NPXv2ZGRkZGRkkHvBEgTx6NEjfuWvXr1iMpnGxsZkDhomk1lZWamqqpqYmCguLm5iYgIA6enp7e3tlpaW5PqKiooKERGRlpaWnJwcc3Pzr2eP3w5QIET6iIwQeGniXpoAAE1siK8g4ip4R1O5ydWElgQ2RhEbo4TZKmJ6UkNu9iky+Kirq585c2bkyJFlZWUqKiqjRo169OiRsbGxv79/UFCQtrZ2ZmamtrZ2YGAgmUS0pKTEyclJR0cnJibmu+++27RpEwDExMT4+PiYm5tXVVVRKJTg4OAXL16EhIRgGPb27VsrK6sjR47Y29sHBgZaWFgUFhZOmzaNRqNpaGikpKQkJiY6OzvPmzevsrJSUVExKipq5cqVy5cvJ6fsRkVFTZgwobKy8vLlyxUVFb6+vnJycn/88cf58+fPnTvH3xEdwzAyDXdVVdWkSZMoFIqUlNSbN2/u3btnZGT08uXLWbNmMRgMYWHhpKSkb775pqCgoKysLD8/38TE5MaNGwCwbt265ubm6urqYcOGxcXFBQYGjhnTMUHr1wAFQqQfSNDAfRjmPowCABwevKwl4iuIR8XE3hReA4uwVcRsFDAbBdxaAUMTUJFPcrukNKepY3KWL8FYSnKSivIHTjAyMsJxPDs7W0VFhV/43XffkcsHeTzemDFjQkNDyR2RMjIyyMV8BQUFxsbG3t7eysrKCxcuvHLlCrnIfdGiRT/99NOWLVtmz56N4/jhw4c7XM7Pz8/BweHUqVNk5QCA47i+vn50dPSMGTPi4+MvXbo0evTohIQEFxeX+Pj4I0eOqKmpbd269caNG/fv3weAoqIicrF/5/dy8OBBbW3tv/76C8OwvXv3+vn5hYeHA0BJScmdO3csLS1TUlKsra0vXry4ZMmS5uZmFRWVgoICclVldXV1XFwcjUa7dOnS2rVrU1JSPutz/zJQIET6GRWHkfLYSHlsvREAQEUbPKvkJVYRpzK4SVWEtBBGPmspj1nKY3IdEzEiyP9oYLPr2Ow+uFAjm/PhE8iuXoeF2s3Nzf7+/qmpqa2trcXFxVlZWWQgtLa21tbWBgBNTU1LS8unT58yGIyKioqnT58+ffoUANra2hITEz9wuYiICPJM/qUBwNnZOSoqisFgqKmpSUpKOjg4REVFSUhIUKnUzgGPDJ9dpoyJjY3dvXs3hmEAMH/+/KNHj5Inq6qqWlpaAoChoSGPx5s8eTIAiIuLa2hoFBUVkYFw+vTp5DI+b2/vFStWNDc3d86e0+9QIES+Lkoi/38HlQB420AkVxPPqwn/l7yUakJGCLOQwyzkMXNZMJPDNMXRbVTkfyzR0vz4SX3i9evXXC5XT09PsNDb25u8pSknJ+fn58eft8lPxg0AQkJC7e3tZPpsGRkZsnDcuHFqamrvuxaXy2UymZ23j3Bycjp06JCBgQHZrXR0dFyzZo24uLiTk1PngKempiYhIZGZmdk5oXZ7ezu/cmFhYTabTc7Q4WfhIGvjn0OhUPhTePhvjXzAZDI7B0JJSUn+xCJSQ0NDX65fRLNGka8XBjBCCpujix+3pTyZRK1fRAubSJmri7VziHNZvDFBXNlrbJcHnPUJ3IvZvMQqorkvegII8nG1tbWbN2/28PDoEL2ePXvm5+fHYDBkZWWTk5P55S9fvmxtbQWAtra2lJQUU1NTBoPB4XDs7OxW/tekSZMAQFhYmMlkdrgchUIxNzcPDQ3tUO7s7Pzq1atbt26RObtNTU3fvn0bHBzs7OxMniAiIsKvjUql+vj4HDp0qKWlRbDB5Av5u15ERUUZGhp+NFcLX3x8PP+BqqqqnJxc53P09PR4PB7/rml+fn55eXlf5nJDPUJkwCDj4ggpzFvn35KqdkitIdJqibgK4txr3ut6QlkEM5LBjGTASAYzlMYMpDFR9DOO9BV/f38ZGZni4uKkpCQHB4eLFy92OMHZ2dnX13fSpElBQUH8G5gAICkpOWXKFC8vr9u3b48dO9bc3BwAAgICPDw8li9fLi0tnZaWZmZmtnbtWnt7ex8fHwAwMjJatmwZv4YTJ05Mnz797du3mpqaiYmJp06dkpWVVVZW1tfXj4qKun37NgDgOG5jY3P//n3+OgobG5sVK1asXbtWVVV1+/btR44cmTJlipmZ2bRp04SFhePj4+l0+sOHD3fs2DF27Fg2my0pKXnmzJlLly51/zNJT0//5ptv9PT0Tp06Re4Y3Jm0tPSePXs8PT2XLl1KpVKvXr3q5+fXIXHrF4VyjSKfnGv0q8UlIK+JSK8lXtVDZh3xup7IbiCURTB9KTCUwfSlMH0pTF8aU+6lN4pyjfbMYM01euvWLXLkTFJS0tTUVHCOTGBgoKurq5SUVGtr6/Xr1ysqKiZOnIjjuKioqIGBQX5+fklJiaio6IMHD3R0dGbPns2/b5mZmfnkyZP6+noGgzF+/Hjyc3v16tXr168VFBQcHR3v3r3r6OhI3kEtLCwMDg6uqqoyNzf38PAgK0lISKipqSFH7wAgLS0tOzt7xowZ/DBcWFiYkpJCpVLJcwiCiIiISExMpFAoZmZm5O5OAFBcXHzv3r22trYJEyYYGhoCQG1t7bNnz8hppTwe79atW9OmTSO/DqGhoRYWFgoKCt7e3mPHjpWXl8/KynJ0dHRwcPjAB5iUlBQbG8vlckeNGmVvb9/5hC+XaxQFQmTwBMLOuATkNxGv6yGrgciuJ7IaiKx6gsUFPSlshBQ2QhL0pLDhkpiuJNaDbTRQIOyZwRoIkc7IQOjr69srtaGk2wjSExQMdCUxXUmYDP8/raaWCTkNRE4j8aaBuF9EvGvkvW0keAToSmK6EpiOJOhIYDoSmJYEaIhjdDSMjiA9paOjQ275xBcfH3/ixAnBEi0trQ4lfQ8FQmTIkRUCW0XMVvF/ZpzWMuFdI5HbRLxrhMQq4kYuL68JSlsJRWFMSwK0xP+NixrimIYYaIpjIuirgyAfw8/xxmdiYuLv7y9Y0nmya99D32YEAQCQFQJZBcxa4X+iI4cHJa1EfhMUNBN5TZBQQdzI5RU2Q2EzIUEDVRGKujhoSnDVxLBhYjBMDFMRAXVxTAx9q4YkcowQx3E5OTljY2N+fhYAWL58+e7duzU0NLp8YWRkZGJi4pYtW3pw0ZUrV37//ffkGsTO1aqpqY0YMQL+O4ZnbW2tpaUFAEwmMygoaPLkyV0OiCQkJCQmJtJoNFNT0y7H6j6HhISEvr5+h8KWlpbg4GAAoNFoCgoKpqamvXXzvJvQVxZB3ouKg6Y4pikOAB0XLFa2wbva9nImVtyGl7YSYXVQ1MIra4WiFoKGg5oopiIKqqKYMvmvCKiKYYrCoCqGSXZ32jkywMyfP9/BwUFGRqaysjI1NdXNze3cuXOysrIAQKfTsfenDvykpNtbt24VzCwjJCT0vpr//vtvLpd77tw5AEhPT58zZ86mTZuOHj0KAM+ePfP19a2urr527Ro/swwAtLW1eXt7p6amTpo0SVRU9MqVK8rKynfv3u32Z9BDFRUV3t7e06dPx3G8tLQ0PT198eLFJ06c6P4ijc+EAiGC9ISiCEjIEjQaRqV2HEVsYEFJK1HaAmVtRFkr5DcTz6qgtIVX2Q6lLQSLB0oimIooKAhjCsKgIgrywpiiCCj8+y/IC6OByYGKn3S7oqJi3rx5ixcvDgoKAoANGzbwU2NnZWXl5eUpKSlZWFgIxrCGhoaEhARtbW3BDlNjY2NKSoqoqKilpSWVSm1paamvrxdMuu3n56es/G+mNxaLlZaWVlVVZWpqqqam5uzsvHv3bvKpyMjIGTNmCCbddnJy4nK5VVVVra2t/KTbO3bsKC4uTk9P5y9mj4yMJB8wmczU1NS2tjYrKytyRTyZdFtJSSkmJkZMTGzUqFEEQSQmJra3t9vZ2ZGTyMik29XV1Tk5OZaWlh3GCzu4fv062UN98+bNhAkTREVFO99Z/UJQIESQXiZFByk6ZigNnfuRANDGgcp2oqwVKtuIynYob4W8JiKpCsrbeFXtUN1OVLeDCAUURTA5YZAXAjlhTO7//wU5IUxGCOSEQEYIk0Cdy6+VkpJSQECAubl5SUmJmpqai4sLmXR7//79kZGROjo6aWlp0tLSDx8+JBc5FBYWjhs3zsjI6MmTJ8uXL9+1axcAPH78eOnSpfb29tXV1fX19eHh4a9fv46KisIwrKamxtTUdOfOnePGjSOTbufm5np5eSkoKGhpaW3cuDE6OtrZ2Tk7O7u0tFRVVTUqKmrVqlXLli1rbGyUlJSMiory9PSsrq6+ceNGUVHRtm3bZGRkfv7558uXL1++fFkwpQu59L68vNzd3V1BQUFSUvL58+dBQUHm5uYvX76cOXOmgYGBvLx8QkLC3Llzi4qKmEzm27dvNTQ0yH7kunXramtr29vbNTU1Fy5cePPmTf5a/g/Q09Pbt2+fn5+fv7+/4GrLLwcFQgTpUyLU995u5atnQWUbUcOEmnaoYRLkv0XNUM2E2nZeLRNqmVDHItq5ICsEMnRMRgik6SAjhEnTQZoO0v99IEXHpOhkYAZJGiY+BAInKz6bW1zTBxei6CjRR+p+4AQGg0GhUN68eSOYXGb79u1kL40gCHt7+0ePHpH5YrKysnJycoYNG1ZSUsJgMBYsWKCqqrpo0aJ//vln1KhRALBixYoff/xx+/btU6ZMeV/S7cmTJ/O7UARBYBhmaGgYExPj7e2dkJBw5cqV0aNHx8fHu7q6Pn36NCAgQEVFZe3atTdu3Lh58yYAFBQUNDQ0kLspdXDgwAEzM7OrV68CwOHDh7/99luyp1haWvro0SMjI6O0tDRzc/Nr167Nnz+/tbVVWVk5Ly+PHLlsa2uLjo6mUCjXrl1bv359Wlpadz5eCwuLurq6qqoq/vZVXxQKhAjy1ZGmgzSdHybfGy/ZPKhlQh2TqGNBHRPqWUQ9E+pZUN1OvGuEOiY0sHgNbGhgQQOLaGJDCxukhUCKjknSQOLf/zBpIRCngjgNxKiYjBCIUUGMBuJUTIoOIlQQpYIMHROhgnAXqZi/SlQKJtYXsxAxSrd6Kh0G8Kqqqn744YeMjIza2tqCgoI3b96QgdDGxmbYsGEAoKamZmlpmZiYaGBgUFdXFxUV9fjx46amptLS0pqa9wZ4giAiIyOPHz/e4br8pNtaWloSEhJk0m1xcXFhYeHOAY98SZcjjgkJCfv27SMfz5o1a9++fWTqADU1NTIRmr6+PkEQ7u7uACAqKqqurl5SUkIGwilTppC93mnTpvn4+JBd0o9+buQC9w8MrPYuFAgRZKCi4aAkAkoiHw+ZJC4BjSyoYxFNbGhiQRMbmjlEHROa2dDMgVomkdsEzWxo4UALh1fPhDYutHKgnkW0coDJBRkhEKaACAWTFgI6DuI0EKdidApI00GIAqJUEKNidBwk6UDFQFoIKBhI0jA6BcSoIEwBESoI4SBKxdgc+HIzAuk2HRNG95fMzEwej9dhhuTs2bOdnZ0vXLggKSm5atUqwTyf/HNoNBqLxWpvb6fT6To6/6YTtLKy+kDfiCAIDofTeWqJk5PT3r17GQwGmXTbyclp5cqVZNLtzrccyR0q0tLSOifdZrPZ/MrpdDqXyyVzavNXPpC1CQn9uzuMYNJtfpYcKpWKYRiH85FdO0gvXryQk5MTnHn7RaFAiCBDBQUDGSGQERKMl5/wF3cdE9q4RDsX6pjA4kELG5rYBIsHDSxgcqGVAy0cooUD+c3A4UEDCzgENLF5LC60cKCdC23kv1yijSPczmWTsZMMljgGUnQAAAkaUPF/wy2GgTQdAECMCnQK4ABSdAzg35gKAJI0yG8muriR9xUoLy//7rvvpk6dKphoDQBSUlJ+//13dXV1NpudlJRE5hQly8mEO83NzcnJyQEBAVpaWlwud8SIEfxzSCIiIvX19R0uh+O4lZVVcHDw2rVrBcudnZ2zsrJu3rz5/fffA4CRkVFeXt6DBw/mzJlDniAqKsrfAYNCoSxbtuzgwYNjx47lDxNGRUU5OTmZmZk9efKE3DEqIiLC2Ni4+/M5o6OjN27cSD5QV1cnp9F+WFZW1p49e3x9fftmgBBQIEQQpJtkhECGDJz/36HryZ0r8jc+GTu5BDSyCR4BDSwAgCY2cHj/hluCgHoWAEALB1hc4AHUsQiAfwMqADSyIb/ps99VryJnnZSVlaWlpU2aNOnnn3/ucIKbm9vSpUsnTJjw4MEDwTV8cnJynp6eHh4egYGBnp6e5H3Ls2fPTp48eeHChdLS0unp6VZWVhs2bHB2dp49e3Zra6uRkZGfnx+/hoCAAC8vr9evX2tqaj579uz8+fNycnIKCgoMBiMhIcHOzg4AcBwfNWrU3bt3yTUVAGBra7ty5colS5YoKioePXr00KFD3t7epqamHh4e4uLisbGxSkpKTk5OO3fudHV1bWlpkZaWPn/+/PXr17v/mbx9+3bRokV6eno//fST4M3bzhYsWIBhWHFx8evXr5ctW7Z3797uX+UzoVyjyGDONfpFoVyjPTNYc42SC+ppNJqsrKyJiQl/K0EAePTokZ2dnYSEBJPJvHnzZlVV1fjx41kslmDSbVlZ2YcPH+ro6Hh5efF7Qu/evYuMjGxqatLT03N1dSVvRebl5WVkZEhJSTk6OoaGhtra2pIduPLy8pCQkNraWlNTU1dXV3KA7enTpzU1NeRIJACkp6dnZWUJJt2urKxMTk7mcrn8xNzkgnoqlWpqaspPk11ZWRkcHMxkMseNG6erqwufknRbS0srMzPT0dFx5MiRXX50/AX1wsLC8vLypqamYmJinU9btGxlvryVgefy7v9PIQjie1NCWwol3UY+BgXCnkGBsGcGayBEOuvdpNtLV6xka4x0mPVpgdBrGE/lYyuN0HcYQRAE+SI6J92OiYnpkGtUW1u78z3kLlExGK2MrTD4hIFDHo/331k7H6y5+zUiCIIgSPd1Tg0zcuTI8+fPC5bQ6fQ+bFHXUCBEEATpBeQYIYZhysrKOjo6qqqq/Kfmz5/v7+//vi3XQ0NDY2Nj9+/f352rtLW1AQB/IMPHx2fPnj3koF0HBEF0mNUycuRIBoPRnavcvn07pPz/DQAAIABJREFUNzd306ZN3TkZAMrKylJSUvgjkQDw8OFDMtNbhzNFRETU1dW7WW2fQTkNEQRBesH8+fP/+uuvkJAQf39/ExOTSZMmVVZWkk8pKyt/YCy5tLQ0NTW1m1fZu3evYMhUUlJ630oGDofj4+Nz586diP8qKirq5lUKCgoyMjK6eTIAJCcnr1mzRrDEz8/v2bNn3a+hf6EeIYIgSO/Yvn07mXS7rq5uxowZPj4+jx49AoBFixbJyckBAI/He/HiRX5+vpKS0ujRo/mLzQGguro6OjpaR0dHcOFgdXX18+fPhYSE7Ozs6HR6fX19eXk5juPJycmSkpIjRozw8fHhD8K1tbUlJSXV1NQYGxuTuy8BwOHDh/X09AQbyePxXr58mZeXp6ioOHr0aDJC19bW1tbWysvLR0VFGRoa8k/OyMjQ1NTkT27KyspSVFTszlrAgQX1CBEEQXqZjIxMQEBASEgI2Qnz8PAgZ7MfPHhwz549kZGRu3btcnJy4qdZycvL8/DwiIiImDlz5vbt28nC4OBgKyurW7dunT592sbGpr6+Pi8vLzU19eXLl+fPnyfXG3h6emZlZQFAdna2qanpsWPHwsPDZ8+eXV1d/b62HT16dNeuXZGRkXv37nVwcGCxWADw8OHDadOmjR079s6dO5mZmfyTT5w4cfLkSfJxQ0ODjY1NY2Pjl/jE+hfqESIIMnhUvrzVXpPXBxcSVTKQN578gROMjIyoVGpOTo7gkNjOnTv5C/icnJyCg4O9vLwA4N27d+/evVNWVq6srBw+fPjSpUvV1NSWLVv24MEDS0tLAFi9evWZM2d2797t7u7+vqTb8+bN42cEBQA2mw0AXl5e/NkoFy5csLW13bp1K5loBgDGjRsXFBQ0c+ZMAMjPz8/JySE3deIHv1WrVs2YMWPHjh0UCuX69esODg7k1r6DDAqECIIMHlRhSYrIx3M6fz6K8EeWQvJ4PIIgBG9+AkBJSYm/v396enp7e3thYSF/0bO1tTUZgRQVFa2srJ4/f97c3NzQ0HDz5k1ya4jCwsKysrL3XYsgiLi4uDNnznR+6uTJk/xJOuSDsrIyf3//1NTU9vb2oqIifhssLCz4Wxvy2djYKCkpkbtkXLp0qS+zvfQlFAgRBBk8ZA3c+rsJ/0pJSeHxeAYGBoKF3t7eXl5e+/fvl5OTW7x4MXlbEv6btJpEoVA4HA6LxRIWFh43bhxZOG7cuA+MzBEEweVyu8zMqaur22GMcN68eePGjduzZ4+cnNzKlSv5bSC32+3sm2++OX/+vLy8fFVVlYeHR5fnSEtLd8iAWltbO4CGEtEYIYIgSC8rLCxcv369t7d3hy0j0tPT582bp6CgwGazo6Oj+eXJyclkIGloaEhOTra0tDQ0NCQIQkpKatx/WVhYAICoqGhra2uHy+E4bmNjExQU1J22paenz507V1FRkcvl8ves/4C5c+fGxcXt27dv2bJl75v7ymAwmExmUlISefjy5cvm5mbBSTdfOdQjRBAE6R3btm0TFxcvLCx89+7dzJkz+SNtfJMmTZo/f767u3tISIi0tDS/XFlZedKkSW5ubkFBQd7e3mQIOXfu3JQpU2bNmiUjI/PixQsHB4dNmzaNHTt2+vTp9fX1lpaWgkm3T506NWnSpPT0dG1t7YSEhGvXrpEJSFeuXMnP2zljxoylS5d6eHgsXLjQw8MjLCysO7nuxMTE5s+f/9NPP/3yyy/vO0dOTu7IkSOTJ0+eMWMGhmG3bt06dOiQoqLip3x4/QnlGkVQrtEeQrlGe2aw5hqNiIggt6uVlZXV19cXTBsdFRVlZWUlLi7O4XDu3r1bVVU1duxYLpcrLCyspaVVWlpaVVUlISERGhqqo6Pj5ubG35C2uLg4Nja2sbFRX1/fzs6O/GErLS198+aNlJSUhYVFdHS0hYUF+XnW1tY+fvy4trbWzMzM1tYWAEJDQwVbqK2traenx+FwgoKCKisrXVxcAIBOp2tra5eXl5eVlZGdTgAoKChoamoyNjYmD0+dOhUREfHRHmd2dvazZ88IgrC1te1wT7hXrFy50traesWKFd1/CY/H43K5H900CgVCBAXCHkKBsGcGayAclFpaWtLT02fMmPH77787Ozv3b2O+XCBE32EEQRCkaykpKYcOHdq6dSs/CoaGhh46dEjwHAaDwd/gcIAaYIGwqKhIRkbmfbObEARBkF7k4OBAJsfhc3Z2JrPn8HV/t/qv1kAKhDExMePHj7948eL8+fP7uy0IgiD/49KlS+RdOFVV1REjRujo6PCfmj59+okTJ7S1tbt84eck3Z41a5a/vz8/oZogHo934cIFwZIxY8aYmJh05yo3b958+/YtP8eNIDqdTqaLE1RXV/f3338DgLCwsIaGhr6+voqKSncu9JUYMMsn2tra9u/fP2vWrP5uCIIgSBfWrFkTHx+fnp5+4cKFMWPGuLi4lJaWkk8ZGhqSm8t36XOSbjMYjPeN7nO53G+++SYmJibtv6qqqrp5lZKSkjdv3nTzZAAoKyvz9fV99+5dcnLyiRMn9PX1fXx82tvbu19D/xowPcJdu3Zt2rTp7t27/d0QBEGQrq1bt468bdjU1LRw4cIFCxZEREQAwOTJk8nFDGw2OyEhIS8vT1lZ2dXVVfCmYmlp6ePHj7W1te3t7fmFJSUlCQkJIiIiLi4uoqKilZWV+fn5OI6Hh4fLyclZWFhMmjSJvwyjqakpPj6+oqLC1NSUn7l79+7dHRbUczichISE3NxcJSUlV1dXMgEbOWtUTU0tLCyMP3cUAOLi4hgMBn9pfFJSkrq6eucENKTDhw+Ti/pLSkomTpy4Y8eOEydOfOZH2jcGRo/w2bNntbW17u7u/d0QBEGQj5OQkPD393/y5ElBQQEAzJw5Mzc3FwCOHDly9uzZV69enT59esyYMfysLjk5OdOnT09NTfX19d2wYQNZGBgYaGdnFx0d/ccff4wcObK2trakpCQ7OzsrK+vvv/8m1+PPnj07JycHADIzM01MTC5evJiamrpu3boPdP6OHz9+5syZV69e/fTTT7a2tkwmEwAeP378f+zdd3gU1f4/8DN1Z7al9wQSwASQIF2qqEgTUJSLioKiqDSvHUXBa7nX+4VH71dRr18LV8ACv4tYUEA6KCBSAoFQAgkpJCG97u70mfP7Y5JlCSEFA2mf18PDMzt7dvbswu57z8wp06dPnzhx4r59+zIzL07WunLlyvfff9/crqioGDVqlLfO9YiKilq4cOGqVavayqiEttEifOONN8x39o8//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", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "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 426fab1c..508d4f87 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 @@ -10931,7 +10931,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.2", + "display_name": "Julia 1.9.3", "language": "julia", "name": "julia-1.9" }, @@ -10939,7 +10939,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.2" + "version": "1.9.3" } }, "nbformat": 4, 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 bb242e7e..be69510d 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 @@ -1629,7 +1629,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.2", + "display_name": "Julia 1.9.3", "language": "julia", "name": "julia-1.9" }, @@ -1637,9 +1637,9 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.2" + "version": "1.9.3" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } 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 7ed4aa67..7b34023a 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 @@ -5277,7 +5277,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.2", + "display_name": "Julia 1.9.3", "language": "julia", "name": "julia-1.9" }, @@ -5285,7 +5285,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.2" + "version": "1.9.3" } }, "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 48a236f4..6dbcac3c 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 @@ -6378,7 +6378,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.2", + "display_name": "Julia 1.9.3", "language": "julia", "name": "julia-1.9" }, @@ -6386,7 +6386,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.2" + "version": "1.9.3" } }, "nbformat": 4, 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 ef55a106..4752820e 100644 --- a/examples/full_fledged_schema_examples_new/composition/diabetes_model.ipynb +++ b/examples/full_fledged_schema_examples_new/composition/diabetes_model.ipynb @@ -528,7 +528,311 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\nG\n\n\n\ns1\n\nNormalWeight\n\n\n\nv1\nNormalWeight * rMortalityWeight\n\n\n\ns1->v1\n\n\n\n\n\n\ns1->v1\n\n\n\n\n\nv2\nNormalWeight * rOverWeight\n\n\n\ns1->v2\n\n\n\n\n\n\ns1->v2\n\n\n\n\n\nsv1\n\nN\n\n\n\ns1->sv1\n\n\n\n\n\ns2\n\nOverWeight\n\n\n\nv3\nOverWeight * rMortalityWeight\n\n\n\ns2->v3\n\n\n\n\n\n\ns2->v3\n\n\n\n\n\nv4\nOverWeight * rObese\n\n\n\ns2->v4\n\n\n\n\n\n\ns2->v4\n\n\n\n\n\ns2->sv1\n\n\n\n\n\ns3\n\nObese\n\n\n\nv5\nObese * rMortalityobese\n\n\n\ns3->v5\n\n\n\n\n\n\ns3->v5\n\n\n\n\n\ns3->sv1\n\n\n\n\n\np1\n\nrBirth\n\n\n\nv6\nN * rBirth\n\n\n\np1->v6\n\n\n\n\n\np2\n\nrMortalityWeight\n\n\n\np2->v1\n\n\n\n\n\np2->v3\n\n\n\n\n\np3\n\nrObese\n\n\n\np3->v4\n\n\n\n\n\np4\n\nrOverWeight\n\n\n\np4->v2\n\n\n\n\n\np5\n\nrMortalityobese\n\n\n\np5->v5\n\n\n\n\n\nfs_6u\n\n\n\n\nfs_6u->v6\n\n\n\n\n\n\nfs_1d\n\n\n\n\nfs_3d\n\n\n\n\nfs_5d\n\n\n\n\nv1->fs_1d\n\n\n\n\nf_DeathNormalWeight\n\n\n\nv2->s2\n\n\n\n\nf_BecomingOverWeight\n\n\n\nv3->fs_3d\n\n\n\n\nf_DeathOverWeight\n\n\n\nv4->s3\n\n\n\n\nf_BecomingObese\n\n\n\nv5->fs_5d\n\n\n\n\nf_DeathObese\n\n\n\nv6->s1\n\n\n\n\nf_NewBorn\n\n\n\nsv1->v6\n\n\n\n\n\n", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "NormalWeight\n", + "\n", + "\n", + "\n", + "v1\n", + "NormalWeight * rMortalityWeight\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "NormalWeight * rOverWeight\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "OverWeight\n", + "\n", + "\n", + "\n", + "v3\n", + "OverWeight * rMortalityWeight\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "OverWeight * rObese\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Obese\n", + "\n", + "\n", + "\n", + "v5\n", + "Obese * rMortalityobese\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rBirth\n", + "\n", + "\n", + "\n", + "v6\n", + "N * rBirth\n", + "\n", + "\n", + "\n", + "p1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rMortalityWeight\n", + "\n", + "\n", + "\n", + "p2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rObese\n", + "\n", + "\n", + "\n", + "p3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rOverWeight\n", + "\n", + "\n", + "\n", + "p4->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rMortalityobese\n", + "\n", + "\n", + "\n", + "p5->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_6u\n", + "\n", + "\n", + "\n", + "\n", + "fs_6u->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "v1->fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathNormalWeight\n", + "\n", + "\n", + "\n", + "v2->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingOverWeight\n", + "\n", + "\n", + "\n", + "v3->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathOverWeight\n", + "\n", + "\n", + "\n", + "v4->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingObese\n", + "\n", + "\n", + "\n", + "v5->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathObese\n", + "\n", + "\n", + "\n", + "v6->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_NewBorn\n", + "\n", + "\n", + "\n", + "sv1->v6\n", + "\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\"))" ] @@ -752,7 +1056,241 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\nG\n\n\n\nn1\n\nUndx\n\n\n\n\nn15\n\nPrediabetic_U\n\n\n\nn1--n15\n\n\n\n\n\nn17\n\nDiabeticWtComp_U\n\n\n\nn1--n17\n\n\n\n\n\nn19\n\nDiabeticEarly_U\n\n\n\nn1--n19\n\n\n\n\n\nn21\n\nDiabeticLate_U\n\n\n\nn1--n21\n\n\n\n\nn2\n\nDx\n\n\n\n\nn16\n\nPrediabetic_D\n\n\n\nn2--n16\n\n\n\n\n\nn18\n\nDiabeticWtComp_D\n\n\n\nn2--n18\n\n\n\n\n\nn20\n\nDiabeticEarly_D\n\n\n\nn2--n20\n\n\n\n\n\nn22\n\nDiabeticLate_D\n\n\n\nn2--n22\n\n\n\n\nn3\n\nPrediabetic\n\n\n\nn3--n15\n\n\n\n\nn3--n16\n\n\n\n\nn4\n\nDiabeticWtComp\n\n\n\nn4--n17\n\n\n\n\nn4--n18\n\n\n\n\nn5\n\nDiabeticEarly\n\n\n\nn5--n19\n\n\n\n\nn5--n20\n\n\n\n\nn6\n\nDiabeticLate\n\n\n\nn6--n21\n\n\n\n\nn6--n22\n\n\n\n\n\nn7--n15\n\n\n\n\n\nn8--n16\n\n\n\n\n\nn9--n17\n\n\n\n\n\nn10--n18\n\n\n\n\n\nn11--n19\n\n\n\n\n\nn12--n20\n\n\n\n\n\nn13--n21\n\n\n\n\n\nn14--n22\n\n\n\n\n", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "Undx\n", + "\n", + "\n", + "\n", + "\n", + "n15\n", + "\n", + "Prediabetic_U\n", + "\n", + "\n", + "\n", + "n1--n15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n17\n", + "\n", + "DiabeticWtComp_U\n", + "\n", + "\n", + "\n", + "n1--n17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n19\n", + "\n", + "DiabeticEarly_U\n", + "\n", + "\n", + "\n", + "n1--n19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n21\n", + "\n", + "DiabeticLate_U\n", + "\n", + "\n", + "\n", + "n1--n21\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "Dx\n", + "\n", + "\n", + "\n", + "\n", + "n16\n", + "\n", + "Prediabetic_D\n", + "\n", + "\n", + "\n", + "n2--n16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n18\n", + "\n", + "DiabeticWtComp_D\n", + "\n", + "\n", + "\n", + "n2--n18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n20\n", + "\n", + "DiabeticEarly_D\n", + "\n", + "\n", + "\n", + "n2--n20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n22\n", + "\n", + "DiabeticLate_D\n", + "\n", + "\n", + "\n", + "n2--n22\n", + "\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "Prediabetic\n", + "\n", + "\n", + "\n", + "n3--n15\n", + "\n", + "\n", + "\n", + "\n", + "n3--n16\n", + "\n", + "\n", + "\n", + "\n", + "n4\n", + "\n", + "DiabeticWtComp\n", + "\n", + "\n", + "\n", + "n4--n17\n", + "\n", + "\n", + "\n", + "\n", + "n4--n18\n", + "\n", + "\n", + "\n", + "\n", + "n5\n", + "\n", + "DiabeticEarly\n", + "\n", + "\n", + "\n", + "n5--n19\n", + "\n", + "\n", + "\n", + "\n", + "n5--n20\n", + "\n", + "\n", + "\n", + "\n", + "n6\n", + "\n", + "DiabeticLate\n", + "\n", + "\n", + "\n", + "n6--n21\n", + "\n", + "\n", + "\n", + "\n", + "n6--n22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n7--n15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n8--n16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n9--n17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n10--n18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n11--n19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n12--n20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n13--n21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n14--n22\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\"))" ] @@ -781,7 +1319,865 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\nG\n\n\n\ns1\n\nPrediabetic_U\n\n\n\nv1\nPrediabetic_U * rDevelopingDiabetic_U\n\n\n\ns1->v1\n\n\n\n\n\n\ns1->v1\n\n\n\n\n\nv2\nPrediabetic_U * rMortalityPrediabetic\n\n\n\ns1->v2\n\n\n\n\n\n\ns1->v2\n\n\n\n\n\nv15\nPrediabetic_U * rPrediabetic\n\n\n\ns1->v15\n\n\n\n\n\n\ns1->v15\n\n\n\n\n\nsv1\n\nN\n\n\n\ns1->sv1\n\n\n\n\n\ns2\n\nDiabeticWtComp_U\n\n\n\nv3\nDiabeticWtComp_U * rDevelopingEarly_U\n\n\n\ns2->v3\n\n\n\n\n\n\ns2->v3\n\n\n\n\n\nv4\nDiabeticWtComp_U * rMortalityDiabeticWtComp_U\n\n\n\ns2->v4\n\n\n\n\n\n\ns2->v4\n\n\n\n\n\nv16\nDiabeticWtComp_U * rDiabeticWtComp\n\n\n\ns2->v16\n\n\n\n\n\n\ns2->v16\n\n\n\n\n\ns2->sv1\n\n\n\n\n\ns3\n\nDiabeticEarly_U\n\n\n\nv5\nDiabeticEarly_U * rDevelopingLate\n\n\n\ns3->v5\n\n\n\n\n\n\ns3->v5\n\n\n\n\n\nv6\nDiabeticEarly_U * rMortalityDiabeticEarly_U\n\n\n\ns3->v6\n\n\n\n\n\n\ns3->v6\n\n\n\n\n\nv17\nDiabeticEarly_U * rDiabeticEarly\n\n\n\ns3->v17\n\n\n\n\n\n\ns3->v17\n\n\n\n\n\ns3->sv1\n\n\n\n\n\ns4\n\nDiabeticLate_U\n\n\n\nv7\nDiabeticLate_U * rMortalityDiabeticLate\n\n\n\ns4->v7\n\n\n\n\n\n\ns4->v7\n\n\n\n\n\nv18\nDiabeticLate_U * rDiabeticLate\n\n\n\ns4->v18\n\n\n\n\n\n\ns4->v18\n\n\n\n\n\ns4->sv1\n\n\n\n\n\ns5\n\nPrediabetic_D\n\n\n\nv8\nPrediabetic_D * rDevelopingDiabetic_D\n\n\n\ns5->v8\n\n\n\n\n\n\ns5->v8\n\n\n\n\n\nv9\nPrediabetic_D * rMortalityPrediabetic\n\n\n\ns5->v9\n\n\n\n\n\n\ns5->v9\n\n\n\n\n\ns5->sv1\n\n\n\n\n\ns6\n\nDiabeticWtComp_D\n\n\n\nv10\nDiabeticWtComp_D * rDevelopingEarly_D\n\n\n\ns6->v10\n\n\n\n\n\n\ns6->v10\n\n\n\n\n\nv11\nDiabeticWtComp_D * rMortalityDiabeticWtComp_D\n\n\n\ns6->v11\n\n\n\n\n\n\ns6->v11\n\n\n\n\n\ns6->sv1\n\n\n\n\n\ns7\n\nDiabeticEarly_D\n\n\n\nv12\nDiabeticEarly_D * rDevelopingLate\n\n\n\ns7->v12\n\n\n\n\n\n\ns7->v12\n\n\n\n\n\nv13\nDiabeticEarly_D * rMortalityDiabeticEarly_D\n\n\n\ns7->v13\n\n\n\n\n\n\ns7->v13\n\n\n\n\n\ns7->sv1\n\n\n\n\n\ns8\n\nDiabeticLate_D\n\n\n\nv14\nDiabeticLate_D * rMortalityDiabeticLate\n\n\n\ns8->v14\n\n\n\n\n\n\ns8->v14\n\n\n\n\n\ns8->sv1\n\n\n\n\n\np1\n\nrDevelopingDiabetic_U\n\n\n\np1->v1\n\n\n\n\n\np2\n\nrMortalityPrediabetic\n\n\n\np2->v2\n\n\n\n\n\np3\n\nrDevelopingEarly_U\n\n\n\np3->v3\n\n\n\n\n\np4\n\nrMortalityDiabeticEarly_U\n\n\n\np4->v6\n\n\n\n\n\np5\n\nrMortalityDiabeticLate\n\n\n\np5->v7\n\n\n\n\n\np6\n\nrMortalityDiabeticWtComp_U\n\n\n\np6->v4\n\n\n\n\n\np7\n\nrDevelopingLate\n\n\n\np7->v5\n\n\n\n\n\np8\n\nrDevelopingDiabetic_D\n\n\n\np8->v8\n\n\n\n\n\np9\n\nrMortalityPrediabetic\n\n\n\np9->v9\n\n\n\n\n\np10\n\nrDevelopingEarly_D\n\n\n\np10->v10\n\n\n\n\n\np11\n\nrMortalityDiabeticEarly_D\n\n\n\np11->v13\n\n\n\n\n\np12\n\nrMortalityDiabeticLate\n\n\n\np12->v14\n\n\n\n\n\np13\n\nrMortalityDiabeticWtComp_D\n\n\n\np13->v11\n\n\n\n\n\np14\n\nrDevelopingLate\n\n\n\np14->v12\n\n\n\n\n\np15\n\nrPrediabetic\n\n\n\np15->v15\n\n\n\n\n\np16\n\nrDiabeticWtComp\n\n\n\np16->v16\n\n\n\n\n\np17\n\nrDiabeticEarly\n\n\n\np17->v17\n\n\n\n\n\np18\n\nrDiabeticLate\n\n\n\np18->v18\n\n\n\n\n\nfs_2d\n\n\n\n\nfs_4d\n\n\n\n\nfs_6d\n\n\n\n\nfs_7d\n\n\n\n\nfs_9d\n\n\n\n\nfs_11d\n\n\n\n\nfs_13d\n\n\n\n\nfs_14d\n\n\n\n\nv1->s2\n\n\n\n\nDevelopingDiabetic_U\n\n\n\nv2->fs_2d\n\n\n\n\nDeathPrediabetic_U\n\n\n\nv3->s3\n\n\n\n\nDevelopingEarly_U\n\n\n\nv4->fs_4d\n\n\n\n\nDeathDiabeticWtComp_U\n\n\n\nv5->s4\n\n\n\n\nDevelopingLate_U\n\n\n\nv6->fs_6d\n\n\n\n\nDeathDiabeticEarly_U\n\n\n\nv7->fs_7d\n\n\n\n\nDeathDiabeticLate_U\n\n\n\nv8->s6\n\n\n\n\nDevelopingDiabetic_D\n\n\n\nv9->fs_9d\n\n\n\n\nDeathPrediabetic_D\n\n\n\nv10->s7\n\n\n\n\nDevelopingEarly_D\n\n\n\nv11->fs_11d\n\n\n\n\nDeathDiabeticWtComp_D\n\n\n\nv12->s8\n\n\n\n\nDevelopingLate_D\n\n\n\nv13->fs_13d\n\n\n\n\nDeathDiabeticEarly_D\n\n\n\nv14->fs_14d\n\n\n\n\nDeathDiabeticLate_D\n\n\n\nv15->s5\n\n\n\n\nDiagnosisPrediabetic\n\n\n\nv16->s6\n\n\n\n\nDiagnosisDiabeticWtComp\n\n\n\nv17->s7\n\n\n\n\nDiagnosisDiabeticEarly\n\n\n\nv18->s8\n\n\n\n\nDiagnosisDiabeticLate\n\n\n\n", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "Prediabetic_U\n", + "\n", + "\n", + "\n", + "v1\n", + "Prediabetic_U * rDevelopingDiabetic_U\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "Prediabetic_U * rMortalityPrediabetic\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v15\n", + "Prediabetic_U * rPrediabetic\n", + "\n", + "\n", + "\n", + "s1->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "DiabeticWtComp_U\n", + "\n", + "\n", + "\n", + "v3\n", + "DiabeticWtComp_U * rDevelopingEarly_U\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "DiabeticWtComp_U * rMortalityDiabeticWtComp_U\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v16\n", + "DiabeticWtComp_U * rDiabeticWtComp\n", + "\n", + "\n", + "\n", + "s2->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "DiabeticEarly_U\n", + "\n", + "\n", + "\n", + "v5\n", + "DiabeticEarly_U * rDevelopingLate\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "DiabeticEarly_U * rMortalityDiabeticEarly_U\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v17\n", + "DiabeticEarly_U * rDiabeticEarly\n", + "\n", + "\n", + "\n", + "s3->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "DiabeticLate_U\n", + "\n", + "\n", + "\n", + "v7\n", + "DiabeticLate_U * rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "s4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v18\n", + "DiabeticLate_U * rDiabeticLate\n", + "\n", + "\n", + "\n", + "s4->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "Prediabetic_D\n", + "\n", + "\n", + "\n", + "v8\n", + "Prediabetic_D * rDevelopingDiabetic_D\n", + "\n", + "\n", + "\n", + "s5->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "Prediabetic_D * rMortalityPrediabetic\n", + "\n", + "\n", + "\n", + "s5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "DiabeticWtComp_D\n", + "\n", + "\n", + "\n", + "v10\n", + "DiabeticWtComp_D * rDevelopingEarly_D\n", + "\n", + "\n", + "\n", + "s6->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "DiabeticWtComp_D * rMortalityDiabeticWtComp_D\n", + "\n", + "\n", + "\n", + "s6->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7\n", + "\n", + "DiabeticEarly_D\n", + "\n", + "\n", + "\n", + "v12\n", + "DiabeticEarly_D * rDevelopingLate\n", + "\n", + "\n", + "\n", + "s7->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v13\n", + "DiabeticEarly_D * rMortalityDiabeticEarly_D\n", + "\n", + "\n", + "\n", + "s7->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8\n", + "\n", + "DiabeticLate_D\n", + "\n", + "\n", + "\n", + "v14\n", + "DiabeticLate_D * rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "s8->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rDevelopingDiabetic_U\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rMortalityPrediabetic\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rDevelopingEarly_U\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rMortalityDiabeticEarly_U\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "p5->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rMortalityDiabeticWtComp_U\n", + "\n", + "\n", + "\n", + "p6->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "rDevelopingLate\n", + "\n", + "\n", + "\n", + "p7->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "rDevelopingDiabetic_D\n", + "\n", + "\n", + "\n", + "p8->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "rMortalityPrediabetic\n", + "\n", + "\n", + "\n", + "p9->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10\n", + "\n", + "rDevelopingEarly_D\n", + "\n", + "\n", + "\n", + "p10->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p11\n", + "\n", + "rMortalityDiabeticEarly_D\n", + "\n", + "\n", + "\n", + "p11->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p12\n", + "\n", + "rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "p12->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p13\n", + "\n", + "rMortalityDiabeticWtComp_D\n", + "\n", + "\n", + "\n", + "p13->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p14\n", + "\n", + "rDevelopingLate\n", + "\n", + "\n", + "\n", + "p14->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p15\n", + "\n", + "rPrediabetic\n", + "\n", + "\n", + "\n", + "p15->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p16\n", + "\n", + "rDiabeticWtComp\n", + "\n", + "\n", + "\n", + "p16->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p17\n", + "\n", + "rDiabeticEarly\n", + "\n", + "\n", + "\n", + "p17->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p18\n", + "\n", + "rDiabeticLate\n", + "\n", + "\n", + "\n", + "p18->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "fs_9d\n", + "\n", + "\n", + "\n", + "\n", + "fs_11d\n", + "\n", + "\n", + "\n", + "\n", + "fs_13d\n", + "\n", + "\n", + "\n", + "\n", + "fs_14d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s2\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingDiabetic_U\n", + "\n", + "\n", + "\n", + "v2->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "DeathPrediabetic_U\n", + "\n", + "\n", + "\n", + "v3->s3\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingEarly_U\n", + "\n", + "\n", + "\n", + "v4->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticWtComp_U\n", + "\n", + "\n", + "\n", + "v5->s4\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingLate_U\n", + "\n", + "\n", + "\n", + "v6->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticEarly_U\n", + "\n", + "\n", + "\n", + "v7->fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticLate_U\n", + "\n", + "\n", + "\n", + "v8->s6\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingDiabetic_D\n", + "\n", + "\n", + "\n", + "v9->fs_9d\n", + "\n", + "\n", + "\n", + "\n", + "DeathPrediabetic_D\n", + "\n", + "\n", + "\n", + "v10->s7\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingEarly_D\n", + "\n", + "\n", + "\n", + "v11->fs_11d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticWtComp_D\n", + "\n", + "\n", + "\n", + "v12->s8\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingLate_D\n", + "\n", + "\n", + "\n", + "v13->fs_13d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticEarly_D\n", + "\n", + "\n", + "\n", + "v14->fs_14d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticLate_D\n", + "\n", + "\n", + "\n", + "v15->s5\n", + "\n", + "\n", + "\n", + "\n", + "DiagnosisPrediabetic\n", + "\n", + "\n", + "\n", + "v16->s6\n", + "\n", + "\n", + "\n", + "\n", + "DiagnosisDiabeticWtComp\n", + "\n", + "\n", + "\n", + "v17->s7\n", + "\n", + "\n", + "\n", + "\n", + "DiagnosisDiabeticEarly\n", + "\n", + "\n", + "\n", + "v18->s8\n", + "\n", + "\n", + "\n", + "\n", + "DiagnosisDiabeticLate\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\"))" ] @@ -1447,7 +2843,154 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\nG\n\n\n\nn1\n\nNormoglycemic\n\n\n\n\nn9\n\nNormalWeight\n\n\n\nn1--n9\n\n\n\n\n\nn10\n\nOverWeight\n\n\n\nn1--n10\n\n\n\n\n\nn11\n\nObese\n\n\n\nn1--n11\n\n\n\n\nn2\n\nHyperglycemic\n\n\n\n\nn12\n\nPrediabetic_U\n\n\n\nn2--n12\n\n\n\n\n\nn13\n\nPrediabetic_D\n\n\n\nn2--n13\n\n\n\n\nn3\n\nNorm_Hyper\n\n\n\nn3--n9\n\n\n\n\nn3--n10\n\n\n\n\nn3--n11\n\n\n\n\nn3--n12\n\n\n\n\nn3--n13\n\n\n\n\n\nn4--n9\n\n\n\n\n\nn5--n10\n\n\n\n\n\nn6--n11\n\n\n\n\n\nn7--n12\n\n\n\n\n\nn8--n13\n\n\n\n\n", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "n1\n", + "\n", + "Normoglycemic\n", + "\n", + "\n", + "\n", + "\n", + "n9\n", + "\n", + "NormalWeight\n", + "\n", + "\n", + "\n", + "n1--n9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n10\n", + "\n", + "OverWeight\n", + "\n", + "\n", + "\n", + "n1--n10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n11\n", + "\n", + "Obese\n", + "\n", + "\n", + "\n", + "n1--n11\n", + "\n", + "\n", + "\n", + "\n", + "n2\n", + "\n", + "Hyperglycemic\n", + "\n", + "\n", + "\n", + "\n", + "n12\n", + "\n", + "Prediabetic_U\n", + "\n", + "\n", + "\n", + "n2--n12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n13\n", + "\n", + "Prediabetic_D\n", + "\n", + "\n", + "\n", + "n2--n13\n", + "\n", + "\n", + "\n", + "\n", + "n3\n", + "\n", + "Norm_Hyper\n", + "\n", + "\n", + "\n", + "n3--n9\n", + "\n", + "\n", + "\n", + "\n", + "n3--n10\n", + "\n", + "\n", + "\n", + "\n", + "n3--n11\n", + "\n", + "\n", + "\n", + "\n", + "n3--n12\n", + "\n", + "\n", + "\n", + "\n", + "n3--n13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n4--n9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n5--n10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n6--n11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n7--n12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n8--n13\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\"))" ] @@ -3023,7 +4566,1470 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\nG\n\n\n\ns1\n\nNormalWeight\n\n\n\nv1\nNormalWeight * rMortalityWeight\n\n\n\ns1->v1\n\n\n\n\n\n\ns1->v1\n\n\n\n\n\nv2\nNormalWeight * rOverWeight\n\n\n\ns1->v2\n\n\n\n\n\n\ns1->v2\n\n\n\n\n\nv28\nNormalWeight * rIncidenceNW\n\n\n\ns1->v28\n\n\n\n\n\n\ns1->v28\n\n\n\n\n\nsv1\n\nN\n\n\n\ns1->sv1\n\n\n\n\n\ns2\n\nOverWeight\n\n\n\nv3\nOverWeight * rMortalityWeight\n\n\n\ns2->v3\n\n\n\n\n\n\ns2->v3\n\n\n\n\n\nv4\nOverWeight * rObese\n\n\n\ns2->v4\n\n\n\n\n\n\ns2->v4\n\n\n\n\n\nv32\nOverWeight * rIncidenceOW\n\n\n\ns2->v32\n\n\n\n\n\n\ns2->v32\n\n\n\n\n\ns2->sv1\n\n\n\n\n\ns3\n\nObese\n\n\n\nv5\nObese * rMortalityobese\n\n\n\ns3->v5\n\n\n\n\n\n\ns3->v5\n\n\n\n\n\nv33\nObese * rIncidenceOB\n\n\n\ns3->v33\n\n\n\n\n\n\ns3->v33\n\n\n\n\n\ns3->sv1\n\n\n\n\n\ns4\n\nPrediabetic_U\n\n\n\nv7\nPrediabetic_U * rDevelopingDiabetic_U\n\n\n\ns4->v7\n\n\n\n\n\n\ns4->v7\n\n\n\n\n\nv8\nPrediabetic_U * rMortalityPrediabetic\n\n\n\ns4->v8\n\n\n\n\n\n\ns4->v8\n\n\n\n\n\nv21\nPrediabetic_U * rPrediabetic\n\n\n\ns4->v21\n\n\n\n\n\n\ns4->v21\n\n\n\n\n\nv29\nPrediabetic_U * rRecovery\n\n\n\ns4->v29\n\n\n\n\n\n\ns4->v29\n\n\n\n\n\nv30\nPrediabetic_U * rRecovery\n\n\n\ns4->v30\n\n\n\n\n\n\ns4->v30\n\n\n\n\n\nv31\nPrediabetic_U * rRecovery\n\n\n\ns4->v31\n\n\n\n\n\n\ns4->v31\n\n\n\n\n\ns4->sv1\n\n\n\n\n\ns5\n\nDiabeticWtComp_U\n\n\n\nv9\nDiabeticWtComp_U * rDevelopingEarly_U\n\n\n\ns5->v9\n\n\n\n\n\n\ns5->v9\n\n\n\n\n\nv10\nDiabeticWtComp_U * rMortalityDiabeticWtComp_U\n\n\n\ns5->v10\n\n\n\n\n\n\ns5->v10\n\n\n\n\n\nv22\nDiabeticWtComp_U * rDiabeticWtComp\n\n\n\ns5->v22\n\n\n\n\n\n\ns5->v22\n\n\n\n\n\ns5->sv1\n\n\n\n\n\ns6\n\nDiabeticEarly_U\n\n\n\nv11\nDiabeticEarly_U * rDevelopingLate\n\n\n\ns6->v11\n\n\n\n\n\n\ns6->v11\n\n\n\n\n\nv12\nDiabeticEarly_U * rMortalityDiabeticEarly_U\n\n\n\ns6->v12\n\n\n\n\n\n\ns6->v12\n\n\n\n\n\nv23\nDiabeticEarly_U * rDiabeticEarly\n\n\n\ns6->v23\n\n\n\n\n\n\ns6->v23\n\n\n\n\n\ns6->sv1\n\n\n\n\n\ns7\n\nDiabeticLate_U\n\n\n\nv13\nDiabeticLate_U * rMortalityDiabeticLate\n\n\n\ns7->v13\n\n\n\n\n\n\ns7->v13\n\n\n\n\n\nv24\nDiabeticLate_U * rDiabeticLate\n\n\n\ns7->v24\n\n\n\n\n\n\ns7->v24\n\n\n\n\n\ns7->sv1\n\n\n\n\n\ns8\n\nPrediabetic_D\n\n\n\nv14\nPrediabetic_D * rDevelopingDiabetic_D\n\n\n\ns8->v14\n\n\n\n\n\n\ns8->v14\n\n\n\n\n\nv15\nPrediabetic_D * rMortalityPrediabetic\n\n\n\ns8->v15\n\n\n\n\n\n\ns8->v15\n\n\n\n\n\nv25\nPrediabetic_D * rRecovery\n\n\n\ns8->v25\n\n\n\n\n\n\ns8->v25\n\n\n\n\n\nv26\nPrediabetic_D * rRecovery\n\n\n\ns8->v26\n\n\n\n\n\n\ns8->v26\n\n\n\n\n\nv27\nPrediabetic_D * rRecovery\n\n\n\ns8->v27\n\n\n\n\n\n\ns8->v27\n\n\n\n\n\ns8->sv1\n\n\n\n\n\ns9\n\nDiabeticWtComp_D\n\n\n\nv16\nDiabeticWtComp_D * rDevelopingEarly_D\n\n\n\ns9->v16\n\n\n\n\n\n\ns9->v16\n\n\n\n\n\nv17\nDiabeticWtComp_D * rMortalityDiabeticWtComp_D\n\n\n\ns9->v17\n\n\n\n\n\n\ns9->v17\n\n\n\n\n\ns9->sv1\n\n\n\n\n\ns10\n\nDiabeticEarly_D\n\n\n\nv18\nDiabeticEarly_D * rDevelopingLate\n\n\n\ns10->v18\n\n\n\n\n\n\ns10->v18\n\n\n\n\n\nv19\nDiabeticEarly_D * rMortalityDiabeticEarly_D\n\n\n\ns10->v19\n\n\n\n\n\n\ns10->v19\n\n\n\n\n\ns10->sv1\n\n\n\n\n\ns11\n\nDiabeticLate_D\n\n\n\nv20\nDiabeticLate_D * rMortalityDiabeticLate\n\n\n\ns11->v20\n\n\n\n\n\n\ns11->v20\n\n\n\n\n\ns11->sv1\n\n\n\n\n\np1\n\nrBirth\n\n\n\nv6\nN * rBirth\n\n\n\np1->v6\n\n\n\n\n\np2\n\nrMortalityWeight\n\n\n\np2->v1\n\n\n\n\n\np2->v3\n\n\n\n\n\np3\n\nrObese\n\n\n\np3->v4\n\n\n\n\n\np4\n\nrOverWeight\n\n\n\np4->v2\n\n\n\n\n\np5\n\nrMortalityobese\n\n\n\np5->v5\n\n\n\n\n\np6\n\nrDevelopingDiabetic_U\n\n\n\np6->v7\n\n\n\n\n\np7\n\nrMortalityPrediabetic\n\n\n\np7->v8\n\n\n\n\n\np8\n\nrDevelopingEarly_U\n\n\n\np8->v9\n\n\n\n\n\np9\n\nrMortalityDiabeticEarly_U\n\n\n\np9->v12\n\n\n\n\n\np10\n\nrMortalityDiabeticLate\n\n\n\np10->v13\n\n\n\n\n\np11\n\nrMortalityDiabeticWtComp_U\n\n\n\np11->v10\n\n\n\n\n\np12\n\nrDevelopingLate\n\n\n\np12->v11\n\n\n\n\n\np13\n\nrDevelopingDiabetic_D\n\n\n\np13->v14\n\n\n\n\n\np14\n\nrMortalityPrediabetic\n\n\n\np14->v15\n\n\n\n\n\np15\n\nrDevelopingEarly_D\n\n\n\np15->v16\n\n\n\n\n\np16\n\nrMortalityDiabeticEarly_D\n\n\n\np16->v19\n\n\n\n\n\np17\n\nrMortalityDiabeticLate\n\n\n\np17->v20\n\n\n\n\n\np18\n\nrMortalityDiabeticWtComp_D\n\n\n\np18->v17\n\n\n\n\n\np19\n\nrDevelopingLate\n\n\n\np19->v18\n\n\n\n\n\np20\n\nrPrediabetic\n\n\n\np20->v21\n\n\n\n\n\np21\n\nrDiabeticWtComp\n\n\n\np21->v22\n\n\n\n\n\np22\n\nrDiabeticEarly\n\n\n\np22->v23\n\n\n\n\n\np23\n\nrDiabeticLate\n\n\n\np23->v24\n\n\n\n\n\np24\n\nrRecovery\n\n\n\np24->v25\n\n\n\n\n\np24->v26\n\n\n\n\n\np24->v27\n\n\n\n\n\np24->v29\n\n\n\n\n\np24->v30\n\n\n\n\n\np24->v31\n\n\n\n\n\np25\n\nrIncidenceNW\n\n\n\np25->v28\n\n\n\n\n\np26\n\nrIncidenceOW\n\n\n\np26->v32\n\n\n\n\n\np27\n\nrIncidenceOB\n\n\n\np27->v33\n\n\n\n\n\nfs_6u\n\n\n\n\nfs_6u->v6\n\n\n\n\n\n\nfs_1d\n\n\n\n\nfs_3d\n\n\n\n\nfs_5d\n\n\n\n\nfs_8d\n\n\n\n\nfs_10d\n\n\n\n\nfs_12d\n\n\n\n\nfs_13d\n\n\n\n\nfs_15d\n\n\n\n\nfs_17d\n\n\n\n\nfs_19d\n\n\n\n\nfs_20d\n\n\n\n\nv1->fs_1d\n\n\n\n\nf_DeathNormalWeight\n\n\n\nv2->s2\n\n\n\n\nf_BecomingOverWeight\n\n\n\nv3->fs_3d\n\n\n\n\nf_DeathOverWeight\n\n\n\nv4->s3\n\n\n\n\nf_BecomingObese\n\n\n\nv5->fs_5d\n\n\n\n\nf_DeathObese\n\n\n\nv6->s1\n\n\n\n\nf_NewBorn\n\n\n\nv7->s5\n\n\n\n\nDevelopingDiabetic_U\n\n\n\nv8->fs_8d\n\n\n\n\nDeathPrediabetic_U\n\n\n\nv9->s6\n\n\n\n\nDevelopingEarly_U\n\n\n\nv10->fs_10d\n\n\n\n\nDeathDiabeticWtComp_U\n\n\n\nv11->s7\n\n\n\n\nDevelopingLate_U\n\n\n\nv12->fs_12d\n\n\n\n\nDeathDiabeticEarly_U\n\n\n\nv13->fs_13d\n\n\n\n\nDeathDiabeticLate_U\n\n\n\nv14->s9\n\n\n\n\nDevelopingDiabetic_D\n\n\n\nv15->fs_15d\n\n\n\n\nDeathPrediabetic_D\n\n\n\nv16->s10\n\n\n\n\nDevelopingEarly_D\n\n\n\nv17->fs_17d\n\n\n\n\nDeathDiabeticWtComp_D\n\n\n\nv18->s11\n\n\n\n\nDevelopingLate_D\n\n\n\nv19->fs_19d\n\n\n\n\nDeathDiabeticEarly_D\n\n\n\nv20->fs_20d\n\n\n\n\nDeathDiabeticLate_D\n\n\n\nv21->s8\n\n\n\n\nDiagnosisPrediabetic\n\n\n\nv22->s9\n\n\n\n\nDiagnosisDiabeticWtComp\n\n\n\nv23->s10\n\n\n\n\nDiagnosisDiabeticEarly\n\n\n\nv24->s11\n\n\n\n\nDiagnosisDiabeticLate\n\n\n\nv25->s2\n\n\n\n\nfRecoveryToOWFromDx\n\n\n\nv26->s1\n\n\n\n\nfRecoveryToNWFromDx\n\n\n\nv27->s3\n\n\n\n\nfRecoveryToOBFromDx\n\n\n\nv28->s4\n\n\n\n\nfDevelopingPrediabeticNW\n\n\n\nv29->s2\n\n\n\n\nfRecoveryToOWFromUx\n\n\n\nv30->s3\n\n\n\n\nfRecoveryToOBFromUx\n\n\n\nv31->s1\n\n\n\n\nfRecoveryToNWFromUx\n\n\n\nv32->s4\n\n\n\n\nfDevelopingPrediabeticOW\n\n\n\nv33->s4\n\n\n\n\nfDevelopingPrediabeticOB\n\n\n\nsv1->v6\n\n\n\n\n\n", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "NormalWeight\n", + "\n", + "\n", + "\n", + "v1\n", + "NormalWeight * rMortalityWeight\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "NormalWeight * rOverWeight\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v28\n", + "NormalWeight * rIncidenceNW\n", + "\n", + "\n", + "\n", + "s1->v28\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v28\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "OverWeight\n", + "\n", + "\n", + "\n", + "v3\n", + "OverWeight * rMortalityWeight\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "OverWeight * rObese\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v32\n", + "OverWeight * rIncidenceOW\n", + "\n", + "\n", + "\n", + "s2->v32\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v32\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Obese\n", + "\n", + "\n", + "\n", + "v5\n", + "Obese * rMortalityobese\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v33\n", + "Obese * rIncidenceOB\n", + "\n", + "\n", + "\n", + "s3->v33\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v33\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "Prediabetic_U\n", + "\n", + "\n", + "\n", + "v7\n", + "Prediabetic_U * rDevelopingDiabetic_U\n", + "\n", + "\n", + "\n", + "s4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "Prediabetic_U * rMortalityPrediabetic\n", + "\n", + "\n", + "\n", + "s4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v21\n", + "Prediabetic_U * rPrediabetic\n", + "\n", + "\n", + "\n", + "s4->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v29\n", + "Prediabetic_U * rRecovery\n", + "\n", + "\n", + "\n", + "s4->v29\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v29\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v30\n", + "Prediabetic_U * rRecovery\n", + "\n", + "\n", + "\n", + "s4->v30\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v30\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v31\n", + "Prediabetic_U * rRecovery\n", + "\n", + "\n", + "\n", + "s4->v31\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v31\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "DiabeticWtComp_U\n", + "\n", + "\n", + "\n", + "v9\n", + "DiabeticWtComp_U * rDevelopingEarly_U\n", + "\n", + "\n", + "\n", + "s5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10\n", + "DiabeticWtComp_U * rMortalityDiabeticWtComp_U\n", + "\n", + "\n", + "\n", + "s5->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v22\n", + "DiabeticWtComp_U * rDiabeticWtComp\n", + "\n", + "\n", + "\n", + "s5->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "DiabeticEarly_U\n", + "\n", + "\n", + "\n", + "v11\n", + "DiabeticEarly_U * rDevelopingLate\n", + "\n", + "\n", + "\n", + "s6->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v12\n", + "DiabeticEarly_U * rMortalityDiabeticEarly_U\n", + "\n", + "\n", + "\n", + "s6->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v23\n", + "DiabeticEarly_U * rDiabeticEarly\n", + "\n", + "\n", + "\n", + "s6->v23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7\n", + "\n", + "DiabeticLate_U\n", + "\n", + "\n", + "\n", + "v13\n", + "DiabeticLate_U * rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "s7->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v24\n", + "DiabeticLate_U * rDiabeticLate\n", + "\n", + "\n", + "\n", + "s7->v24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8\n", + "\n", + "Prediabetic_D\n", + "\n", + "\n", + "\n", + "v14\n", + "Prediabetic_D * rDevelopingDiabetic_D\n", + "\n", + "\n", + "\n", + "s8->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v15\n", + "Prediabetic_D * rMortalityPrediabetic\n", + "\n", + "\n", + "\n", + "s8->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v25\n", + "Prediabetic_D * rRecovery\n", + "\n", + "\n", + "\n", + "s8->v25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v26\n", + "Prediabetic_D * rRecovery\n", + "\n", + "\n", + "\n", + "s8->v26\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v26\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v27\n", + "Prediabetic_D * rRecovery\n", + "\n", + "\n", + "\n", + "s8->v27\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v27\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9\n", + "\n", + "DiabeticWtComp_D\n", + "\n", + "\n", + "\n", + "v16\n", + "DiabeticWtComp_D * rDevelopingEarly_D\n", + "\n", + "\n", + "\n", + "s9->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v17\n", + "DiabeticWtComp_D * rMortalityDiabeticWtComp_D\n", + "\n", + "\n", + "\n", + "s9->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10\n", + "\n", + "DiabeticEarly_D\n", + "\n", + "\n", + "\n", + "v18\n", + "DiabeticEarly_D * rDevelopingLate\n", + "\n", + "\n", + "\n", + "s10->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v19\n", + "DiabeticEarly_D * rMortalityDiabeticEarly_D\n", + "\n", + "\n", + "\n", + "s10->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s10->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11\n", + "\n", + "DiabeticLate_D\n", + "\n", + "\n", + "\n", + "v20\n", + "DiabeticLate_D * rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "s11->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s11->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rBirth\n", + "\n", + "\n", + "\n", + "v6\n", + "N * rBirth\n", + "\n", + "\n", + "\n", + "p1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rMortalityWeight\n", + "\n", + "\n", + "\n", + "p2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rObese\n", + "\n", + "\n", + "\n", + "p3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rOverWeight\n", + "\n", + "\n", + "\n", + "p4->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rMortalityobese\n", + "\n", + "\n", + "\n", + "p5->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rDevelopingDiabetic_U\n", + "\n", + "\n", + "\n", + "p6->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "rMortalityPrediabetic\n", + "\n", + "\n", + "\n", + "p7->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "rDevelopingEarly_U\n", + "\n", + "\n", + "\n", + "p8->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "rMortalityDiabeticEarly_U\n", + "\n", + "\n", + "\n", + "p9->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10\n", + "\n", + "rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "p10->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p11\n", + "\n", + "rMortalityDiabeticWtComp_U\n", + "\n", + "\n", + "\n", + "p11->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p12\n", + "\n", + "rDevelopingLate\n", + "\n", + "\n", + "\n", + "p12->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p13\n", + "\n", + "rDevelopingDiabetic_D\n", + "\n", + "\n", + "\n", + "p13->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p14\n", + "\n", + "rMortalityPrediabetic\n", + "\n", + "\n", + "\n", + "p14->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p15\n", + "\n", + "rDevelopingEarly_D\n", + "\n", + "\n", + "\n", + "p15->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p16\n", + "\n", + "rMortalityDiabeticEarly_D\n", + "\n", + "\n", + "\n", + "p16->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p17\n", + "\n", + "rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "p17->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p18\n", + "\n", + "rMortalityDiabeticWtComp_D\n", + "\n", + "\n", + "\n", + "p18->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p19\n", + "\n", + "rDevelopingLate\n", + "\n", + "\n", + "\n", + "p19->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p20\n", + "\n", + "rPrediabetic\n", + "\n", + "\n", + "\n", + "p20->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p21\n", + "\n", + "rDiabeticWtComp\n", + "\n", + "\n", + "\n", + "p21->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p22\n", + "\n", + "rDiabeticEarly\n", + "\n", + "\n", + "\n", + "p22->v23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p23\n", + "\n", + "rDiabeticLate\n", + "\n", + "\n", + "\n", + "p23->v24\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p24\n", + "\n", + "rRecovery\n", + "\n", + "\n", + "\n", + "p24->v25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p24->v26\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p24->v27\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p24->v29\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p24->v30\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p24->v31\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p25\n", + "\n", + "rIncidenceNW\n", + "\n", + "\n", + "\n", + "p25->v28\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p26\n", + "\n", + "rIncidenceOW\n", + "\n", + "\n", + "\n", + "p26->v32\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p27\n", + "\n", + "rIncidenceOB\n", + "\n", + "\n", + "\n", + "p27->v33\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_6u\n", + "\n", + "\n", + "\n", + "\n", + "fs_6u->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "fs_10d\n", + "\n", + "\n", + "\n", + "\n", + "fs_12d\n", + "\n", + "\n", + "\n", + "\n", + "fs_13d\n", + "\n", + "\n", + "\n", + "\n", + "fs_15d\n", + "\n", + "\n", + "\n", + "\n", + "fs_17d\n", + "\n", + "\n", + "\n", + "\n", + "fs_19d\n", + "\n", + "\n", + "\n", + "\n", + "fs_20d\n", + "\n", + "\n", + "\n", + "\n", + "v1->fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathNormalWeight\n", + "\n", + "\n", + "\n", + "v2->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingOverWeight\n", + "\n", + "\n", + "\n", + "v3->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathOverWeight\n", + "\n", + "\n", + "\n", + "v4->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingObese\n", + "\n", + "\n", + "\n", + "v5->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathObese\n", + "\n", + "\n", + "\n", + "v6->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_NewBorn\n", + "\n", + "\n", + "\n", + "v7->s5\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingDiabetic_U\n", + "\n", + "\n", + "\n", + "v8->fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "DeathPrediabetic_U\n", + "\n", + "\n", + "\n", + "v9->s6\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingEarly_U\n", + "\n", + "\n", + "\n", + "v10->fs_10d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticWtComp_U\n", + "\n", + "\n", + "\n", + "v11->s7\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingLate_U\n", + "\n", + "\n", + "\n", + "v12->fs_12d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticEarly_U\n", + "\n", + "\n", + "\n", + "v13->fs_13d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticLate_U\n", + "\n", + "\n", + "\n", + "v14->s9\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingDiabetic_D\n", + "\n", + "\n", + "\n", + "v15->fs_15d\n", + "\n", + "\n", + "\n", + "\n", + "DeathPrediabetic_D\n", + "\n", + "\n", + "\n", + "v16->s10\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingEarly_D\n", + "\n", + "\n", + "\n", + "v17->fs_17d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticWtComp_D\n", + "\n", + "\n", + "\n", + "v18->s11\n", + "\n", + "\n", + "\n", + "\n", + "DevelopingLate_D\n", + "\n", + "\n", + "\n", + "v19->fs_19d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticEarly_D\n", + "\n", + "\n", + "\n", + "v20->fs_20d\n", + "\n", + "\n", + "\n", + "\n", + "DeathDiabeticLate_D\n", + "\n", + "\n", + "\n", + "v21->s8\n", + "\n", + "\n", + "\n", + "\n", + "DiagnosisPrediabetic\n", + "\n", + "\n", + "\n", + "v22->s9\n", + "\n", + "\n", + "\n", + "\n", + "DiagnosisDiabeticWtComp\n", + "\n", + "\n", + "\n", + "v23->s10\n", + "\n", + "\n", + "\n", + "\n", + "DiagnosisDiabeticEarly\n", + "\n", + "\n", + "\n", + "v24->s11\n", + "\n", + "\n", + "\n", + "\n", + "DiagnosisDiabeticLate\n", + "\n", + "\n", + "\n", + "v25->s2\n", + "\n", + "\n", + "\n", + "\n", + "fRecoveryToOWFromDx\n", + "\n", + "\n", + "\n", + "v26->s1\n", + "\n", + "\n", + "\n", + "\n", + "fRecoveryToNWFromDx\n", + "\n", + "\n", + "\n", + "v27->s3\n", + "\n", + "\n", + "\n", + "\n", + "fRecoveryToOBFromDx\n", + "\n", + "\n", + "\n", + "v28->s4\n", + "\n", + "\n", + "\n", + "\n", + "fDevelopingPrediabeticNW\n", + "\n", + "\n", + "\n", + "v29->s2\n", + "\n", + "\n", + "\n", + "\n", + "fRecoveryToOWFromUx\n", + "\n", + "\n", + "\n", + "v30->s3\n", + "\n", + "\n", + "\n", + "\n", + "fRecoveryToOBFromUx\n", + "\n", + "\n", + "\n", + "v31->s1\n", + "\n", + "\n", + "\n", + "\n", + "fRecoveryToNWFromUx\n", + "\n", + "\n", + "\n", + "v32->s4\n", + "\n", + "\n", + "\n", + "\n", + "fDevelopingPrediabeticOW\n", + "\n", + "\n", + "\n", + "v33->s4\n", + "\n", + "\n", + "\n", + "\n", + "fDevelopingPrediabeticOB\n", + "\n", + "\n", + "\n", + "sv1->v6\n", + "\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\"))" ] @@ -3283,7 +6289,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.2", + "display_name": "Julia 1.9.3", "language": "julia", "name": "julia-1.9" }, @@ -3291,9 +6297,9 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.2" + "version": "1.9.3" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } 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 new file mode 100644 index 00000000..e6f0f6e8 --- /dev/null +++ b/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/diabetes_diagnose-checkpoint.ipynb @@ -0,0 +1,5169 @@ +{ + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1Pop
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_death
22f_progress
33f_strata
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
121
231
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_death*
2v_progress*
3v_strata*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1112
2122
3132
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rDeath
2rProgress
3rStrata
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1111
2221
3331
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "Pop\n", + "\n", + "\n", + "\n", + "v1\n", + "rDeath * Pop\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "rProgress * Pop\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3\n", + "rStrata * Pop\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rDeath\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rProgress\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rStrata\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "v1->fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "f_death\n", + "\n", + "\n", + "\n", + "v2->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_progress\n", + "\n", + "\n", + "\n", + "v3->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_strata\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "Pop\n", + "\n", + "\n", + "\n", + "v1\n", + "rDeath * Pop\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "rProgress * Pop\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3\n", + "rStrata * Pop\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rDeath\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rProgress\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rStrata\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "v1->fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "f_death\n", + "\n", + "\n", + "\n", + "v2->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_progress\n", + "\n", + "\n", + "\n", + "v3->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_strata\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1U
2D
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_death_U
22f_progress_U
33f_death_D
44f_progress_D
55f_strata
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
121
242
352
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
351
432
542
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_death_U*
2v_progress_U*
3v_death_D*
4v_progress_D*
5v_strata*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1112
2122
3232
4242
5152
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rDeath_U
2rProgress_U
3rDeath_D
4rProgress_D
5rDiagnosis
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1111
2221
3331
4441
5551
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "U\n", + "\n", + "\n", + "\n", + "v1\n", + "rDeath_U * U\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "rProgress_U * U\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "rDiagnosis * U\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "D\n", + "\n", + "\n", + "\n", + "v3\n", + "rDeath_D * D\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "rProgress_D * D\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rDeath_U\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rProgress_U\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rDeath_D\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rProgress_D\n", + "\n", + "\n", + "\n", + "p4->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rDiagnosis\n", + "\n", + "\n", + "\n", + "p5->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "v1->fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_U\n", + "\n", + "\n", + "\n", + "v2->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_U\n", + "\n", + "\n", + "\n", + "v3->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_D\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_D\n", + "\n", + "\n", + "\n", + "v5->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_strata\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "U\n", + "\n", + "\n", + "\n", + "v1\n", + "rDeath_U * U\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "rProgress_U * U\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "rDiagnosis * U\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "D\n", + "\n", + "\n", + "\n", + "v3\n", + "rDeath_D * D\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "rProgress_D * D\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rDeath_U\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rProgress_U\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rDeath_D\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rProgress_D\n", + "\n", + "\n", + "\n", + "p4->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rDiagnosis\n", + "\n", + "\n", + "\n", + "p5->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "v1->fs_1d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_U\n", + "\n", + "\n", + "\n", + "v2->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_U\n", + "\n", + "\n", + "\n", + "v3->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_D\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_D\n", + "\n", + "\n", + "\n", + "v5->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_strata\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1PreDiabetic
2DiabeticWtComp
3DiabeticEarly
4DiabeticLate
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
441
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_DevelopingDiabetic
24f_DeathPreDiabetic
32f_DevelopingEarly
45f_DeathDiabeticWtComp
53f_DevelopingLate
66f_DeathDiabeticEarly
77f_DeathDiabeticLate
88f_DiagnosePreDiabetic
99f_DiagnoseDiabeticWtComp
1010f_DiagnoseDiabeticEarly
1111f_DiagnoseDiabeticLate
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
181
212
392
433
5103
654
7114
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
381
432
542
692
753
863
9103
1074
11114
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_DevelopingDiabetic*
2v_DevelopingEarly*
3v_DevelopingLate*
4v_DeathPreDiabetic*
5v_DeathDiabeticWtComp*
6v_DeathDiabeticEarly*
7v_DeathDiabeticLate*
8v_DiagnosePreDiabetic*
9v_DiagnoseDiabeticWtComp*
10v_DiagnoseDiabeticEarly*
11v_DiagnoseDiabeticLate*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1111
2221
3331
4141
5251
6361
7471
8181
9291
103101
114111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1rDevelopingDiabetic
2rDevelopingEarly
3rDevelopingLate
4rMortalityPreDiabetic
5rMortalityDiabeticEarly
6rMortalityDiabeticLate
7rMortalityDiabeticWtComp
8rDiagnosePreDiabetic
9rDiagnoseDiabeticWtComp
10rDiagnoseDiabeticEarly
11rDiagnoseDiabeticLate
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1112
2222
3332
4442
5752
6562
7672
8882
9992
1010102
1111112
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "PreDiabetic\n", + "\n", + "\n", + "\n", + "v1\n", + "PreDiabetic * rDevelopingDiabetic\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "PreDiabetic * rMortalityPreDiabetic\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "PreDiabetic * rDiagnosePreDiabetic\n", + "\n", + "\n", + "\n", + "s1->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "DiabeticWtComp\n", + "\n", + "\n", + "\n", + "v2\n", + "DiabeticWtComp * rDevelopingEarly\n", + "\n", + "\n", + "\n", + "s2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "DiabeticWtComp * rMortalityDiabeticWtComp\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "DiabeticWtComp * rDiagnoseDiabeticWtComp\n", + "\n", + "\n", + "\n", + "s2->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "DiabeticEarly\n", + "\n", + "\n", + "\n", + "v3\n", + "DiabeticEarly * rDevelopingLate\n", + "\n", + "\n", + "\n", + "s3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "DiabeticEarly * rMortalityDiabeticEarly\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10\n", + "DiabeticEarly * rDiagnoseDiabeticEarly\n", + "\n", + "\n", + "\n", + "s3->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "DiabeticLate\n", + "\n", + "\n", + "\n", + "v7\n", + "DiabeticLate * rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "s4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "DiabeticLate * rDiagnoseDiabeticLate\n", + "\n", + "\n", + "\n", + "s4->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rDevelopingDiabetic\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rDevelopingEarly\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rDevelopingLate\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rMortalityPreDiabetic\n", + "\n", + "\n", + "\n", + "p4->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rMortalityDiabeticEarly\n", + "\n", + "\n", + "\n", + "p5->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "p6->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "rMortalityDiabeticWtComp\n", + "\n", + "\n", + "\n", + "p7->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "rDiagnosePreDiabetic\n", + "\n", + "\n", + "\n", + "p8->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "rDiagnoseDiabeticWtComp\n", + "\n", + "\n", + "\n", + "p9->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10\n", + "\n", + "rDiagnoseDiabeticEarly\n", + "\n", + "\n", + "\n", + "p10->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p11\n", + "\n", + "rDiagnoseDiabeticLate\n", + "\n", + "\n", + "\n", + "p11->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_DevelopingDiabetic\n", + "\n", + "\n", + "\n", + "v2->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_DevelopingEarly\n", + "\n", + "\n", + "\n", + "v3->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_DevelopingLate\n", + "\n", + "\n", + "\n", + "v4->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathPreDiabetic\n", + "\n", + "\n", + "\n", + "v5->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathDiabeticWtComp\n", + "\n", + "\n", + "\n", + "v6->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathDiabeticEarly\n", + "\n", + "\n", + "\n", + "v7->fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathDiabeticLate\n", + "\n", + "\n", + "\n", + "v8->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_DiagnosePreDiabetic\n", + "\n", + "\n", + "\n", + "v9->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_DiagnoseDiabeticWtComp\n", + "\n", + "\n", + "\n", + "v10->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_DiagnoseDiabeticEarly\n", + "\n", + "\n", + "\n", + "v11->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_DiagnoseDiabeticLate\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1(:U, :PreDiabetic)
2(:D, :PreDiabetic)
3(:U, :DiabeticWtComp)
4(:D, :DiabeticWtComp)
5(:U, :DiabeticEarly)
6(:D, :DiabeticEarly)
7(:U, :DiabeticLate)
8(:D, :DiabeticLate)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1(:N, :N)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
441
551
661
771
881
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11(:f_progress_U, :f_DevelopingDiabetic)
22(:f_progress_D, :f_DevelopingDiabetic)
37(:f_death_U, :f_DeathPreDiabetic)
48(:f_death_D, :f_DeathPreDiabetic)
53(:f_progress_U, :f_DevelopingEarly)
64(:f_progress_D, :f_DevelopingEarly)
79(:f_death_U, :f_DeathDiabeticWtComp)
810(:f_death_D, :f_DeathDiabeticWtComp)
95(:f_progress_U, :f_DevelopingLate)
106(:f_progress_D, :f_DevelopingLate)
1111(:f_death_U, :f_DeathDiabeticEarly)
1212(:f_death_D, :f_DeathDiabeticEarly)
1313(:f_death_U, :f_DeathDiabeticLate)
1414(:f_death_D, :f_DeathDiabeticLate)
1515(:f_strata, :f_DiagnosePreDiabetic)
1616(:f_strata, :f_DiagnoseDiabeticWtComp)
1717(:f_strata, :f_DiagnoseDiabeticEarly)
1818(:f_strata, :f_DiagnoseDiabeticLate)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
1152
213
324
4164
555
666
7176
897
9108
10188
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
222
331
442
5151
653
764
873
984
10163
1195
12106
13115
14126
15175
16137
17148
18187
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1(:v_progress_U, :v_DevelopingDiabetic)(:*, :*)
2(:v_progress_D, :v_DevelopingDiabetic)(:*, :*)
3(:v_progress_U, :v_DevelopingEarly)(:*, :*)
4(:v_progress_D, :v_DevelopingEarly)(:*, :*)
5(:v_progress_U, :v_DevelopingLate)(:*, :*)
6(:v_progress_D, :v_DevelopingLate)(:*, :*)
7(:v_death_U, :v_DeathPreDiabetic)(:*, :*)
8(:v_death_D, :v_DeathPreDiabetic)(:*, :*)
9(:v_death_U, :v_DeathDiabeticWtComp)(:*, :*)
10(:v_death_D, :v_DeathDiabeticWtComp)(:*, :*)
11(:v_death_U, :v_DeathDiabeticEarly)(:*, :*)
12(:v_death_D, :v_DeathDiabeticEarly)(:*, :*)
13(:v_death_U, :v_DeathDiabeticLate)(:*, :*)
14(:v_death_D, :v_DeathDiabeticLate)(:*, :*)
15(:v_strata, :v_DiagnosePreDiabetic)(:*, :*)
16(:v_strata, :v_DiagnoseDiabeticWtComp)(:*, :*)
17(:v_strata, :v_DiagnoseDiabeticEarly)(:*, :*)
18(:v_strata, :v_DiagnoseDiabeticLate)(:*, :*)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
111(2, 1)
222(2, 1)
333(2, 1)
444(2, 1)
555(2, 1)
666(2, 1)
717(2, 1)
828(2, 1)
939(2, 1)
10410(2, 1)
11511(2, 1)
12612(2, 1)
13713(2, 1)
14814(2, 1)
15115(2, 1)
16316(2, 1)
17517(2, 1)
18718(2, 1)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1(:rProgress_U, :rDevelopingDiabetic)
2(:rProgress_D, :rDevelopingDiabetic)
3(:rProgress_U, :rDevelopingEarly)
4(:rProgress_D, :rDevelopingEarly)
5(:rProgress_U, :rDevelopingLate)
6(:rProgress_D, :rDevelopingLate)
7(:rDeath_U, :rMortalityPreDiabetic)
8(:rDeath_D, :rMortalityPreDiabetic)
9(:rDeath_U, :rMortalityDiabeticEarly)
10(:rDeath_D, :rMortalityDiabeticEarly)
11(:rDeath_U, :rMortalityDiabeticLate)
12(:rDeath_D, :rMortalityDiabeticLate)
13(:rDeath_U, :rMortalityDiabeticWtComp)
14(:rDeath_D, :rMortalityDiabeticWtComp)
15(:rDiagnosis, :rDiagnosePreDiabetic)
16(:rDiagnosis, :rDiagnoseDiabeticWtComp)
17(:rDiagnosis, :rDiagnoseDiabeticEarly)
18(:rDiagnosis, :rDiagnoseDiabeticLate)
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
111(1, 2)
222(1, 2)
333(1, 2)
444(1, 2)
555(1, 2)
666(1, 2)
777(1, 2)
888(1, 2)
9139(1, 2)
101410(1, 2)
11911(1, 2)
121012(1, 2)
131113(1, 2)
141214(1, 2)
151515(1, 2)
161616(1, 2)
171717(1, 2)
181818(1, 2)
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "U\n", + " PreDiabetic\n", + "\n", + "\n", + "\n", + "v1\n", + "((:*, :*))((:rProgress_U, :rDevelopingDiabetic), (:U, :PreDiabetic))\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "((:*, :*))((:rDeath_U, :rMortalityPreDiabetic), (:U, :PreDiabetic))\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v15\n", + "((:*, :*))((:rDiagnosis, :rDiagnosePreDiabetic), (:U, :PreDiabetic))\n", + "\n", + "\n", + "\n", + "s1->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + " N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "D\n", + " PreDiabetic\n", + "\n", + "\n", + "\n", + "v2\n", + "((:*, :*))((:rProgress_D, :rDevelopingDiabetic), (:D, :PreDiabetic))\n", + "\n", + "\n", + "\n", + "s2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "((:*, :*))((:rDeath_D, :rMortalityPreDiabetic), (:D, :PreDiabetic))\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "U\n", + " DiabeticWtComp\n", + "\n", + "\n", + "\n", + "v3\n", + "((:*, :*))((:rProgress_U, :rDevelopingEarly), (:U, :DiabeticWtComp))\n", + "\n", + "\n", + "\n", + "s3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "((:*, :*))((:rDeath_U, :rMortalityDiabeticWtComp), (:U, :DiabeticWtComp))\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v16\n", + "((:*, :*))((:rDiagnosis, :rDiagnoseDiabeticWtComp), (:U, :DiabeticWtComp))\n", + "\n", + "\n", + "\n", + "s3->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "D\n", + " DiabeticWtComp\n", + "\n", + "\n", + "\n", + "v4\n", + "((:*, :*))((:rProgress_D, :rDevelopingEarly), (:D, :DiabeticWtComp))\n", + "\n", + "\n", + "\n", + "s4->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10\n", + "((:*, :*))((:rDeath_D, :rMortalityDiabeticWtComp), (:D, :DiabeticWtComp))\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "U\n", + " DiabeticEarly\n", + "\n", + "\n", + "\n", + "v5\n", + "((:*, :*))((:rProgress_U, :rDevelopingLate), (:U, :DiabeticEarly))\n", + "\n", + "\n", + "\n", + "s5->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "((:*, :*))((:rDeath_U, :rMortalityDiabeticEarly), (:U, :DiabeticEarly))\n", + "\n", + "\n", + "\n", + "s5->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v17\n", + "((:*, :*))((:rDiagnosis, :rDiagnoseDiabeticEarly), (:U, :DiabeticEarly))\n", + "\n", + "\n", + "\n", + "s5->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "D\n", + " DiabeticEarly\n", + "\n", + "\n", + "\n", + "v6\n", + "((:*, :*))((:rProgress_D, :rDevelopingLate), (:D, :DiabeticEarly))\n", + "\n", + "\n", + "\n", + "s6->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v12\n", + "((:*, :*))((:rDeath_D, :rMortalityDiabeticEarly), (:D, :DiabeticEarly))\n", + "\n", + "\n", + "\n", + "s6->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7\n", + "\n", + "U\n", + " DiabeticLate\n", + "\n", + "\n", + "\n", + "v13\n", + "((:*, :*))((:rDeath_U, :rMortalityDiabeticLate), (:U, :DiabeticLate))\n", + "\n", + "\n", + "\n", + "s7->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v18\n", + "((:*, :*))((:rDiagnosis, :rDiagnoseDiabeticLate), (:U, :DiabeticLate))\n", + "\n", + "\n", + "\n", + "s7->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8\n", + "\n", + "D\n", + " DiabeticLate\n", + "\n", + "\n", + "\n", + "v14\n", + "((:*, :*))((:rDeath_D, :rMortalityDiabeticLate), (:D, :DiabeticLate))\n", + "\n", + "\n", + "\n", + "s8->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "rProgress_U\n", + " rDevelopingDiabetic\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "rProgress_D\n", + " rDevelopingDiabetic\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rProgress_U\n", + " rDevelopingEarly\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rProgress_D\n", + " rDevelopingEarly\n", + "\n", + "\n", + "\n", + "p4->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rProgress_U\n", + " rDevelopingLate\n", + "\n", + "\n", + "\n", + "p5->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rProgress_D\n", + " rDevelopingLate\n", + "\n", + "\n", + "\n", + "p6->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "rDeath_U\n", + " rMortalityPreDiabetic\n", + "\n", + "\n", + "\n", + "p7->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "rDeath_D\n", + " rMortalityPreDiabetic\n", + "\n", + "\n", + "\n", + "p8->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "rDeath_U\n", + " rMortalityDiabeticEarly\n", + "\n", + "\n", + "\n", + "p9->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10\n", + "\n", + "rDeath_D\n", + " rMortalityDiabeticEarly\n", + "\n", + "\n", + "\n", + "p10->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p11\n", + "\n", + "rDeath_U\n", + " rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "p11->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p12\n", + "\n", + "rDeath_D\n", + " rMortalityDiabeticLate\n", + "\n", + "\n", + "\n", + "p12->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p13\n", + "\n", + "rDeath_U\n", + " rMortalityDiabeticWtComp\n", + "\n", + "\n", + "\n", + "p13->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p14\n", + "\n", + "rDeath_D\n", + " rMortalityDiabeticWtComp\n", + "\n", + "\n", + "\n", + "p14->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p15\n", + "\n", + "rDiagnosis\n", + " rDiagnosePreDiabetic\n", + "\n", + "\n", + "\n", + "p15->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p16\n", + "\n", + "rDiagnosis\n", + " rDiagnoseDiabeticWtComp\n", + "\n", + "\n", + "\n", + "p16->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p17\n", + "\n", + "rDiagnosis\n", + " rDiagnoseDiabeticEarly\n", + "\n", + "\n", + "\n", + "p17->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p18\n", + "\n", + "rDiagnosis\n", + " rDiagnoseDiabeticLate\n", + "\n", + "\n", + "\n", + "p18->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "fs_11d\n", + "\n", + "\n", + "\n", + "\n", + "fs_12d\n", + "\n", + "\n", + "\n", + "\n", + "fs_13d\n", + "\n", + "\n", + "\n", + "\n", + "fs_14d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_U\n", + "\n", + "\n", + "\n", + "v2->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_D\n", + "\n", + "\n", + "\n", + "v3->s5\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_U\n", + "\n", + "\n", + "\n", + "v4->s6\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_D\n", + "\n", + "\n", + "\n", + "v5->s7\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_U\n", + "\n", + "\n", + "\n", + "v6->s8\n", + "\n", + "\n", + "\n", + "\n", + "f_progress_D\n", + "\n", + "\n", + "\n", + "v7->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_U\n", + "\n", + "\n", + "\n", + "v8->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_D\n", + "\n", + "\n", + "\n", + "v9->fs_7d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_U\n", + "\n", + "\n", + "\n", + "v10->fs_8d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_D\n", + "\n", + "\n", + "\n", + "v11->fs_11d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_U\n", + "\n", + "\n", + "\n", + "v12->fs_12d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_D\n", + "\n", + "\n", + "\n", + "v13->fs_13d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_U\n", + "\n", + "\n", + "\n", + "v14->fs_14d\n", + "\n", + "\n", + "\n", + "\n", + "f_death_D\n", + "\n", + "\n", + "\n", + "v15->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_strata\n", + "\n", + "\n", + "\n", + "v16->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_strata\n", + "\n", + "\n", + "\n", + "v17->s6\n", + "\n", + "\n", + "\n", + "\n", + "f_strata\n", + "\n", + "\n", + "\n", + "v18->s8\n", + "\n", + "\n", + "\n", + "\n", + "f_strata\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 new file mode 100644 index 00000000..d919976c --- /dev/null +++ b/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/sir_linear_stratification-checkpoint.ipynb @@ -0,0 +1,5022 @@ +{ + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1pop
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_aging
22f_fstOrder
33f_birth
44f_death
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
341
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_aging*
2v_fstOrder*
3v_birth*
4v_death*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1111
2121
3141
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1131
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2δ
3rFstOrder
4rage
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1412
2322
3132
4242
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "pop\n", + "\n", + "\n", + "\n", + "v1\n", + "pop * rage\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2\n", + "pop * rFstOrder\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "pop * δ\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v3\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "δ\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rFstOrder\n", + "\n", + "\n", + "\n", + "p3->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rage\n", + "\n", + "\n", + "\n", + "p4->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_3u\n", + "\n", + "\n", + "\n", + "\n", + "fs_3u->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_aging\n", + "\n", + "\n", + "\n", + "v2->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_fstOrder\n", + "\n", + "\n", + "\n", + "v3->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_birth\n", + "\n", + "\n", + "\n", + "v4->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "f_death\n", + "\n", + "\n", + "\n", + "sv1->v3\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1NormalWeight
2OverWeight
3Obese
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_NewBorn
22f_DeathNormalWeight
33f_BecomingOverWeight
44f_DeathOverWeight
55f_BecomingObese
66f_DeathObese
77f_idNW
88f_idOW
99f_idOb
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
271
332
482
553
693
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
121
231
371
442
552
682
763
893
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_NewBorn*
2v_DeathNormalWeight*
3v_BecomingOverWeight*
4v_DeathOverWeight*
5v_BecomingObese*
6v_DeathObese*
7v_idNW*
8v_idOW*
9v_idOb*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1121
2131
3241
4251
5361
6171
7281
8391
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2δw
3rw
4ro
5δo
6rage
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1112
2222
3332
4242
5452
6562
7672
8682
9692
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "NormalWeight\n", + "\n", + "\n", + "\n", + "v2\n", + "NormalWeight * δw\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3\n", + "NormalWeight * rw\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "NormalWeight * rage\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "OverWeight\n", + "\n", + "\n", + "\n", + "v4\n", + "OverWeight * δw\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "OverWeight * ro\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "OverWeight * rage\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Obese\n", + "\n", + "\n", + "\n", + "v6\n", + "Obese * δo\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "Obese * rage\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v1\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "δw\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "ro\n", + "\n", + "\n", + "\n", + "p4->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "δo\n", + "\n", + "\n", + "\n", + "p5->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rage\n", + "\n", + "\n", + "\n", + "p6->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_NewBorn\n", + "\n", + "\n", + "\n", + "v2->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathNormalWeight\n", + "\n", + "\n", + "\n", + "v3->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingOverWeight\n", + "\n", + "\n", + "\n", + "v4->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathOverWeight\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingObese\n", + "\n", + "\n", + "\n", + "v6->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathObese\n", + "\n", + "\n", + "\n", + "v7->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_idNW\n", + "\n", + "\n", + "\n", + "v8->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_idOW\n", + "\n", + "\n", + "\n", + "v9->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_idOb\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "NormalWeight\n", + "\n", + "\n", + "\n", + "v2\n", + "NormalWeight * δw\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3\n", + "NormalWeight * rw\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "NormalWeight * rage\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "OverWeight\n", + "\n", + "\n", + "\n", + "v4\n", + "OverWeight * δw\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "OverWeight * ro\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "OverWeight * rage\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Obese\n", + "\n", + "\n", + "\n", + "v6\n", + "Obese * δo\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "Obese * rage\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v1\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "δw\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rw\n", + "\n", + "\n", + "\n", + "p3->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "ro\n", + "\n", + "\n", + "\n", + "p4->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "δo\n", + "\n", + "\n", + "\n", + "p5->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rage\n", + "\n", + "\n", + "\n", + "p6->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_NewBorn\n", + "\n", + "\n", + "\n", + "v2->fs_2d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathNormalWeight\n", + "\n", + "\n", + "\n", + "v3->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingOverWeight\n", + "\n", + "\n", + "\n", + "v4->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathOverWeight\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingObese\n", + "\n", + "\n", + "\n", + "v6->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathObese\n", + "\n", + "\n", + "\n", + "v7->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_idNW\n", + "\n", + "\n", + "\n", + "v8->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_idOW\n", + "\n", + "\n", + "\n", + "v9->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_idOb\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1Child
2Adult
3Senior
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
11f_NB
23f_idC
32f_DeathC
44f_agingCA
56f_idA
65f_DeathA
77f_agingAS
89f_idS
98f_DeathS
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
221
342
452
573
683
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
121
231
341
452
562
672
783
893
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_NB*
2v_DeathC*
3v_idC*
4v_agingCA*
5v_DeathA*
6v_idA*
7v_agingAS*
8v_DeathS*
9v_idS*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1121
2131
3141
4251
5261
6271
7381
8391
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1μ
2δC
3δA
4δS
5rageCA
6rageAS
7r
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1112
2222
3732
4542
5352
6762
7672
8482
9792
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "Child\n", + "\n", + "\n", + "\n", + "v2\n", + "Child * δC\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3\n", + "Child * r\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "Child * rageCA\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "Adult\n", + "\n", + "\n", + "\n", + "v5\n", + "Adult * δA\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "Adult * r\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "Adult * rageAS\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Senior\n", + "\n", + "\n", + "\n", + "v8\n", + "Senior * δS\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "Senior * r\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v1\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "δC\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "δA\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "δS\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rageCA\n", + "\n", + "\n", + "\n", + "p5->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rageAS\n", + "\n", + "\n", + "\n", + "p6->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "r\n", + "\n", + "\n", + "\n", + "p7->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "fs_9d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_NB\n", + "\n", + "\n", + "\n", + "v2->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathC\n", + "\n", + "\n", + "\n", + "v3->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_idC\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_agingCA\n", + "\n", + "\n", + "\n", + "v5->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathA\n", + "\n", + "\n", + "\n", + "v6->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_idA\n", + "\n", + "\n", + "\n", + "v7->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_agingAS\n", + "\n", + "\n", + "\n", + "v8->fs_9d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathS\n", + "\n", + "\n", + "\n", + "v9->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_idS\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "Child\n", + "\n", + "\n", + "\n", + "v2\n", + "Child * δC\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3\n", + "Child * r\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "Child * rageCA\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "Adult\n", + "\n", + "\n", + "\n", + "v5\n", + "Adult * δA\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "Adult * r\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "Adult * rageAS\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "Senior\n", + "\n", + "\n", + "\n", + "v8\n", + "Senior * δS\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "Senior * r\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μ\n", + "\n", + "\n", + "\n", + "v1\n", + "N * μ\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "δC\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "δA\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "δS\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "rageCA\n", + "\n", + "\n", + "\n", + "p5->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "rageAS\n", + "\n", + "\n", + "\n", + "p6->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "r\n", + "\n", + "\n", + "\n", + "p7->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "fs_9d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_NB\n", + "\n", + "\n", + "\n", + "v2->fs_3d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathC\n", + "\n", + "\n", + "\n", + "v3->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_idC\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_agingCA\n", + "\n", + "\n", + "\n", + "v5->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathA\n", + "\n", + "\n", + "\n", + "v6->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_idA\n", + "\n", + "\n", + "\n", + "v7->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_agingAS\n", + "\n", + "\n", + "\n", + "v8->fs_9d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathS\n", + "\n", + "\n", + "\n", + "v9->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_idS\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "NormalWeightChild\n", + "\n", + "\n", + "\n", + "v2\n", + "NormalWeightChild * δwδC\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "NormalWeightChild * rwr\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "NormalWeightChild * ragerageCA\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NN\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "OverWeightChild\n", + "\n", + "\n", + "\n", + "v3\n", + "OverWeightChild * δwδC\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "OverWeightChild * ror\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "OverWeightChild * ragerageCA\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "ObeseChild\n", + "\n", + "\n", + "\n", + "v4\n", + "ObeseChild * δoδC\n", + "\n", + "\n", + "\n", + "s3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "ObeseChild * ragerageCA\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "NormalWeightAdult\n", + "\n", + "\n", + "\n", + "v10\n", + "NormalWeightAdult * δwδA\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v13\n", + "NormalWeightAdult * rwr\n", + "\n", + "\n", + "\n", + "s4->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v15\n", + "NormalWeightAdult * ragerageAS\n", + "\n", + "\n", + "\n", + "s4->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "OverWeightAdult\n", + "\n", + "\n", + "\n", + "v11\n", + "OverWeightAdult * δwδA\n", + "\n", + "\n", + "\n", + "s5->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v14\n", + "OverWeightAdult * ror\n", + "\n", + "\n", + "\n", + "s5->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v16\n", + "OverWeightAdult * ragerageAS\n", + "\n", + "\n", + "\n", + "s5->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "ObeseAdult\n", + "\n", + "\n", + "\n", + "v12\n", + "ObeseAdult * δoδA\n", + "\n", + "\n", + "\n", + "s6->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v17\n", + "ObeseAdult * ragerageAS\n", + "\n", + "\n", + "\n", + "s6->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7\n", + "\n", + "NormalWeightSenior\n", + "\n", + "\n", + "\n", + "v18\n", + "NormalWeightSenior * δwδS\n", + "\n", + "\n", + "\n", + "s7->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v21\n", + "NormalWeightSenior * rwr\n", + "\n", + "\n", + "\n", + "s7->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s7->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8\n", + "\n", + "OverWeightSenior\n", + "\n", + "\n", + "\n", + "v19\n", + "OverWeightSenior * δwδS\n", + "\n", + "\n", + "\n", + "s8->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v22\n", + "OverWeightSenior * ror\n", + "\n", + "\n", + "\n", + "s8->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s8->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9\n", + "\n", + "ObeseSenior\n", + "\n", + "\n", + "\n", + "v20\n", + "ObeseSenior * δoδS\n", + "\n", + "\n", + "\n", + "s9->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s9->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "μμ\n", + "\n", + "\n", + "\n", + "v1\n", + "NN * μμ\n", + "\n", + "\n", + "\n", + "p1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "δwδC\n", + "\n", + "\n", + "\n", + "p2->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "δoδC\n", + "\n", + "\n", + "\n", + "p3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "δwδA\n", + "\n", + "\n", + "\n", + "p4->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "δoδA\n", + "\n", + "\n", + "\n", + "p5->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "δwδS\n", + "\n", + "\n", + "\n", + "p6->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "δoδS\n", + "\n", + "\n", + "\n", + "p7->v20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "ragerageCA\n", + "\n", + "\n", + "\n", + "p8->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "ragerageAS\n", + "\n", + "\n", + "\n", + "p9->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10\n", + "\n", + "rwr\n", + "\n", + "\n", + "\n", + "p10->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p10->v21\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p11\n", + "\n", + "ror\n", + "\n", + "\n", + "\n", + "p11->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p11->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p11->v22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u\n", + "\n", + "\n", + "\n", + "\n", + "fs_1u->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "fs_12d\n", + "\n", + "\n", + "\n", + "\n", + "fs_13d\n", + "\n", + "\n", + "\n", + "\n", + "fs_14d\n", + "\n", + "\n", + "\n", + "\n", + "fs_20d\n", + "\n", + "\n", + "\n", + "\n", + "fs_21d\n", + "\n", + "\n", + "\n", + "\n", + "fs_22d\n", + "\n", + "\n", + "\n", + "\n", + "v1->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_NewBornf_NB\n", + "\n", + "\n", + "\n", + "v2->fs_4d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathNormalWeightf_DeathC\n", + "\n", + "\n", + "\n", + "v3->fs_5d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathOverWeightf_DeathC\n", + "\n", + "\n", + "\n", + "v4->fs_6d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathObesef_DeathC\n", + "\n", + "\n", + "\n", + "v5->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingOverWeightf_idC\n", + "\n", + "\n", + "\n", + "v6->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingObesef_idC\n", + "\n", + "\n", + "\n", + "v7->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_idNWf_agingCA\n", + "\n", + "\n", + "\n", + "v8->s5\n", + "\n", + "\n", + "\n", + "\n", + "f_idOWf_agingCA\n", + "\n", + "\n", + "\n", + "v9->s6\n", + "\n", + "\n", + "\n", + "\n", + "f_idObf_agingCA\n", + "\n", + "\n", + "\n", + "v10->fs_12d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathNormalWeightf_DeathA\n", + "\n", + "\n", + "\n", + "v11->fs_13d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathOverWeightf_DeathA\n", + "\n", + "\n", + "\n", + "v12->fs_14d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathObesef_DeathA\n", + "\n", + "\n", + "\n", + "v13->s5\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingOverWeightf_idA\n", + "\n", + "\n", + "\n", + "v14->s6\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingObesef_idA\n", + "\n", + "\n", + "\n", + "v15->s7\n", + "\n", + "\n", + "\n", + "\n", + "f_idNWf_agingAS\n", + "\n", + "\n", + "\n", + "v16->s8\n", + "\n", + "\n", + "\n", + "\n", + "f_idOWf_agingAS\n", + "\n", + "\n", + "\n", + "v17->s9\n", + "\n", + "\n", + "\n", + "\n", + "f_idObf_agingAS\n", + "\n", + "\n", + "\n", + "v18->fs_20d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathNormalWeightf_DeathS\n", + "\n", + "\n", + "\n", + "v19->fs_21d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathOverWeightf_DeathS\n", + "\n", + "\n", + "\n", + "v20->fs_22d\n", + "\n", + "\n", + "\n", + "\n", + "f_DeathObesef_DeathS\n", + "\n", + "\n", + "\n", + "v21->s8\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingOverWeightf_idS\n", + "\n", + "\n", + "\n", + "v22->s9\n", + "\n", + "\n", + "\n", + "\n", + "f_BecomingObesef_idS\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "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 new file mode 100644 index 00000000..88f14349 --- /dev/null +++ b/examples/full_fledged_schema_examples_new/stratification/.ipynb_checkpoints/sir_standard_stratification-checkpoint.ipynb @@ -0,0 +1,6473 @@ +{ + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1pop
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_inf
25f_fstOrder
36f_aging
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_prevalence/
2v_meanInfectiousContactsPerS*
3v_perSIncidenceRate*
4v_inf*
5v_fstOrder*
6v_aging*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1111
2141
3151
4161
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1c
2β
3rFstOrder
4rAge
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1122
2232
3342
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1121
2231
3352
4462
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "pop\n", + "\n", + "\n", + "\n", + "v1\n", + "pop / N\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "pop * (β * (c * (pop / N)))\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "pop * rFstOrder\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "pop * rAge\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "c\n", + "\n", + "\n", + "\n", + "v2\n", + "c * (pop / N)\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v3\n", + "β * (c * (pop / N))\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rFstOrder\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rAge\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_inf\n", + "\n", + "\n", + "\n", + "v5->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_fstOrder\n", + "\n", + "\n", + "\n", + "v6->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_aging\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "pop\n", + "\n", + "\n", + "\n", + "v1\n", + "pop / N\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "pop * (β * (c * (pop / N)))\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "pop * rFstOrder\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "pop * rAge\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "c\n", + "\n", + "\n", + "\n", + "v2\n", + "c * (pop / N)\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v3\n", + "β * (c * (pop / N))\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rFstOrder\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rAge\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_inf\n", + "\n", + "\n", + "\n", + "v5->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_fstOrder\n", + "\n", + "\n", + "\n", + "v6->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_aging\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1S
2I
3R
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1N
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
331
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
16f_idS
24f_inf
37f_idI
45f_rec
58f_idR
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
222
332
443
553
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
332
442
553
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_prevalence/
2v_meanInfectiousContactsPerS*
3v_perSIncidenceRate*
4v_newInfections*
5v_newRecovery*
6v_idS*
7v_idI*
8v_idR*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1211
2141
3251
4161
5271
6381
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1c
2β
3rRec
4rAge
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1122
2232
3342
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1121
2231
3352
4462
5472
6482
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v4\n", + "S * (β * (c * (I / N)))\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "S * rAge\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v1\n", + "I / N\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "I * rRec\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "I * rAge\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v8\n", + "R * rAge\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "c\n", + "\n", + "\n", + "\n", + "v2\n", + "c * (I / N)\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v3\n", + "β * (c * (I / N))\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rRec\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rAge\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_inf\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_rec\n", + "\n", + "\n", + "\n", + "v6->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_idS\n", + "\n", + "\n", + "\n", + "v7->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_idI\n", + "\n", + "\n", + "\n", + "v8->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_idR\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "S\n", + "\n", + "\n", + "\n", + "v4\n", + "S * (β * (c * (I / N)))\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "S * rAge\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "N\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "I\n", + "\n", + "\n", + "\n", + "v1\n", + "I / N\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "I * rRec\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "I * rAge\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "R\n", + "\n", + "\n", + "\n", + "v8\n", + "R * rAge\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "c\n", + "\n", + "\n", + "\n", + "v2\n", + "c * (I / N)\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v3\n", + "β * (c * (I / N))\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rRec\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rAge\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_inf\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_rec\n", + "\n", + "\n", + "\n", + "v6->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_idS\n", + "\n", + "\n", + "\n", + "v7->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_idI\n", + "\n", + "\n", + "\n", + "v8->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_idR\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1Child
2Adult
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1NC
2NA
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
222
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ffvfname
14f_infC
25f_frsC
36f_aging
410f_infA
511f_frsA
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Iifnis
111
221
332
442
552
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Oofnos
111
221
331
442
552
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_INC/
2v_cINC*
3v_cβINC*
4v_infC*
5v_fstC*
6v_agingC*
7v_INA/
8v_cINA*
9v_cβINA*
10v_infA*
11v_fstA*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1111
2141
3151
4161
5271
62101
72111
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
2272
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1c_C
2β
3r
4rAge
5c_A
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1122
2232
3342
4782
5892
69102
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1121
2231
3352
4462
5581
6291
73112
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "Child\n", + "\n", + "\n", + "\n", + "v1\n", + "Child / NC\n", + "\n", + "\n", + "\n", + "s1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4\n", + "Child * (β * (c_C * (Child / NC)))\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "Child * r\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "Child * rAge\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NC\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "Adult\n", + "\n", + "\n", + "\n", + "v7\n", + "Adult / NA\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10\n", + "Adult * (β * (c_A * (Adult / NA)))\n", + "\n", + "\n", + "\n", + "s2->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "Adult * r\n", + "\n", + "\n", + "\n", + "s2->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NA\n", + "\n", + "\n", + "\n", + "s2->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "c_C\n", + "\n", + "\n", + "\n", + "v2\n", + "c_C * (Child / NC)\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "β\n", + "\n", + "\n", + "\n", + "v3\n", + "β * (c_C * (Child / NC))\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9\n", + "β * (c_A * (Adult / NA))\n", + "\n", + "\n", + "\n", + "p2->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "r\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rAge\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "c_A\n", + "\n", + "\n", + "\n", + "v8\n", + "c_A * (Adult / NA)\n", + "\n", + "\n", + "\n", + "p5->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_infC\n", + "\n", + "\n", + "\n", + "v5->s1\n", + "\n", + "\n", + "\n", + "\n", + "f_frsC\n", + "\n", + "\n", + "\n", + "v6->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_aging\n", + "\n", + "\n", + "\n", + "v7->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_infA\n", + "\n", + "\n", + "\n", + "v11->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_frsA\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v7\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "SChild\n", + "\n", + "\n", + "\n", + "v4\n", + "SChild * (ββ * (cc_C * (IChild / NNC)))\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6\n", + "SChild * rAgerAge\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NNC\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "IChild\n", + "\n", + "\n", + "\n", + "v1\n", + "IChild / NNC\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v5\n", + "IChild * rRecr\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "IChild * rAgerAge\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "RChild\n", + "\n", + "\n", + "\n", + "v8\n", + "RChild * rAgerAge\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "SAdult\n", + "\n", + "\n", + "\n", + "v12\n", + "SAdult * (ββ * (cc_A * (IAdult / NNA)))\n", + "\n", + "\n", + "\n", + "s4->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NNA\n", + "\n", + "\n", + "\n", + "s4->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "IAdult\n", + "\n", + "\n", + "\n", + "v9\n", + "IAdult / NNA\n", + "\n", + "\n", + "\n", + "s5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v13\n", + "IAdult * rRecr\n", + "\n", + "\n", + "\n", + "s5->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "RAdult\n", + "\n", + "\n", + "\n", + "s6->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "cc_C\n", + "\n", + "\n", + "\n", + "v2\n", + "cc_C * (IChild / NNC)\n", + "\n", + "\n", + "\n", + "p1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "ββ\n", + "\n", + "\n", + "\n", + "v3\n", + "ββ * (cc_C * (IChild / NNC))\n", + "\n", + "\n", + "\n", + "p2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11\n", + "ββ * (cc_A * (IAdult / NNA))\n", + "\n", + "\n", + "\n", + "p2->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "rRecr\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "rAgerAge\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "cc_A\n", + "\n", + "\n", + "\n", + "v10\n", + "cc_A * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "p5->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v3->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_inff_infC\n", + "\n", + "\n", + "\n", + "v5->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_recf_frsC\n", + "\n", + "\n", + "\n", + "v6->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_idSf_aging\n", + "\n", + "\n", + "\n", + "v7->s5\n", + "\n", + "\n", + "\n", + "\n", + "f_idIf_aging\n", + "\n", + "\n", + "\n", + "v8->s6\n", + "\n", + "\n", + "\n", + "\n", + "f_idRf_aging\n", + "\n", + "\n", + "\n", + "v9->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v12->s5\n", + "\n", + "\n", + "\n", + "\n", + "f_inff_infA\n", + "\n", + "\n", + "\n", + "v13->s6\n", + "\n", + "\n", + "\n", + "\n", + "f_recf_frsA\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v9\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1SChild
2IChild
3SAdult
4IAdult
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1NNC
2NNA
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
332
442
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_prevalencev_INC/
2v_prevalencev_INA/
3v_meanInfectiousContactsPerSv_cINC*
4v_meanInfectiousContactsPerSv_cINA*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1211
2421
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
2222
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1cc_C
2cc_A
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1132
2242
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1131
2241
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "SChild\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NNC\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "IChild\n", + "\n", + "\n", + "\n", + "v1\n", + "IChild / NNC\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "SAdult\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NNA\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "IAdult\n", + "\n", + "\n", + "\n", + "v2\n", + "IAdult / NNA\n", + "\n", + "\n", + "\n", + "s4->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "cc_C\n", + "\n", + "\n", + "\n", + "v3\n", + "cc_C * (IChild / NNC)\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "cc_A\n", + "\n", + "\n", + "\n", + "v4\n", + "cc_A * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v2\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1SChild
2IChild
3SAdult
4IAdult
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1NNC
2NNA
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
332
442
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_prevalencev_INC/
2v_prevalencev_INA/
3v_meanInfectiousContactsPerSv_cINC*
4v_meanInfectiousContactsPerSv_cINA*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1211
2421
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
2222
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1cc_C
2cc_A
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1131
2241
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "SChild\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NNC\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "IChild\n", + "\n", + "\n", + "\n", + "v1\n", + "IChild / NNC\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "SAdult\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NNA\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "IAdult\n", + "\n", + "\n", + "\n", + "v2\n", + "IAdult / NNA\n", + "\n", + "\n", + "\n", + "s4->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "cc_C\n", + "\n", + "\n", + "\n", + "v3\n", + "(*)(cc_C)\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "cc_A\n", + "\n", + "\n", + "\n", + "v4\n", + "(*)(cc_A)\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v2\n", + "\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ssname
1SChild
2IChild
3SAdult
4IAdult
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SVsvname
1NNC
2NNA
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSlsslssv
111
221
332
442
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Vvnamevop
1v_prevalencev_INC/
2v_prevalencev_INA/
3v_CCContacts*
4v_CAContacts*
5v_ACContacts*
6v_AAContacts*
7v_prevalencev_INC_post+
8v_prevalencev_INA_post+
9v_meanInfectiousContactsPerSv_cINC*
10v_meanInfectiousContactsPerSv_cINA*
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVlvslvvlvsposition
1211
2421
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LSVlsvsvlsvvlsvsvposition
1112
2222
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ppname
1fcc
2fca
3fac
4faa
5cc_C
6cc_A
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LVVlvsrclvtgtlvsrcposition
1132
2242
3152
4262
5371
6472
7581
8682
9792
108102
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
LPVlpvplpvvlpvpposition
1131
2241
3351
4461
5591
66101
\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "SChild\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NNC\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "IChild\n", + "\n", + "\n", + "\n", + "v1\n", + "IChild / NNC\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "SAdult\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NNA\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "IAdult\n", + "\n", + "\n", + "\n", + "v2\n", + "IAdult / NNA\n", + "\n", + "\n", + "\n", + "s4->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "fcc\n", + "\n", + "\n", + "\n", + "v3\n", + "fcc * (IChild / NNC)\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "fca\n", + "\n", + "\n", + "\n", + "v4\n", + "fca * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "fac\n", + "\n", + "\n", + "\n", + "v5\n", + "fac * (IChild / NNC)\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "faa\n", + "\n", + "\n", + "\n", + "v6\n", + "faa * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "cc_C\n", + "\n", + "\n", + "\n", + "v9\n", + "cc_C * (fcc * (IChild / NNC) + fca * (IAdult / NNA))\n", + "\n", + "\n", + "\n", + "p5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "cc_A\n", + "\n", + "\n", + "\n", + "v10\n", + "cc_A * (fac * (IChild / NNC) + faa * (IAdult / NNA))\n", + "\n", + "\n", + "\n", + "p6->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "fcc * (IChild / NNC) + fca * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "v3->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "fac * (IChild / NNC) + faa * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "v5->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v2\n", + "\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", + "\n", + "G\n", + "\n", + "\n", + "\n", + "s1\n", + "\n", + "SChild\n", + "\n", + "\n", + "\n", + "v12\n", + "SChild * (ββ * (cc_C * (fcc * (IChild / NNC) + fca * (IAdult / NNA))))\n", + "\n", + "\n", + "\n", + "s1->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v14\n", + "SChild * rAgerAge\n", + "\n", + "\n", + "\n", + "s1->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s1->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv1\n", + "\n", + "NNC\n", + "\n", + "\n", + "\n", + "s1->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2\n", + "\n", + "IChild\n", + "\n", + "\n", + "\n", + "v1\n", + "IChild / NNC\n", + "\n", + "\n", + "\n", + "s2->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v13\n", + "IChild * rRecr\n", + "\n", + "\n", + "\n", + "s2->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v15\n", + "IChild * rAgerAge\n", + "\n", + "\n", + "\n", + "s2->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s2->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3\n", + "\n", + "SAdult\n", + "\n", + "\n", + "\n", + "v18\n", + "SAdult * (ββ * (cc_A * (fac * (IChild / NNC) + faa * (IAdult / NNA))))\n", + "\n", + "\n", + "\n", + "s3->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s3->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2\n", + "\n", + "NNA\n", + "\n", + "\n", + "\n", + "s3->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4\n", + "\n", + "IAdult\n", + "\n", + "\n", + "\n", + "v2\n", + "IAdult / NNA\n", + "\n", + "\n", + "\n", + "s4->v2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v19\n", + "IAdult * rRecr\n", + "\n", + "\n", + "\n", + "s4->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s4->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5\n", + "\n", + "RChild\n", + "\n", + "\n", + "\n", + "v16\n", + "RChild * rAgerAge\n", + "\n", + "\n", + "\n", + "s5->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s5->sv1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "s6\n", + "\n", + "RAdult\n", + "\n", + "\n", + "\n", + "s6->sv2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p1\n", + "\n", + "fcc\n", + "\n", + "\n", + "\n", + "v3\n", + "fcc * (IChild / NNC)\n", + "\n", + "\n", + "\n", + "p1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p2\n", + "\n", + "fca\n", + "\n", + "\n", + "\n", + "v4\n", + "fca * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "p2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p3\n", + "\n", + "fac\n", + "\n", + "\n", + "\n", + "v5\n", + "fac * (IChild / NNC)\n", + "\n", + "\n", + "\n", + "p3->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p4\n", + "\n", + "faa\n", + "\n", + "\n", + "\n", + "v6\n", + "faa * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "p4->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p5\n", + "\n", + "cc_C\n", + "\n", + "\n", + "\n", + "v9\n", + "cc_C * (fcc * (IChild / NNC) + fca * (IAdult / NNA))\n", + "\n", + "\n", + "\n", + "p5->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p6\n", + "\n", + "cc_A\n", + "\n", + "\n", + "\n", + "v10\n", + "cc_A * (fac * (IChild / NNC) + faa * (IAdult / NNA))\n", + "\n", + "\n", + "\n", + "p6->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p7\n", + "\n", + "ββ\n", + "\n", + "\n", + "\n", + "v11\n", + "ββ * (cc_C * (fcc * (IChild / NNC) + fca * (IAdult / NNA)))\n", + "\n", + "\n", + "\n", + "p7->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v17\n", + "ββ * (cc_A * (fac * (IChild / NNC) + faa * (IAdult / NNA)))\n", + "\n", + "\n", + "\n", + "p7->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8\n", + "\n", + "rRecr\n", + "\n", + "\n", + "\n", + "p8->v13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p8->v19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9\n", + "\n", + "rAgerAge\n", + "\n", + "\n", + "\n", + "p9->v14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9->v15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p9->v16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v1->v5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v2->v6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7\n", + "fcc * (IChild / NNC) + fca * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "v3->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v4->v7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8\n", + "fac * (IChild / NNC) + faa * (IAdult / NNA)\n", + "\n", + "\n", + "\n", + "v5->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v6->v8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v7->v9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v8->v10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v9->v11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v10->v17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v11->v12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v12->s2\n", + "\n", + "\n", + "\n", + "\n", + "f_inff_infC\n", + "\n", + "\n", + "\n", + "v13->s5\n", + "\n", + "\n", + "\n", + "\n", + "f_recf_frsC\n", + "\n", + "\n", + "\n", + "v14->s3\n", + "\n", + "\n", + "\n", + "\n", + "f_idSf_aging\n", + "\n", + "\n", + "\n", + "v15->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_idIf_aging\n", + "\n", + "\n", + "\n", + "v16->s6\n", + "\n", + "\n", + "\n", + "\n", + "f_idRf_aging\n", + "\n", + "\n", + "\n", + "v17->v18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "v18->s4\n", + "\n", + "\n", + "\n", + "\n", + "f_inff_infA\n", + "\n", + "\n", + "\n", + "v19->s6\n", + "\n", + "\n", + "\n", + "\n", + "f_recf_frsA\n", + "\n", + "\n", + "\n", + "sv1->v1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "sv2->v2\n", + "\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", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "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/sir_linear_stratification.ipynb b/examples/full_fledged_schema_examples_new/stratification/sir_linear_stratification.ipynb index d919976c..a97f2a33 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 @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 18, "id": "38c8b82a", "metadata": {}, "outputs": [], @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 19, "id": "25d17bab", "metadata": {}, "outputs": [ @@ -40,8 +40,9 @@ "GraphF_typed (generic function with 5 methods)" ] }, + "execution_count": 19, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -145,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 20, "id": "3dc07ade", "metadata": {}, "outputs": [ @@ -501,8 +502,9 @@ "└─────┴──────┴──────┴──────────────┘\n" ] }, + "execution_count": 20, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -536,217 +538,28 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 21, "id": "e6748d4a", "metadata": {}, "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "pop\n", - "\n", - "\n", - "\n", - "v1\n", - "pop * rage\n", - "\n", - "\n", - "\n", - "s1->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v2\n", - "pop * rFstOrder\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "pop * δ\n", - "\n", - "\n", - "\n", - "s1->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "sv1\n", - "\n", - "N\n", - "\n", - "\n", - "\n", - "s1->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p1\n", - "\n", - "μ\n", - "\n", - "\n", - "\n", - "v3\n", - "N * μ\n", - "\n", - "\n", - "\n", - "p1->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p2\n", - "\n", - "δ\n", - "\n", - "\n", - "\n", - "p2->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p3\n", - "\n", - "rFstOrder\n", - "\n", - "\n", - "\n", - "p3->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p4\n", - "\n", - "rage\n", - "\n", - "\n", - "\n", - "p4->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_3u\n", - "\n", - "\n", - "\n", - "\n", - "fs_3u->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_4d\n", - "\n", - "\n", - "\n", - "\n", - "v1->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_aging\n", - "\n", - "\n", - "\n", - "v2->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_fstOrder\n", - "\n", - "\n", - "\n", - "v3->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_birth\n", - "\n", - "\n", - "\n", - "v4->fs_4d\n", - "\n", - "\n", - "\n", - "\n", - "f_death\n", - "\n", - "\n", - "\n", - "sv1->v3\n", - "\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\"))" ] }, + "execution_count": 21, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "dyld[27060]: Library not loaded: @rpath/libexpat.1.dylib\n", + " Referenced from: <0A7C10B0-F8AF-321C-BC1A-651591ED4464> /Users/cuffaro.m/.julia/artifacts/dbc1b7f42ddb07be07d55ad976317ad027618c63/bin/dot\n", + " Reason: tried: '/Users/cuffaro.m/.julia/artifacts/dbc1b7f42ddb07be07d55ad976317ad027618c63/bin/../lib/libexpat.1.dylib' (no such file), '/Users/cuffaro.m/.julia/artifacts/dbc1b7f42ddb07be07d55ad976317ad027618c63/bin/../lib/libexpat.1.dylib' (no such file)\n" + ] } ], "source": [ @@ -755,7 +568,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 22, "id": "a31d42b3", "metadata": {}, "outputs": [], @@ -767,7 +580,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 23, "id": "544e4151", "metadata": {}, "outputs": [ @@ -777,8 +590,9 @@ "1:4" ] }, + "execution_count": 23, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -797,574 +611,27 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 24, "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Ssname
1NormalWeight
2OverWeight
3Obese
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
SVsvname
1N
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
LSlsslssv
111
221
331
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Ffvfname
11f_NewBorn
22f_DeathNormalWeight
33f_BecomingOverWeight
44f_DeathOverWeight
55f_BecomingObese
66f_DeathObese
77f_idNW
88f_idOW
99f_idOb
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Iifnis
111
271
332
482
553
693
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Oofnos
121
231
371
442
552
682
763
893
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Vvnamevop
1v_NewBorn*
2v_DeathNormalWeight*
3v_BecomingOverWeight*
4v_DeathOverWeight*
5v_BecomingObese*
6v_DeathObese*
7v_idNW*
8v_idOW*
9v_idOb*
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
LVlvslvvlvsposition
1121
2131
3241
4251
5361
6171
7281
8391
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
LSVlsvsvlsvvlsvsvposition
1111
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Ppname
1μ
2δw
3rw
4ro
5δo
6rage
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
LPVlpvplpvvlpvpposition
1112
2222
3332
4242
5452
6562
7672
8682
9692
\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" + "ename": "LoadError", + "evalue": "ClOUD is not a known stock.", + "output_type": "error", + "traceback": [ + "ClOUD is not a known stock.", + "", + "Stacktrace:", + " [1] error(s::String)", + " @ Base ./error.jl:35", + " [2] assemble_stock_definitions(stocks::Vector{Symbol}, flows::Vector{Tuple{Symbol, Expr, Symbol}}, sum_variables::Vector{Tuple{Symbol, Vector{Symbol}}})", + " @ StockFlow.Syntax ~/Documents/UFAJ/StockFlow.jl/src/Syntax.jl:485", + " [3] stock_and_flow_syntax_to_arguments(syntax_elements::StockFlow.Syntax.StockAndFlowBlock)", + " @ StockFlow.Syntax ~/Documents/UFAJ/StockFlow.jl/src/Syntax.jl:278", + " [4] top-level scope", + " @ ~/Documents/UFAJ/StockFlow.jl/src/Syntax.jl:150" + ] } ], "source": [ @@ -1414,428 +681,21 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 25, "id": "2030f949", "metadata": {}, "outputs": [ { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "NormalWeight\n", - "\n", - "\n", - "\n", - "v2\n", - "NormalWeight * δw\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v3\n", - "NormalWeight * rw\n", - "\n", - "\n", - "\n", - "s1->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v7\n", - "NormalWeight * rage\n", - "\n", - "\n", - "\n", - "s1->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "sv1\n", - "\n", - "N\n", - "\n", - "\n", - "\n", - "s1->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "OverWeight\n", - "\n", - "\n", - "\n", - "v4\n", - "OverWeight * δw\n", - "\n", - "\n", - "\n", - "s2->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v5\n", - "OverWeight * ro\n", - "\n", - "\n", - "\n", - "s2->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v8\n", - "OverWeight * rage\n", - "\n", - "\n", - "\n", - "s2->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3\n", - "\n", - "Obese\n", - "\n", - "\n", - "\n", - "v6\n", - "Obese * δo\n", - "\n", - "\n", - "\n", - "s3->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v9\n", - "Obese * rage\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p1\n", - "\n", - "μ\n", - "\n", - "\n", - "\n", - "v1\n", - "N * μ\n", - "\n", - "\n", - "\n", - "p1->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p2\n", - "\n", - "δw\n", - "\n", - "\n", - "\n", - "p2->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p2->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p3\n", - "\n", - "rw\n", - "\n", - "\n", - "\n", - "p3->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p4\n", - "\n", - "ro\n", - "\n", - "\n", - "\n", - "p4->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p5\n", - "\n", - "δo\n", - "\n", - "\n", - "\n", - "p5->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6\n", - "\n", - "rage\n", - "\n", - "\n", - "\n", - "p6->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_2d\n", - "\n", - "\n", - "\n", - "\n", - "fs_4d\n", - "\n", - "\n", - "\n", - "\n", - "fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "v1->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_NewBorn\n", - "\n", - "\n", - "\n", - "v2->fs_2d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathNormalWeight\n", - "\n", - "\n", - "\n", - "v3->s2\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingOverWeight\n", - "\n", - "\n", - "\n", - "v4->fs_4d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathOverWeight\n", - "\n", - "\n", - "\n", - "v5->s3\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingObese\n", - "\n", - "\n", - "\n", - "v6->fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathObese\n", - "\n", - "\n", - "\n", - "v7->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_idNW\n", - "\n", - "\n", - "\n", - "v8->s2\n", - "\n", - "\n", - "\n", - "\n", - "f_idOW\n", - "\n", - "\n", - "\n", - "v9->s3\n", - "\n", - "\n", - "\n", - "\n", - "f_idOb\n", - "\n", - "\n", - "\n", - "sv1->v1\n", - "\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" + "ename": "LoadError", + "evalue": "UndefVarError: `WeightModel` not defined", + "output_type": "error", + "traceback": [ + "UndefVarError: `WeightModel` not defined", + "", + "Stacktrace:", + " [1] top-level scope", + " @ In[25]:1" + ] } ], "source": [ @@ -1844,428 +704,21 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 26, "id": "27b99534", "metadata": {}, "outputs": [ { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "NormalWeight\n", - "\n", - "\n", - "\n", - "v2\n", - "NormalWeight * δw\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v3\n", - "NormalWeight * rw\n", - "\n", - "\n", - "\n", - "s1->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v7\n", - "NormalWeight * rage\n", - "\n", - "\n", - "\n", - "s1->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "sv1\n", - "\n", - "N\n", - "\n", - "\n", - "\n", - "s1->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "OverWeight\n", - "\n", - "\n", - "\n", - "v4\n", - "OverWeight * δw\n", - "\n", - "\n", - "\n", - "s2->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v5\n", - "OverWeight * ro\n", - "\n", - "\n", - "\n", - "s2->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v8\n", - "OverWeight * rage\n", - "\n", - "\n", - "\n", - "s2->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3\n", - "\n", - "Obese\n", - "\n", - "\n", - "\n", - "v6\n", - "Obese * δo\n", - "\n", - "\n", - "\n", - "s3->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v9\n", - "Obese * rage\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p1\n", - "\n", - "μ\n", - "\n", - "\n", - "\n", - "v1\n", - "N * μ\n", - "\n", - "\n", - "\n", - "p1->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p2\n", - "\n", - "δw\n", - "\n", - "\n", - "\n", - "p2->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p2->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p3\n", - "\n", - "rw\n", - "\n", - "\n", - "\n", - "p3->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p4\n", - "\n", - "ro\n", - "\n", - "\n", - "\n", - "p4->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p5\n", - "\n", - "δo\n", - "\n", - "\n", - "\n", - "p5->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6\n", - "\n", - "rage\n", - "\n", - "\n", - "\n", - "p6->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_2d\n", - "\n", - "\n", - "\n", - "\n", - "fs_4d\n", - "\n", - "\n", - "\n", - "\n", - "fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "v1->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_NewBorn\n", - "\n", - "\n", - "\n", - "v2->fs_2d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathNormalWeight\n", - "\n", - "\n", - "\n", - "v3->s2\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingOverWeight\n", - "\n", - "\n", - "\n", - "v4->fs_4d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathOverWeight\n", - "\n", - "\n", - "\n", - "v5->s3\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingObese\n", - "\n", - "\n", - "\n", - "v6->fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathObese\n", - "\n", - "\n", - "\n", - "v7->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_idNW\n", - "\n", - "\n", - "\n", - "v8->s2\n", - "\n", - "\n", - "\n", - "\n", - "f_idOW\n", - "\n", - "\n", - "\n", - "v9->s3\n", - "\n", - "\n", - "\n", - "\n", - "f_idOb\n", - "\n", - "\n", - "\n", - "sv1->v1\n", - "\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" + "ename": "LoadError", + "evalue": "UndefVarError: `WeightModel` not defined", + "output_type": "error", + "traceback": [ + "UndefVarError: `WeightModel` not defined", + "", + "Stacktrace:", + " [1] top-level scope", + " @ In[26]:1" + ] } ], "source": [ @@ -2289,7 +742,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 27, "id": "3a0f91db", "metadata": {}, "outputs": [ @@ -2860,8 +1313,9 @@ "└─────┴──────┴──────┴──────────────┘\n" ] }, + "execution_count": 27, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -2911,434 +1365,28 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 28, "id": "514e6f83", "metadata": {}, "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "Child\n", - "\n", - "\n", - "\n", - "v2\n", - "Child * δC\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v3\n", - "Child * r\n", - "\n", - "\n", - "\n", - "s1->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "Child * rageCA\n", - "\n", - "\n", - "\n", - "s1->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "sv1\n", - "\n", - "N\n", - "\n", - "\n", - "\n", - "s1->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "Adult\n", - "\n", - "\n", - "\n", - "v5\n", - "Adult * δA\n", - "\n", - "\n", - "\n", - "s2->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v6\n", - "Adult * r\n", - "\n", - "\n", - "\n", - "s2->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v7\n", - "Adult * rageAS\n", - "\n", - "\n", - "\n", - "s2->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3\n", - "\n", - "Senior\n", - "\n", - "\n", - "\n", - "v8\n", - "Senior * δS\n", - "\n", - "\n", - "\n", - "s3->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v9\n", - "Senior * r\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p1\n", - "\n", - "μ\n", - "\n", - "\n", - "\n", - "v1\n", - "N * μ\n", - "\n", - "\n", - "\n", - "p1->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p2\n", - "\n", - "δC\n", - "\n", - "\n", - "\n", - "p2->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p3\n", - "\n", - "δA\n", - "\n", - "\n", - "\n", - "p3->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p4\n", - "\n", - "δS\n", - "\n", - "\n", - "\n", - "p4->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p5\n", - "\n", - "rageCA\n", - "\n", - "\n", - "\n", - "p5->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6\n", - "\n", - "rageAS\n", - "\n", - "\n", - "\n", - "p6->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p7\n", - "\n", - "r\n", - "\n", - "\n", - "\n", - "p7->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p7->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p7->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_3d\n", - "\n", - "\n", - "\n", - "\n", - "fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "fs_9d\n", - "\n", - "\n", - "\n", - "\n", - "v1->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_NB\n", - "\n", - "\n", - "\n", - "v2->fs_3d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathC\n", - "\n", - "\n", - "\n", - "v3->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_idC\n", - "\n", - "\n", - "\n", - "v4->s2\n", - "\n", - "\n", - "\n", - "\n", - "f_agingCA\n", - "\n", - "\n", - "\n", - "v5->fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathA\n", - "\n", - "\n", - "\n", - "v6->s2\n", - "\n", - "\n", - "\n", - "\n", - "f_idA\n", - "\n", - "\n", - "\n", - "v7->s3\n", - "\n", - "\n", - "\n", - "\n", - "f_agingAS\n", - "\n", - "\n", - "\n", - "v8->fs_9d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathS\n", - "\n", - "\n", - "\n", - "v9->s3\n", - "\n", - "\n", - "\n", - "\n", - "f_idS\n", - "\n", - "\n", - "\n", - "sv1->v1\n", - "\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\"))" ] }, + "execution_count": 28, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "dyld[27061]: Library not loaded: @rpath/libexpat.1.dylib\n", + " Referenced from: <0A7C10B0-F8AF-321C-BC1A-651591ED4464> /Users/cuffaro.m/.julia/artifacts/dbc1b7f42ddb07be07d55ad976317ad027618c63/bin/dot\n", + " Reason: tried: '/Users/cuffaro.m/.julia/artifacts/dbc1b7f42ddb07be07d55ad976317ad027618c63/bin/../lib/libexpat.1.dylib' (no such file), '/Users/cuffaro.m/.julia/artifacts/dbc1b7f42ddb07be07d55ad976317ad027618c63/bin/../lib/libexpat.1.dylib' (no such file)\n" + ] } ], "source": [ @@ -3347,434 +1395,28 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 29, "id": "4f8caeca", "metadata": {}, "outputs": [ { "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "Child\n", - "\n", - "\n", - "\n", - "v2\n", - "Child * δC\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v3\n", - "Child * r\n", - "\n", - "\n", - "\n", - "s1->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v4\n", - "Child * rageCA\n", - "\n", - "\n", - "\n", - "s1->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "sv1\n", - "\n", - "N\n", - "\n", - "\n", - "\n", - "s1->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "Adult\n", - "\n", - "\n", - "\n", - "v5\n", - "Adult * δA\n", - "\n", - "\n", - "\n", - "s2->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v6\n", - "Adult * r\n", - "\n", - "\n", - "\n", - "s2->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v7\n", - "Adult * rageAS\n", - "\n", - "\n", - "\n", - "s2->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3\n", - "\n", - "Senior\n", - "\n", - "\n", - "\n", - "v8\n", - "Senior * δS\n", - "\n", - "\n", - "\n", - "s3->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v9\n", - "Senior * r\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p1\n", - "\n", - "μ\n", - "\n", - "\n", - "\n", - "v1\n", - "N * μ\n", - "\n", - "\n", - "\n", - "p1->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p2\n", - "\n", - "δC\n", - "\n", - "\n", - "\n", - "p2->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p3\n", - "\n", - "δA\n", - "\n", - "\n", - "\n", - "p3->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p4\n", - "\n", - "δS\n", - "\n", - "\n", - "\n", - "p4->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p5\n", - "\n", - "rageCA\n", - "\n", - "\n", - "\n", - "p5->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6\n", - "\n", - "rageAS\n", - "\n", - "\n", - "\n", - "p6->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p7\n", - "\n", - "r\n", - "\n", - "\n", - "\n", - "p7->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p7->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p7->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_3d\n", - "\n", - "\n", - "\n", - "\n", - "fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "fs_9d\n", - "\n", - "\n", - "\n", - "\n", - "v1->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_NB\n", - "\n", - "\n", - "\n", - "v2->fs_3d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathC\n", - "\n", - "\n", - "\n", - "v3->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_idC\n", - "\n", - "\n", - "\n", - "v4->s2\n", - "\n", - "\n", - "\n", - "\n", - "f_agingCA\n", - "\n", - "\n", - "\n", - "v5->fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathA\n", - "\n", - "\n", - "\n", - "v6->s2\n", - "\n", - "\n", - "\n", - "\n", - "f_idA\n", - "\n", - "\n", - "\n", - "v7->s3\n", - "\n", - "\n", - "\n", - "\n", - "f_agingAS\n", - "\n", - "\n", - "\n", - "v8->fs_9d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathS\n", - "\n", - "\n", - "\n", - "v9->s3\n", - "\n", - "\n", - "\n", - "\n", - "f_idS\n", - "\n", - "\n", - "\n", - "sv1->v1\n", - "\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\"))" ] }, + "execution_count": 29, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "dyld[27062]: Library not loaded: @rpath/libexpat.1.dylib\n", + " Referenced from: <0A7C10B0-F8AF-321C-BC1A-651591ED4464> /Users/cuffaro.m/.julia/artifacts/dbc1b7f42ddb07be07d55ad976317ad027618c63/bin/dot\n", + " Reason: tried: '/Users/cuffaro.m/.julia/artifacts/dbc1b7f42ddb07be07d55ad976317ad027618c63/bin/../lib/libexpat.1.dylib' (no such file), '/Users/cuffaro.m/.julia/artifacts/dbc1b7f42ddb07be07d55ad976317ad027618c63/bin/../lib/libexpat.1.dylib' (no such file)\n" + ] } ], "source": [ @@ -3798,989 +1440,21 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 30, "id": "b48241ff", "metadata": {}, "outputs": [ { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "G\n", - "\n", - "\n", - "\n", - "s1\n", - "\n", - "NormalWeightChild\n", - "\n", - "\n", - "\n", - "v2\n", - "NormalWeightChild * δwδC\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v5\n", - "NormalWeightChild * rwr\n", - "\n", - "\n", - "\n", - "s1->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v7\n", - "NormalWeightChild * ragerageCA\n", - "\n", - "\n", - "\n", - "s1->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s1->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "sv1\n", - "\n", - "NN\n", - "\n", - "\n", - "\n", - "s1->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2\n", - "\n", - "OverWeightChild\n", - "\n", - "\n", - "\n", - "v3\n", - "OverWeightChild * δwδC\n", - "\n", - "\n", - "\n", - "s2->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v6\n", - "OverWeightChild * ror\n", - "\n", - "\n", - "\n", - "s2->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v8\n", - "OverWeightChild * ragerageCA\n", - "\n", - "\n", - "\n", - "s2->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s2->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3\n", - "\n", - "ObeseChild\n", - "\n", - "\n", - "\n", - "v4\n", - "ObeseChild * δoδC\n", - "\n", - "\n", - "\n", - "s3->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v9\n", - "ObeseChild * ragerageCA\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s3->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s4\n", - "\n", - "NormalWeightAdult\n", - "\n", - "\n", - "\n", - "v10\n", - "NormalWeightAdult * δwδA\n", - "\n", - "\n", - "\n", - "s4->v10\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s4->v10\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v13\n", - "NormalWeightAdult * rwr\n", - "\n", - "\n", - "\n", - "s4->v13\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s4->v13\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v15\n", - "NormalWeightAdult * ragerageAS\n", - "\n", - "\n", - "\n", - "s4->v15\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s4->v15\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s4->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s5\n", - "\n", - "OverWeightAdult\n", - "\n", - "\n", - "\n", - "v11\n", - "OverWeightAdult * δwδA\n", - "\n", - "\n", - "\n", - "s5->v11\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s5->v11\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v14\n", - "OverWeightAdult * ror\n", - "\n", - "\n", - "\n", - "s5->v14\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s5->v14\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v16\n", - "OverWeightAdult * ragerageAS\n", - "\n", - "\n", - "\n", - "s5->v16\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s5->v16\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s5->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s6\n", - "\n", - "ObeseAdult\n", - "\n", - "\n", - "\n", - "v12\n", - "ObeseAdult * δoδA\n", - "\n", - "\n", - "\n", - "s6->v12\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s6->v12\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v17\n", - "ObeseAdult * ragerageAS\n", - "\n", - "\n", - "\n", - "s6->v17\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s6->v17\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s6->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s7\n", - "\n", - "NormalWeightSenior\n", - "\n", - "\n", - "\n", - "v18\n", - "NormalWeightSenior * δwδS\n", - "\n", - "\n", - "\n", - "s7->v18\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s7->v18\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v21\n", - "NormalWeightSenior * rwr\n", - "\n", - "\n", - "\n", - "s7->v21\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s7->v21\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s7->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s8\n", - "\n", - "OverWeightSenior\n", - "\n", - "\n", - "\n", - "v19\n", - "OverWeightSenior * δwδS\n", - "\n", - "\n", - "\n", - "s8->v19\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s8->v19\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "v22\n", - "OverWeightSenior * ror\n", - "\n", - "\n", - "\n", - "s8->v22\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s8->v22\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s8->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s9\n", - "\n", - "ObeseSenior\n", - "\n", - "\n", - "\n", - "v20\n", - "ObeseSenior * δoδS\n", - "\n", - "\n", - "\n", - "s9->v20\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s9->v20\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "s9->sv1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p1\n", - "\n", - "μμ\n", - "\n", - "\n", - "\n", - "v1\n", - "NN * μμ\n", - "\n", - "\n", - "\n", - "p1->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p2\n", - "\n", - "δwδC\n", - "\n", - "\n", - "\n", - "p2->v2\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p2->v3\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p3\n", - "\n", - "δoδC\n", - "\n", - "\n", - "\n", - "p3->v4\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p4\n", - "\n", - "δwδA\n", - "\n", - "\n", - "\n", - "p4->v10\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p4->v11\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p5\n", - "\n", - "δoδA\n", - "\n", - "\n", - "\n", - "p5->v12\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6\n", - "\n", - "δwδS\n", - "\n", - "\n", - "\n", - "p6->v18\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p6->v19\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p7\n", - "\n", - "δoδS\n", - "\n", - "\n", - "\n", - "p7->v20\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p8\n", - "\n", - "ragerageCA\n", - "\n", - "\n", - "\n", - "p8->v7\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p8->v8\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p8->v9\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p9\n", - "\n", - "ragerageAS\n", - "\n", - "\n", - "\n", - "p9->v15\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p9->v16\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p9->v17\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p10\n", - "\n", - "rwr\n", - "\n", - "\n", - "\n", - "p10->v5\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p10->v13\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p10->v21\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p11\n", - "\n", - "ror\n", - "\n", - "\n", - "\n", - "p11->v6\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p11->v14\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "p11->v22\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u\n", - "\n", - "\n", - "\n", - "\n", - "fs_1u->v1\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "fs_4d\n", - "\n", - "\n", - "\n", - "\n", - "fs_5d\n", - "\n", - "\n", - "\n", - "\n", - "fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "fs_12d\n", - "\n", - "\n", - "\n", - "\n", - "fs_13d\n", - "\n", - "\n", - "\n", - "\n", - "fs_14d\n", - "\n", - "\n", - "\n", - "\n", - "fs_20d\n", - "\n", - "\n", - "\n", - "\n", - "fs_21d\n", - "\n", - "\n", - "\n", - "\n", - "fs_22d\n", - "\n", - "\n", - "\n", - "\n", - "v1->s1\n", - "\n", - "\n", - "\n", - "\n", - "f_NewBornf_NB\n", - "\n", - "\n", - "\n", - "v2->fs_4d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathNormalWeightf_DeathC\n", - "\n", - "\n", - "\n", - "v3->fs_5d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathOverWeightf_DeathC\n", - "\n", - "\n", - "\n", - "v4->fs_6d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathObesef_DeathC\n", - "\n", - "\n", - "\n", - "v5->s2\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingOverWeightf_idC\n", - "\n", - "\n", - "\n", - "v6->s3\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingObesef_idC\n", - "\n", - "\n", - "\n", - "v7->s4\n", - "\n", - "\n", - "\n", - "\n", - "f_idNWf_agingCA\n", - "\n", - "\n", - "\n", - "v8->s5\n", - "\n", - "\n", - "\n", - "\n", - "f_idOWf_agingCA\n", - "\n", - "\n", - "\n", - "v9->s6\n", - "\n", - "\n", - "\n", - "\n", - "f_idObf_agingCA\n", - "\n", - "\n", - "\n", - "v10->fs_12d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathNormalWeightf_DeathA\n", - "\n", - "\n", - "\n", - "v11->fs_13d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathOverWeightf_DeathA\n", - "\n", - "\n", - "\n", - "v12->fs_14d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathObesef_DeathA\n", - "\n", - "\n", - "\n", - "v13->s5\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingOverWeightf_idA\n", - "\n", - "\n", - "\n", - "v14->s6\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingObesef_idA\n", - "\n", - "\n", - "\n", - "v15->s7\n", - "\n", - "\n", - "\n", - "\n", - "f_idNWf_agingAS\n", - "\n", - "\n", - "\n", - "v16->s8\n", - "\n", - "\n", - "\n", - "\n", - "f_idOWf_agingAS\n", - "\n", - "\n", - "\n", - "v17->s9\n", - "\n", - "\n", - "\n", - "\n", - "f_idObf_agingAS\n", - "\n", - "\n", - "\n", - "v18->fs_20d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathNormalWeightf_DeathS\n", - "\n", - "\n", - "\n", - "v19->fs_21d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathOverWeightf_DeathS\n", - "\n", - "\n", - "\n", - "v20->fs_22d\n", - "\n", - "\n", - "\n", - "\n", - "f_DeathObesef_DeathS\n", - "\n", - "\n", - "\n", - "v21->s8\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingOverWeightf_idS\n", - "\n", - "\n", - "\n", - "v22->s9\n", - "\n", - "\n", - "\n", - "\n", - "f_BecomingObesef_idS\n", - "\n", - "\n", - "\n", - "sv1->v1\n", - "\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" + "ename": "LoadError", + "evalue": "UndefVarError: `typed_WeightModel` not defined", + "output_type": "error", + "traceback": [ + "UndefVarError: `typed_WeightModel` not defined", + "", + "Stacktrace:", + " [1] top-level scope", + " @ In[30]:1" + ] } ], "source": [ @@ -4790,7 +1464,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 31, "id": "b0fa738f", "metadata": {}, "outputs": [], @@ -4809,148 +1483,21 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 32, "id": "ad6be5bd", "metadata": {}, "outputs": [ { - "data": { - "image/png": "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", - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/html": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "LoadError", + "evalue": "UndefVarError: `aged_weight` not defined", + "output_type": "error", + "traceback": [ + "UndefVarError: `aged_weight` not defined", + "", + "Stacktrace:", + " [1] top-level scope", + " @ In[32]:1" + ] } ], "source": [ @@ -4961,7 +1508,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 33, "id": "22218a89", "metadata": {}, "outputs": [ @@ -4979,8 +1526,9 @@ "HTML{String}(\"\\n\")" ] }, + "execution_count": 33, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -4997,7 +1545,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "2261e0cc", "metadata": {}, "outputs": [], @@ -5006,7 +1554,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.2", + "display_name": "Julia 1.9.3", "language": "julia", "name": "julia-1.9" }, @@ -5014,7 +1562,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.2" + "version": "1.9.3" } }, "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 88f14349..7147f58c 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 @@ -6457,7 +6457,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Julia 1.9.2", + "display_name": "Julia 1.9.3", "language": "julia", "name": "julia-1.9" }, @@ -6465,7 +6465,7 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.2" + "version": "1.9.3" } }, "nbformat": 4, diff --git a/src/StockFlow.jl b/src/StockFlow.jl index ebe439e2..f4683506 100644 --- a/src/StockFlow.jl +++ b/src/StockFlow.jl @@ -16,7 +16,6 @@ get_lss, get_lssv, get_lsvsv, get_lsvv, get_lvs, get_lvv, get_is, get_ifn, get_o using Catlab using Catlab.CategoricalAlgebra using Catlab.CategoricalAlgebra.FinSets -using Catlab.GATs.Presentations using Catlab.Theories using LabelledArrays using LinearAlgebra: mul!