diff --git a/.github/workflows/julia-tests.yaml b/.github/workflows/julia-tests.yaml
index 410ecd4..2651026 100644
--- a/.github/workflows/julia-tests.yaml
+++ b/.github/workflows/julia-tests.yaml
@@ -15,7 +15,8 @@ jobs:
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@v1
with:
- version: '1.9.0'
+ version: '1.9'
+ - uses: julia-actions/cache@v1
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
- uses: julia-actions/julia-processcoverage@v1
diff --git a/.gitignore b/.gitignore
index 42afd83..f8ddecf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,6 +37,7 @@ api.env
### Julia ###
test/logs/
+Manifest.toml
### Project ###
# Config
diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md
deleted file mode 100644
index de4a5b7..0000000
--- a/ARCHITECTURE.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Architecture
-
-The Simulation Service (soon to be renamed SciML Service) is a REST API that wraps
-specific SciML tasks. The service should match the spec [here](https://github.com/DARPA-ASKEM/simulation-api-spec)
-since PyCIEMSS Service and SciML Service ideally are hot swappable.
-
-The API creates a job using the JobSchedulers.jl library and updates the Terarium Data Service (TDS) with the status
-of the job throughout its execution. Once the job completes, the results are written to S3. With most of the output artifacts, we do little postprocessing
-after completing the SciML portion.
-
-## Layout
-
-Source is split into 5 major components:
-- `SimulationService.jl`: Contains the start and stop functions for the service
-- `Settings.jl`: Enumerates the environment variables used by the project
-- `service`: Job scheduling, pre/post-processing, endpoints, etc. Handled by TA4.
-- `contracts`: Location where TA3 and TA4 agree on an interface between the SciML Operations and the rest of the service.
- - `Available.jl`: The operations available to the API are here. Generally, the operations just wrap around by the exposed SciML
- operations.
-- `operations`: JuliaHub primarily focuses here.
\ No newline at end of file
diff --git a/Manifest.toml b/Manifest.toml
deleted file mode 100644
index 7175674..0000000
--- a/Manifest.toml
+++ /dev/null
@@ -1,3155 +0,0 @@
-# This file is machine-generated - editing it directly is not advised
-
-julia_version = "1.9.2"
-manifest_format = "2.0"
-project_hash = "767c093e67fdab416f979f052b06bf048b75f0ac"
-
-[[deps.ACSets]]
-deps = ["CompTime", "JSON", "MLStyle", "OrderedCollections", "Pkg", "PrettyTables", "Reexport", "StaticArrays", "StructEquality", "Tables"]
-git-tree-sha1 = "935a09f5a40d199ac9c7fb55357e2164b1ef8671"
-uuid = "227ef7b5-1206-438b-ac65-934d6da304b8"
-version = "0.2.3"
-
-[[deps.ADTypes]]
-git-tree-sha1 = "e58c18d2312749847a74f5be80bb0fa53da102bd"
-uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
-version = "0.1.5"
-
-[[deps.AMQPClient]]
-deps = ["Logging", "MbedTLS", "Sockets"]
-git-tree-sha1 = "508457ed7a2afb432590247dc363fffc51f242fc"
-uuid = "79c8b4cd-a41a-55fa-907c-fab5288e1383"
-version = "0.5.1"
-
-[[deps.ASL_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "6252039f98492252f9e47c312c8ffda0e3b9e78d"
-uuid = "ae81ac8f-d209-56e5-92de-9978fef736f9"
-version = "0.1.3+0"
-
-[[deps.AbstractAlgebra]]
-deps = ["GroupsCore", "InteractiveUtils", "LinearAlgebra", "MacroTools", "Preferences", "Random", "RandomExtensions", "SparseArrays", "Test"]
-git-tree-sha1 = "1bd8a536c949eb3de9b58042d57790ded6b70fa6"
-uuid = "c3fe647b-3220-5bb0-a1ea-a7954cac585d"
-version = "0.30.9"
-
-[[deps.AbstractFFTs]]
-deps = ["LinearAlgebra"]
-git-tree-sha1 = "cad4c758c0038eea30394b1b671526921ca85b21"
-uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
-version = "1.4.0"
-weakdeps = ["ChainRulesCore"]
-
- [deps.AbstractFFTs.extensions]
- AbstractFFTsChainRulesCoreExt = "ChainRulesCore"
-
-[[deps.AbstractMCMC]]
-deps = ["BangBang", "ConsoleProgressMonitor", "Distributed", "LogDensityProblems", "Logging", "LoggingExtras", "ProgressLogging", "Random", "StatsBase", "TerminalLoggers", "Transducers"]
-git-tree-sha1 = "87e63dcb990029346b091b170252f3c416568afc"
-uuid = "80f14c24-f653-4e6a-9b94-39d6b0f70001"
-version = "4.4.2"
-
-[[deps.AbstractPPL]]
-deps = ["AbstractMCMC", "DensityInterface", "Random", "Setfield", "SparseArrays"]
-git-tree-sha1 = "33ea6c6837332395dbf3ba336f273c9f7fcf4db9"
-uuid = "7a57a42e-76ec-4ea3-a279-07e840d6d9cf"
-version = "0.5.4"
-
-[[deps.AbstractTrees]]
-git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c"
-uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
-version = "0.4.4"
-
-[[deps.Accessors]]
-deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Requires", "Test"]
-git-tree-sha1 = "954634616d5846d8e216df1298be2298d55280b2"
-uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
-version = "0.1.32"
-
- [deps.Accessors.extensions]
- AccessorsAxisKeysExt = "AxisKeys"
- AccessorsIntervalSetsExt = "IntervalSets"
- AccessorsStaticArraysExt = "StaticArrays"
- AccessorsStructArraysExt = "StructArrays"
-
- [deps.Accessors.weakdeps]
- AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5"
- IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
- StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
- StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
-
-[[deps.Adapt]]
-deps = ["LinearAlgebra", "Requires"]
-git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24"
-uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
-version = "3.6.2"
-weakdeps = ["StaticArrays"]
-
- [deps.Adapt.extensions]
- AdaptStaticArraysExt = "StaticArrays"
-
-[[deps.AdvancedHMC]]
-deps = ["AbstractMCMC", "ArgCheck", "DocStringExtensions", "InplaceOps", "LinearAlgebra", "LogDensityProblems", "LogDensityProblemsAD", "ProgressMeter", "Random", "Requires", "Setfield", "SimpleUnPack", "Statistics", "StatsBase", "StatsFuns"]
-git-tree-sha1 = "3bf24030e85b1d6d298e4f483f6aeff6f38462db"
-uuid = "0bf59076-c3b1-5ca4-86bd-e02cd72cde3d"
-version = "0.4.6"
-
- [deps.AdvancedHMC.extensions]
- AdvancedHMCCUDAExt = "CUDA"
- AdvancedHMCMCMCChainsExt = "MCMCChains"
- AdvancedHMCOrdinaryDiffEqExt = "OrdinaryDiffEq"
-
- [deps.AdvancedHMC.weakdeps]
- CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
- MCMCChains = "c7f686f2-ff18-58e9-bc7b-31028e88f75d"
- OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
-
-[[deps.AdvancedMH]]
-deps = ["AbstractMCMC", "Distributions", "LogDensityProblems", "Random", "Requires"]
-git-tree-sha1 = "165af834eee68d0a96c58daa950ddf0b3f45f608"
-uuid = "5b7e9947-ddc0-4b3f-9b55-0d8042f74170"
-version = "0.7.4"
-weakdeps = ["DiffResults", "ForwardDiff", "MCMCChains", "StructArrays"]
-
- [deps.AdvancedMH.extensions]
- AdvancedMHForwardDiffExt = ["DiffResults", "ForwardDiff"]
- AdvancedMHMCMCChainsExt = "MCMCChains"
- AdvancedMHStructArraysExt = "StructArrays"
-
-[[deps.AdvancedPS]]
-deps = ["AbstractMCMC", "Distributions", "Libtask", "Random", "Random123", "StatsFuns"]
-git-tree-sha1 = "4d73400b3583147b1b639794696c78202a226584"
-uuid = "576499cb-2369-40b2-a588-c64705576edc"
-version = "0.4.3"
-
-[[deps.AdvancedVI]]
-deps = ["Bijectors", "Distributions", "DistributionsAD", "DocStringExtensions", "ForwardDiff", "LinearAlgebra", "ProgressMeter", "Random", "Requires", "StatsBase", "StatsFuns", "Tracker"]
-git-tree-sha1 = "67fcc7d46c26250e89fc62798fbe07b5ee264c6f"
-uuid = "b5ca4192-6429-45e5-a2d9-87aec30a685c"
-version = "0.1.6"
-
-[[deps.AlgebraicPetri]]
-deps = ["Catlab", "GeneralizedGenerated", "LabelledArrays"]
-git-tree-sha1 = "d798c838e065927a09edf431791d34fd5a709023"
-uuid = "4f99eebe-17bf-4e98-b6a1-2c4f205a959b"
-version = "0.9.0"
-
- [deps.AlgebraicPetri.extensions]
- AlgebraicPetriCatalystExt = "Catalyst"
- AlgebraicPetriModelingToolkitExt = "ModelingToolkit"
- AlgebraicPetriOrdinaryDiffEqExt = "OrdinaryDiffEq"
-
- [deps.AlgebraicPetri.weakdeps]
- Catalyst = "479239e8-5488-4da2-87a7-35f2df7eef83"
- ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
- OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
-
-[[deps.AlphaStableDistributions]]
-deps = ["Distributions", "FileIO", "Interpolations", "JLD2", "LinearAlgebra", "Random", "SpecialFunctions", "StaticArrays", "Statistics", "StatsBase", "ToeplitzMatrices"]
-git-tree-sha1 = "ad5789d4d1a7e38a9fb1e5e02369eeb799833b2e"
-uuid = "f20549b4-2d50-407f-863c-cdd202ba59a3"
-version = "1.1.6"
-
-[[deps.ArgCheck]]
-git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4"
-uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197"
-version = "2.3.0"
-
-[[deps.ArgTools]]
-uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
-version = "1.1.1"
-
-[[deps.ArnoldiMethod]]
-deps = ["LinearAlgebra", "Random", "StaticArrays"]
-git-tree-sha1 = "62e51b39331de8911e4a7ff6f5aaf38a5f4cc0ae"
-uuid = "ec485272-7323-5ecc-a04f-4719b315124d"
-version = "0.2.0"
-
-[[deps.ArrayInterface]]
-deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"]
-git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31"
-uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
-version = "7.4.11"
-
- [deps.ArrayInterface.extensions]
- ArrayInterfaceBandedMatricesExt = "BandedMatrices"
- ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices"
- ArrayInterfaceCUDAExt = "CUDA"
- ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore"
- ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore"
- ArrayInterfaceTrackerExt = "Tracker"
-
- [deps.ArrayInterface.weakdeps]
- BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
- BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0"
- CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
- GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
- StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
- Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
-
-[[deps.ArrayInterfaceCore]]
-deps = ["LinearAlgebra", "SnoopPrecompile", "SparseArrays", "SuiteSparse"]
-git-tree-sha1 = "e5f08b5689b1aad068e01751889f2f615c7db36d"
-uuid = "30b0a656-2188-435a-8636-2ec0e6a096e2"
-version = "0.1.29"
-
-[[deps.ArrayLayouts]]
-deps = ["FillArrays", "LinearAlgebra", "SparseArrays"]
-git-tree-sha1 = "9e5ad0f651c1be8a355e4d327e9cb3bc135d1b73"
-uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
-version = "1.0.8"
-
-[[deps.Artifacts]]
-uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
-
-[[deps.Atomix]]
-deps = ["UnsafeAtomics"]
-git-tree-sha1 = "c06a868224ecba914baa6942988e2f2aade419be"
-uuid = "a9b6321e-bd34-4604-b9c9-b65b8de01458"
-version = "0.1.0"
-
-[[deps.AxisAlgorithms]]
-deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"]
-git-tree-sha1 = "66771c8d21c8ff5e3a93379480a2307ac36863f7"
-uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950"
-version = "1.0.1"
-
-[[deps.AxisArrays]]
-deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"]
-git-tree-sha1 = "1dd4d9f5beebac0c03446918741b1a03dc5e5788"
-uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9"
-version = "0.4.6"
-
-[[deps.BandedMatrices]]
-deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools", "SparseArrays"]
-git-tree-sha1 = "3c63ab5fb851444fb018b97883cfd79ae044e888"
-uuid = "aae01518-5342-5314-be14-df237901396f"
-version = "0.17.29"
-
-[[deps.BangBang]]
-deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"]
-git-tree-sha1 = "e28912ce94077686443433c2800104b061a827ed"
-uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66"
-version = "0.3.39"
-
- [deps.BangBang.extensions]
- BangBangChainRulesCoreExt = "ChainRulesCore"
- BangBangDataFramesExt = "DataFrames"
- BangBangStaticArraysExt = "StaticArrays"
- BangBangStructArraysExt = "StructArrays"
- BangBangTypedTablesExt = "TypedTables"
-
- [deps.BangBang.weakdeps]
- ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
- DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
- StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
- StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
- TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9"
-
-[[deps.Base64]]
-uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
-
-[[deps.Baselet]]
-git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e"
-uuid = "9718e550-a3fa-408a-8086-8db961cd8217"
-version = "0.1.1"
-
-[[deps.BenchmarkTools]]
-deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"]
-git-tree-sha1 = "d9a9701b899b30332bbcb3e1679c41cce81fb0e8"
-uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
-version = "1.3.2"
-
-[[deps.Bijections]]
-git-tree-sha1 = "fe4f8c5ee7f76f2198d5c2a06d3961c249cce7bd"
-uuid = "e2ed5e7c-b2de-5872-ae92-c73ca462fb04"
-version = "0.1.4"
-
-[[deps.Bijectors]]
-deps = ["ArgCheck", "ChainRulesCore", "ChangesOfVariables", "Compat", "Distributions", "Functors", "InverseFunctions", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "MappedArrays", "Random", "Reexport", "Requires", "Roots", "SparseArrays", "Statistics"]
-git-tree-sha1 = "1234b03e94938e6f2b14834dfd3ef45698d5e14f"
-uuid = "76274a88-744f-5084-9051-94815aaf08c4"
-version = "0.10.8"
-
-[[deps.BitFlags]]
-git-tree-sha1 = "43b1a4a8f797c1cddadf60499a8a077d4af2cd2d"
-uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35"
-version = "0.1.7"
-
-[[deps.BitTwiddlingConvenienceFunctions]]
-deps = ["Static"]
-git-tree-sha1 = "0c5f81f47bbbcf4aea7b2959135713459170798b"
-uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b"
-version = "0.1.5"
-
-[[deps.BlackBoxOptim]]
-deps = ["CPUTime", "Compat", "Distributed", "Distributions", "HTTP", "JSON", "LinearAlgebra", "Printf", "Random", "SpatialIndexing", "StatsBase"]
-git-tree-sha1 = "136079f37e3514ec691926093924b591a8842f5d"
-uuid = "a134a8b2-14d6-55f6-9291-3336d3ab0209"
-version = "0.6.2"
-
-[[deps.BoundaryValueDiffEq]]
-deps = ["BandedMatrices", "DiffEqBase", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "NLsolve", "Reexport", "SciMLBase", "SparseArrays"]
-git-tree-sha1 = "ed8e837bfb3d1e3157022c9636ec1c722b637318"
-uuid = "764a87c0-6b3e-53db-9096-fe964310641d"
-version = "2.11.0"
-
-[[deps.Bzip2_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2"
-uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
-version = "1.0.8+0"
-
-[[deps.CEnum]]
-git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90"
-uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
-version = "0.4.2"
-
-[[deps.CPUSummary]]
-deps = ["CpuId", "IfElse", "PrecompileTools", "Static"]
-git-tree-sha1 = "89e0654ed8c7aebad6d5ad235d6242c2d737a928"
-uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9"
-version = "0.2.3"
-
-[[deps.CPUTime]]
-git-tree-sha1 = "2dcc50ea6a0a1ef6440d6eecd0fe3813e5671f45"
-uuid = "a9c8d775-2e2e-55fc-8582-045d282d599e"
-version = "1.0.0"
-
-[[deps.CRlibm]]
-deps = ["CRlibm_jll"]
-git-tree-sha1 = "32abd86e3c2025db5172aa182b982debed519834"
-uuid = "96374032-68de-5a5b-8d9e-752f78720389"
-version = "1.0.1"
-
-[[deps.CRlibm_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc"
-uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0"
-version = "1.0.1+0"
-
-[[deps.CSTParser]]
-deps = ["Tokenize"]
-git-tree-sha1 = "3ddd48d200eb8ddf9cb3e0189fc059fd49b97c1f"
-uuid = "00ebfdb7-1f24-5e51-bd34-a7502290713f"
-version = "3.3.6"
-
-[[deps.CSV]]
-deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"]
-git-tree-sha1 = "44dbf560808d49041989b8a96cae4cffbeb7966a"
-uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
-version = "0.10.11"
-
-[[deps.Cairo_jll]]
-deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
-git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2"
-uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
-version = "1.16.1+1"
-
-[[deps.Calculus]]
-deps = ["LinearAlgebra"]
-git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad"
-uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
-version = "0.5.1"
-
-[[deps.Catlab]]
-deps = ["ACSets", "Colors", "CompTime", "Compose", "DataStructures", "GeneralizedGenerated", "JSON", "LightXML", "LinearAlgebra", "Logging", "MLStyle", "PrettyTables", "Random", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "StructEquality", "Tables"]
-git-tree-sha1 = "c610008c7dc9907a0112b3d48f75a6de806e1aeb"
-uuid = "134e5e36-593f-5add-ad60-77f754baafbe"
-version = "0.15.1"
-
- [deps.Catlab.extensions]
- CatlabConvexExt = "Convex"
- CatlabDataFramesExt = "DataFrames"
- CatlabGraphsExt = "Graphs"
- CatlabGraphvizExt = "Graphviz_jll"
- CatlabMetaGraphsExt = "MetaGraphs"
- CatlabSCSExt = "SCS"
- CatlabTikzPicturesExt = "TikzPictures"
-
- [deps.Catlab.weakdeps]
- Convex = "f65535da-76fb-5f13-bab9-19810c17039a"
- DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
- Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6"
- Graphviz_jll = "3c863552-8265-54e4-a6dc-903eb78fde85"
- MetaGraphs = "626554b9-1ddb-594c-aa3c-2596fe9399a5"
- SCS = "c946c3f1-0d1f-5ce8-9dea-7daa1f7e2d13"
- TikzPictures = "37f6aa50-8035-52d0-81c2-5a1d08754b2d"
-
-[[deps.ChainRules]]
-deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "Statistics", "StructArrays"]
-git-tree-sha1 = "2afc496e94d15a1af5502625246d172361542133"
-uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2"
-version = "1.52.0"
-
-[[deps.ChainRulesCore]]
-deps = ["Compat", "LinearAlgebra", "SparseArrays"]
-git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644"
-uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
-version = "1.16.0"
-
-[[deps.ChangesOfVariables]]
-deps = ["LinearAlgebra", "Test"]
-git-tree-sha1 = "2fba81a302a7be671aefe194f0525ef231104e7f"
-uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
-version = "0.1.8"
-weakdeps = ["InverseFunctions"]
-
- [deps.ChangesOfVariables.extensions]
- ChangesOfVariablesInverseFunctionsExt = "InverseFunctions"
-
-[[deps.CloseOpenIntervals]]
-deps = ["Static", "StaticArrayInterface"]
-git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1"
-uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9"
-version = "0.1.12"
-
-[[deps.CodeTracking]]
-deps = ["InteractiveUtils", "UUIDs"]
-git-tree-sha1 = "d730914ef30a06732bdd9f763f6cc32e92ffbff1"
-uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2"
-version = "1.3.1"
-
-[[deps.CodecBzip2]]
-deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"]
-git-tree-sha1 = "2e62a725210ce3c3c2e1a3080190e7ca491f18d7"
-uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd"
-version = "0.7.2"
-
-[[deps.CodecZlib]]
-deps = ["TranscodingStreams", "Zlib_jll"]
-git-tree-sha1 = "9c209fb7536406834aa938fb149964b985de6c83"
-uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
-version = "0.7.1"
-
-[[deps.ColorSchemes]]
-deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"]
-git-tree-sha1 = "be6ab11021cd29f0344d5c4357b163af05a48cba"
-uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
-version = "3.21.0"
-
-[[deps.ColorTypes]]
-deps = ["FixedPointNumbers", "Random"]
-git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4"
-uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
-version = "0.11.4"
-
-[[deps.ColorVectorSpace]]
-deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"]
-git-tree-sha1 = "600cc5508d66b78aae350f7accdb58763ac18589"
-uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4"
-version = "0.9.10"
-
-[[deps.Colors]]
-deps = ["ColorTypes", "FixedPointNumbers", "Reexport"]
-git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a"
-uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
-version = "0.12.10"
-
-[[deps.Combinatorics]]
-git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860"
-uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa"
-version = "1.0.2"
-
-[[deps.CommonMark]]
-deps = ["Crayons", "JSON", "PrecompileTools", "URIs"]
-git-tree-sha1 = "532c4185d3c9037c0237546d817858b23cf9e071"
-uuid = "a80b9123-70ca-4bc0-993e-6e3bcb318db6"
-version = "0.8.12"
-
-[[deps.CommonSolve]]
-git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c"
-uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2"
-version = "0.2.4"
-
-[[deps.CommonSubexpressions]]
-deps = ["MacroTools", "Test"]
-git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7"
-uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
-version = "0.3.0"
-
-[[deps.CompTime]]
-deps = ["MLStyle", "MacroTools"]
-git-tree-sha1 = "8c05059bc293a17f71cae4cd58b1fc18d4ede271"
-uuid = "0fb5dd42-039a-4ca4-a1d7-89a96eae6d39"
-version = "0.1.2"
-
-[[deps.Compat]]
-deps = ["UUIDs"]
-git-tree-sha1 = "4e88377ae7ebeaf29a047aa1ee40826e0b708a5d"
-uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
-version = "4.7.0"
-weakdeps = ["Dates", "LinearAlgebra"]
-
- [deps.Compat.extensions]
- CompatLinearAlgebraExt = "LinearAlgebra"
-
-[[deps.CompilerSupportLibraries_jll]]
-deps = ["Artifacts", "Libdl"]
-uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
-version = "1.0.5+0"
-
-[[deps.Compose]]
-deps = ["Base64", "Colors", "DataStructures", "Dates", "IterTools", "JSON", "LinearAlgebra", "Measures", "Printf", "Random", "Requires", "Statistics", "UUIDs"]
-git-tree-sha1 = "bf6570a34c850f99407b494757f5d7ad233a7257"
-uuid = "a81c6b42-2e10-5240-aca2-a61377ecd94b"
-version = "0.9.5"
-
-[[deps.CompositeTypes]]
-git-tree-sha1 = "02d2316b7ffceff992f3096ae48c7829a8aa0638"
-uuid = "b152e2b5-7a66-4b01-a709-34e65c35f657"
-version = "0.1.3"
-
-[[deps.CompositionsBase]]
-git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad"
-uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b"
-version = "0.1.2"
-weakdeps = ["InverseFunctions"]
-
- [deps.CompositionsBase.extensions]
- CompositionsBaseInverseFunctionsExt = "InverseFunctions"
-
-[[deps.ConcreteStructs]]
-git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34"
-uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471"
-version = "0.2.3"
-
-[[deps.ConcurrentUtilities]]
-deps = ["Serialization", "Sockets"]
-git-tree-sha1 = "96d823b94ba8d187a6d8f0826e731195a74b90e9"
-uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb"
-version = "2.2.0"
-
-[[deps.ConsoleProgressMonitor]]
-deps = ["Logging", "ProgressMeter"]
-git-tree-sha1 = "3ab7b2136722890b9af903859afcf457fa3059e8"
-uuid = "88cd18e8-d9cc-4ea6-8889-5259c0d15c8b"
-version = "0.1.2"
-
-[[deps.ConstructionBase]]
-deps = ["LinearAlgebra"]
-git-tree-sha1 = "738fec4d684a9a6ee9598a8bfee305b26831f28c"
-uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
-version = "1.5.2"
-weakdeps = ["IntervalSets", "StaticArrays"]
-
- [deps.ConstructionBase.extensions]
- ConstructionBaseIntervalSetsExt = "IntervalSets"
- ConstructionBaseStaticArraysExt = "StaticArrays"
-
-[[deps.Contour]]
-git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781"
-uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
-version = "0.6.2"
-
-[[deps.Copulas]]
-deps = ["AlphaStableDistributions", "Cubature", "Distributions", "ForwardDiff", "GSL", "MvNormalCDF", "Random", "Roots", "SpecialFunctions", "StatsBase", "TaylorSeries"]
-git-tree-sha1 = "bf5b74cd9b240eea4b713bf3b04211dabf827688"
-uuid = "ae264745-0b69-425e-9d9d-cf662c5eec93"
-version = "0.1.10"
-
-[[deps.CpuId]]
-deps = ["Markdown"]
-git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406"
-uuid = "adafc99b-e345-5852-983c-f28acb93d879"
-version = "0.3.1"
-
-[[deps.Crayons]]
-git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15"
-uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
-version = "4.1.1"
-
-[[deps.Cubature]]
-deps = ["Cubature_jll"]
-git-tree-sha1 = "c3f4b3b38abd7b5c3ccf59adab2568212e7530d3"
-uuid = "667455a9-e2ce-5579-9412-b964f529a492"
-version = "1.5.1"
-
-[[deps.Cubature_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "0fe9efb84e3eb7b14f885a95aaa0ed50c7e839c8"
-uuid = "7bc98958-0e37-5d67-a6ac-a3a19030071a"
-version = "1.0.5+0"
-
-[[deps.DSP]]
-deps = ["Compat", "FFTW", "IterTools", "LinearAlgebra", "Polynomials", "Random", "Reexport", "SpecialFunctions", "Statistics"]
-git-tree-sha1 = "da8b06f89fce9996443010ef92572b193f8dca1f"
-uuid = "717857b8-e6f2-59f4-9121-6e50c889abd2"
-version = "0.7.8"
-
-[[deps.DataAPI]]
-git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c"
-uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
-version = "1.15.0"
-
-[[deps.DataFrames]]
-deps = ["Compat", "DataAPI", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SnoopPrecompile", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
-git-tree-sha1 = "aa51303df86f8626a962fccb878430cdb0a97eee"
-uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
-version = "1.5.0"
-
-[[deps.DataStructures]]
-deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
-git-tree-sha1 = "cf25ccb972fec4e4817764d01c82386ae94f77b4"
-uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
-version = "0.18.14"
-
-[[deps.DataValueInterfaces]]
-git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
-uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
-version = "1.0.0"
-
-[[deps.Dates]]
-deps = ["Printf"]
-uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
-
-[[deps.DefineSingletons]]
-git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c"
-uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52"
-version = "0.1.2"
-
-[[deps.DelayDiffEq]]
-deps = ["ArrayInterface", "DataStructures", "DiffEqBase", "LinearAlgebra", "Logging", "OrdinaryDiffEq", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SimpleNonlinearSolve", "SimpleUnPack"]
-git-tree-sha1 = "89f3fbfe78f9d116d1ed0721d65b0b2cf9b36169"
-uuid = "bcd4f6db-9728-5f36-b5f7-82caef46ccdb"
-version = "5.42.0"
-
-[[deps.DelimitedFiles]]
-deps = ["Mmap"]
-git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae"
-uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
-version = "1.9.1"
-
-[[deps.DensityInterface]]
-deps = ["InverseFunctions", "Test"]
-git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b"
-uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d"
-version = "0.4.0"
-
-[[deps.DiffEqBase]]
-deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "DocStringExtensions", "EnumX", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"]
-git-tree-sha1 = "62c41421bd0facc43dfe4e9776135fe21fd1e1b9"
-uuid = "2b5f629d-d688-5b77-993f-72d75c75574e"
-version = "6.126.0"
-
- [deps.DiffEqBase.extensions]
- DiffEqBaseDistributionsExt = "Distributions"
- DiffEqBaseGeneralizedGeneratedExt = "GeneralizedGenerated"
- DiffEqBaseMPIExt = "MPI"
- DiffEqBaseMeasurementsExt = "Measurements"
- DiffEqBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements"
- DiffEqBaseReverseDiffExt = "ReverseDiff"
- DiffEqBaseTrackerExt = "Tracker"
- DiffEqBaseUnitfulExt = "Unitful"
- DiffEqBaseZygoteExt = "Zygote"
-
- [deps.DiffEqBase.weakdeps]
- Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
- GeneralizedGenerated = "6b9d7cbe-bcb9-11e9-073f-15a7a543e2eb"
- MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195"
- Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7"
- MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca"
- ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
- Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
- Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
- Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
-
-[[deps.DiffEqCallbacks]]
-deps = ["DataStructures", "DiffEqBase", "ForwardDiff", "LinearAlgebra", "Markdown", "NLsolve", "Parameters", "RecipesBase", "RecursiveArrayTools", "SciMLBase", "StaticArraysCore"]
-git-tree-sha1 = "63b6be7b396ad395825f3cc48c56b53bfaf7e69d"
-uuid = "459566f4-90b8-5000-8ac3-15dfb0a30def"
-version = "2.26.1"
-
-[[deps.DiffEqNoiseProcess]]
-deps = ["DiffEqBase", "Distributions", "GPUArraysCore", "LinearAlgebra", "Markdown", "Optim", "PoissonRandom", "QuadGK", "Random", "Random123", "RandomNumbers", "RecipesBase", "RecursiveArrayTools", "Requires", "ResettableStacks", "SciMLBase", "StaticArraysCore", "Statistics"]
-git-tree-sha1 = "26594c6ec8416fb6ef3ed8828fd29c98b10bfaad"
-uuid = "77a26b50-5914-5dd7-bc55-306e6241c503"
-version = "5.17.2"
-
- [deps.DiffEqNoiseProcess.extensions]
- DiffEqNoiseProcessReverseDiffExt = "ReverseDiff"
-
- [deps.DiffEqNoiseProcess.weakdeps]
- ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
-
-[[deps.DiffResults]]
-deps = ["StaticArraysCore"]
-git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621"
-uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5"
-version = "1.1.0"
-
-[[deps.DiffRules]]
-deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"]
-git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272"
-uuid = "b552c78f-8df3-52c6-915a-8e097449b14b"
-version = "1.15.1"
-
-[[deps.DifferentialEquations]]
-deps = ["BoundaryValueDiffEq", "DelayDiffEq", "DiffEqBase", "DiffEqCallbacks", "DiffEqNoiseProcess", "JumpProcesses", "LinearAlgebra", "LinearSolve", "NonlinearSolve", "OrdinaryDiffEq", "Random", "RecursiveArrayTools", "Reexport", "SciMLBase", "SteadyStateDiffEq", "StochasticDiffEq", "Sundials"]
-git-tree-sha1 = "1cfe0178410e1bb4b14058c537d0f347eb9d95dc"
-uuid = "0c46a032-eb83-5123-abaf-570d42b7fbaa"
-version = "7.8.0"
-
-[[deps.Distances]]
-deps = ["LinearAlgebra", "SparseArrays", "Statistics", "StatsAPI"]
-git-tree-sha1 = "49eba9ad9f7ead780bfb7ee319f962c811c6d3b2"
-uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7"
-version = "0.10.8"
-
-[[deps.Distributed]]
-deps = ["Random", "Serialization", "Sockets"]
-uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
-
-[[deps.Distributions]]
-deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"]
-git-tree-sha1 = "e76a3281de2719d7c81ed62c6ea7057380c87b1d"
-uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
-version = "0.25.98"
-weakdeps = ["ChainRulesCore", "DensityInterface"]
-
- [deps.Distributions.extensions]
- DistributionsChainRulesCoreExt = "ChainRulesCore"
- DistributionsDensityInterfaceExt = "DensityInterface"
-
-[[deps.DistributionsAD]]
-deps = ["Adapt", "ChainRules", "ChainRulesCore", "Compat", "Distributions", "FillArrays", "LinearAlgebra", "PDMats", "Random", "Requires", "SpecialFunctions", "StaticArrays", "StatsFuns", "ZygoteRules"]
-git-tree-sha1 = "1fb4fedd5a407243d535cc50c8c803c2fce0dc26"
-uuid = "ced4e74d-a319-5a8a-b0ac-84af2272839c"
-version = "0.6.49"
-
- [deps.DistributionsAD.extensions]
- DistributionsADForwardDiffExt = "ForwardDiff"
- DistributionsADLazyArraysExt = "LazyArrays"
- DistributionsADReverseDiffExt = "ReverseDiff"
- DistributionsADTrackerExt = "Tracker"
-
- [deps.DistributionsAD.weakdeps]
- ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
- LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02"
- ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
- Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
-
-[[deps.DocStringExtensions]]
-deps = ["LibGit2"]
-git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d"
-uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
-version = "0.9.3"
-
-[[deps.DomainSets]]
-deps = ["CompositeTypes", "IntervalSets", "LinearAlgebra", "Random", "StaticArrays", "Statistics"]
-git-tree-sha1 = "51b4b84d33ec5e0955b55ff4b748b99ce2c3faa9"
-uuid = "5b8099bc-c8ec-5219-889f-1d9e522a28bf"
-version = "0.6.7"
-
-[[deps.Downloads]]
-deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
-uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
-version = "1.6.0"
-
-[[deps.DualNumbers]]
-deps = ["Calculus", "NaNMath", "SpecialFunctions"]
-git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566"
-uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74"
-version = "0.6.8"
-
-[[deps.DynamicPPL]]
-deps = ["AbstractMCMC", "AbstractPPL", "BangBang", "Bijectors", "ChainRulesCore", "ConstructionBase", "Distributions", "DocStringExtensions", "LinearAlgebra", "LogDensityProblems", "MacroTools", "OrderedCollections", "Random", "Setfield", "Test", "ZygoteRules"]
-git-tree-sha1 = "932f5f977b04db019cc72ebd1f4161a6e7bded14"
-uuid = "366bfd00-2699-11ea-058f-f148b4cae6d8"
-version = "0.21.6"
-
-[[deps.DynamicPolynomials]]
-deps = ["DataStructures", "Future", "LinearAlgebra", "MultivariatePolynomials", "MutableArithmetics", "Pkg", "Reexport", "Test"]
-git-tree-sha1 = "8b84876e31fa39479050e2d3395c4b3b210db8b0"
-uuid = "7c1d4256-1411-5781-91ec-d7bc3513ac07"
-version = "0.4.6"
-
-[[deps.EasyModelAnalysis]]
-deps = ["DifferentialEquations", "Distributions", "GlobalSensitivity", "LinearAlgebra", "ModelingToolkit", "NLopt", "Optimization", "OptimizationBBO", "OptimizationMOI", "OptimizationNLopt", "Plots", "Reexport", "SciMLBase", "SciMLExpectations", "Turing"]
-git-tree-sha1 = "62ccc0ec19dff1ce722810b78b01ab459e47d1b6"
-uuid = "ef4b24a4-a090-4686-a932-e7e56a5a83bd"
-version = "0.1.9"
-
-[[deps.EllipticalSliceSampling]]
-deps = ["AbstractMCMC", "ArrayInterface", "Distributions", "Random", "Statistics"]
-git-tree-sha1 = "973b4927d112559dc737f55d6bf06503a5b3fc14"
-uuid = "cad2338a-1db2-11e9-3401-43bc07c9ede2"
-version = "1.1.0"
-
-[[deps.EnumX]]
-git-tree-sha1 = "bdb1942cd4c45e3c678fd11569d5cccd80976237"
-uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56"
-version = "1.0.4"
-
-[[deps.ErrorfreeArithmetic]]
-git-tree-sha1 = "d6863c556f1142a061532e79f611aa46be201686"
-uuid = "90fa49ef-747e-5e6f-a989-263ba693cf1a"
-version = "0.5.2"
-
-[[deps.ExceptionUnwrapping]]
-deps = ["Test"]
-git-tree-sha1 = "e90caa41f5a86296e014e148ee061bd6c3edec96"
-uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4"
-version = "0.1.9"
-
-[[deps.Expat_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl"]
-git-tree-sha1 = "4558ab818dcceaab612d1bb8c19cee87eda2b83c"
-uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
-version = "2.5.0+0"
-
-[[deps.ExponentialUtilities]]
-deps = ["Adapt", "ArrayInterface", "GPUArraysCore", "GenericSchur", "LinearAlgebra", "Printf", "SnoopPrecompile", "SparseArrays", "libblastrampoline_jll"]
-git-tree-sha1 = "fb7dbef7d2631e2d02c49e2750f7447648b0ec9b"
-uuid = "d4d017d3-3776-5f7e-afef-a10c40355c18"
-version = "1.24.0"
-
-[[deps.ExprTools]]
-git-tree-sha1 = "c1d06d129da9f55715c6c212866f5b1bddc5fa00"
-uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
-version = "0.1.9"
-
-[[deps.EzXML]]
-deps = ["Printf", "XML2_jll"]
-git-tree-sha1 = "0fa3b52a04a4e210aeb1626def9c90df3ae65268"
-uuid = "8f5d6c58-4d21-5cfd-889c-e3ad7ee6a615"
-version = "1.1.0"
-
-[[deps.FFMPEG]]
-deps = ["FFMPEG_jll"]
-git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8"
-uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a"
-version = "0.4.1"
-
-[[deps.FFMPEG_jll]]
-deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
-git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd"
-uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
-version = "4.4.2+2"
-
-[[deps.FFTW]]
-deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"]
-git-tree-sha1 = "b4fbdd20c889804969571cc589900803edda16b7"
-uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
-version = "1.7.1"
-
-[[deps.FFTW_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea"
-uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a"
-version = "3.3.10+0"
-
-[[deps.FastBroadcast]]
-deps = ["ArrayInterface", "LinearAlgebra", "Polyester", "Static", "StaticArrayInterface", "StrideArraysCore"]
-git-tree-sha1 = "d1248fceea0b26493fd33e8e9e8c553270da03bd"
-uuid = "7034ab61-46d4-4ed7-9d0f-46aef9175898"
-version = "0.2.5"
-
-[[deps.FastClosures]]
-git-tree-sha1 = "acebe244d53ee1b461970f8910c235b259e772ef"
-uuid = "9aa1b823-49e4-5ca5-8b0f-3971ec8bab6a"
-version = "0.3.2"
-
-[[deps.FastLapackInterface]]
-deps = ["LinearAlgebra"]
-git-tree-sha1 = "b12f05108e405dadcc2aff0008db7f831374e051"
-uuid = "29a986be-02c6-4525-aec4-84b980013641"
-version = "2.0.0"
-
-[[deps.FastRounding]]
-deps = ["ErrorfreeArithmetic", "LinearAlgebra"]
-git-tree-sha1 = "6344aa18f654196be82e62816935225b3b9abe44"
-uuid = "fa42c844-2597-5d31-933b-ebd51ab2693f"
-version = "0.3.1"
-
-[[deps.FileIO]]
-deps = ["Pkg", "Requires", "UUIDs"]
-git-tree-sha1 = "299dc33549f68299137e51e6d49a13b5b1da9673"
-uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
-version = "1.16.1"
-
-[[deps.FilePathsBase]]
-deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"]
-git-tree-sha1 = "e27c4ebe80e8699540f2d6c805cc12203b614f12"
-uuid = "48062228-2e41-5def-b9a4-89aafe57970f"
-version = "0.9.20"
-
-[[deps.FileWatching]]
-uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
-
-[[deps.FillArrays]]
-deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"]
-git-tree-sha1 = "2250347838b28a108d1967663cba57bfb3c02a58"
-uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
-version = "1.3.0"
-
-[[deps.FiniteDiff]]
-deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"]
-git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306"
-uuid = "6a86dc24-6348-571c-b903-95158fe2bd41"
-version = "2.21.1"
-
- [deps.FiniteDiff.extensions]
- FiniteDiffBandedMatricesExt = "BandedMatrices"
- FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices"
- FiniteDiffStaticArraysExt = "StaticArrays"
-
- [deps.FiniteDiff.weakdeps]
- BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
- BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0"
- StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
-
-[[deps.FixedPointNumbers]]
-deps = ["Statistics"]
-git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc"
-uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
-version = "0.8.4"
-
-[[deps.Fontconfig_jll]]
-deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"]
-git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03"
-uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
-version = "2.13.93+0"
-
-[[deps.Formatting]]
-deps = ["Printf"]
-git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8"
-uuid = "59287772-0a20-5a39-b81b-1366585eb4c0"
-version = "0.4.2"
-
-[[deps.ForwardDiff]]
-deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"]
-git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d"
-uuid = "f6369f11-7733-5829-9624-2563aa707210"
-version = "0.10.35"
-weakdeps = ["StaticArrays"]
-
- [deps.ForwardDiff.extensions]
- ForwardDiffStaticArraysExt = "StaticArrays"
-
-[[deps.FreeType2_jll]]
-deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"]
-git-tree-sha1 = "d8db6a5a2fe1381c1ea4ef2cab7c69c2de7f9ea0"
-uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
-version = "2.13.1+0"
-
-[[deps.FriBidi_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91"
-uuid = "559328eb-81f9-559d-9380-de523a88c83c"
-version = "1.0.10+0"
-
-[[deps.FunctionWrappers]]
-git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e"
-uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e"
-version = "1.1.3"
-
-[[deps.FunctionWrappersWrappers]]
-deps = ["FunctionWrappers"]
-git-tree-sha1 = "b104d487b34566608f8b4e1c39fb0b10aa279ff8"
-uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf"
-version = "0.1.3"
-
-[[deps.Functors]]
-deps = ["LinearAlgebra"]
-git-tree-sha1 = "a2657dd0f3e8a61dbe70fc7c122038bd33790af5"
-uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196"
-version = "0.3.0"
-
-[[deps.Future]]
-deps = ["Random"]
-uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
-
-[[deps.GLFW_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"]
-git-tree-sha1 = "d972031d28c8c8d9d7b41a536ad7bb0c2579caca"
-uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89"
-version = "3.3.8+0"
-
-[[deps.GPUArrays]]
-deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"]
-git-tree-sha1 = "2e57b4a4f9cc15e85a24d603256fe08e527f48d1"
-uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7"
-version = "8.8.1"
-
-[[deps.GPUArraysCore]]
-deps = ["Adapt"]
-git-tree-sha1 = "2d6ca471a6c7b536127afccfa7564b5b39227fe0"
-uuid = "46192b85-c4d5-4398-a991-12ede77f4527"
-version = "0.1.5"
-
-[[deps.GR]]
-deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"]
-git-tree-sha1 = "8b8a2fd4536ece6e554168c21860b6820a8a83db"
-uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71"
-version = "0.72.7"
-
-[[deps.GR_jll]]
-deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt5Base_jll", "Zlib_jll", "libpng_jll"]
-git-tree-sha1 = "19fad9cd9ae44847fe842558a744748084a722d1"
-uuid = "d2c73de3-f751-5644-a686-071e5b155ba9"
-version = "0.72.7+0"
-
-[[deps.GSL]]
-deps = ["GSL_jll", "Libdl", "Markdown"]
-git-tree-sha1 = "3ebd07d519f5ec318d5bc1b4971e2472e14bd1f0"
-uuid = "92c85e6c-cbff-5e0c-80f7-495c94daaecd"
-version = "1.0.1"
-
-[[deps.GSL_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "56f1e2c9e083e0bb7cf9a7055c280beb08a924c0"
-uuid = "1b77fbbe-d8ee-58f0-85f9-836ddc23a7a4"
-version = "2.7.2+0"
-
-[[deps.GeneralizedGenerated]]
-deps = ["DataStructures", "JuliaVariables", "MLStyle", "Serialization"]
-git-tree-sha1 = "60f1fa1696129205873c41763e7d0920ac7d6f1f"
-uuid = "6b9d7cbe-bcb9-11e9-073f-15a7a543e2eb"
-version = "0.3.3"
-
-[[deps.GenericSchur]]
-deps = ["LinearAlgebra", "Printf"]
-git-tree-sha1 = "fb69b2a645fa69ba5f474af09221b9308b160ce6"
-uuid = "c145ed77-6b09-5dd9-b285-bf645a82121e"
-version = "0.5.3"
-
-[[deps.Gettext_jll]]
-deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"]
-git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046"
-uuid = "78b55507-aeef-58d4-861c-77aaff3498b1"
-version = "0.21.0+0"
-
-[[deps.Glib_jll]]
-deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Pkg", "Zlib_jll"]
-git-tree-sha1 = "d3b3624125c1474292d0d8ed0f65554ac37ddb23"
-uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
-version = "2.74.0+2"
-
-[[deps.Glob]]
-git-tree-sha1 = "97285bbd5230dd766e9ef6749b80fc617126d496"
-uuid = "c27321d9-0574-5035-807b-f59d2c89b15c"
-version = "1.3.1"
-
-[[deps.GlobalSensitivity]]
-deps = ["Combinatorics", "Copulas", "Distributions", "FFTW", "ForwardDiff", "KernelDensity", "LinearAlgebra", "Parameters", "QuasiMonteCarlo", "Random", "RecursiveArrayTools", "Statistics", "StatsBase", "ThreadsX", "Trapz"]
-git-tree-sha1 = "e5484bc811d0335814e3f7d3815dcea19d261fbc"
-uuid = "af5da776-676b-467e-8baf-acd8249e4f0f"
-version = "2.2.1"
-
-[[deps.Graphite2_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011"
-uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472"
-version = "1.3.14+0"
-
-[[deps.Graphs]]
-deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"]
-git-tree-sha1 = "1cf1d7dcb4bc32d7b4a5add4232db3750c27ecb4"
-uuid = "86223c79-3864-5bf0-83f7-82e725a168b6"
-version = "1.8.0"
-
-[[deps.Grisu]]
-git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2"
-uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe"
-version = "1.0.2"
-
-[[deps.Groebner]]
-deps = ["AbstractAlgebra", "Combinatorics", "Logging", "MultivariatePolynomials", "Primes", "Random", "SnoopPrecompile"]
-git-tree-sha1 = "c8b55b624a83f60bcd6574cc999ad148d0a47dd6"
-uuid = "0b43b601-686d-58a3-8a1c-6623616c7cd4"
-version = "0.3.6"
-
-[[deps.GroupsCore]]
-deps = ["Markdown", "Random"]
-git-tree-sha1 = "9e1a5e9f3b81ad6a5c613d181664a0efc6fe6dd7"
-uuid = "d5909c97-4eac-4ecc-a3dc-fdd0858a4120"
-version = "0.4.0"
-
-[[deps.HCubature]]
-deps = ["Combinatorics", "DataStructures", "LinearAlgebra", "QuadGK", "StaticArrays"]
-git-tree-sha1 = "e95b36755023def6ebc3d269e6483efa8b2f7f65"
-uuid = "19dc6840-f33b-545b-b366-655c7e3ffd49"
-version = "1.5.1"
-
-[[deps.HTTP]]
-deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"]
-git-tree-sha1 = "7f5ef966a02a8fdf3df2ca03108a88447cb3c6f0"
-uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
-version = "1.9.8"
-
-[[deps.HarfBuzz_jll]]
-deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"]
-git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3"
-uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566"
-version = "2.8.1+1"
-
-[[deps.Highlights]]
-deps = ["DocStringExtensions", "InteractiveUtils", "REPL"]
-git-tree-sha1 = "0341077e8a6b9fc1c2ea5edc1e93a956d2aec0c7"
-uuid = "eafb193a-b7ab-5a9e-9068-77385905fa72"
-version = "0.5.2"
-
-[[deps.HostCPUFeatures]]
-deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"]
-git-tree-sha1 = "d38bd0d9759e3c6cfa19bdccc314eccf8ce596cc"
-uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0"
-version = "0.1.15"
-
-[[deps.HypergeometricFunctions]]
-deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"]
-git-tree-sha1 = "0ec02c648befc2f94156eaef13b0f38106212f3f"
-uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
-version = "0.3.17"
-
-[[deps.IRTools]]
-deps = ["InteractiveUtils", "MacroTools", "Test"]
-git-tree-sha1 = "eac00994ce3229a464c2847e956d77a2c64ad3a5"
-uuid = "7869d1d1-7146-5819-86e3-90919afe41df"
-version = "0.4.10"
-
-[[deps.IfElse]]
-git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1"
-uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"
-version = "0.1.1"
-
-[[deps.Inflate]]
-git-tree-sha1 = "5cd07aab533df5170988219191dfad0519391428"
-uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9"
-version = "0.1.3"
-
-[[deps.InitialValues]]
-git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3"
-uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c"
-version = "0.3.1"
-
-[[deps.InlineStrings]]
-deps = ["Parsers"]
-git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461"
-uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48"
-version = "1.4.0"
-
-[[deps.InplaceOps]]
-deps = ["LinearAlgebra", "Test"]
-git-tree-sha1 = "50b41d59e7164ab6fda65e71049fee9d890731ff"
-uuid = "505f98c9-085e-5b2c-8e89-488be7bf1f34"
-version = "0.3.0"
-
-[[deps.IntegerMathUtils]]
-git-tree-sha1 = "b8ffb903da9f7b8cf695a8bead8e01814aa24b30"
-uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235"
-version = "0.1.2"
-
-[[deps.Integrals]]
-deps = ["CommonSolve", "HCubature", "LinearAlgebra", "MonteCarloIntegration", "QuadGK", "Reexport", "Requires", "SciMLBase"]
-git-tree-sha1 = "f8f24a73621e9063f696ffeaa83f7a725ab5ae23"
-uuid = "de52edbc-65ea-441a-8357-d3a637375a31"
-version = "3.8.0"
-
- [deps.Integrals.extensions]
- IntegralsFastGaussQuadratureExt = "FastGaussQuadrature"
- IntegralsForwardDiffExt = "ForwardDiff"
- IntegralsZygoteExt = ["Zygote", "ChainRulesCore"]
-
- [deps.Integrals.weakdeps]
- ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
- FastGaussQuadrature = "442a2c76-b920-505d-bb47-c5924d526838"
- ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
- Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
-
-[[deps.IntelOpenMP_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "0cb9352ef2e01574eeebdb102948a58740dcaf83"
-uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0"
-version = "2023.1.0+0"
-
-[[deps.InteractiveUtils]]
-deps = ["Markdown"]
-uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
-
-[[deps.Interpolations]]
-deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"]
-git-tree-sha1 = "721ec2cf720536ad005cb38f50dbba7b02419a15"
-uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59"
-version = "0.14.7"
-
-[[deps.IntervalArithmetic]]
-deps = ["CRlibm", "FastRounding", "LinearAlgebra", "Markdown", "Random", "RecipesBase", "RoundingEmulator", "SetRounding", "StaticArrays"]
-git-tree-sha1 = "5ab7744289be503d76a944784bac3f2df7b809af"
-uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253"
-version = "0.20.9"
-
-[[deps.IntervalSets]]
-deps = ["Dates", "Random", "Statistics"]
-git-tree-sha1 = "16c0cc91853084cb5f58a78bd209513900206ce6"
-uuid = "8197267c-284f-5f27-9208-e0e47529a953"
-version = "0.7.4"
-
-[[deps.InverseFunctions]]
-deps = ["Test"]
-git-tree-sha1 = "edd1c1ac227767c75e8518defdf6e48dbfa7c3b0"
-uuid = "3587e190-3f89-42d0-90ee-14403ec27112"
-version = "0.1.10"
-
-[[deps.InvertedIndices]]
-git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038"
-uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f"
-version = "1.3.0"
-
-[[deps.Ipopt_jll]]
-deps = ["ASL_jll", "Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "MUMPS_seq_jll", "OpenBLAS32_jll", "Pkg"]
-git-tree-sha1 = "e3e202237d93f18856b6ff1016166b0f172a49a8"
-uuid = "9cc047cb-c261-5740-88fc-0cf96f7bdcc7"
-version = "300.1400.400+0"
-
-[[deps.IrrationalConstants]]
-git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2"
-uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
-version = "0.2.2"
-
-[[deps.IterTools]]
-git-tree-sha1 = "4ced6667f9974fc5c5943fa5e2ef1ca43ea9e450"
-uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
-version = "1.8.0"
-
-[[deps.IteratorInterfaceExtensions]]
-git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
-uuid = "82899510-4779-5014-852e-03e436cf321d"
-version = "1.0.0"
-
-[[deps.JLD2]]
-deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "Requires", "TranscodingStreams", "UUIDs"]
-git-tree-sha1 = "42c17b18ced77ff0be65957a591d34f4ed57c631"
-uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819"
-version = "0.4.31"
-
-[[deps.JLFzf]]
-deps = ["Pipe", "REPL", "Random", "fzf_jll"]
-git-tree-sha1 = "f377670cda23b6b7c1c0b3893e37451c5c1a2185"
-uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c"
-version = "0.1.5"
-
-[[deps.JLLWrappers]]
-deps = ["Preferences"]
-git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1"
-uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
-version = "1.4.1"
-
-[[deps.JSON]]
-deps = ["Dates", "Mmap", "Parsers", "Unicode"]
-git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a"
-uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
-version = "0.21.4"
-
-[[deps.JSON3]]
-deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"]
-git-tree-sha1 = "5b62d93f2582b09e469b3099d839c2d2ebf5066d"
-uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
-version = "1.13.1"
-
-[[deps.JSONSchema]]
-deps = ["Downloads", "HTTP", "JSON", "URIs"]
-git-tree-sha1 = "58cb291b01508293f7a9dc88325bc00d797cf04d"
-uuid = "7d188eb4-7ad8-530c-ae41-71a32a6d4692"
-version = "1.1.0"
-
-[[deps.JSONTables]]
-deps = ["JSON3", "StructTypes", "Tables"]
-git-tree-sha1 = "13f7485bb0b4438bb5e83e62fcadc65c5de1d1bb"
-uuid = "b9914132-a727-11e9-1322-f18e41205b0b"
-version = "1.0.3"
-
-[[deps.JobSchedulers]]
-deps = ["Dates", "JLD2", "JSON", "Logging", "OrderedCollections", "Pipelines", "PrettyTables", "Printf", "Reexport", "Term", "Terming", "Test"]
-git-tree-sha1 = "568c4fe4c1ae76ada68604c9a1ea6f76e6030104"
-uuid = "eeff360b-c02d-44d3-ab26-4013c616a17e"
-version = "0.8.1"
-
-[[deps.JpegTurbo_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl"]
-git-tree-sha1 = "6f2675ef130a300a112286de91973805fcc5ffbc"
-uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
-version = "2.1.91+0"
-
-[[deps.JuliaFormatter]]
-deps = ["CSTParser", "CommonMark", "DataStructures", "Glob", "Pkg", "PrecompileTools", "Tokenize"]
-git-tree-sha1 = "60567b51bd9e1e19ae2fd8a54dcd6bc5994727f0"
-uuid = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
-version = "1.0.34"
-
-[[deps.JuliaVariables]]
-deps = ["MLStyle", "NameResolution"]
-git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70"
-uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec"
-version = "0.2.4"
-
-[[deps.JumpProcesses]]
-deps = ["ArrayInterface", "DataStructures", "DiffEqBase", "DocStringExtensions", "FunctionWrappers", "Graphs", "LinearAlgebra", "Markdown", "PoissonRandom", "Random", "RandomNumbers", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "TreeViews", "UnPack"]
-git-tree-sha1 = "50bd271af7f6cc23be7d24c8c4804809bb5d05ae"
-uuid = "ccbc3e58-028d-4f4c-8cd5-9ae44345cda5"
-version = "9.6.3"
-
-[[deps.KLU]]
-deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse_jll"]
-git-tree-sha1 = "764164ed65c30738750965d55652db9c94c59bfe"
-uuid = "ef3ab10e-7fda-4108-b977-705223b18434"
-version = "0.4.0"
-
-[[deps.KernelAbstractions]]
-deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"]
-git-tree-sha1 = "b48617c5d764908b5fac493cd907cf33cc11eec1"
-uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
-version = "0.9.6"
-
-[[deps.KernelDensity]]
-deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"]
-git-tree-sha1 = "90442c50e202a5cdf21a7899c66b240fdef14035"
-uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b"
-version = "0.6.7"
-
-[[deps.Krylov]]
-deps = ["LinearAlgebra", "Printf", "SparseArrays"]
-git-tree-sha1 = "0356a64062656b0cbb43c504ad5de338251f4bda"
-uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7"
-version = "0.9.1"
-
-[[deps.LAME_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c"
-uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
-version = "3.100.1+0"
-
-[[deps.LERC_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434"
-uuid = "88015f11-f218-50d7-93a8-a6af411a945d"
-version = "3.0.0+1"
-
-[[deps.LLVM]]
-deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"]
-git-tree-sha1 = "8695a49bfe05a2dc0feeefd06b4ca6361a018729"
-uuid = "929cbde3-209d-540e-8aea-75f648917ca0"
-version = "6.1.0"
-
-[[deps.LLVMExtra_jll]]
-deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"]
-git-tree-sha1 = "c35203c1e1002747da220ffc3c0762ce7754b08c"
-uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab"
-version = "0.0.23+0"
-
-[[deps.LLVMOpenMP_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "f689897ccbe049adb19a065c495e75f372ecd42b"
-uuid = "1d63c593-3942-5779-bab2-d838dc0a180e"
-version = "15.0.4+0"
-
-[[deps.LRUCache]]
-git-tree-sha1 = "48c10e3cc27e30de82463c27bef0b8bdbd1dc634"
-uuid = "8ac3fa9e-de4c-5943-b1dc-09c6b5f20637"
-version = "1.4.1"
-
-[[deps.LZO_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6"
-uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac"
-version = "2.10.1+0"
-
-[[deps.LaTeXStrings]]
-git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996"
-uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
-version = "1.3.0"
-
-[[deps.LabelledArrays]]
-deps = ["ArrayInterface", "ChainRulesCore", "ForwardDiff", "LinearAlgebra", "MacroTools", "PreallocationTools", "RecursiveArrayTools", "StaticArrays"]
-git-tree-sha1 = "cd04158424635efd05ff38d5f55843397b7416a9"
-uuid = "2ee39098-c373-598a-b85f-a56591580800"
-version = "1.14.0"
-
-[[deps.LambertW]]
-git-tree-sha1 = "c5ffc834de5d61d00d2b0e18c96267cffc21f648"
-uuid = "984bce1d-4616-540c-a9ee-88d1112d94c9"
-version = "0.4.6"
-
-[[deps.Latexify]]
-deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Printf", "Requires"]
-git-tree-sha1 = "f428ae552340899a935973270b8d98e5a31c49fe"
-uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
-version = "0.16.1"
-
- [deps.Latexify.extensions]
- DataFramesExt = "DataFrames"
- SymEngineExt = "SymEngine"
-
- [deps.Latexify.weakdeps]
- DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
- SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8"
-
-[[deps.LatticeRules]]
-deps = ["Random"]
-git-tree-sha1 = "7f5b02258a3ca0221a6a9710b0a0a2e8fb4957fe"
-uuid = "73f95e8e-ec14-4e6a-8b18-0d2e271c4e55"
-version = "0.0.1"
-
-[[deps.LayoutPointers]]
-deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"]
-git-tree-sha1 = "88b8f66b604da079a627b6fb2860d3704a6729a1"
-uuid = "10f19ff3-798f-405d-979b-55457f8fc047"
-version = "0.1.14"
-
-[[deps.Lazy]]
-deps = ["MacroTools"]
-git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f"
-uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0"
-version = "0.15.1"
-
-[[deps.LazyArtifacts]]
-deps = ["Artifacts", "Pkg"]
-uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
-
-[[deps.LeftChildRightSiblingTrees]]
-deps = ["AbstractTrees"]
-git-tree-sha1 = "fb6803dafae4a5d62ea5cab204b1e657d9737e7f"
-uuid = "1d6d02ad-be62-4b6b-8a6d-2f90e265016e"
-version = "0.2.0"
-
-[[deps.LevyArea]]
-deps = ["LinearAlgebra", "Random", "SpecialFunctions"]
-git-tree-sha1 = "56513a09b8e0ae6485f34401ea9e2f31357958ec"
-uuid = "2d8b4e74-eb68-11e8-0fb9-d5eb67b50637"
-version = "1.0.0"
-
-[[deps.LibCURL]]
-deps = ["LibCURL_jll", "MozillaCACerts_jll"]
-uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
-version = "0.6.3"
-
-[[deps.LibCURL_jll]]
-deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
-uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
-version = "7.84.0+0"
-
-[[deps.LibGit2]]
-deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
-uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
-
-[[deps.LibSSH2_jll]]
-deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
-uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
-version = "1.10.2+0"
-
-[[deps.Libdl]]
-uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
-
-[[deps.Libffi_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290"
-uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
-version = "3.2.2+1"
-
-[[deps.Libgcrypt_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"]
-git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae"
-uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4"
-version = "1.8.7+0"
-
-[[deps.Libglvnd_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"]
-git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733"
-uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29"
-version = "1.6.0+0"
-
-[[deps.Libgpg_error_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9"
-uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8"
-version = "1.42.0+0"
-
-[[deps.Libiconv_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "c7cb1f5d892775ba13767a87c7ada0b980ea0a71"
-uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
-version = "1.16.1+2"
-
-[[deps.Libmount_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73"
-uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
-version = "2.35.0+0"
-
-[[deps.Libtask]]
-deps = ["FunctionWrappers", "LRUCache", "LinearAlgebra", "Statistics"]
-git-tree-sha1 = "345a40c746404dd9cb1bbc368715856838ab96f2"
-uuid = "6f1fad26-d15e-5dc8-ae53-837a1d7b8c9f"
-version = "0.8.6"
-
-[[deps.Libtiff_jll]]
-deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"]
-git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713"
-uuid = "89763e89-9b03-5906-acba-b20f662cd828"
-version = "4.4.0+0"
-
-[[deps.Libuuid_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066"
-uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
-version = "2.36.0+0"
-
-[[deps.LightXML]]
-deps = ["Libdl", "XML2_jll"]
-git-tree-sha1 = "e129d9391168c677cd4800f5c0abb1ed8cb3794f"
-uuid = "9c8b4983-aa76-5018-a973-4c85ecc9e179"
-version = "0.9.0"
-
-[[deps.LineSearches]]
-deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"]
-git-tree-sha1 = "7bbea35cec17305fc70a0e5b4641477dc0789d9d"
-uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255"
-version = "7.2.0"
-
-[[deps.LinearAlgebra]]
-deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
-uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
-
-[[deps.LinearSolve]]
-deps = ["ArrayInterface", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "InteractiveUtils", "KLU", "Krylov", "LinearAlgebra", "PrecompileTools", "Preferences", "RecursiveFactorization", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Sparspak", "SuiteSparse", "UnPack"]
-git-tree-sha1 = "93f3a0d88c8f5498bed3ad37ddd844b939fdf899"
-uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae"
-version = "2.3.0"
-
- [deps.LinearSolve.extensions]
- LinearSolveCUDAExt = "CUDA"
- LinearSolveHYPREExt = "HYPRE"
- LinearSolveIterativeSolversExt = "IterativeSolvers"
- LinearSolveKrylovKitExt = "KrylovKit"
- LinearSolvePardisoExt = "Pardiso"
-
- [deps.LinearSolve.weakdeps]
- CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
- HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771"
- IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153"
- KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77"
- Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2"
-
-[[deps.LogDensityProblems]]
-deps = ["ArgCheck", "DocStringExtensions", "Random"]
-git-tree-sha1 = "f9a11237204bc137617194d79d813069838fcf61"
-uuid = "6fdf6af0-433a-55f7-b3ed-c6c6e0b8df7c"
-version = "2.1.1"
-
-[[deps.LogDensityProblemsAD]]
-deps = ["DocStringExtensions", "LogDensityProblems", "Requires", "SimpleUnPack"]
-git-tree-sha1 = "a0512ad65f849536b5a52e59b05c59c25cdad943"
-uuid = "996a588d-648d-4e1f-a8f0-a84b347e47b1"
-version = "1.5.0"
-
- [deps.LogDensityProblemsAD.extensions]
- LogDensityProblemsADEnzymeExt = "Enzyme"
- LogDensityProblemsADFiniteDifferencesExt = "FiniteDifferences"
- LogDensityProblemsADForwardDiffBenchmarkToolsExt = ["BenchmarkTools", "ForwardDiff"]
- LogDensityProblemsADForwardDiffExt = "ForwardDiff"
- LogDensityProblemsADReverseDiffExt = "ReverseDiff"
- LogDensityProblemsADTrackerExt = "Tracker"
- LogDensityProblemsADZygoteExt = "Zygote"
-
- [deps.LogDensityProblemsAD.weakdeps]
- BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
- Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
- FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000"
- ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
- ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
- Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
- Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
-
-[[deps.LogExpFunctions]]
-deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"]
-git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f"
-uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
-version = "0.3.24"
-weakdeps = ["ChainRulesCore", "ChangesOfVariables", "InverseFunctions"]
-
- [deps.LogExpFunctions.extensions]
- LogExpFunctionsChainRulesCoreExt = "ChainRulesCore"
- LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables"
- LogExpFunctionsInverseFunctionsExt = "InverseFunctions"
-
-[[deps.Logging]]
-uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
-
-[[deps.LoggingExtras]]
-deps = ["Dates", "Logging"]
-git-tree-sha1 = "cedb76b37bc5a6c702ade66be44f831fa23c681e"
-uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36"
-version = "1.0.0"
-
-[[deps.LoopVectorization]]
-deps = ["ArrayInterface", "ArrayInterfaceCore", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"]
-git-tree-sha1 = "e4eed22d70ac91d7a4bf9e0f6902383061d17105"
-uuid = "bdcacae8-1622-11e9-2a5c-532679323890"
-version = "0.12.162"
-weakdeps = ["ChainRulesCore", "ForwardDiff", "SpecialFunctions"]
-
- [deps.LoopVectorization.extensions]
- ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"]
- SpecialFunctionsExt = "SpecialFunctions"
-
-[[deps.MCMCChains]]
-deps = ["AbstractMCMC", "AxisArrays", "Dates", "Distributions", "Formatting", "IteratorInterfaceExtensions", "KernelDensity", "LinearAlgebra", "MCMCDiagnosticTools", "MLJModelInterface", "NaturalSort", "OrderedCollections", "PrettyTables", "Random", "RecipesBase", "Statistics", "StatsBase", "StatsFuns", "TableTraits", "Tables"]
-git-tree-sha1 = "8778ea7283a0bf0d7e507a0235adfff38071493b"
-uuid = "c7f686f2-ff18-58e9-bc7b-31028e88f75d"
-version = "6.0.3"
-
-[[deps.MCMCDiagnosticTools]]
-deps = ["AbstractFFTs", "DataAPI", "DataStructures", "Distributions", "LinearAlgebra", "MLJModelInterface", "Random", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "Tables"]
-git-tree-sha1 = "695e91605361d1932c3e89a812be78480a4a4595"
-uuid = "be115224-59cd-429b-ad48-344e309966f0"
-version = "0.3.4"
-
-[[deps.METIS_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "1fd0a97409e418b78c53fac671cf4622efdf0f21"
-uuid = "d00139f3-1899-568f-a2f0-47f597d42d70"
-version = "5.1.2+0"
-
-[[deps.MIMEs]]
-git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb"
-uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65"
-version = "0.1.4"
-
-[[deps.MKL_jll]]
-deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"]
-git-tree-sha1 = "154d7aaa82d24db6d8f7e4ffcfe596f40bff214b"
-uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7"
-version = "2023.1.0+0"
-
-[[deps.MLJModelInterface]]
-deps = ["Random", "ScientificTypesBase", "StatisticalTraits"]
-git-tree-sha1 = "c8b7e632d6754a5e36c0d94a4b466a5ba3a30128"
-uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea"
-version = "1.8.0"
-
-[[deps.MLStyle]]
-git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8"
-uuid = "d8e11817-5142-5d16-987a-aa16d5891078"
-version = "0.4.17"
-
-[[deps.MUMPS_seq_jll]]
-deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "METIS_jll", "OpenBLAS32_jll", "Pkg"]
-git-tree-sha1 = "29de2841fa5aefe615dea179fcde48bb87b58f57"
-uuid = "d7ed1dd3-d0ae-5e8e-bfb4-87a502085b8d"
-version = "5.4.1+0"
-
-[[deps.MacroTools]]
-deps = ["Markdown", "Random"]
-git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2"
-uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
-version = "0.5.10"
-
-[[deps.ManualMemory]]
-git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd"
-uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667"
-version = "0.1.8"
-
-[[deps.MappedArrays]]
-git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e"
-uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900"
-version = "0.4.2"
-
-[[deps.Markdown]]
-deps = ["Base64"]
-uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
-
-[[deps.MathML]]
-deps = ["AbstractTrees", "DocStringExtensions", "EzXML", "IfElse", "SpecialFunctions", "Statistics", "Symbolics"]
-git-tree-sha1 = "f9d5b2895734a699b51249ebb90ca9b4b6a6e12c"
-uuid = "abcecc63-2b08-419c-80c4-c63dca6fa478"
-version = "0.1.14"
-
-[[deps.MathOptInterface]]
-deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays", "SpecialFunctions", "Test", "Unicode"]
-git-tree-sha1 = "5c5cd501ae1d76d3ccd7c7e6b4325a15dde7f31c"
-uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
-version = "1.18.0"
-
-[[deps.MathProgBase]]
-deps = ["LinearAlgebra", "SparseArrays"]
-git-tree-sha1 = "9abbe463a1e9fc507f12a69e7f29346c2cdc472c"
-uuid = "fdba3010-5040-5b88-9595-932c9decdf73"
-version = "0.7.8"
-
-[[deps.MbedTLS]]
-deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"]
-git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b"
-uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
-version = "1.1.7"
-
-[[deps.MbedTLS_jll]]
-deps = ["Artifacts", "Libdl"]
-uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
-version = "2.28.2+0"
-
-[[deps.Measures]]
-git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102"
-uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e"
-version = "0.3.2"
-
-[[deps.MicroCollections]]
-deps = ["BangBang", "InitialValues", "Setfield"]
-git-tree-sha1 = "629afd7d10dbc6935ec59b32daeb33bc4460a42e"
-uuid = "128add7d-3638-4c79-886c-908ea0c25c34"
-version = "0.1.4"
-
-[[deps.Missings]]
-deps = ["DataAPI"]
-git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272"
-uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
-version = "1.1.0"
-
-[[deps.Mmap]]
-uuid = "a63ad114-7e13-5084-954f-fe012c677804"
-
-[[deps.Mocking]]
-deps = ["Compat", "ExprTools"]
-git-tree-sha1 = "4cc0c5a83933648b615c36c2b956d94fda70641e"
-uuid = "78c3b35d-d492-501b-9361-3d52fe80e533"
-version = "0.7.7"
-
-[[deps.ModelingToolkit]]
-deps = ["AbstractTrees", "ArrayInterface", "Combinatorics", "Compat", "ConstructionBase", "DataStructures", "DiffEqBase", "DiffEqCallbacks", "DiffRules", "Distributed", "Distributions", "DocStringExtensions", "DomainSets", "ForwardDiff", "FunctionWrappersWrappers", "Graphs", "IfElse", "InteractiveUtils", "JuliaFormatter", "JumpProcesses", "LabelledArrays", "Latexify", "Libdl", "LinearAlgebra", "MLStyle", "MacroTools", "NaNMath", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLBase", "Serialization", "Setfield", "SimpleNonlinearSolve", "SparseArrays", "SpecialFunctions", "StaticArrays", "SymbolicIndexingInterface", "SymbolicUtils", "Symbolics", "URIs", "UnPack", "Unitful"]
-git-tree-sha1 = "cad27947bc85b1a3136f395f22a7dd5c382b7209"
-uuid = "961ee093-0014-501f-94e3-6117800e7a78"
-version = "8.62.0"
-
- [deps.ModelingToolkit.extensions]
- MTKDeepDiffsExt = "DeepDiffs"
-
- [deps.ModelingToolkit.weakdeps]
- DeepDiffs = "ab62b9b5-e342-54a8-a765-a90f495de1a6"
-
-[[deps.MonteCarloIntegration]]
-deps = ["Distributions", "Random"]
-git-tree-sha1 = "3f78ebce296c927d5c854e83cccdb5dcb1845629"
-uuid = "4886b29c-78c9-11e9-0a6e-41e1f4161f7b"
-version = "0.0.3"
-
-[[deps.MozillaCACerts_jll]]
-uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
-version = "2022.10.11"
-
-[[deps.MuladdMacro]]
-git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab"
-uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221"
-version = "0.2.4"
-
-[[deps.MultivariatePolynomials]]
-deps = ["ChainRulesCore", "DataStructures", "LinearAlgebra", "MutableArithmetics"]
-git-tree-sha1 = "eaa98afe2033ffc0629f9d0d83961d66a021dfcc"
-uuid = "102ac46a-7ee4-5c85-9060-abc95bfdeaa3"
-version = "0.4.7"
-
-[[deps.MutableArithmetics]]
-deps = ["LinearAlgebra", "SparseArrays", "Test"]
-git-tree-sha1 = "964cb1a7069723727025ae295408747a0b36a854"
-uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0"
-version = "1.3.0"
-
-[[deps.MvNormalCDF]]
-deps = ["Distributions", "FillArrays", "LinearAlgebra", "Primes", "Random", "StatsBase"]
-git-tree-sha1 = "e472ed20dfe9f68d9aebc02258dfe31d69deb8eb"
-uuid = "37188c8d-bc69-4638-b057-733e744175ec"
-version = "0.2.6"
-
-[[deps.MyterialColors]]
-git-tree-sha1 = "01d8466fb449436348999d7c6ad740f8f853a579"
-uuid = "1c23619d-4212-4747-83aa-717207fae70f"
-version = "0.3.0"
-
-[[deps.NLSolversBase]]
-deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"]
-git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c"
-uuid = "d41bc354-129a-5804-8e4c-c37616107c6c"
-version = "7.8.3"
-
-[[deps.NLopt]]
-deps = ["MathOptInterface", "MathProgBase", "NLopt_jll"]
-git-tree-sha1 = "5a7e32c569200a8a03c3d55d286254b0321cd262"
-uuid = "76087f3c-5699-56af-9a33-bf431cd00edd"
-version = "0.6.5"
-
-[[deps.NLopt_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "9b1f15a08f9d00cdb2761dcfa6f453f5d0d6f973"
-uuid = "079eb43e-fd8e-5478-9966-2cf3e3edb778"
-version = "2.7.1+0"
-
-[[deps.NLsolve]]
-deps = ["Distances", "LineSearches", "LinearAlgebra", "NLSolversBase", "Printf", "Reexport"]
-git-tree-sha1 = "019f12e9a1a7880459d0173c182e6a99365d7ac1"
-uuid = "2774e3e8-f4cf-5e23-947b-6d7e65073b56"
-version = "4.5.1"
-
-[[deps.NNlib]]
-deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"]
-git-tree-sha1 = "ec9858db6fcd07f63aeeed105420cc573ce2685a"
-uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd"
-version = "0.9.1"
-
- [deps.NNlib.extensions]
- NNlibAMDGPUExt = "AMDGPU"
- NNlibCUDACUDNNExt = ["CUDA", "cuDNN"]
- NNlibCUDAExt = "CUDA"
-
- [deps.NNlib.weakdeps]
- AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e"
- CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
- cuDNN = "02a925ec-e4fe-4b08-9a7e-0d78e3d38ccd"
-
-[[deps.NaNMath]]
-deps = ["OpenLibm_jll"]
-git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4"
-uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
-version = "1.0.2"
-
-[[deps.NameResolution]]
-deps = ["PrettyPrint"]
-git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e"
-uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391"
-version = "0.1.5"
-
-[[deps.NamedArrays]]
-deps = ["Combinatorics", "DataStructures", "DelimitedFiles", "InvertedIndices", "LinearAlgebra", "Random", "Requires", "SparseArrays", "Statistics"]
-git-tree-sha1 = "b84e17976a40cb2bfe3ae7edb3673a8c630d4f95"
-uuid = "86f7a689-2022-50b4-a561-43c23ac3c673"
-version = "0.9.8"
-
-[[deps.NamedTupleTools]]
-git-tree-sha1 = "90914795fc59df44120fe3fff6742bb0d7adb1d0"
-uuid = "d9ec5142-1e00-5aa0-9d6a-321866360f50"
-version = "0.14.3"
-
-[[deps.NaturalSort]]
-git-tree-sha1 = "eda490d06b9f7c00752ee81cfa451efe55521e21"
-uuid = "c020b1a1-e9b0-503a-9c33-f039bfc54a85"
-version = "1.0.0"
-
-[[deps.NetworkOptions]]
-uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
-version = "1.2.0"
-
-[[deps.NonlinearSolve]]
-deps = ["ArrayInterface", "DiffEqBase", "EnumX", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "LinearSolve", "PrecompileTools", "RecursiveArrayTools", "Reexport", "SciMLBase", "SimpleNonlinearSolve", "SparseArrays", "SparseDiffTools", "StaticArraysCore", "UnPack"]
-git-tree-sha1 = "2a7f28c62eb2c16b9c375c38f664cdcf22313cf5"
-uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
-version = "1.8.0"
-
-[[deps.OffsetArrays]]
-deps = ["Adapt"]
-git-tree-sha1 = "2ac17d29c523ce1cd38e27785a7d23024853a4bb"
-uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
-version = "1.12.10"
-
-[[deps.Ogg_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f"
-uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
-version = "1.3.5+1"
-
-[[deps.OpenAPI]]
-deps = ["Base64", "Dates", "Downloads", "HTTP", "JSON", "LibCURL", "MbedTLS", "TimeZones", "URIs"]
-git-tree-sha1 = "6e497e6245770817a7821a2d1d32f8f465166a99"
-uuid = "d5e62ea6-ddf3-4d43-8e4c-ad5e6c8bfd7d"
-version = "0.1.11"
-
-[[deps.OpenBLAS32_jll]]
-deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "2fb9ee2dc14d555a6df2a714b86b7125178344c2"
-uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2"
-version = "0.3.21+0"
-
-[[deps.OpenBLAS_jll]]
-deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
-uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
-version = "0.3.21+4"
-
-[[deps.OpenLibm_jll]]
-deps = ["Artifacts", "Libdl"]
-uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
-version = "0.8.1+0"
-
-[[deps.OpenSSL]]
-deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"]
-git-tree-sha1 = "51901a49222b09e3743c65b8847687ae5fc78eb2"
-uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c"
-version = "1.4.1"
-
-[[deps.OpenSSL_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl"]
-git-tree-sha1 = "1aa4b74f80b01c6bc2b89992b861b5f210e665b5"
-uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
-version = "1.1.21+0"
-
-[[deps.OpenSpecFun_jll]]
-deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1"
-uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
-version = "0.5.5+0"
-
-[[deps.Optim]]
-deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"]
-git-tree-sha1 = "e3a6546c1577bfd701771b477b794a52949e7594"
-uuid = "429524aa-4258-5aef-a3af-852621145aeb"
-version = "1.7.6"
-
-[[deps.Optimisers]]
-deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"]
-git-tree-sha1 = "e5a1825d3d53aa4ad4fb42bd4927011ad4a78c3d"
-uuid = "3bd65402-5787-11e9-1adc-39752487f4e2"
-version = "0.2.15"
-
-[[deps.Optimization]]
-deps = ["ADTypes", "ArrayInterface", "ConsoleProgressMonitor", "DocStringExtensions", "LinearAlgebra", "Logging", "LoggingExtras", "Pkg", "Printf", "ProgressLogging", "Reexport", "Requires", "SciMLBase", "SparseArrays", "TerminalLoggers"]
-git-tree-sha1 = "80005bc7d96d4d00e56b8a58c5240a35bd638d4a"
-uuid = "7f7a1694-90dd-40f0-9382-eb1efda571ba"
-version = "3.15.2"
-
- [deps.Optimization.extensions]
- OptimizationEnzymeExt = "Enzyme"
- OptimizationFinitediffExt = "FiniteDiff"
- OptimizationForwarddiffExt = "ForwardDiff"
- OptimizationMTKExt = "ModelingToolkit"
- OptimizationReversediffExt = "ReverseDiff"
- OptimizationTrackerExt = "Tracker"
- OptimizationZygoteExt = "Zygote"
-
- [deps.Optimization.weakdeps]
- Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
- FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41"
- ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
- ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
- ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
- Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
- Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
-
-[[deps.OptimizationBBO]]
-deps = ["BlackBoxOptim", "Optimization", "Reexport"]
-git-tree-sha1 = "5f653f29459f2aba3c1961dff265b727bd1ed5be"
-uuid = "3e6eede4-6085-4f62-9a71-46d9bc1eb92b"
-version = "0.1.4"
-
-[[deps.OptimizationMOI]]
-deps = ["Ipopt_jll", "MathOptInterface", "ModelingToolkit", "Optimization", "Reexport", "SparseArrays", "Symbolics"]
-git-tree-sha1 = "32c99127e8caf6b50856d676b56a9382bd5650c6"
-uuid = "fd9f6733-72f4-499f-8506-86b2bdd0dea1"
-version = "0.1.14"
-
-[[deps.OptimizationNLopt]]
-deps = ["NLopt", "Optimization", "Reexport"]
-git-tree-sha1 = "105de2db4fad2750921fb59507b8ebf3ccebdd91"
-uuid = "4e6fcdb7-1186-4e1f-a706-475e75c168bb"
-version = "0.1.6"
-
-[[deps.Opus_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720"
-uuid = "91d4177d-7536-5919-b921-800302f37372"
-version = "1.3.2+0"
-
-[[deps.OrderedCollections]]
-git-tree-sha1 = "d321bf2de576bf25ec4d3e4360faca399afca282"
-uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
-version = "1.6.0"
-
-[[deps.OrdinaryDiffEq]]
-deps = ["ADTypes", "Adapt", "ArrayInterface", "DataStructures", "DiffEqBase", "DocStringExtensions", "ExponentialUtilities", "FastBroadcast", "FastClosures", "FiniteDiff", "ForwardDiff", "FunctionWrappersWrappers", "IfElse", "InteractiveUtils", "LineSearches", "LinearAlgebra", "LinearSolve", "Logging", "LoopVectorization", "MacroTools", "MuladdMacro", "NLsolve", "NonlinearSolve", "Polyester", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLNLSolve", "SciMLOperators", "SimpleNonlinearSolve", "SimpleUnPack", "SparseArrays", "SparseDiffTools", "StaticArrayInterface", "StaticArrays", "TruncatedStacktraces"]
-git-tree-sha1 = "4f1ab68f236fa846d0c30718c6b29c1665b019c0"
-uuid = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
-version = "6.53.3"
-
-[[deps.Oxygen]]
-deps = ["Dates", "HTTP", "JSON3", "MIMEs", "Sockets"]
-git-tree-sha1 = "dca31e833aafb6277e5aff9fdcb5029be5045255"
-uuid = "df9a0d86-3283-4920-82dc-4555fc0d1d8b"
-version = "1.1.11"
-
-[[deps.PCRE2_jll]]
-deps = ["Artifacts", "Libdl"]
-uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15"
-version = "10.42.0+0"
-
-[[deps.PDMats]]
-deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
-git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1"
-uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
-version = "0.11.17"
-
-[[deps.Parameters]]
-deps = ["OrderedCollections", "UnPack"]
-git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe"
-uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a"
-version = "0.12.3"
-
-[[deps.Parsers]]
-deps = ["Dates", "PrecompileTools", "UUIDs"]
-git-tree-sha1 = "4b2e829ee66d4218e0cef22c0a64ee37cf258c29"
-uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
-version = "2.7.1"
-
-[[deps.Pipe]]
-git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d"
-uuid = "b98c9c47-44ae-5843-9183-064241ee97a0"
-version = "1.3.0"
-
-[[deps.Pipelines]]
-deps = ["Dates", "FilePathsBase", "Logging", "OrderedCollections", "Printf", "Reexport", "Test", "UUIDs"]
-git-tree-sha1 = "b870d8e0354361e38b0d9fc1997e96c299e948ae"
-uuid = "ef544631-5c6f-4e9b-994c-12e7a4cd724c"
-version = "0.10.4"
-
-[[deps.Pixman_jll]]
-deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"]
-git-tree-sha1 = "64779bc4c9784fee475689a1752ef4d5747c5e87"
-uuid = "30392449-352a-5448-841d-b1acce4e97dc"
-version = "0.42.2+0"
-
-[[deps.Pkg]]
-deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
-uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
-version = "1.9.2"
-
-[[deps.PlotThemes]]
-deps = ["PlotUtils", "Statistics"]
-git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899"
-uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a"
-version = "3.1.0"
-
-[[deps.PlotUtils]]
-deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"]
-git-tree-sha1 = "f92e1315dadf8c46561fb9396e525f7200cdc227"
-uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
-version = "1.3.5"
-
-[[deps.Plots]]
-deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Preferences", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"]
-git-tree-sha1 = "75ca67b2c6512ad2d0c767a7cfc55e75075f8bbc"
-uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
-version = "1.38.16"
-
- [deps.Plots.extensions]
- FileIOExt = "FileIO"
- GeometryBasicsExt = "GeometryBasics"
- IJuliaExt = "IJulia"
- ImageInTerminalExt = "ImageInTerminal"
- UnitfulExt = "Unitful"
-
- [deps.Plots.weakdeps]
- FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
- GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
- IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a"
- ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254"
- Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
-
-[[deps.PoissonRandom]]
-deps = ["Random"]
-git-tree-sha1 = "a0f1159c33f846aa77c3f30ebbc69795e5327152"
-uuid = "e409e4f3-bfea-5376-8464-e040bb5c01ab"
-version = "0.4.4"
-
-[[deps.Polyester]]
-deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"]
-git-tree-sha1 = "0fe4e7c4d8ff4c70bfa507f0dd96fa161b115777"
-uuid = "f517fe37-dbe3-4b94-8317-1923a5111588"
-version = "0.7.3"
-
-[[deps.PolyesterWeave]]
-deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"]
-git-tree-sha1 = "240d7170f5ffdb285f9427b92333c3463bf65bf6"
-uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad"
-version = "0.2.1"
-
-[[deps.Polynomials]]
-deps = ["LinearAlgebra", "RecipesBase"]
-git-tree-sha1 = "3aa2bb4982e575acd7583f01531f241af077b163"
-uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45"
-version = "3.2.13"
-
- [deps.Polynomials.extensions]
- PolynomialsChainRulesCoreExt = "ChainRulesCore"
- PolynomialsMakieCoreExt = "MakieCore"
- PolynomialsMutableArithmeticsExt = "MutableArithmetics"
-
- [deps.Polynomials.weakdeps]
- ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
- MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b"
- MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0"
-
-[[deps.PooledArrays]]
-deps = ["DataAPI", "Future"]
-git-tree-sha1 = "a6062fe4063cdafe78f4a0a81cfffb89721b30e7"
-uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720"
-version = "1.4.2"
-
-[[deps.PositiveFactorizations]]
-deps = ["LinearAlgebra"]
-git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20"
-uuid = "85a6dd25-e78a-55b7-8502-1745935b8125"
-version = "0.2.4"
-
-[[deps.PreallocationTools]]
-deps = ["Adapt", "ArrayInterface", "ForwardDiff", "Requires"]
-git-tree-sha1 = "f739b1b3cc7b9949af3b35089931f2b58c289163"
-uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46"
-version = "0.4.12"
-
- [deps.PreallocationTools.extensions]
- PreallocationToolsReverseDiffExt = "ReverseDiff"
-
- [deps.PreallocationTools.weakdeps]
- ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
-
-[[deps.PrecompileTools]]
-deps = ["Preferences"]
-git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81"
-uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
-version = "1.1.2"
-
-[[deps.Preferences]]
-deps = ["TOML"]
-git-tree-sha1 = "7eb1686b4f04b82f96ed7a4ea5890a4f0c7a09f1"
-uuid = "21216c6a-2e73-6563-6e65-726566657250"
-version = "1.4.0"
-
-[[deps.PrettyPrint]]
-git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4"
-uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98"
-version = "0.2.0"
-
-[[deps.PrettyTables]]
-deps = ["Crayons", "Formatting", "LaTeXStrings", "Markdown", "Reexport", "StringManipulation", "Tables"]
-git-tree-sha1 = "213579618ec1f42dea7dd637a42785a608b1ea9c"
-uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
-version = "2.2.4"
-
-[[deps.Primes]]
-deps = ["IntegerMathUtils"]
-git-tree-sha1 = "311a2aa90a64076ea0fac2ad7492e914e6feeb81"
-uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae"
-version = "0.5.3"
-
-[[deps.Printf]]
-deps = ["Unicode"]
-uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
-
-[[deps.Profile]]
-deps = ["Printf"]
-uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79"
-
-[[deps.ProgressLogging]]
-deps = ["Logging", "SHA", "UUIDs"]
-git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539"
-uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c"
-version = "0.1.4"
-
-[[deps.ProgressMeter]]
-deps = ["Distributed", "Printf"]
-git-tree-sha1 = "d7a7aef8f8f2d537104f170139553b14dfe39fe9"
-uuid = "92933f4c-e287-5a05-a399-4b506db050ca"
-version = "1.7.2"
-
-[[deps.Qt5Base_jll]]
-deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"]
-git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5"
-uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1"
-version = "5.15.3+2"
-
-[[deps.QuadGK]]
-deps = ["DataStructures", "LinearAlgebra"]
-git-tree-sha1 = "6ec7ac8412e83d57e313393220879ede1740f9ee"
-uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
-version = "2.8.2"
-
-[[deps.QuasiMonteCarlo]]
-deps = ["Accessors", "ConcreteStructs", "Distributions", "LatticeRules", "LinearAlgebra", "Primes", "Random", "Sobol", "StatsBase"]
-git-tree-sha1 = "e23bba76fbb0a71991a57b3190126988bc64212a"
-uuid = "8a4e6c94-4038-4cdc-81c3-7e6ffdb2a71b"
-version = "0.3.1"
-
-[[deps.REPL]]
-deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
-uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
-
-[[deps.Random]]
-deps = ["SHA", "Serialization"]
-uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
-
-[[deps.Random123]]
-deps = ["Random", "RandomNumbers"]
-git-tree-sha1 = "552f30e847641591ba3f39fd1bed559b9deb0ef3"
-uuid = "74087812-796a-5b5d-8853-05524746bad3"
-version = "1.6.1"
-
-[[deps.RandomExtensions]]
-deps = ["Random", "SparseArrays"]
-git-tree-sha1 = "062986376ce6d394b23d5d90f01d81426113a3c9"
-uuid = "fb686558-2515-59ef-acaa-46db3789a887"
-version = "0.4.3"
-
-[[deps.RandomNumbers]]
-deps = ["Random", "Requires"]
-git-tree-sha1 = "043da614cc7e95c703498a491e2c21f58a2b8111"
-uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143"
-version = "1.5.3"
-
-[[deps.RangeArrays]]
-git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5"
-uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d"
-version = "0.3.2"
-
-[[deps.Ratios]]
-deps = ["Requires"]
-git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b"
-uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439"
-version = "0.4.5"
-weakdeps = ["FixedPointNumbers"]
-
- [deps.Ratios.extensions]
- RatiosFixedPointNumbersExt = "FixedPointNumbers"
-
-[[deps.RealDot]]
-deps = ["LinearAlgebra"]
-git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9"
-uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9"
-version = "0.1.0"
-
-[[deps.RecipesBase]]
-deps = ["PrecompileTools"]
-git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff"
-uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
-version = "1.3.4"
-
-[[deps.RecipesPipeline]]
-deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"]
-git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342"
-uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c"
-version = "0.6.12"
-
-[[deps.RecursiveArrayTools]]
-deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "Requires", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"]
-git-tree-sha1 = "02ef02926f30d53b94be443bfaea010c47f6b556"
-uuid = "731186ca-8d62-57ce-b412-fbd966d074cd"
-version = "2.38.5"
-
- [deps.RecursiveArrayTools.extensions]
- RecursiveArrayToolsMeasurementsExt = "Measurements"
- RecursiveArrayToolsTrackerExt = "Tracker"
- RecursiveArrayToolsZygoteExt = "Zygote"
-
- [deps.RecursiveArrayTools.weakdeps]
- Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7"
- Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
- Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
-
-[[deps.RecursiveFactorization]]
-deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "SnoopPrecompile", "StrideArraysCore", "TriangularSolve"]
-git-tree-sha1 = "9088515ad915c99026beb5436d0a09cd8c18163e"
-uuid = "f2c3362d-daeb-58d1-803e-2bc74f2840b4"
-version = "0.2.18"
-
-[[deps.Reexport]]
-git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
-uuid = "189a3867-3050-52da-a836-e630ba90ab69"
-version = "1.2.2"
-
-[[deps.Referenceables]]
-deps = ["Adapt"]
-git-tree-sha1 = "e681d3bfa49cd46c3c161505caddf20f0e62aaa9"
-uuid = "42d2dcc6-99eb-4e98-b66c-637b7d73030e"
-version = "0.1.2"
-
-[[deps.RelocatableFolders]]
-deps = ["SHA", "Scratch"]
-git-tree-sha1 = "90bc7a7c96410424509e4263e277e43250c05691"
-uuid = "05181044-ff0b-4ac5-8273-598c1e38db00"
-version = "1.0.0"
-
-[[deps.Requires]]
-deps = ["UUIDs"]
-git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
-uuid = "ae029012-a4dd-5104-9daa-d747884805df"
-version = "1.3.0"
-
-[[deps.ResettableStacks]]
-deps = ["StaticArrays"]
-git-tree-sha1 = "256eeeec186fa7f26f2801732774ccf277f05db9"
-uuid = "ae5879a3-cd67-5da8-be7f-38c6eb64a37b"
-version = "1.1.1"
-
-[[deps.Rmath]]
-deps = ["Random", "Rmath_jll"]
-git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b"
-uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa"
-version = "0.7.1"
-
-[[deps.Rmath_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da"
-uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
-version = "0.4.0+0"
-
-[[deps.Roots]]
-deps = ["ChainRulesCore", "CommonSolve", "Printf", "Setfield"]
-git-tree-sha1 = "de432823e8aab4dd1a985be4be768f95acf152d4"
-uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665"
-version = "2.0.17"
-
- [deps.Roots.extensions]
- RootsForwardDiffExt = "ForwardDiff"
- RootsIntervalRootFindingExt = "IntervalRootFinding"
- RootsSymPyExt = "SymPy"
-
- [deps.Roots.weakdeps]
- ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
- IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807"
- SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6"
-
-[[deps.RoundingEmulator]]
-git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b"
-uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705"
-version = "0.2.1"
-
-[[deps.RuntimeGeneratedFunctions]]
-deps = ["ExprTools", "SHA", "Serialization"]
-git-tree-sha1 = "0b9b18d6236e9ab2b092defaacdffd929d572642"
-uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47"
-version = "0.5.9"
-
-[[deps.SHA]]
-uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
-version = "0.7.0"
-
-[[deps.SIMDTypes]]
-git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c"
-uuid = "94e857df-77ce-4151-89e5-788b33177be4"
-version = "0.1.0"
-
-[[deps.SLEEFPirates]]
-deps = ["IfElse", "Static", "VectorizationBase"]
-git-tree-sha1 = "4b8586aece42bee682399c4c4aee95446aa5cd19"
-uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa"
-version = "0.6.39"
-
-[[deps.SafeTestsets]]
-git-tree-sha1 = "81ec49d645af090901120a1542e67ecbbe044db3"
-uuid = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
-version = "0.1.0"
-
-[[deps.SciMLBase]]
-deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables", "TruncatedStacktraces"]
-git-tree-sha1 = "a22a12db91f6a921e28a7ae39a9546eed93fd92e"
-uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462"
-version = "1.93.0"
-
-[[deps.SciMLExpectations]]
-deps = ["DiffEqBase", "Distributions", "Integrals", "KernelDensity", "LinearAlgebra", "Parameters", "Random", "RecursiveArrayTools", "Reexport", "StaticArrays", "Statistics", "Zygote"]
-git-tree-sha1 = "6b784198e634859eced71c782115853b9f58b6d3"
-uuid = "afe9f18d-7609-4d0e-b7b7-af0cb72b8ea8"
-version = "2.0.1"
-
-[[deps.SciMLNLSolve]]
-deps = ["DiffEqBase", "LineSearches", "NLsolve", "Reexport", "SciMLBase"]
-git-tree-sha1 = "9dfc8e9e3d58c0c74f1a821c762b5349da13eccf"
-uuid = "e9a6253c-8580-4d32-9898-8661bb511710"
-version = "0.1.8"
-
-[[deps.SciMLOperators]]
-deps = ["ArrayInterface", "DocStringExtensions", "Lazy", "LinearAlgebra", "Setfield", "SparseArrays", "StaticArraysCore", "Tricks"]
-git-tree-sha1 = "b1fe33c9984c6789b58419e62e7a2b92f9aa813e"
-uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961"
-version = "0.3.3"
-
-[[deps.ScientificTypesBase]]
-git-tree-sha1 = "a8e18eb383b5ecf1b5e6fc237eb39255044fd92b"
-uuid = "30f210dd-8aff-4c5f-94ba-8e64358c1161"
-version = "3.0.0"
-
-[[deps.Scratch]]
-deps = ["Dates"]
-git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a"
-uuid = "6c6a2e73-6563-6170-7368-637461726353"
-version = "1.2.0"
-
-[[deps.SentinelArrays]]
-deps = ["Dates", "Random"]
-git-tree-sha1 = "04bdff0b09c65ff3e06a05e3eb7b120223da3d39"
-uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c"
-version = "1.4.0"
-
-[[deps.Serialization]]
-uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
-
-[[deps.SetRounding]]
-git-tree-sha1 = "d7a25e439d07a17b7cdf97eecee504c50fedf5f6"
-uuid = "3cc68bcd-71a2-5612-b932-767ffbe40ab0"
-version = "0.2.1"
-
-[[deps.Setfield]]
-deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"]
-git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac"
-uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46"
-version = "1.1.1"
-
-[[deps.SharedArrays]]
-deps = ["Distributed", "Mmap", "Random", "Serialization"]
-uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
-
-[[deps.Showoff]]
-deps = ["Dates", "Grisu"]
-git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de"
-uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
-version = "1.0.3"
-
-[[deps.SimpleBufferStream]]
-git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1"
-uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7"
-version = "1.1.0"
-
-[[deps.SimpleNonlinearSolve]]
-deps = ["ArrayInterfaceCore", "DiffEqBase", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "Reexport", "SciMLBase", "SnoopPrecompile", "StaticArraysCore"]
-git-tree-sha1 = "3f558105e8ef4aac1e22bf30bd1f1e95698bfc95"
-uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7"
-version = "0.1.10"
-
-[[deps.SimpleTraits]]
-deps = ["InteractiveUtils", "MacroTools"]
-git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231"
-uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d"
-version = "0.9.4"
-
-[[deps.SimpleUnPack]]
-git-tree-sha1 = "58e6353e72cde29b90a69527e56df1b5c3d8c437"
-uuid = "ce78b400-467f-4804-87d8-8f486da07d0a"
-version = "1.1.0"
-
-[[deps.SnoopPrecompile]]
-deps = ["Preferences"]
-git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c"
-uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c"
-version = "1.0.3"
-
-[[deps.Sobol]]
-deps = ["DelimitedFiles", "Random"]
-git-tree-sha1 = "5a74ac22a9daef23705f010f72c81d6925b19df8"
-uuid = "ed01d8cd-4d21-5b2a-85b4-cc3bdc58bad4"
-version = "1.5.0"
-
-[[deps.Sockets]]
-uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
-
-[[deps.SortingAlgorithms]]
-deps = ["DataStructures"]
-git-tree-sha1 = "c60ec5c62180f27efea3ba2908480f8055e17cee"
-uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
-version = "1.1.1"
-
-[[deps.SparseArrays]]
-deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
-uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
-
-[[deps.SparseDiffTools]]
-deps = ["ADTypes", "Adapt", "ArrayInterface", "Compat", "DataStructures", "FiniteDiff", "ForwardDiff", "Graphs", "LinearAlgebra", "Reexport", "Requires", "SciMLOperators", "Setfield", "SparseArrays", "StaticArrayInterface", "StaticArrays", "Tricks", "VertexSafeGraphs"]
-git-tree-sha1 = "4c1a57bcbc0b795fbfdc2009e70f9c2fd2815bfe"
-uuid = "47a9eef4-7e08-11e9-0b38-333d64bd3804"
-version = "2.4.1"
-weakdeps = ["Zygote"]
-
- [deps.SparseDiffTools.extensions]
- SparseDiffToolsZygoteExt = "Zygote"
-
-[[deps.Sparspak]]
-deps = ["Libdl", "LinearAlgebra", "Logging", "OffsetArrays", "Printf", "SparseArrays", "Test"]
-git-tree-sha1 = "342cf4b449c299d8d1ceaf00b7a49f4fbc7940e7"
-uuid = "e56a9233-b9d6-4f03-8d0f-1825330902ac"
-version = "0.3.9"
-
-[[deps.SpatialIndexing]]
-git-tree-sha1 = "bacf5065cd7c0d6449b8bba6fa8e75b3087356b0"
-uuid = "d4ead438-fe20-5cc5-a293-4fd39a41b74c"
-version = "0.1.5"
-
-[[deps.SpecialFunctions]]
-deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
-git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3"
-uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
-version = "2.3.0"
-weakdeps = ["ChainRulesCore"]
-
- [deps.SpecialFunctions.extensions]
- SpecialFunctionsChainRulesCoreExt = "ChainRulesCore"
-
-[[deps.SplittablesBase]]
-deps = ["Setfield", "Test"]
-git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5"
-uuid = "171d559e-b47b-412a-8079-5efa626c420e"
-version = "0.1.15"
-
-[[deps.Static]]
-deps = ["IfElse"]
-git-tree-sha1 = "dbde6766fc677423598138a5951269432b0fcc90"
-uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3"
-version = "0.8.7"
-
-[[deps.StaticArrayInterface]]
-deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "Requires", "SnoopPrecompile", "SparseArrays", "Static", "SuiteSparse"]
-git-tree-sha1 = "33040351d2403b84afce74dae2e22d3f5b18edcb"
-uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718"
-version = "1.4.0"
-weakdeps = ["OffsetArrays", "StaticArrays"]
-
- [deps.StaticArrayInterface.extensions]
- StaticArrayInterfaceOffsetArraysExt = "OffsetArrays"
- StaticArrayInterfaceStaticArraysExt = "StaticArrays"
-
-[[deps.StaticArrays]]
-deps = ["LinearAlgebra", "Random", "StaticArraysCore"]
-git-tree-sha1 = "0da7e6b70d1bb40b1ace3b576da9ea2992f76318"
-uuid = "90137ffa-7385-5640-81b9-e52037218182"
-version = "1.6.0"
-weakdeps = ["Statistics"]
-
- [deps.StaticArrays.extensions]
- StaticArraysStatisticsExt = "Statistics"
-
-[[deps.StaticArraysCore]]
-git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a"
-uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
-version = "1.4.0"
-
-[[deps.StatisticalTraits]]
-deps = ["ScientificTypesBase"]
-git-tree-sha1 = "30b9236691858e13f167ce829490a68e1a597782"
-uuid = "64bff920-2084-43da-a3e6-9bb72801c0c9"
-version = "3.2.0"
-
-[[deps.Statistics]]
-deps = ["LinearAlgebra", "SparseArrays"]
-uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
-version = "1.9.0"
-
-[[deps.StatsAPI]]
-deps = ["LinearAlgebra"]
-git-tree-sha1 = "45a7769a04a3cf80da1c1c7c60caf932e6f4c9f7"
-uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
-version = "1.6.0"
-
-[[deps.StatsBase]]
-deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
-git-tree-sha1 = "d1bf48bfcc554a3761a133fe3a9bb01488e06916"
-uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
-version = "0.33.21"
-
-[[deps.StatsFuns]]
-deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"]
-git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a"
-uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
-version = "1.3.0"
-weakdeps = ["ChainRulesCore", "InverseFunctions"]
-
- [deps.StatsFuns.extensions]
- StatsFunsChainRulesCoreExt = "ChainRulesCore"
- StatsFunsInverseFunctionsExt = "InverseFunctions"
-
-[[deps.SteadyStateDiffEq]]
-deps = ["DiffEqBase", "DiffEqCallbacks", "LinearAlgebra", "NLsolve", "Reexport", "SciMLBase"]
-git-tree-sha1 = "6e801d0da4c81d9cd6a05d97340404f9892fba85"
-uuid = "9672c7b4-1e72-59bd-8a11-6ac3964bc41f"
-version = "1.16.0"
-
-[[deps.StochasticDiffEq]]
-deps = ["Adapt", "ArrayInterface", "DataStructures", "DiffEqBase", "DiffEqNoiseProcess", "DocStringExtensions", "FillArrays", "FiniteDiff", "ForwardDiff", "JumpProcesses", "LevyArea", "LinearAlgebra", "Logging", "MuladdMacro", "NLsolve", "OrdinaryDiffEq", "Random", "RandomNumbers", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SparseArrays", "SparseDiffTools", "StaticArrays", "UnPack"]
-git-tree-sha1 = "ccf744171b3a83879158a4b3f3a430c1bc585123"
-uuid = "789caeaf-c7a9-5a7d-9973-96adeb23e2a0"
-version = "6.61.1"
-
-[[deps.StrideArraysCore]]
-deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"]
-git-tree-sha1 = "26316a9a43d32ecd0c5b342cb36dc86305c73e53"
-uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da"
-version = "0.4.16"
-
-[[deps.StringEncodings]]
-deps = ["Libiconv_jll"]
-git-tree-sha1 = "33c0da881af3248dafefb939a21694b97cfece76"
-uuid = "69024149-9ee7-55f6-a4c4-859efe599b68"
-version = "0.3.6"
-
-[[deps.StringManipulation]]
-git-tree-sha1 = "46da2434b41f41ac3594ee9816ce5541c6096123"
-uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e"
-version = "0.3.0"
-
-[[deps.StructArrays]]
-deps = ["Adapt", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"]
-git-tree-sha1 = "521a0e828e98bb69042fec1809c1b5a680eb7389"
-uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
-version = "0.6.15"
-
-[[deps.StructEquality]]
-deps = ["Compat"]
-git-tree-sha1 = "192a9f1de3cfef80ab1a4ba7b150bb0e11ceedcf"
-uuid = "6ec83bb0-ed9f-11e9-3b4c-2b04cb4e219c"
-version = "2.1.0"
-
-[[deps.StructTypes]]
-deps = ["Dates", "UUIDs"]
-git-tree-sha1 = "ca4bccb03acf9faaf4137a9abc1881ed1841aa70"
-uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4"
-version = "1.10.0"
-
-[[deps.SuiteSparse]]
-deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
-uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
-
-[[deps.SuiteSparse_jll]]
-deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"]
-uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
-version = "5.10.1+6"
-
-[[deps.Sundials]]
-deps = ["CEnum", "DataStructures", "DiffEqBase", "Libdl", "LinearAlgebra", "Logging", "PrecompileTools", "Reexport", "SciMLBase", "SparseArrays", "Sundials_jll"]
-git-tree-sha1 = "4931f9013c53128337ce8df54a2d38c79fe58d4c"
-uuid = "c3572dad-4567-51f8-b174-8c6c989267f4"
-version = "4.19.3"
-
-[[deps.Sundials_jll]]
-deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "OpenBLAS_jll", "Pkg", "SuiteSparse_jll"]
-git-tree-sha1 = "04777432d74ec5bc91ca047c9e0e0fd7f81acdb6"
-uuid = "fb77eaff-e24c-56d4-86b1-d163f2edb164"
-version = "5.2.1+0"
-
-[[deps.SwaggerMarkdown]]
-deps = ["JSON", "JSONSchema", "Test", "UUIDs", "YAML"]
-git-tree-sha1 = "ea2513768e67b5ca27bbbab19e34179714a78cab"
-uuid = "1b6eb727-ad4b-44eb-9669-b9596a6e760f"
-version = "0.2.1"
-
-[[deps.SymbolicIndexingInterface]]
-deps = ["DocStringExtensions"]
-git-tree-sha1 = "f8ab052bfcbdb9b48fad2c80c873aa0d0344dfe5"
-uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5"
-version = "0.2.2"
-
-[[deps.SymbolicUtils]]
-deps = ["AbstractTrees", "Bijections", "ChainRulesCore", "Combinatorics", "ConstructionBase", "DataStructures", "DocStringExtensions", "DynamicPolynomials", "IfElse", "LabelledArrays", "LinearAlgebra", "MultivariatePolynomials", "NaNMath", "Setfield", "SparseArrays", "SpecialFunctions", "StaticArrays", "TimerOutputs", "Unityper"]
-git-tree-sha1 = "5cb1f963f82e7b81305102dd69472fcd3e0e1483"
-uuid = "d1185830-fcd6-423d-90d6-eec64667417b"
-version = "1.0.5"
-
-[[deps.Symbolics]]
-deps = ["ArrayInterface", "ConstructionBase", "DataStructures", "DiffRules", "Distributions", "DocStringExtensions", "DomainSets", "Groebner", "IfElse", "LaTeXStrings", "LambertW", "Latexify", "Libdl", "LinearAlgebra", "MacroTools", "Markdown", "NaNMath", "RecipesBase", "Reexport", "Requires", "RuntimeGeneratedFunctions", "SciMLBase", "Setfield", "SparseArrays", "SpecialFunctions", "StaticArrays", "SymbolicUtils", "TreeViews"]
-git-tree-sha1 = "c4e5688a9a5a2f4088cd1a779b0742be31cbe9aa"
-uuid = "0c5d862f-8b57-4792-8d23-62f2024744c7"
-version = "5.5.0"
-
-[[deps.TOML]]
-deps = ["Dates"]
-uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
-version = "1.0.3"
-
-[[deps.TableTraits]]
-deps = ["IteratorInterfaceExtensions"]
-git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
-uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
-version = "1.0.1"
-
-[[deps.Tables]]
-deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"]
-git-tree-sha1 = "1544b926975372da01227b382066ab70e574a3ec"
-uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
-version = "1.10.1"
-
-[[deps.Tar]]
-deps = ["ArgTools", "SHA"]
-uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
-version = "1.10.0"
-
-[[deps.TaylorSeries]]
-deps = ["IntervalArithmetic", "LinearAlgebra", "Markdown", "Requires", "SparseArrays"]
-git-tree-sha1 = "b123e0614b0f366e2073c4da7b1367cebda3f579"
-uuid = "6aa5eb33-94cf-58f4-a9d0-e4b2c4fc25ea"
-version = "0.14.0"
-
-[[deps.TensorCore]]
-deps = ["LinearAlgebra"]
-git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6"
-uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50"
-version = "0.1.1"
-
-[[deps.Term]]
-deps = ["AbstractTrees", "CodeTracking", "Dates", "Highlights", "InteractiveUtils", "Logging", "Markdown", "MyterialColors", "OrderedCollections", "Parameters", "PrecompileTools", "ProgressLogging", "REPL", "Tables", "UUIDs", "Unicode", "UnicodeFun"]
-git-tree-sha1 = "ffac67f6fbcbb32027d924b93ba91b7633af9220"
-uuid = "22787eb5-b846-44ae-b979-8e399b8463ab"
-version = "2.0.5"
-
-[[deps.TerminalLoggers]]
-deps = ["LeftChildRightSiblingTrees", "Logging", "Markdown", "Printf", "ProgressLogging", "UUIDs"]
-git-tree-sha1 = "f133fab380933d042f6796eda4e130272ba520ca"
-uuid = "5d786b92-1e48-4d6f-9151-6b4477ca9bed"
-version = "0.1.7"
-
-[[deps.Terming]]
-deps = ["REPL", "Test"]
-git-tree-sha1 = "9ef2648010c3a74ab4ea44a88e8640f0d1034d1f"
-uuid = "5a1048b7-9ca6-4e8a-8e2e-1f932e78ac4e"
-version = "0.2.6"
-
-[[deps.Test]]
-deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
-uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
-
-[[deps.ThreadingUtilities]]
-deps = ["ManualMemory"]
-git-tree-sha1 = "eda08f7e9818eb53661b3deb74e3159460dfbc27"
-uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5"
-version = "0.5.2"
-
-[[deps.ThreadsX]]
-deps = ["ArgCheck", "BangBang", "ConstructionBase", "InitialValues", "MicroCollections", "Referenceables", "Setfield", "SplittablesBase", "Transducers"]
-git-tree-sha1 = "34e6bcf36b9ed5d56489600cf9f3c16843fa2aa2"
-uuid = "ac1d9e8a-700a-412c-b207-f0111f4b6c0d"
-version = "0.1.11"
-
-[[deps.TimeZones]]
-deps = ["Dates", "Downloads", "InlineStrings", "LazyArtifacts", "Mocking", "Printf", "RecipesBase", "Scratch", "Unicode"]
-git-tree-sha1 = "cdaa0c2a4449724aded839550eca7d7240bb6938"
-uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53"
-version = "1.10.0"
-
-[[deps.TimerOutputs]]
-deps = ["ExprTools", "Printf"]
-git-tree-sha1 = "f548a9e9c490030e545f72074a41edfd0e5bcdd7"
-uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f"
-version = "0.5.23"
-
-[[deps.ToeplitzMatrices]]
-deps = ["AbstractFFTs", "DSP", "LinearAlgebra", "StatsBase"]
-git-tree-sha1 = "326388c0c53565fb21eecafb6176b1cc5d225d34"
-uuid = "c751599d-da0a-543b-9d20-d0a503d91d24"
-version = "0.8.1"
-
-[[deps.Tokenize]]
-git-tree-sha1 = "90538bf898832b6ebd900fa40f223e695970e3a5"
-uuid = "0796e94c-ce3b-5d07-9a54-7f471281c624"
-version = "0.5.25"
-
-[[deps.Tracker]]
-deps = ["Adapt", "DiffRules", "ForwardDiff", "Functors", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NNlib", "NaNMath", "Optimisers", "Printf", "Random", "Requires", "SpecialFunctions", "Statistics"]
-git-tree-sha1 = "92364c27aa35c0ee36e6e010b704adaade6c409c"
-uuid = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
-version = "0.2.26"
-weakdeps = ["PDMats"]
-
- [deps.Tracker.extensions]
- TrackerPDMatsExt = "PDMats"
-
-[[deps.TranscodingStreams]]
-deps = ["Random", "Test"]
-git-tree-sha1 = "9a6ae7ed916312b41236fcef7e0af564ef934769"
-uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
-version = "0.9.13"
-
-[[deps.Transducers]]
-deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"]
-git-tree-sha1 = "a66fb81baec325cf6ccafa243af573b031e87b00"
-uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999"
-version = "0.4.77"
-
- [deps.Transducers.extensions]
- TransducersBlockArraysExt = "BlockArrays"
- TransducersDataFramesExt = "DataFrames"
- TransducersLazyArraysExt = "LazyArrays"
- TransducersOnlineStatsBaseExt = "OnlineStatsBase"
- TransducersReferenceablesExt = "Referenceables"
-
- [deps.Transducers.weakdeps]
- BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e"
- DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
- LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02"
- OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338"
- Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e"
-
-[[deps.Trapz]]
-git-tree-sha1 = "79eb0ed763084a3e7de81fe1838379ac6a23b6a0"
-uuid = "592b5752-818d-11e9-1e9a-2b8ca4a44cd1"
-version = "2.0.3"
-
-[[deps.TreeViews]]
-deps = ["Test"]
-git-tree-sha1 = "8d0d7a3fe2f30d6a7f833a5f19f7c7a5b396eae6"
-uuid = "a2a6695c-b41b-5b7d-aed9-dbfdeacea5d7"
-version = "0.3.0"
-
-[[deps.TriangularSolve]]
-deps = ["CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "LoopVectorization", "Polyester", "Static", "VectorizationBase"]
-git-tree-sha1 = "31eedbc0b6d07c08a700e26d31298ac27ef330eb"
-uuid = "d5829a12-d9aa-46ab-831f-fb7c9ab06edf"
-version = "0.1.19"
-
-[[deps.Tricks]]
-git-tree-sha1 = "aadb748be58b492045b4f56166b5188aa63ce549"
-uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
-version = "0.1.7"
-
-[[deps.TruncatedStacktraces]]
-deps = ["InteractiveUtils", "MacroTools", "Preferences"]
-git-tree-sha1 = "ea3e54c2bdde39062abf5a9758a23735558705e1"
-uuid = "781d530d-4396-4725-bb49-402e4bee1e77"
-version = "1.4.0"
-
-[[deps.Turing]]
-deps = ["AbstractMCMC", "AdvancedHMC", "AdvancedMH", "AdvancedPS", "AdvancedVI", "BangBang", "Bijectors", "DataStructures", "Distributions", "DistributionsAD", "DocStringExtensions", "DynamicPPL", "EllipticalSliceSampling", "ForwardDiff", "Libtask", "LinearAlgebra", "LogDensityProblems", "LogDensityProblemsAD", "MCMCChains", "NamedArrays", "Printf", "Random", "Reexport", "Requires", "SciMLBase", "Setfield", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "Tracker"]
-git-tree-sha1 = "26cdfce1cc0301fe832eaa419a5d0edd6a554004"
-uuid = "fce5fe82-541a-59a6-adf8-730c64b5f9a0"
-version = "0.24.4"
-
-[[deps.URIs]]
-git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a"
-uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
-version = "1.4.2"
-
-[[deps.UUIDs]]
-deps = ["Random", "SHA"]
-uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
-
-[[deps.UnPack]]
-git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b"
-uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed"
-version = "1.0.2"
-
-[[deps.Unicode]]
-uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
-
-[[deps.UnicodeFun]]
-deps = ["REPL"]
-git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf"
-uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1"
-version = "0.4.1"
-
-[[deps.Unitful]]
-deps = ["Dates", "LinearAlgebra", "Random"]
-git-tree-sha1 = "c4d2a349259c8eba66a00a540d550f122a3ab228"
-uuid = "1986cc42-f94f-5a68-af5c-568840ba703d"
-version = "1.15.0"
-weakdeps = ["ConstructionBase", "InverseFunctions"]
-
- [deps.Unitful.extensions]
- ConstructionBaseUnitfulExt = "ConstructionBase"
- InverseFunctionsUnitfulExt = "InverseFunctions"
-
-[[deps.UnitfulLatexify]]
-deps = ["LaTeXStrings", "Latexify", "Unitful"]
-git-tree-sha1 = "e2d817cc500e960fdbafcf988ac8436ba3208bfd"
-uuid = "45397f5d-5981-4c77-b2b3-fc36d6e9b728"
-version = "1.6.3"
-
-[[deps.Unityper]]
-deps = ["ConstructionBase"]
-git-tree-sha1 = "d5f4ec8c22db63bd3ccb239f640e895cfde145aa"
-uuid = "a7c27f48-0311-42f6-a7f8-2c11e75eb415"
-version = "0.1.2"
-
-[[deps.UnsafeAtomics]]
-git-tree-sha1 = "6331ac3440856ea1988316b46045303bef658278"
-uuid = "013be700-e6cd-48c3-b4a1-df204f14c38f"
-version = "0.2.1"
-
-[[deps.UnsafeAtomicsLLVM]]
-deps = ["LLVM", "UnsafeAtomics"]
-git-tree-sha1 = "323e3d0acf5e78a56dfae7bd8928c989b4f3083e"
-uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249"
-version = "0.1.3"
-
-[[deps.Unzip]]
-git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78"
-uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d"
-version = "0.2.0"
-
-[[deps.VectorizationBase]]
-deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"]
-git-tree-sha1 = "b182207d4af54ac64cbc71797765068fdeff475d"
-uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f"
-version = "0.21.64"
-
-[[deps.VertexSafeGraphs]]
-deps = ["Graphs"]
-git-tree-sha1 = "8351f8d73d7e880bfc042a8b6922684ebeafb35c"
-uuid = "19fa3120-7c27-5ec5-8db8-b0b0aa330d6f"
-version = "0.2.0"
-
-[[deps.Wayland_jll]]
-deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"]
-git-tree-sha1 = "ed8d92d9774b077c53e1da50fd81a36af3744c1c"
-uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89"
-version = "1.21.0+0"
-
-[[deps.Wayland_protocols_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "4528479aa01ee1b3b4cd0e6faef0e04cf16466da"
-uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91"
-version = "1.25.0+0"
-
-[[deps.WeakRefStrings]]
-deps = ["DataAPI", "InlineStrings", "Parsers"]
-git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23"
-uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5"
-version = "1.4.2"
-
-[[deps.WoodburyMatrices]]
-deps = ["LinearAlgebra", "SparseArrays"]
-git-tree-sha1 = "de67fa59e33ad156a590055375a30b23c40299d3"
-uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6"
-version = "0.5.5"
-
-[[deps.WorkerUtilities]]
-git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7"
-uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60"
-version = "1.6.1"
-
-[[deps.XML2_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"]
-git-tree-sha1 = "93c41695bc1c08c46c5899f4fe06d6ead504bb73"
-uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a"
-version = "2.10.3+0"
-
-[[deps.XSLT_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"]
-git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a"
-uuid = "aed1982a-8fda-507f-9586-7b0439959a61"
-version = "1.1.34+0"
-
-[[deps.Xorg_libX11_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"]
-git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495"
-uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc"
-version = "1.8.6+0"
-
-[[deps.Xorg_libXau_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl"]
-git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8"
-uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec"
-version = "1.0.11+0"
-
-[[deps.Xorg_libXcursor_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"]
-git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd"
-uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724"
-version = "1.2.0+4"
-
-[[deps.Xorg_libXdmcp_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl"]
-git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7"
-uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05"
-version = "1.1.4+0"
-
-[[deps.Xorg_libXext_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
-git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3"
-uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3"
-version = "1.3.4+4"
-
-[[deps.Xorg_libXfixes_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
-git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4"
-uuid = "d091e8ba-531a-589c-9de9-94069b037ed8"
-version = "5.0.3+4"
-
-[[deps.Xorg_libXi_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"]
-git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246"
-uuid = "a51aa0fd-4e3c-5386-b890-e753decda492"
-version = "1.7.10+4"
-
-[[deps.Xorg_libXinerama_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"]
-git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123"
-uuid = "d1454406-59df-5ea1-beac-c340f2130bc3"
-version = "1.1.4+4"
-
-[[deps.Xorg_libXrandr_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"]
-git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631"
-uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484"
-version = "1.5.2+4"
-
-[[deps.Xorg_libXrender_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
-git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96"
-uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa"
-version = "0.9.10+4"
-
-[[deps.Xorg_libpthread_stubs_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl"]
-git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9"
-uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74"
-version = "0.1.1+0"
-
-[[deps.Xorg_libxcb_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"]
-git-tree-sha1 = "b4bfde5d5b652e22b9c790ad00af08b6d042b97d"
-uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b"
-version = "1.15.0+0"
-
-[[deps.Xorg_libxkbfile_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
-git-tree-sha1 = "730eeca102434283c50ccf7d1ecdadf521a765a4"
-uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a"
-version = "1.1.2+0"
-
-[[deps.Xorg_xcb_util_image_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
-git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97"
-uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b"
-version = "0.4.0+1"
-
-[[deps.Xorg_xcb_util_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"]
-git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1"
-uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5"
-version = "0.4.0+1"
-
-[[deps.Xorg_xcb_util_keysyms_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
-git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00"
-uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7"
-version = "0.4.0+1"
-
-[[deps.Xorg_xcb_util_renderutil_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
-git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e"
-uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e"
-version = "0.3.9+1"
-
-[[deps.Xorg_xcb_util_wm_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
-git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67"
-uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361"
-version = "0.4.1+1"
-
-[[deps.Xorg_xkbcomp_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"]
-git-tree-sha1 = "330f955bc41bb8f5270a369c473fc4a5a4e4d3cb"
-uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4"
-version = "1.4.6+0"
-
-[[deps.Xorg_xkeyboard_config_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"]
-git-tree-sha1 = "691634e5453ad362044e2ad653e79f3ee3bb98c3"
-uuid = "33bec58e-1273-512f-9401-5d533626f822"
-version = "2.39.0+0"
-
-[[deps.Xorg_xtrans_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl"]
-git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77"
-uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
-version = "1.5.0+0"
-
-[[deps.YAML]]
-deps = ["Base64", "Dates", "Printf", "StringEncodings"]
-git-tree-sha1 = "e6330e4b731a6af7959673621e91645eb1356884"
-uuid = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6"
-version = "0.4.9"
-
-[[deps.Zlib_jll]]
-deps = ["Libdl"]
-uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
-version = "1.2.13+0"
-
-[[deps.Zstd_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl"]
-git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c"
-uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
-version = "1.5.5+0"
-
-[[deps.Zygote]]
-deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "PrecompileTools", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"]
-git-tree-sha1 = "5be3ddb88fc992a7d8ea96c3f10a49a7e98ebc7b"
-uuid = "e88e6eb3-aa80-5325-afca-941959d7151f"
-version = "0.6.62"
-weakdeps = ["Colors", "Distances", "Tracker"]
-
- [deps.Zygote.extensions]
- ZygoteColorsExt = "Colors"
- ZygoteDistancesExt = "Distances"
- ZygoteTrackerExt = "Tracker"
-
-[[deps.ZygoteRules]]
-deps = ["ChainRulesCore", "MacroTools"]
-git-tree-sha1 = "977aed5d006b840e2e40c0b48984f7463109046d"
-uuid = "700de1a5-db45-46bc-99cf-38207098b444"
-version = "0.2.3"
-
-[[deps.fzf_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "868e669ccb12ba16eaf50cb2957ee2ff61261c56"
-uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09"
-version = "0.29.0+0"
-
-[[deps.libaom_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "3a2ea60308f0996d26f1e5354e10c24e9ef905d4"
-uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b"
-version = "3.4.0+0"
-
-[[deps.libass_jll]]
-deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
-git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47"
-uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
-version = "0.15.1+0"
-
-[[deps.libblastrampoline_jll]]
-deps = ["Artifacts", "Libdl"]
-uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
-version = "5.8.0+0"
-
-[[deps.libfdk_aac_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55"
-uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
-version = "2.0.2+0"
-
-[[deps.libpng_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
-git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c"
-uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f"
-version = "1.6.38+0"
-
-[[deps.libvorbis_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"]
-git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c"
-uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
-version = "1.3.7+1"
-
-[[deps.nghttp2_jll]]
-deps = ["Artifacts", "Libdl"]
-uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
-version = "1.48.0+0"
-
-[[deps.p7zip_jll]]
-deps = ["Artifacts", "Libdl"]
-uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
-version = "17.4.0+0"
-
-[[deps.x264_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2"
-uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
-version = "2021.5.5+0"
-
-[[deps.x265_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
-git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9"
-uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
-version = "3.5.0+0"
-
-[[deps.xkbcommon_jll]]
-deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"]
-git-tree-sha1 = "9ebfc140cc56e8c2156a15ceac2f0302e327ac0a"
-uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd"
-version = "1.4.1+0"
diff --git a/Project.toml b/Project.toml
index 9b2bdba..55c87a3 100644
--- a/Project.toml
+++ b/Project.toml
@@ -1,47 +1,49 @@
name = "SimulationService"
uuid = "e66378d9-a322-4933-8764-0ce0bcab4993"
authors = ["Five Grant <5@fivegrant.com>"]
-version = "0.6.0"
+version = "0.7.0"
[deps]
AMQPClient = "79c8b4cd-a41a-55fa-907c-fab5288e1383"
-AlgebraicPetri = "4f99eebe-17bf-4e98-b6a1-2c4f205a959b"
-Bijections = "e2ed5e7c-b2de-5872-ae92-c73ca462fb04"
CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
-Catlab = "134e5e36-593f-5add-ad60-77f754baafbe"
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
-DiffEqCallbacks = "459566f4-90b8-5000-8ac3-15dfb0a30def"
DifferentialEquations = "0c46a032-eb83-5123-abaf-570d42b7fbaa"
Downloads = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
-EasyModelAnalysis = "ef4b24a4-a090-4686-a932-e7e56a5a83bd"
-ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
+EasyConfig = "acab07b0-f158-46d4-8913-50acef6d41fe"
HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
-JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
+InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
-JSONTables = "b9914132-a727-11e9-1322-f18e41205b0b"
JobSchedulers = "eeff360b-c02d-44d3-ab26-4013c616a17e"
-LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
-Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
MathML = "abcecc63-2b08-419c-80c4-c63dca6fa478"
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
-NamedTupleTools = "d9ec5142-1e00-5aa0-9d6a-321866360f50"
OpenAPI = "d5e62ea6-ddf3-4d43-8e4c-ad5e6c8bfd7d"
-OpenBLAS32_jll = "656ef2d0-ae68-5445-9ca0-591084a874a2"
-OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
-OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
Oxygen = "df9a0d86-3283-4920-82dc-4555fc0d1d8b"
-Pipelines = "ef544631-5c6f-4e9b-994c-12e7a4cd724c"
-Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
-Preferences = "21216c6a-2e73-6563-6e65-726566657250"
-Reexport = "189a3867-3050-52da-a836-e630ba90ab69"
-SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462"
SwaggerMarkdown = "1b6eb727-ad4b-44eb-9669-b9596a6e760f"
-SymbolicIndexingInterface = "2efcf032-c050-4f8e-a9bb-153293bab1f5"
-Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"
-TerminalLoggers = "5d786b92-1e48-4d6f-9151-6b4477ca9bed"
-Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
-UnPack = "3a884ed6-31ef-47d7-9d2a-63182c4928ed"
YAML = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6"
+
+[compat]
+AMQPClient = "0.5"
+CSV = "0.10"
+DataFrames = "1.6"
+DifferentialEquations = "7.8"
+EasyConfig = "0.1.15"
+HTTP = "1.9"
+JSON3 = "1.13"
+JobSchedulers = "0.8"
+MathML = "0.1"
+ModelingToolkit = "8.62"
+OpenAPI = "0.1"
+Oxygen = "1.1"
+SciMLBase = "1.93"
+SwaggerMarkdown = "0.2"
+YAML = "0.4"
+julia = "1.9"
+
+[extras]
+Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[targets]
+test = ["Test"]
diff --git a/README.md b/README.md
index cbc6b1a..8e4c6bf 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,109 @@
-# Simulation Service
-Simulation Service provides an interface and job runner for [ASKEM models](https://github.com/DARPA-ASKEM/Model-Representations).
+# SimulationService.jl
-See example payload at [./examples/request.json](./examples/request.json)
+Simulation Service runs a REST API for running jobs in the [ASKEM Model Representation](https://github.com/DARPA-ASKEM/Model-Representations).
-## Usage
+See example payloads in the `./examples` directory.
+
+## Development Environment
+
+```julia
+using Revise # auto-update the server with your changes
+using SimulationService
+SimulationService.SIMSERVICE_ENABLE_TDS = false # opt out of Terrarium Data Service
+
+start!() # run server
+
+# make code changes that you want to test...
+
+start!() # Replaces the running server with your changes
+```
+
+## Run Server via Docker
-With docker compose:
```
docker compose --file docker/docker-compose.yml up --build
```
-With Julia REPL assuming you want to run it standalone:
+## Example Request with Local Server in Julia
+
+```julia
+using SimulationService, HTTP, JSON3, EasyConfig
+
+# Start the server/job scheduler without Terrarium Data Service
+SimulationService.SIMSERVICE_ENABLE_TDS = false
+start!()
+
+url = SimulationService.server_url[] # server url
+@info JSON3.read(HTTP.get(url).body) # Is server running? (status == "ok")
+
+# JSON in ASKEM Model Representation
+model = JSON3.read(read("./examples/BIOMD0000000955_askenet.json"), Config)
+
+# You can directly provide AMR JSON with the `test_amr` key
+# (Note: this does not look like a request that would be seen in production)
+json = Config(model = model, timespan=(0, 90))
+
+body = JSON3.write(json)
+
+# Kick off the simulation job
+res = HTTP.post("$url/simulate", ["Content-Type" => "application/json"]; body=body)
+# Get the `job_id` so we can query the job status and get results
+job_id = JSON3.read(res.body).simulation_id
+
+# Re-run this until `status_obj.status == "done"`
+status = JSON3.read(HTTP.get("$url/jobs/status/$job_id").body)
+
+# close down server and scheduler
+stop!()
```
->> export ENABLE_TDS=false # Include if you would like to disable backend services
->> julia --project --threads 15 # We need multithreading
-julia> using SimulationService, HTTP
-julia> import JSON3 as JSON
-julia> start!()
-julia> model_json = String(read("./examples/BIOMD0000000955_askenet.json"))
-julia> # Let's do a simulate
-julia> operation = "simulate"
-julia> operation_args = Dict(:model=> model_json, :timespan => Dict("start" => 0, "end" => 90)) # should match up to what's in Availble.jl
-julia> simulation = SimulationService.make_deterministic_run(operation_args, operation)
-julia> simulation_id = JSON.read(String(simulation.body)).simulation_id
-julia> status = SimulationService.retrieve_job(nothing, simulation_id, "status") # rerun until complete
-julia> result = SimulationService.retrieve_job(nothing, simulation_id, "result")
-julia> # output of REST API and Scheduler
-julia> stop!()
-julia> # you may safely leave the repl or rerun `start!`
-````
-
-To check available endpoints, try checking [localhost:8080/docs](localhost:8080/docs)
+
+## Incoming Requests
+
+The OpenAPI spec [here](https://raw.githubusercontent.com/DARPA-ASKEM/simulation-api-spec/main/openapi.yaml) is the source of truth. See the JSON files in `./examples` that begin with `request-...`.
+
+Here's a summary of what the JSON should like in a request:
+
+1. Every request should contain `"engine": "sciml"`
+2. Endpoint-specific keys:
+ - `/simulate`
+ - Required: `model_config_id`, `timespan`
+ - Optional: `extra`
+ - `/calibrate`
+ - Required: `model_config_id`, `dataset`
+ - Optional: `extra`, `timespan`
+ - `/ensemble`
+ - Required: `model_config_ids`, `timespan`
+ - Optional: `extra`
+3. Additional keys (for testing/when TDS is disabled).
+ - `csv`: A String containing the contents of a CSV file.
+ - `local_csv`: The file path of a CSV file, local to where the server is running.
+ - `model`: JSON object in the The ASKEM Model Representation (AMR) format.
+
+### How Incoming Requests are Processed
+
+An incoming `HTTP.Request` gets turned into a `SimulationService.OperationRequest` object that holds
+all the necessary info for running/solving the model and returning results.
+
+
+1. Request arrives
+2. We process the keys into useful things for `OperationRequest`
+ - `model_config_id(s)` --> Retrieve model(s) in AMR format from TDS (`model::Config` in `OperationRequest`).
+ - `dataset` --> Retrieve dataset from TDS (`df::DataFrame` in `OperationRequest`).
+3. We start the job via JobSchedulers.jl, which performs:
+ - Update job status in TDS to "running".
+ - Run/solve the model/simulation.
+ - Upload results to S3.
+ - Update job status in TDS to "complete".
+4. Return a 201 response (above job runs async) with JSON that holds the `simulation_id` (client's term), which we call `job_id`.
+
+
+## Architecture
+
+The Simulation Service (soon to be renamed SciML Service) is a REST API that wraps
+specific SciML tasks. The service should match the spec [here](https://github.com/DARPA-ASKEM/simulation-api-spec)
+since PyCIEMSS Service and SciML Service ideally are hot swappable.
+
+The API creates a job using the JobSchedulers.jl library and updates the Terarium Data Service (TDS) with the status
+of the job throughout its execution. Once the job completes, the results are written to S3. With most of the output artifacts, we do little postprocessing
+after completing the SciML portion.
diff --git a/examples/BIOMD0000000955_askenet.json b/examples/BIOMD0000000955_askenet.json
index a1b78f7..afa448f 100644
--- a/examples/BIOMD0000000955_askenet.json
+++ b/examples/BIOMD0000000955_askenet.json
@@ -1,693 +1,693 @@
{
- "name": "Giordano2020 - SIDARTHE model of COVID-19 spread in Italy",
- "schema": "https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/petrinet_v0.5/petrinet/petrinet_schema.json",
- "schema_name": "petrinet",
- "description": "Giordano2020 - SIDARTHE model of COVID-19 spread in Italy",
- "model_version": "0.1",
- "properties": {},
- "model": {
- "states": [
- {
- "id": "Susceptible",
- "name": "Susceptible",
- "grounding": {
- "identifiers": {
- "ido": "0000514"
- },
- "modifiers": {}
- },
- "units": {
- "expression": "1",
- "expression_mathml": "1"
- }
- },
- {
- "id": "Diagnosed",
- "name": "Diagnosed",
- "grounding": {
- "identifiers": {
- "ido": "0000511"
- },
- "modifiers": {
- "diagnosis": "ncit:C15220"
- }
- },
- "units": {
- "expression": "1",
- "expression_mathml": "1"
- }
- },
- {
- "id": "Infected",
- "name": "Infected",
- "grounding": {
- "identifiers": {
- "ido": "0000511"
- },
- "modifiers": {}
- },
- "units": {
- "expression": "1",
- "expression_mathml": "1"
- }
- },
- {
- "id": "Ailing",
- "name": "Ailing",
- "grounding": {
- "identifiers": {
- "ido": "0000511"
- },
- "modifiers": {
- "disease_severity": "ncit:C25269",
- "diagnosis": "ncit:C113725"
- }
- },
- "units": {
- "expression": "1",
- "expression_mathml": "1"
- }
- },
- {
- "id": "Recognized",
- "name": "Recognized",
- "grounding": {
- "identifiers": {
- "ido": "0000511"
- },
- "modifiers": {
- "diagnosis": "ncit:C15220"
- }
- },
- "units": {
- "expression": "1",
- "expression_mathml": "1"
- }
- },
- {
- "id": "Healed",
- "name": "Healed",
- "grounding": {
- "identifiers": {
- "ido": "0000592"
- },
- "modifiers": {}
- },
- "units": {
- "expression": "1",
- "expression_mathml": "1"
- }
- },
- {
- "id": "Threatened",
- "name": "Threatened",
- "grounding": {
- "identifiers": {
- "ido": "0000511"
- },
- "modifiers": {
- "disease_severity": "ncit:C25467"
- }
- },
- "units": {
- "expression": "1",
- "expression_mathml": "1"
- }
- },
- {
- "id": "Extinct",
- "name": "Extinct",
- "grounding": {
- "identifiers": {
- "ncit": "C28554"
- },
- "modifiers": {}
- },
- "units": {
- "expression": "1",
- "expression_mathml": "1"
- }
- }
- ],
- "transitions": [
- {
- "id": "t1",
- "input": [
- "Diagnosed",
- "Susceptible"
- ],
- "output": [
- "Diagnosed",
- "Infected"
- ],
- "properties": {
- "name": "t1"
- }
- },
- {
- "id": "t2",
- "input": [
- "Ailing",
- "Susceptible"
- ],
- "output": [
- "Ailing",
- "Infected"
- ],
- "properties": {
- "name": "t2"
- }
- },
- {
- "id": "t3",
- "input": [
- "Recognized",
- "Susceptible"
- ],
- "output": [
- "Recognized",
- "Infected"
- ],
- "properties": {
- "name": "t3"
- }
- },
- {
- "id": "t4",
- "input": [
- "Infected",
- "Susceptible"
- ],
- "output": [
- "Infected",
- "Infected"
- ],
- "properties": {
- "name": "t4"
- }
- },
- {
- "id": "t5",
- "input": [
- "Infected"
- ],
- "output": [
- "Diagnosed"
- ],
- "properties": {
- "name": "t5"
- }
- },
- {
- "id": "t6",
- "input": [
- "Infected"
- ],
- "output": [
- "Ailing"
- ],
- "properties": {
- "name": "t6"
- }
- },
- {
- "id": "t7",
- "input": [
- "Infected"
- ],
- "output": [
- "Healed"
- ],
- "properties": {
- "name": "t7"
- }
- },
- {
- "id": "t8",
- "input": [
- "Diagnosed"
- ],
- "output": [
- "Recognized"
- ],
- "properties": {
- "name": "t8"
- }
- },
- {
- "id": "t9",
- "input": [
- "Diagnosed"
- ],
- "output": [
- "Healed"
- ],
- "properties": {
- "name": "t9"
- }
- },
- {
- "id": "t10",
- "input": [
- "Ailing"
- ],
- "output": [
- "Recognized"
- ],
- "properties": {
- "name": "t10"
- }
- },
- {
- "id": "t11",
- "input": [
- "Ailing"
- ],
- "output": [
- "Healed"
- ],
- "properties": {
- "name": "t11"
- }
- },
- {
- "id": "t12",
- "input": [
- "Ailing"
- ],
- "output": [
- "Threatened"
- ],
- "properties": {
- "name": "t12"
- }
- },
- {
- "id": "t13",
- "input": [
- "Recognized"
- ],
- "output": [
- "Threatened"
- ],
- "properties": {
- "name": "t13"
- }
- },
- {
- "id": "t14",
- "input": [
- "Recognized"
- ],
- "output": [
- "Healed"
- ],
- "properties": {
- "name": "t14"
- }
- },
- {
- "id": "t15",
- "input": [
- "Threatened"
- ],
- "output": [
- "Extinct"
- ],
- "properties": {
- "name": "t15"
- }
- },
- {
- "id": "t16",
- "input": [
- "Threatened"
- ],
- "output": [
- "Healed"
- ],
- "properties": {
- "name": "t16"
- }
- }
- ]
- },
- "semantics": {
- "ode": {
- "rates": [
- {
- "target": "t1",
- "expression": "Diagnosed*Susceptible*beta",
- "expression_mathml": "DiagnosedSusceptiblebeta"
- },
- {
- "target": "t2",
- "expression": "Ailing*Susceptible*gamma",
- "expression_mathml": "AilingSusceptiblegamma"
- },
- {
- "target": "t3",
- "expression": "Recognized*Susceptible*delta",
- "expression_mathml": "RecognizedSusceptibledelta"
- },
- {
- "target": "t4",
- "expression": "Infected*Susceptible*alpha",
- "expression_mathml": "InfectedSusceptiblealpha"
- },
- {
- "target": "t5",
- "expression": "Infected*epsilon",
- "expression_mathml": "Infectedepsilon"
- },
- {
- "target": "t6",
- "expression": "Infected*zeta",
- "expression_mathml": "Infectedzeta"
- },
- {
- "target": "t7",
- "expression": "Infected*lambda",
- "expression_mathml": "Infectedlambda"
- },
- {
- "target": "t8",
- "expression": "Diagnosed*eta",
- "expression_mathml": "Diagnosedeta"
- },
- {
- "target": "t9",
- "expression": "Diagnosed*rho",
- "expression_mathml": "Diagnosedrho"
- },
- {
- "target": "t10",
- "expression": "Ailing*theta",
- "expression_mathml": "Ailingtheta"
- },
- {
- "target": "t11",
- "expression": "Ailing*kappa",
- "expression_mathml": "Ailingkappa"
- },
- {
- "target": "t12",
- "expression": "Ailing*mu",
- "expression_mathml": "Ailingmu"
- },
- {
- "target": "t13",
- "expression": "Recognized*nu",
- "expression_mathml": "Recognizednu"
- },
- {
- "target": "t14",
- "expression": "Recognized*xi",
- "expression_mathml": "Recognizedxi"
- },
- {
- "target": "t15",
- "expression": "Threatened*tau",
- "expression_mathml": "Threatenedtau"
- },
- {
- "target": "t16",
- "expression": "Threatened*sigma",
- "expression_mathml": "Threatenedsigma"
- }
- ],
- "initials": [
- {
- "target": "Susceptible",
- "expression": "0.999996300000000",
- "expression_mathml": "0.99999629999999995"
- },
- {
- "target": "Diagnosed",
- "expression": "3.33333333000000e-7",
- "expression_mathml": "3.33333333e-7"
- },
- {
- "target": "Infected",
- "expression": "3.33333333000000e-6",
- "expression_mathml": "3.3333333299999999e-6"
- },
- {
- "target": "Ailing",
- "expression": "1.66666666000000e-8",
- "expression_mathml": "1.6666666599999999e-8"
- },
- {
- "target": "Recognized",
- "expression": "3.33333333000000e-8",
- "expression_mathml": "3.33333333e-8"
- },
- {
- "target": "Healed",
- "expression": "0.0",
- "expression_mathml": "0.0"
- },
- {
- "target": "Threatened",
- "expression": "0.0",
- "expression_mathml": "0.0"
- },
- {
- "target": "Extinct",
- "expression": "0.0",
- "expression_mathml": "0.0"
- }
- ],
- "parameters": [
- {
- "id": "beta",
- "value": 0.011,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.008799999999999999,
- "maximum": 0.0132
+ "name": "Giordano2020 - SIDARTHE model of COVID-19 spread in Italy",
+ "schema": "https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/petrinet_v0.5/petrinet/petrinet_schema.json",
+ "schema_name": "petrinet",
+ "description": "Giordano2020 - SIDARTHE model of COVID-19 spread in Italy",
+ "model_version": "0.1",
+ "properties": {},
+ "model": {
+ "states": [
+ {
+ "id": "Susceptible",
+ "name": "Susceptible",
+ "grounding": {
+ "identifiers": {
+ "ido": "0000514"
+ },
+ "modifiers": {}
+ },
+ "units": {
+ "expression": "1",
+ "expression_mathml": "1"
+ }
+ },
+ {
+ "id": "Diagnosed",
+ "name": "Diagnosed",
+ "grounding": {
+ "identifiers": {
+ "ido": "0000511"
+ },
+ "modifiers": {
+ "diagnosis": "ncit:C15220"
+ }
+ },
+ "units": {
+ "expression": "1",
+ "expression_mathml": "1"
+ }
+ },
+ {
+ "id": "Infected",
+ "name": "Infected",
+ "grounding": {
+ "identifiers": {
+ "ido": "0000511"
+ },
+ "modifiers": {}
+ },
+ "units": {
+ "expression": "1",
+ "expression_mathml": "1"
+ }
+ },
+ {
+ "id": "Ailing",
+ "name": "Ailing",
+ "grounding": {
+ "identifiers": {
+ "ido": "0000511"
+ },
+ "modifiers": {
+ "disease_severity": "ncit:C25269",
+ "diagnosis": "ncit:C113725"
+ }
+ },
+ "units": {
+ "expression": "1",
+ "expression_mathml": "1"
+ }
+ },
+ {
+ "id": "Recognized",
+ "name": "Recognized",
+ "grounding": {
+ "identifiers": {
+ "ido": "0000511"
+ },
+ "modifiers": {
+ "diagnosis": "ncit:C15220"
+ }
+ },
+ "units": {
+ "expression": "1",
+ "expression_mathml": "1"
+ }
+ },
+ {
+ "id": "Healed",
+ "name": "Healed",
+ "grounding": {
+ "identifiers": {
+ "ido": "0000592"
+ },
+ "modifiers": {}
+ },
+ "units": {
+ "expression": "1",
+ "expression_mathml": "1"
+ }
+ },
+ {
+ "id": "Threatened",
+ "name": "Threatened",
+ "grounding": {
+ "identifiers": {
+ "ido": "0000511"
+ },
+ "modifiers": {
+ "disease_severity": "ncit:C25467"
+ }
+ },
+ "units": {
+ "expression": "1",
+ "expression_mathml": "1"
+ }
+ },
+ {
+ "id": "Extinct",
+ "name": "Extinct",
+ "grounding": {
+ "identifiers": {
+ "ncit": "C28554"
+ },
+ "modifiers": {}
+ },
+ "units": {
+ "expression": "1",
+ "expression_mathml": "1"
+ }
}
- }
- },
- {
- "id": "gamma",
- "value": 0.456,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.3648,
- "maximum": 0.5472
+ ],
+ "transitions": [
+ {
+ "id": "t1",
+ "input": [
+ "Diagnosed",
+ "Susceptible"
+ ],
+ "output": [
+ "Diagnosed",
+ "Infected"
+ ],
+ "properties": {
+ "name": "t1"
+ }
+ },
+ {
+ "id": "t2",
+ "input": [
+ "Ailing",
+ "Susceptible"
+ ],
+ "output": [
+ "Ailing",
+ "Infected"
+ ],
+ "properties": {
+ "name": "t2"
+ }
+ },
+ {
+ "id": "t3",
+ "input": [
+ "Recognized",
+ "Susceptible"
+ ],
+ "output": [
+ "Recognized",
+ "Infected"
+ ],
+ "properties": {
+ "name": "t3"
+ }
+ },
+ {
+ "id": "t4",
+ "input": [
+ "Infected",
+ "Susceptible"
+ ],
+ "output": [
+ "Infected",
+ "Infected"
+ ],
+ "properties": {
+ "name": "t4"
+ }
+ },
+ {
+ "id": "t5",
+ "input": [
+ "Infected"
+ ],
+ "output": [
+ "Diagnosed"
+ ],
+ "properties": {
+ "name": "t5"
+ }
+ },
+ {
+ "id": "t6",
+ "input": [
+ "Infected"
+ ],
+ "output": [
+ "Ailing"
+ ],
+ "properties": {
+ "name": "t6"
+ }
+ },
+ {
+ "id": "t7",
+ "input": [
+ "Infected"
+ ],
+ "output": [
+ "Healed"
+ ],
+ "properties": {
+ "name": "t7"
+ }
+ },
+ {
+ "id": "t8",
+ "input": [
+ "Diagnosed"
+ ],
+ "output": [
+ "Recognized"
+ ],
+ "properties": {
+ "name": "t8"
+ }
+ },
+ {
+ "id": "t9",
+ "input": [
+ "Diagnosed"
+ ],
+ "output": [
+ "Healed"
+ ],
+ "properties": {
+ "name": "t9"
+ }
+ },
+ {
+ "id": "t10",
+ "input": [
+ "Ailing"
+ ],
+ "output": [
+ "Recognized"
+ ],
+ "properties": {
+ "name": "t10"
+ }
+ },
+ {
+ "id": "t11",
+ "input": [
+ "Ailing"
+ ],
+ "output": [
+ "Healed"
+ ],
+ "properties": {
+ "name": "t11"
+ }
+ },
+ {
+ "id": "t12",
+ "input": [
+ "Ailing"
+ ],
+ "output": [
+ "Threatened"
+ ],
+ "properties": {
+ "name": "t12"
+ }
+ },
+ {
+ "id": "t13",
+ "input": [
+ "Recognized"
+ ],
+ "output": [
+ "Threatened"
+ ],
+ "properties": {
+ "name": "t13"
+ }
+ },
+ {
+ "id": "t14",
+ "input": [
+ "Recognized"
+ ],
+ "output": [
+ "Healed"
+ ],
+ "properties": {
+ "name": "t14"
+ }
+ },
+ {
+ "id": "t15",
+ "input": [
+ "Threatened"
+ ],
+ "output": [
+ "Extinct"
+ ],
+ "properties": {
+ "name": "t15"
+ }
+ },
+ {
+ "id": "t16",
+ "input": [
+ "Threatened"
+ ],
+ "output": [
+ "Healed"
+ ],
+ "properties": {
+ "name": "t16"
+ }
}
- }
- },
- {
- "id": "delta",
- "value": 0.011,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.008799999999999999,
- "maximum": 0.0132
+ ]
+ },
+ "semantics": {
+ "ode": {
+ "rates": [
+ {
+ "target": "t1",
+ "expression": "Diagnosed*Susceptible*beta",
+ "expression_mathml": "DiagnosedSusceptiblebeta"
+ },
+ {
+ "target": "t2",
+ "expression": "Ailing*Susceptible*gamma",
+ "expression_mathml": "AilingSusceptiblegamma"
+ },
+ {
+ "target": "t3",
+ "expression": "Recognized*Susceptible*delta",
+ "expression_mathml": "RecognizedSusceptibledelta"
+ },
+ {
+ "target": "t4",
+ "expression": "Infected*Susceptible*alpha",
+ "expression_mathml": "InfectedSusceptiblealpha"
+ },
+ {
+ "target": "t5",
+ "expression": "Infected*epsilon",
+ "expression_mathml": "Infectedepsilon"
+ },
+ {
+ "target": "t6",
+ "expression": "Infected*zeta",
+ "expression_mathml": "Infectedzeta"
+ },
+ {
+ "target": "t7",
+ "expression": "Infected*lambda",
+ "expression_mathml": "Infectedlambda"
+ },
+ {
+ "target": "t8",
+ "expression": "Diagnosed*eta",
+ "expression_mathml": "Diagnosedeta"
+ },
+ {
+ "target": "t9",
+ "expression": "Diagnosed*rho",
+ "expression_mathml": "Diagnosedrho"
+ },
+ {
+ "target": "t10",
+ "expression": "Ailing*theta",
+ "expression_mathml": "Ailingtheta"
+ },
+ {
+ "target": "t11",
+ "expression": "Ailing*kappa",
+ "expression_mathml": "Ailingkappa"
+ },
+ {
+ "target": "t12",
+ "expression": "Ailing*mu",
+ "expression_mathml": "Ailingmu"
+ },
+ {
+ "target": "t13",
+ "expression": "Recognized*nu",
+ "expression_mathml": "Recognizednu"
+ },
+ {
+ "target": "t14",
+ "expression": "Recognized*xi",
+ "expression_mathml": "Recognizedxi"
+ },
+ {
+ "target": "t15",
+ "expression": "Threatened*tau",
+ "expression_mathml": "Threatenedtau"
+ },
+ {
+ "target": "t16",
+ "expression": "Threatened*sigma",
+ "expression_mathml": "Threatenedsigma"
+ }
+ ],
+ "initials": [
+ {
+ "target": "Susceptible",
+ "expression": "0.999996300000000",
+ "expression_mathml": "0.99999629999999995"
+ },
+ {
+ "target": "Diagnosed",
+ "expression": "3.33333333000000e-7",
+ "expression_mathml": "3.33333333e-7"
+ },
+ {
+ "target": "Infected",
+ "expression": "3.33333333000000e-6",
+ "expression_mathml": "3.3333333299999999e-6"
+ },
+ {
+ "target": "Ailing",
+ "expression": "1.66666666000000e-8",
+ "expression_mathml": "1.6666666599999999e-8"
+ },
+ {
+ "target": "Recognized",
+ "expression": "3.33333333000000e-8",
+ "expression_mathml": "3.33333333e-8"
+ },
+ {
+ "target": "Healed",
+ "expression": "0.0",
+ "expression_mathml": "0.0"
+ },
+ {
+ "target": "Threatened",
+ "expression": "0.0",
+ "expression_mathml": "0.0"
+ },
+ {
+ "target": "Extinct",
+ "expression": "0.0",
+ "expression_mathml": "0.0"
+ }
+ ],
+ "parameters": [
+ {
+ "id": "beta",
+ "value": 0.011,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.008799999999999999,
+ "maximum": 0.0132
+ }
+ }
+ },
+ {
+ "id": "gamma",
+ "value": 0.456,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.3648,
+ "maximum": 0.5472
+ }
+ }
+ },
+ {
+ "id": "delta",
+ "value": 0.011,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.008799999999999999,
+ "maximum": 0.0132
+ }
+ }
+ },
+ {
+ "id": "alpha",
+ "value": 0.57,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.45599999999999996,
+ "maximum": 0.6839999999999999
+ }
+ }
+ },
+ {
+ "id": "epsilon",
+ "value": 0.171,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.1368,
+ "maximum": 0.20520000000000002
+ }
+ }
+ },
+ {
+ "id": "zeta",
+ "value": 0.125,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.1,
+ "maximum": 0.15
+ }
+ }
+ },
+ {
+ "id": "lambda",
+ "value": 0.034,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.027200000000000002,
+ "maximum": 0.0408
+ }
+ }
+ },
+ {
+ "id": "eta",
+ "value": 0.125,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.1,
+ "maximum": 0.15
+ }
+ }
+ },
+ {
+ "id": "rho",
+ "value": 0.034,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.027200000000000002,
+ "maximum": 0.0408
+ }
+ }
+ },
+ {
+ "id": "theta",
+ "value": 0.371,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.2968,
+ "maximum": 0.4452
+ }
+ }
+ },
+ {
+ "id": "kappa",
+ "value": 0.017,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.013600000000000001,
+ "maximum": 0.0204
+ }
+ }
+ },
+ {
+ "id": "mu",
+ "value": 0.017,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.013600000000000001,
+ "maximum": 0.0204
+ }
+ }
+ },
+ {
+ "id": "nu",
+ "value": 0.027,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.0216,
+ "maximum": 0.0324
+ }
+ }
+ },
+ {
+ "id": "xi",
+ "value": 0.017,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.013600000000000001,
+ "maximum": 0.0204
+ }
+ }
+ },
+ {
+ "id": "tau",
+ "value": 0.01,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.008,
+ "maximum": 0.012
+ }
+ }
+ },
+ {
+ "id": "sigma",
+ "value": 0.017,
+ "distribution": {
+ "type": "StandardUniform1",
+ "parameters": {
+ "minimum": 0.013600000000000001,
+ "maximum": 0.0204
+ }
+ }
+ }
+ ],
+ "observables": [
+ {
+ "id": "Cases",
+ "name": "Cases",
+ "expression": "Diagnosed + Recognized + Threatened",
+ "expression_mathml": "DiagnosedRecognizedThreatened"
+ },
+ {
+ "id": "Hospitalizations",
+ "name": "Hospitalizations",
+ "expression": "Recognized + Threatened",
+ "expression_mathml": "RecognizedThreatened"
+ },
+ {
+ "id": "Deaths",
+ "name": "Deaths",
+ "expression": "Extinct",
+ "expression_mathml": "Extinct"
+ }
+ ],
+ "time": {
+ "id": "t",
+ "units": {
+ "expression": "day",
+ "expression_mathml": "day"
+ }
}
}
},
- {
- "id": "alpha",
- "value": 0.57,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.45599999999999996,
- "maximum": 0.6839999999999999
- }
+ "metadata": {
+ "annotations": {
+ "license": "CC0",
+ "authors": [],
+ "references": [
+ "pubmed:32322102"
+ ],
+ "time_scale": null,
+ "time_start": null,
+ "time_end": null,
+ "locations": [],
+ "pathogens": [
+ "ncbitaxon:2697049"
+ ],
+ "diseases": [
+ "doid:0080600"
+ ],
+ "hosts": [
+ "ncbitaxon:9606"
+ ],
+ "model_types": [
+ "mamo:0000028"
+ ]
}
- },
- {
- "id": "epsilon",
- "value": 0.171,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.1368,
- "maximum": 0.20520000000000002
- }
- }
- },
- {
- "id": "zeta",
- "value": 0.125,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.1,
- "maximum": 0.15
- }
- }
- },
- {
- "id": "lambda",
- "value": 0.034,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.027200000000000002,
- "maximum": 0.0408
- }
- }
- },
- {
- "id": "eta",
- "value": 0.125,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.1,
- "maximum": 0.15
- }
- }
- },
- {
- "id": "rho",
- "value": 0.034,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.027200000000000002,
- "maximum": 0.0408
- }
- }
- },
- {
- "id": "theta",
- "value": 0.371,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.2968,
- "maximum": 0.4452
- }
- }
- },
- {
- "id": "kappa",
- "value": 0.017,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.013600000000000001,
- "maximum": 0.0204
- }
- }
- },
- {
- "id": "mu",
- "value": 0.017,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.013600000000000001,
- "maximum": 0.0204
- }
- }
- },
- {
- "id": "nu",
- "value": 0.027,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.0216,
- "maximum": 0.0324
- }
- }
- },
- {
- "id": "xi",
- "value": 0.017,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.013600000000000001,
- "maximum": 0.0204
- }
- }
- },
- {
- "id": "tau",
- "value": 0.01,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.008,
- "maximum": 0.012
- }
- }
- },
- {
- "id": "sigma",
- "value": 0.017,
- "distribution": {
- "type": "StandardUniform1",
- "parameters": {
- "minimum": 0.013600000000000001,
- "maximum": 0.0204
- }
- }
- }
- ],
- "observables": [
- {
- "id": "Cases",
- "name": "Cases",
- "expression": "Diagnosed + Recognized + Threatened",
- "expression_mathml": "DiagnosedRecognizedThreatened"
- },
- {
- "id": "Hospitalizations",
- "name": "Hospitalizations",
- "expression": "Recognized + Threatened",
- "expression_mathml": "RecognizedThreatened"
- },
- {
- "id": "Deaths",
- "name": "Deaths",
- "expression": "Extinct",
- "expression_mathml": "Extinct"
- }
- ],
- "time": {
- "id": "t",
- "units": {
- "expression": "day",
- "expression_mathml": "day"
}
}
- }
- },
- "metadata": {
- "annotations": {
- "license": "CC0",
- "authors": [],
- "references": [
- "pubmed:32322102"
- ],
- "time_scale": null,
- "time_start": null,
- "time_end": null,
- "locations": [],
- "pathogens": [
- "ncbitaxon:2697049"
- ],
- "diseases": [
- "doid:0080600"
- ],
- "hosts": [
- "ncbitaxon:9606"
- ],
- "model_types": [
- "mamo:0000028"
- ]
- }
- }
-}
\ No newline at end of file
diff --git a/examples/dataset.csv b/examples/dataset.csv
deleted file mode 100644
index d8818ec..0000000
--- a/examples/dataset.csv
+++ /dev/null
@@ -1,92 +0,0 @@
-timestep,S,E,I,R,D
-0.0,0.49457800495224524,0.26745259325403603,0.4497387877393193,0.32807705995998604,0.8545934885162726
-1.0,0.4665022246157727,0.15226661609143755,0.282128632173281,0.5819467770808255,0.9115956844605425
-2.0,0.44995568708559147,0.0870753734907285,0.17176626841178605,0.7388229924583731,0.9468196129753799
-3.0,0.4402579969265885,0.049958082609506564,0.10268280170774824,0.8334700316632883,0.9680710215147275
-4.0,0.4345928780439725,0.02873264900876653,0.060681564306912315,0.8897296629609703,0.9807031801012375
-5.0,0.43129133897514976,0.016554961390151432,0.03559634907740039,0.9228561146017267,0.9881411703774309
-6.0,0.42937079614049717,0.00955084027561801,0.020781137104605475,0.9422429917414922,0.9924941691596463
-7.0,0.42825523174624236,0.005515226366193871,0.012094002808321005,0.9535438792052197,0.9950315942958823
-8.0,0.42760803965578864,0.003187203614737658,0.007024405738798128,0.9601135757214116,0.996506709691123
-9.0,0.42723286848143166,0.0018428391922203655,0.004074861364167079,0.9639265223459347,0.9973628430381053
-10.0,0.42701542110237617,0.001065625665672367,0.002361473964384682,0.966138016624911,0.997859397064515
-11.0,0.42688949053651354,0.0006163374574758091,0.0013677486708266896,0.9674192754645957,0.9981470822924473
-12.0,0.4268166164339979,0.0003566562089632792,0.0007921677242322537,0.968160893781643,0.9983136002730226
-13.0,0.426774399020502,0.00020632531989352596,0.0004585439285171233,0.9685905857420082,0.9984100804109383
-14.0,0.4267499641987114,0.00011936317441910912,0.00026537658614250037,0.9688393044325163,0.9984659260300698
-15.0,0.4267358390828414,6.911064486184507e-5,0.00015368573473018547,0.9689830886008763,0.9984982103585492
-16.0,0.42672764295323584,3.995637251879534e-5,8.886936321230337e-5,0.9690665218374893,0.9985169438954028
-17.0,0.42672291793839023,2.315252702782855e-5,5.149885891478391e-5,0.969114621277837,0.9985277438196892
-18.0,0.42672016837248206,1.3374421742842271e-5,2.975169371631378e-5,0.9691426114006284,0.9985340285332894
-19.0,0.4267185903383033,7.76324275234401e-6,1.72697551963783e-5,0.96915867560426,0.9985376354813472
-20.0,0.42671766524571453,4.473700806675521e-6,9.952514996761569e-6,0.9691680929676613,0.9985397499926799
-21.0,0.4267171396866097,2.605039389810057e-6,5.795292710617236e-6,0.9691734431227009,0.9985409512804482
-22.0,0.4267168292213564,1.5011076626621485e-6,3.339530654332321e-6,0.9691766036403886,0.9985416609217972
-23.0,0.4267166503308677,8.650367137104304e-7,1.9244997328791993e-6,0.9691784247361698,0.998542069818375
-24.0,0.4267165513975358,5.133018515249044e-7,1.1418963787668045e-6,0.9691794318721828,0.9985422959539103
-25.0,0.42671648849345345,2.8961248029392266e-7,6.443470300592253e-7,0.9691800722327397,0.9985424397361555
-26.0,0.4267164534150905,1.6488872179188643e-7,3.668730947050761e-7,0.9691804293288433,0.9985425199161089
-27.0,0.4267164363527159,1.0425224374051472e-7,2.3187776609803832e-7,0.9691806030229255,0.9985425589162079
-28.0,0.4267164237650669,5.94635822904114e-8,1.323403435661362e-7,0.969180731164592,0.9985425876882744
-29.0,0.42671641532016785,2.938997840309349e-8,6.558731960133238e-8,0.9691808171332872,0.9985426069911061
-30.0,0.4267164119320277,1.7383990307292018e-8,3.8745941399490847e-8,0.9691808516243932,0.9985426147355065
-31.0,0.42671641142993344,1.567980166379535e-8,3.4693296446806386e-8,0.9691808567356694,0.9985426158831582
-32.0,0.4267164097239014,9.397997811086657e-9,2.141426794359566e-8,0.9691808741029923,0.9985426197826998
-33.0,0.4267164077513253,1.6630451169718799e-9,6.5322673177872115e-9,0.9691808941837284,0.998542624291493
-34.0,0.4267164068327058,-1.7144298561756136e-9,-6.228678598180968e-10,0.969180903535234,0.998542626391217
-35.0,0.42671640713709813,1.995841690399913e-10,9.531889471946351e-10,0.9691809004365325,0.9985426256954555
-36.0,0.4267164080167858,4.441082888563269e-9,6.797923212261653e-9,0.9691808914813484,0.9985426236847188
-37.0,0.42671640835547514,3.2138485814499743e-9,1.190846777114169e-8,0.9691808880335046,0.9985426229105632
-38.0,0.42671641412844163,-2.6272280610911653e-8,1.0758565137248983e-7,0.9691808292649736,0.9985426097150731
-39.0,0.42671642043471775,-5.7124386784960156e-8,2.107435751597396e-7,0.9691807650673759,0.9985425953005771
-40.0,0.42671642069465143,-6.101555879931584e-8,2.1761506634755097e-7,0.9691807624212634,0.9985425947064368
-41.0,0.42671641308224717,-2.98748098503364e-8,9.919283597417899e-8,0.9691808399151859,0.9985426121064
-42.0,0.42671640052516574,2.41129225278762e-8,-9.87705210985136e-8,0.9691809677456914,0.9985426408086006
-43.0,0.4267163907047244,6.850677646347266e-8,-2.557625261850519e-7,0.9691810677173265,0.998542663255558
-44.0,0.42671639824152524,4.377942441187322e-8,-1.4462071904623285e-7,0.9691809909931911,0.9985426460284376
-45.0,0.4267165177761834,-3.5045943998565953e-7,1.6201571649468285e-6,0.9691797741428834,0.9985423728050674
-46.0,0.426716582914649,-5.657635155369028e-7,2.5823127375500367e-6,0.9691791110412861,0.9985422239167021
-47.0,0.426716469373307,-1.9999268662048253e-7,9.147186185214705e-7,0.9691802668813723,0.9985424834412481
-48.0,0.4267162674880653,4.53529758154388e-7,-2.0535417063955472e-6,0.9691823220506339,0.9985429448951083
-49.0,0.42671627788979505,4.201179072135318e-7,-1.900860288767501e-6,0.9691822161561675,0.9985429211182781
-50.0,0.42671649186340843,-2.7150027993614184e-7,1.2440747380756681e-6,0.9691800379462864,0.9985424320377062
-51.0,0.4267164371442758,-9.590264835717333e-8,4.410989446171615e-7,0.9691805949726369,0.9985425571086503
-52.0,0.42671627454943717,4.2799006477805363e-7,-1.9470013902130833e-6,0.9691822501358911,0.9985429287478564
-53.0,0.4267164118674504,-1.515429881156514e-8,7.058019617525471e-8,0.9691808522520705,0.998542614876441
-54.0,0.4267164314292611,-7.842218520117033e-8,3.5813674655576225e-7,0.9691806531145852,0.9985425701634516
-55.0,0.4267163402967335,2.1536057882219336e-7,-9.805249063054177e-7,0.9691815808243099,0.9985427784651432
-56.0,0.4267164064309929,2.026849024044358e-9,-8.917426690141202e-9,0.969180907581668,0.998542627299776
-57.0,0.4267164283592435,-6.872496312372469e-8,3.1325564224967763e-7,0.969180684354161,0.9985425771777755
-58.0,0.4267163726304823,1.1096730955813961e-7,-5.053996636778452e-7,0.9691812516656547,0.9985427045580763
-59.0,0.4267164022669418,1.5383256861379745e-8,-7.001281739503044e-8,0.9691809499676411,0.9985426368168369
-60.0,0.4267164303322644,-7.51289506815351e-8,3.42286373147847e-7,0.9691806642650668,0.9985425726671056
-61.0,0.42671639252407795,4.678946740843496e-8,-2.1312670437383657e-7,0.9691810491487283,0.9985426590862899
-62.0,0.4267163906803671,5.2732295751289435e-8,-2.40207629435881e-7,0.9691810679165382,0.9985426633002876
-63.0,0.42671643093445266,-7.707951798376247e-8,3.51143486333012e-7,0.9691806581331516,0.9985425712902867
-64.0,0.4267164128814658,-1.8863795872089294e-8,8.593863522149074e-8,0.9691808419110224,0.9985426125545317
-65.0,0.42671637686662756,9.727501741359907e-8,-4.4313284520207667e-7,0.9691812085384706,0.9985426948745889
-66.0,0.4267164200453857,-4.196688650706194e-8,1.9118201954589875e-7,0.9691807689818369,0.9985425961795036
-67.0,0.42671643358050243,-8.561468651784963e-8,3.900185546253598e-7,0.9691806311955823,0.9985425652419063
-68.0,0.4267163868830551,6.497344448890763e-8,-2.9598552756642434e-7,0.9691811065713162,0.9985426719795709
-69.0,0.4267163912524428,5.0882866998259076e-8,-2.317959767734765e-7,0.9691810620904003,0.9985426619921258
-70.0,0.42671644043115114,-1.0770701760595323e-7,4.906592850593068e-7,0.969180561455502,0.9985425495829385
-71.0,0.4267164167376279,-3.130102261908867e-8,1.425919497941743e-7,0.9691808026534119,0.9985426037398922
-72.0,0.4267163669919889,1.291167181759515e-7,-5.881901500074731e-7,0.9691813090586004,0.9985427174447016
-73.0,0.4267164200016294,-4.1827178724749095e-8,1.9054393033467677e-7,0.9691807694245668,0.9985425962789112
-74.0,0.42671644240995465,-1.1408876512607039e-7,5.19730932389067e-7,0.9691805413101093,0.9985425450596278
-75.0,0.4267163840322124,7.416555460008109e-8,-3.3786040346975136e-7,0.9691811355893997,0.9985426784950959
-76.0,0.42671638308439874,7.72215823075342e-8,-3.5178174842226147e-7,0.9691811452364474,0.998542680661179
-77.0,0.42671644336728115,-1.1717662911843815e-7,5.337977747629874e-7,0.969180531562473,0.9985425428709592
-78.0,0.42671641776404695,-3.461230115131663e-8,1.5767640473892867e-7,0.9691807922007798,0.9985426013929286
-79.0,0.4267163612928776,1.4749353363619526e-7,-6.719051144173975e-7,0.9691813670703036,0.9985427304702585
-80.0,0.4267164203694237,-4.3014784946728866e-8,1.9595428752147932e-7,0.9691807656757546,0.9985425954371782
-81.0,0.4267164406054988,-1.0827141116253247e-7,4.932300540646792e-7,0.9691805596746412,0.9985425491830761
-82.0,0.4267163787730171,9.112354076019481e-8,-4.151121391980163e-7,0.9691811891224043,0.9985426905150361
-83.0,0.42671638837990683,6.01430724791526e-8,-2.73980456025726e-7,0.9691810913234238,0.998542668555912
-84.0,0.4267164428101249,-1.1538169475281397e-7,5.256211091987005e-7,0.96918053722903,0.9985425441432898
-85.0,0.4267164096512028,-8.452095193740493e-9,3.85038789026454e-8,0.969180874783399,0.9985426199354737
-86.0,0.42671636500544596,1.3551953690584167e-7,-6.173575814057123e-7,0.9691813292713266,0.998542721983131
-87.0,0.42671642647384933,-6.270190499547489e-8,2.856388664368029e-7,0.9691807035280883,0.9985425814829599
-88.0,0.4267164339544428,-8.682512094420266e-8,3.9553170304887336e-7,0.96918062737645,0.998542564384384
-89.0,0.4267163734271133,1.083610174179625e-7,-4.936373932413709e-7,0.9691812435379789,0.9985427027331426
-90.0,0.42671638393595407,7.447198602603216e-8,-3.392558129647435e-7,0.9691811365573083,0.9985426787124235
diff --git a/examples/request-calibrate-no-integration.json b/examples/request-calibrate-no-integration.json
index 6552202..1cb9b4a 100644
--- a/examples/request-calibrate-no-integration.json
+++ b/examples/request-calibrate-no-integration.json
@@ -1,8 +1,8 @@
{
- "model": "{\"name\": \"Giordano2020 - SIDARTHE model of COVID-19 spread in Italy\",\"schema\": \"https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/petrinet_v0.5/petrinet/petrinet_schema.json\",\"schema_name\": \"petrinet\",\"description\": \"Giordano2020 - SIDARTHE model of COVID-19 spread in Italy\",\"model_version\": \"0.1\",\"properties\": {},\"model\": { \"states\": [ { \"id\": \"Susceptible\", \"name\": \"Susceptible\", \"grounding\": { \"identifiers\": { \"ido\": \"0000514\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Diagnosed\", \"name\": \"Diagnosed\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"diagnosis\": \"ncit:C15220\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Infected\", \"name\": \"Infected\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Ailing\", \"name\": \"Ailing\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"disease_severity\": \"ncit:C25269\", \"diagnosis\": \"ncit:C113725\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Recognized\", \"name\": \"Recognized\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"diagnosis\": \"ncit:C15220\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Healed\", \"name\": \"Healed\", \"grounding\": { \"identifiers\": { \"ido\": \"0000592\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Threatened\", \"name\": \"Threatened\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"disease_severity\": \"ncit:C25467\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Extinct\", \"name\": \"Extinct\", \"grounding\": { \"identifiers\": { \"ncit\": \"C28554\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } } ], \"transitions\": [ { \"id\": \"t1\", \"input\": [ \"Diagnosed\", \"Susceptible\" ], \"output\": [ \"Diagnosed\", \"Infected\" ], \"properties\": { \"name\": \"t1\" } }, { \"id\": \"t2\", \"input\": [ \"Ailing\", \"Susceptible\" ], \"output\": [ \"Ailing\", \"Infected\" ], \"properties\": { \"name\": \"t2\" } }, { \"id\": \"t3\", \"input\": [ \"Recognized\", \"Susceptible\" ], \"output\": [ \"Recognized\", \"Infected\" ], \"properties\": { \"name\": \"t3\" } }, { \"id\": \"t4\", \"input\": [ \"Infected\", \"Susceptible\" ], \"output\": [ \"Infected\", \"Infected\" ], \"properties\": { \"name\": \"t4\" } }, { \"id\": \"t5\", \"input\": [ \"Infected\" ], \"output\": [ \"Diagnosed\" ], \"properties\": { \"name\": \"t5\" } }, { \"id\": \"t6\", \"input\": [ \"Infected\" ], \"output\": [ \"Ailing\" ], \"properties\": { \"name\": \"t6\" } }, { \"id\": \"t7\", \"input\": [ \"Infected\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t7\" } }, { \"id\": \"t8\", \"input\": [ \"Diagnosed\" ], \"output\": [ \"Recognized\" ], \"properties\": { \"name\": \"t8\" } }, { \"id\": \"t9\", \"input\": [ \"Diagnosed\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t9\" } }, { \"id\": \"t10\", \"input\": [ \"Ailing\" ], \"output\": [ \"Recognized\" ], \"properties\": { \"name\": \"t10\" } }, { \"id\": \"t11\", \"input\": [ \"Ailing\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t11\" } }, { \"id\": \"t12\", \"input\": [ \"Ailing\" ], \"output\": [ \"Threatened\" ], \"properties\": { \"name\": \"t12\" } }, { \"id\": \"t13\", \"input\": [ \"Recognized\" ], \"output\": [ \"Threatened\" ], \"properties\": { \"name\": \"t13\" } }, { \"id\": \"t14\", \"input\": [ \"Recognized\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t14\" } }, { \"id\": \"t15\", \"input\": [ \"Threatened\" ], \"output\": [ \"Extinct\" ], \"properties\": { \"name\": \"t15\" } }, { \"id\": \"t16\", \"input\": [ \"Threatened\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t16\" } } ] }, \"semantics\": { \"ode\": { \"rates\": [ { \"target\": \"t1\", \"expression\": \"Diagnosed*Susceptible*beta\", \"expression_mathml\": \"DiagnosedSusceptiblebeta\" }, { \"target\": \"t2\", \"expression\": \"Ailing*Susceptible*gamma\", \"expression_mathml\": \"AilingSusceptiblegamma\" }, { \"target\": \"t3\", \"expression\": \"Recognized*Susceptible*delta\", \"expression_mathml\": \"RecognizedSusceptibledelta\" }, { \"target\": \"t4\", \"expression\": \"Infected*Susceptible*alpha\", \"expression_mathml\": \"InfectedSusceptiblealpha\" }, { \"target\": \"t5\", \"expression\": \"Infected*epsilon\", \"expression_mathml\": \"Infectedepsilon\" }, { \"target\": \"t6\", \"expression\": \"Infected*zeta\", \"expression_mathml\": \"Infectedzeta\" }, { \"target\": \"t7\", \"expression\": \"Infected*lambda\", \"expression_mathml\": \"Infectedlambda\" }, { \"target\": \"t8\", \"expression\": \"Diagnosed*eta\", \"expression_mathml\": \"Diagnosedeta\" }, { \"target\": \"t9\", \"expression\": \"Diagnosed*rho\", \"expression_mathml\": \"Diagnosedrho\" }, { \"target\": \"t10\", \"expression\": \"Ailing*theta\", \"expression_mathml\": \"Ailingtheta\" }, { \"target\": \"t11\", \"expression\": \"Ailing*kappa\", \"expression_mathml\": \"Ailingkappa\" }, { \"target\": \"t12\", \"expression\": \"Ailing*mu\", \"expression_mathml\": \"Ailingmu\" }, { \"target\": \"t13\", \"expression\": \"Recognized*nu\", \"expression_mathml\": \"Recognizednu\" }, { \"target\": \"t14\", \"expression\": \"Recognized*xi\", \"expression_mathml\": \"Recognizedxi\" }, { \"target\": \"t15\", \"expression\": \"Threatened*tau\", \"expression_mathml\": \"Threatenedtau\" }, { \"target\": \"t16\", \"expression\": \"Threatened*sigma\", \"expression_mathml\": \"Threatenedsigma\" } ], \"initials\": [ { \"target\": \"Susceptible\", \"expression\": \"0.999996300000000\", \"expression_mathml\": \"0.99999629999999995\" }, { \"target\": \"Diagnosed\", \"expression\": \"3.33333333000000e-7\", \"expression_mathml\": \"3.33333333e-7\" }, { \"target\": \"Infected\", \"expression\": \"3.33333333000000e-6\", \"expression_mathml\": \"3.3333333299999999e-6\" }, { \"target\": \"Ailing\", \"expression\": \"1.66666666000000e-8\", \"expression_mathml\": \"1.6666666599999999e-8\" }, { \"target\": \"Recognized\", \"expression\": \"3.33333333000000e-8\", \"expression_mathml\": \"3.33333333e-8\" }, { \"target\": \"Healed\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" }, { \"target\": \"Threatened\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" }, { \"target\": \"Extinct\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" } ], \"parameters\": [ { \"id\": \"beta\", \"value\": 0.011, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008799999999999999, \"maximum\": 0.0132 } } }, { \"id\": \"gamma\", \"value\": 0.456, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.3648, \"maximum\": 0.5472 } } }, { \"id\": \"delta\", \"value\": 0.011, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008799999999999999, \"maximum\": 0.0132 } } }, { \"id\": \"alpha\", \"value\": 0.57, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.45599999999999996, \"maximum\": 0.6839999999999999 } } }, { \"id\": \"epsilon\", \"value\": 0.171, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1368, \"maximum\": 0.20520000000000002 } } }, { \"id\": \"zeta\", \"value\": 0.125, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1, \"maximum\": 0.15 } } }, { \"id\": \"lambda\", \"value\": 0.034, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.027200000000000002, \"maximum\": 0.0408 } } }, { \"id\": \"eta\", \"value\": 0.125, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1, \"maximum\": 0.15 } } }, { \"id\": \"rho\", \"value\": 0.034, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.027200000000000002, \"maximum\": 0.0408 } } }, { \"id\": \"theta\", \"value\": 0.371, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.2968, \"maximum\": 0.4452 } } }, { \"id\": \"kappa\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"mu\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"nu\", \"value\": 0.027, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.0216, \"maximum\": 0.0324 } } }, { \"id\": \"xi\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"tau\", \"value\": 0.01, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008, \"maximum\": 0.012 } } }, { \"id\": \"sigma\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } } ], \"observables\": [ { \"id\": \"Cases\", \"name\": \"Cases\", \"expression\": \"Diagnosed + Recognized + Threatened\", \"expression_mathml\": \"DiagnosedRecognizedThreatened\" }, { \"id\": \"Hospitalizations\", \"name\": \"Hospitalizations\", \"expression\": \"Recognized + Threatened\", \"expression_mathml\": \"RecognizedThreatened\" }, { \"id\": \"Deaths\", \"name\": \"Deaths\", \"expression\": \"Extinct\", \"expression_mathml\": \"Extinct\" } ], \"time\": { \"id\": \"t\", \"units\": { \"expression\": \"day\", \"expression_mathml\": \"day\" } } } }, \"metadata\": { \"annotations\": { \"license\": \"CC0\", \"authors\": [], \"references\": [ \"pubmed:32322102\" ], \"time_scale\": null, \"time_start\": null, \"time_end\": null, \"locations\": [], \"pathogens\": [ \"ncbitaxon:2697049\" ], \"diseases\": [ \"doid:0080600\" ], \"hosts\": [ \"ncbitaxon:9606\" ], \"model_types\": [ \"mamo:0000028\" ] } }}",
- "dataset": {
- "id": "2ea2d39f-866f-46f6-beec-972ed2136ed5",
- "filename": "dataset.csv"
- },
- "timespan": {"start": 101, "end": 190}
-}
+ "model": "{\"name\": \"Giordano2020 - SIDARTHE model of COVID-19 spread in Italy\",\"schema\": \"https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/petrinet_v0.5/petrinet/petrinet_schema.json\",\"schema_name\": \"petrinet\",\"description\": \"Giordano2020 - SIDARTHE model of COVID-19 spread in Italy\",\"model_version\": \"0.1\",\"properties\": {},\"model\": { \"states\": [ { \"id\": \"Susceptible\", \"name\": \"Susceptible\", \"grounding\": { \"identifiers\": { \"ido\": \"0000514\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Diagnosed\", \"name\": \"Diagnosed\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"diagnosis\": \"ncit:C15220\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Infected\", \"name\": \"Infected\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Ailing\", \"name\": \"Ailing\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"disease_severity\": \"ncit:C25269\", \"diagnosis\": \"ncit:C113725\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Recognized\", \"name\": \"Recognized\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"diagnosis\": \"ncit:C15220\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Healed\", \"name\": \"Healed\", \"grounding\": { \"identifiers\": { \"ido\": \"0000592\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Threatened\", \"name\": \"Threatened\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"disease_severity\": \"ncit:C25467\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Extinct\", \"name\": \"Extinct\", \"grounding\": { \"identifiers\": { \"ncit\": \"C28554\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } } ], \"transitions\": [ { \"id\": \"t1\", \"input\": [ \"Diagnosed\", \"Susceptible\" ], \"output\": [ \"Diagnosed\", \"Infected\" ], \"properties\": { \"name\": \"t1\" } }, { \"id\": \"t2\", \"input\": [ \"Ailing\", \"Susceptible\" ], \"output\": [ \"Ailing\", \"Infected\" ], \"properties\": { \"name\": \"t2\" } }, { \"id\": \"t3\", \"input\": [ \"Recognized\", \"Susceptible\" ], \"output\": [ \"Recognized\", \"Infected\" ], \"properties\": { \"name\": \"t3\" } }, { \"id\": \"t4\", \"input\": [ \"Infected\", \"Susceptible\" ], \"output\": [ \"Infected\", \"Infected\" ], \"properties\": { \"name\": \"t4\" } }, { \"id\": \"t5\", \"input\": [ \"Infected\" ], \"output\": [ \"Diagnosed\" ], \"properties\": { \"name\": \"t5\" } }, { \"id\": \"t6\", \"input\": [ \"Infected\" ], \"output\": [ \"Ailing\" ], \"properties\": { \"name\": \"t6\" } }, { \"id\": \"t7\", \"input\": [ \"Infected\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t7\" } }, { \"id\": \"t8\", \"input\": [ \"Diagnosed\" ], \"output\": [ \"Recognized\" ], \"properties\": { \"name\": \"t8\" } }, { \"id\": \"t9\", \"input\": [ \"Diagnosed\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t9\" } }, { \"id\": \"t10\", \"input\": [ \"Ailing\" ], \"output\": [ \"Recognized\" ], \"properties\": { \"name\": \"t10\" } }, { \"id\": \"t11\", \"input\": [ \"Ailing\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t11\" } }, { \"id\": \"t12\", \"input\": [ \"Ailing\" ], \"output\": [ \"Threatened\" ], \"properties\": { \"name\": \"t12\" } }, { \"id\": \"t13\", \"input\": [ \"Recognized\" ], \"output\": [ \"Threatened\" ], \"properties\": { \"name\": \"t13\" } }, { \"id\": \"t14\", \"input\": [ \"Recognized\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t14\" } }, { \"id\": \"t15\", \"input\": [ \"Threatened\" ], \"output\": [ \"Extinct\" ], \"properties\": { \"name\": \"t15\" } }, { \"id\": \"t16\", \"input\": [ \"Threatened\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t16\" } } ] }, \"semantics\": { \"ode\": { \"rates\": [ { \"target\": \"t1\", \"expression\": \"Diagnosed*Susceptible*beta\", \"expression_mathml\": \"DiagnosedSusceptiblebeta\" }, { \"target\": \"t2\", \"expression\": \"Ailing*Susceptible*gamma\", \"expression_mathml\": \"AilingSusceptiblegamma\" }, { \"target\": \"t3\", \"expression\": \"Recognized*Susceptible*delta\", \"expression_mathml\": \"RecognizedSusceptibledelta\" }, { \"target\": \"t4\", \"expression\": \"Infected*Susceptible*alpha\", \"expression_mathml\": \"InfectedSusceptiblealpha\" }, { \"target\": \"t5\", \"expression\": \"Infected*epsilon\", \"expression_mathml\": \"Infectedepsilon\" }, { \"target\": \"t6\", \"expression\": \"Infected*zeta\", \"expression_mathml\": \"Infectedzeta\" }, { \"target\": \"t7\", \"expression\": \"Infected*lambda\", \"expression_mathml\": \"Infectedlambda\" }, { \"target\": \"t8\", \"expression\": \"Diagnosed*eta\", \"expression_mathml\": \"Diagnosedeta\" }, { \"target\": \"t9\", \"expression\": \"Diagnosed*rho\", \"expression_mathml\": \"Diagnosedrho\" }, { \"target\": \"t10\", \"expression\": \"Ailing*theta\", \"expression_mathml\": \"Ailingtheta\" }, { \"target\": \"t11\", \"expression\": \"Ailing*kappa\", \"expression_mathml\": \"Ailingkappa\" }, { \"target\": \"t12\", \"expression\": \"Ailing*mu\", \"expression_mathml\": \"Ailingmu\" }, { \"target\": \"t13\", \"expression\": \"Recognized*nu\", \"expression_mathml\": \"Recognizednu\" }, { \"target\": \"t14\", \"expression\": \"Recognized*xi\", \"expression_mathml\": \"Recognizedxi\" }, { \"target\": \"t15\", \"expression\": \"Threatened*tau\", \"expression_mathml\": \"Threatenedtau\" }, { \"target\": \"t16\", \"expression\": \"Threatened*sigma\", \"expression_mathml\": \"Threatenedsigma\" } ], \"initials\": [ { \"target\": \"Susceptible\", \"expression\": \"0.999996300000000\", \"expression_mathml\": \"0.99999629999999995\" }, { \"target\": \"Diagnosed\", \"expression\": \"3.33333333000000e-7\", \"expression_mathml\": \"3.33333333e-7\" }, { \"target\": \"Infected\", \"expression\": \"3.33333333000000e-6\", \"expression_mathml\": \"3.3333333299999999e-6\" }, { \"target\": \"Ailing\", \"expression\": \"1.66666666000000e-8\", \"expression_mathml\": \"1.6666666599999999e-8\" }, { \"target\": \"Recognized\", \"expression\": \"3.33333333000000e-8\", \"expression_mathml\": \"3.33333333e-8\" }, { \"target\": \"Healed\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" }, { \"target\": \"Threatened\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" }, { \"target\": \"Extinct\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" } ], \"parameters\": [ { \"id\": \"beta\", \"value\": 0.011, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008799999999999999, \"maximum\": 0.0132 } } }, { \"id\": \"gamma\", \"value\": 0.456, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.3648, \"maximum\": 0.5472 } } }, { \"id\": \"delta\", \"value\": 0.011, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008799999999999999, \"maximum\": 0.0132 } } }, { \"id\": \"alpha\", \"value\": 0.57, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.45599999999999996, \"maximum\": 0.6839999999999999 } } }, { \"id\": \"epsilon\", \"value\": 0.171, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1368, \"maximum\": 0.20520000000000002 } } }, { \"id\": \"zeta\", \"value\": 0.125, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1, \"maximum\": 0.15 } } }, { \"id\": \"lambda\", \"value\": 0.034, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.027200000000000002, \"maximum\": 0.0408 } } }, { \"id\": \"eta\", \"value\": 0.125, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1, \"maximum\": 0.15 } } }, { \"id\": \"rho\", \"value\": 0.034, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.027200000000000002, \"maximum\": 0.0408 } } }, { \"id\": \"theta\", \"value\": 0.371, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.2968, \"maximum\": 0.4452 } } }, { \"id\": \"kappa\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"mu\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"nu\", \"value\": 0.027, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.0216, \"maximum\": 0.0324 } } }, { \"id\": \"xi\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"tau\", \"value\": 0.01, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008, \"maximum\": 0.012 } } }, { \"id\": \"sigma\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } } ], \"observables\": [ { \"id\": \"Cases\", \"name\": \"Cases\", \"expression\": \"Diagnosed + Recognized + Threatened\", \"expression_mathml\": \"DiagnosedRecognizedThreatened\" }, { \"id\": \"Hospitalizations\", \"name\": \"Hospitalizations\", \"expression\": \"Recognized + Threatened\", \"expression_mathml\": \"RecognizedThreatened\" }, { \"id\": \"Deaths\", \"name\": \"Deaths\", \"expression\": \"Extinct\", \"expression_mathml\": \"Extinct\" } ], \"time\": { \"id\": \"t\", \"units\": { \"expression\": \"day\", \"expression_mathml\": \"day\" } } } }, \"metadata\": { \"annotations\": { \"license\": \"CC0\", \"authors\": [], \"references\": [ \"pubmed:32322102\" ], \"time_scale\": null, \"time_start\": null, \"time_end\": null, \"locations\": [], \"pathogens\": [ \"ncbitaxon:2697049\" ], \"diseases\": [ \"doid:0080600\" ], \"hosts\": [ \"ncbitaxon:9606\" ], \"model_types\": [ \"mamo:0000028\" ] } }}",
+ "dataset": {
+ "id": "2ea2d39f-866f-46f6-beec-972ed2136ed5",
+ "filename": "dataset.csv"
+ },
+ "timespan": {"start": 101, "end": 190}
+ }
diff --git a/examples/request-simulate-integrated.json b/examples/request-simulate-integrated.json
index 1a696c6..3da6c9e 100644
--- a/examples/request-simulate-integrated.json
+++ b/examples/request-simulate-integrated.json
@@ -1,19 +1,4 @@
{
"model_config_id": "f20ea672-bfa4-422b-884f-0a4c09356fd0",
- "timespan": {"start": 0, "end": 90},
- "extra": {
- "initials": {
- "S": 0.49457800495224524,
- "E": 0.26745259325403603,
- "I": 0.4497387877393193,
- "R": 0.32807705995998604,
- "D": 0.8545934885162726
- },
- "params": {
- "exp": 0.16207166221196045,
- "conv": 0.7009195813964052,
- "rec": 0.7040317196117394,
- "death": 0.15807853921067516
- }
- }
+ "timespan": {"start": 0, "end": 90}
}
diff --git a/examples/request-simulate-no-integration.json b/examples/request-simulate-no-integration.json
index 7b60e7e..ea659df 100644
--- a/examples/request-simulate-no-integration.json
+++ b/examples/request-simulate-no-integration.json
@@ -1,4 +1,4 @@
{
- "model": "{\"name\": \"Giordano2020 - SIDARTHE model of COVID-19 spread in Italy\",\"schema\": \"https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/petrinet_v0.5/petrinet/petrinet_schema.json\",\"schema_name\": \"petrinet\",\"description\": \"Giordano2020 - SIDARTHE model of COVID-19 spread in Italy\",\"model_version\": \"0.1\",\"properties\": {},\"model\": { \"states\": [ { \"id\": \"Susceptible\", \"name\": \"Susceptible\", \"grounding\": { \"identifiers\": { \"ido\": \"0000514\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Diagnosed\", \"name\": \"Diagnosed\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"diagnosis\": \"ncit:C15220\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Infected\", \"name\": \"Infected\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Ailing\", \"name\": \"Ailing\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"disease_severity\": \"ncit:C25269\", \"diagnosis\": \"ncit:C113725\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Recognized\", \"name\": \"Recognized\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"diagnosis\": \"ncit:C15220\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Healed\", \"name\": \"Healed\", \"grounding\": { \"identifiers\": { \"ido\": \"0000592\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Threatened\", \"name\": \"Threatened\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"disease_severity\": \"ncit:C25467\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Extinct\", \"name\": \"Extinct\", \"grounding\": { \"identifiers\": { \"ncit\": \"C28554\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } } ], \"transitions\": [ { \"id\": \"t1\", \"input\": [ \"Diagnosed\", \"Susceptible\" ], \"output\": [ \"Diagnosed\", \"Infected\" ], \"properties\": { \"name\": \"t1\" } }, { \"id\": \"t2\", \"input\": [ \"Ailing\", \"Susceptible\" ], \"output\": [ \"Ailing\", \"Infected\" ], \"properties\": { \"name\": \"t2\" } }, { \"id\": \"t3\", \"input\": [ \"Recognized\", \"Susceptible\" ], \"output\": [ \"Recognized\", \"Infected\" ], \"properties\": { \"name\": \"t3\" } }, { \"id\": \"t4\", \"input\": [ \"Infected\", \"Susceptible\" ], \"output\": [ \"Infected\", \"Infected\" ], \"properties\": { \"name\": \"t4\" } }, { \"id\": \"t5\", \"input\": [ \"Infected\" ], \"output\": [ \"Diagnosed\" ], \"properties\": { \"name\": \"t5\" } }, { \"id\": \"t6\", \"input\": [ \"Infected\" ], \"output\": [ \"Ailing\" ], \"properties\": { \"name\": \"t6\" } }, { \"id\": \"t7\", \"input\": [ \"Infected\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t7\" } }, { \"id\": \"t8\", \"input\": [ \"Diagnosed\" ], \"output\": [ \"Recognized\" ], \"properties\": { \"name\": \"t8\" } }, { \"id\": \"t9\", \"input\": [ \"Diagnosed\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t9\" } }, { \"id\": \"t10\", \"input\": [ \"Ailing\" ], \"output\": [ \"Recognized\" ], \"properties\": { \"name\": \"t10\" } }, { \"id\": \"t11\", \"input\": [ \"Ailing\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t11\" } }, { \"id\": \"t12\", \"input\": [ \"Ailing\" ], \"output\": [ \"Threatened\" ], \"properties\": { \"name\": \"t12\" } }, { \"id\": \"t13\", \"input\": [ \"Recognized\" ], \"output\": [ \"Threatened\" ], \"properties\": { \"name\": \"t13\" } }, { \"id\": \"t14\", \"input\": [ \"Recognized\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t14\" } }, { \"id\": \"t15\", \"input\": [ \"Threatened\" ], \"output\": [ \"Extinct\" ], \"properties\": { \"name\": \"t15\" } }, { \"id\": \"t16\", \"input\": [ \"Threatened\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t16\" } } ] }, \"semantics\": { \"ode\": { \"rates\": [ { \"target\": \"t1\", \"expression\": \"Diagnosed*Susceptible*beta\", \"expression_mathml\": \"DiagnosedSusceptiblebeta\" }, { \"target\": \"t2\", \"expression\": \"Ailing*Susceptible*gamma\", \"expression_mathml\": \"AilingSusceptiblegamma\" }, { \"target\": \"t3\", \"expression\": \"Recognized*Susceptible*delta\", \"expression_mathml\": \"RecognizedSusceptibledelta\" }, { \"target\": \"t4\", \"expression\": \"Infected*Susceptible*alpha\", \"expression_mathml\": \"InfectedSusceptiblealpha\" }, { \"target\": \"t5\", \"expression\": \"Infected*epsilon\", \"expression_mathml\": \"Infectedepsilon\" }, { \"target\": \"t6\", \"expression\": \"Infected*zeta\", \"expression_mathml\": \"Infectedzeta\" }, { \"target\": \"t7\", \"expression\": \"Infected*lambda\", \"expression_mathml\": \"Infectedlambda\" }, { \"target\": \"t8\", \"expression\": \"Diagnosed*eta\", \"expression_mathml\": \"Diagnosedeta\" }, { \"target\": \"t9\", \"expression\": \"Diagnosed*rho\", \"expression_mathml\": \"Diagnosedrho\" }, { \"target\": \"t10\", \"expression\": \"Ailing*theta\", \"expression_mathml\": \"Ailingtheta\" }, { \"target\": \"t11\", \"expression\": \"Ailing*kappa\", \"expression_mathml\": \"Ailingkappa\" }, { \"target\": \"t12\", \"expression\": \"Ailing*mu\", \"expression_mathml\": \"Ailingmu\" }, { \"target\": \"t13\", \"expression\": \"Recognized*nu\", \"expression_mathml\": \"Recognizednu\" }, { \"target\": \"t14\", \"expression\": \"Recognized*xi\", \"expression_mathml\": \"Recognizedxi\" }, { \"target\": \"t15\", \"expression\": \"Threatened*tau\", \"expression_mathml\": \"Threatenedtau\" }, { \"target\": \"t16\", \"expression\": \"Threatened*sigma\", \"expression_mathml\": \"Threatenedsigma\" } ], \"initials\": [ { \"target\": \"Susceptible\", \"expression\": \"0.999996300000000\", \"expression_mathml\": \"0.99999629999999995\" }, { \"target\": \"Diagnosed\", \"expression\": \"3.33333333000000e-7\", \"expression_mathml\": \"3.33333333e-7\" }, { \"target\": \"Infected\", \"expression\": \"3.33333333000000e-6\", \"expression_mathml\": \"3.3333333299999999e-6\" }, { \"target\": \"Ailing\", \"expression\": \"1.66666666000000e-8\", \"expression_mathml\": \"1.6666666599999999e-8\" }, { \"target\": \"Recognized\", \"expression\": \"3.33333333000000e-8\", \"expression_mathml\": \"3.33333333e-8\" }, { \"target\": \"Healed\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" }, { \"target\": \"Threatened\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" }, { \"target\": \"Extinct\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" } ], \"parameters\": [ { \"id\": \"beta\", \"value\": 0.011, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008799999999999999, \"maximum\": 0.0132 } } }, { \"id\": \"gamma\", \"value\": 0.456, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.3648, \"maximum\": 0.5472 } } }, { \"id\": \"delta\", \"value\": 0.011, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008799999999999999, \"maximum\": 0.0132 } } }, { \"id\": \"alpha\", \"value\": 0.57, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.45599999999999996, \"maximum\": 0.6839999999999999 } } }, { \"id\": \"epsilon\", \"value\": 0.171, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1368, \"maximum\": 0.20520000000000002 } } }, { \"id\": \"zeta\", \"value\": 0.125, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1, \"maximum\": 0.15 } } }, { \"id\": \"lambda\", \"value\": 0.034, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.027200000000000002, \"maximum\": 0.0408 } } }, { \"id\": \"eta\", \"value\": 0.125, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1, \"maximum\": 0.15 } } }, { \"id\": \"rho\", \"value\": 0.034, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.027200000000000002, \"maximum\": 0.0408 } } }, { \"id\": \"theta\", \"value\": 0.371, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.2968, \"maximum\": 0.4452 } } }, { \"id\": \"kappa\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"mu\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"nu\", \"value\": 0.027, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.0216, \"maximum\": 0.0324 } } }, { \"id\": \"xi\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"tau\", \"value\": 0.01, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008, \"maximum\": 0.012 } } }, { \"id\": \"sigma\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } } ], \"observables\": [ { \"id\": \"Cases\", \"name\": \"Cases\", \"expression\": \"Diagnosed + Recognized + Threatened\", \"expression_mathml\": \"DiagnosedRecognizedThreatened\" }, { \"id\": \"Hospitalizations\", \"name\": \"Hospitalizations\", \"expression\": \"Recognized + Threatened\", \"expression_mathml\": \"RecognizedThreatened\" }, { \"id\": \"Deaths\", \"name\": \"Deaths\", \"expression\": \"Extinct\", \"expression_mathml\": \"Extinct\" } ], \"time\": { \"id\": \"t\", \"units\": { \"expression\": \"day\", \"expression_mathml\": \"day\" } } } }, \"metadata\": { \"annotations\": { \"license\": \"CC0\", \"authors\": [], \"references\": [ \"pubmed:32322102\" ], \"time_scale\": null, \"time_start\": null, \"time_end\": null, \"locations\": [], \"pathogens\": [ \"ncbitaxon:2697049\" ], \"diseases\": [ \"doid:0080600\" ], \"hosts\": [ \"ncbitaxon:9606\" ], \"model_types\": [ \"mamo:0000028\" ] } }}",
- "timespan": {"start": 0, "end": 90}
-}
+ "model": "{\"name\": \"Giordano2020 - SIDARTHE model of COVID-19 spread in Italy\",\"schema\": \"https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/petrinet_v0.5/petrinet/petrinet_schema.json\",\"schema_name\": \"petrinet\",\"description\": \"Giordano2020 - SIDARTHE model of COVID-19 spread in Italy\",\"model_version\": \"0.1\",\"properties\": {},\"model\": { \"states\": [ { \"id\": \"Susceptible\", \"name\": \"Susceptible\", \"grounding\": { \"identifiers\": { \"ido\": \"0000514\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Diagnosed\", \"name\": \"Diagnosed\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"diagnosis\": \"ncit:C15220\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Infected\", \"name\": \"Infected\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Ailing\", \"name\": \"Ailing\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"disease_severity\": \"ncit:C25269\", \"diagnosis\": \"ncit:C113725\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Recognized\", \"name\": \"Recognized\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"diagnosis\": \"ncit:C15220\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Healed\", \"name\": \"Healed\", \"grounding\": { \"identifiers\": { \"ido\": \"0000592\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Threatened\", \"name\": \"Threatened\", \"grounding\": { \"identifiers\": { \"ido\": \"0000511\" }, \"modifiers\": { \"disease_severity\": \"ncit:C25467\" } }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } }, { \"id\": \"Extinct\", \"name\": \"Extinct\", \"grounding\": { \"identifiers\": { \"ncit\": \"C28554\" }, \"modifiers\": {} }, \"units\": { \"expression\": \"1\", \"expression_mathml\": \"1\" } } ], \"transitions\": [ { \"id\": \"t1\", \"input\": [ \"Diagnosed\", \"Susceptible\" ], \"output\": [ \"Diagnosed\", \"Infected\" ], \"properties\": { \"name\": \"t1\" } }, { \"id\": \"t2\", \"input\": [ \"Ailing\", \"Susceptible\" ], \"output\": [ \"Ailing\", \"Infected\" ], \"properties\": { \"name\": \"t2\" } }, { \"id\": \"t3\", \"input\": [ \"Recognized\", \"Susceptible\" ], \"output\": [ \"Recognized\", \"Infected\" ], \"properties\": { \"name\": \"t3\" } }, { \"id\": \"t4\", \"input\": [ \"Infected\", \"Susceptible\" ], \"output\": [ \"Infected\", \"Infected\" ], \"properties\": { \"name\": \"t4\" } }, { \"id\": \"t5\", \"input\": [ \"Infected\" ], \"output\": [ \"Diagnosed\" ], \"properties\": { \"name\": \"t5\" } }, { \"id\": \"t6\", \"input\": [ \"Infected\" ], \"output\": [ \"Ailing\" ], \"properties\": { \"name\": \"t6\" } }, { \"id\": \"t7\", \"input\": [ \"Infected\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t7\" } }, { \"id\": \"t8\", \"input\": [ \"Diagnosed\" ], \"output\": [ \"Recognized\" ], \"properties\": { \"name\": \"t8\" } }, { \"id\": \"t9\", \"input\": [ \"Diagnosed\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t9\" } }, { \"id\": \"t10\", \"input\": [ \"Ailing\" ], \"output\": [ \"Recognized\" ], \"properties\": { \"name\": \"t10\" } }, { \"id\": \"t11\", \"input\": [ \"Ailing\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t11\" } }, { \"id\": \"t12\", \"input\": [ \"Ailing\" ], \"output\": [ \"Threatened\" ], \"properties\": { \"name\": \"t12\" } }, { \"id\": \"t13\", \"input\": [ \"Recognized\" ], \"output\": [ \"Threatened\" ], \"properties\": { \"name\": \"t13\" } }, { \"id\": \"t14\", \"input\": [ \"Recognized\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t14\" } }, { \"id\": \"t15\", \"input\": [ \"Threatened\" ], \"output\": [ \"Extinct\" ], \"properties\": { \"name\": \"t15\" } }, { \"id\": \"t16\", \"input\": [ \"Threatened\" ], \"output\": [ \"Healed\" ], \"properties\": { \"name\": \"t16\" } } ] }, \"semantics\": { \"ode\": { \"rates\": [ { \"target\": \"t1\", \"expression\": \"Diagnosed*Susceptible*beta\", \"expression_mathml\": \"DiagnosedSusceptiblebeta\" }, { \"target\": \"t2\", \"expression\": \"Ailing*Susceptible*gamma\", \"expression_mathml\": \"AilingSusceptiblegamma\" }, { \"target\": \"t3\", \"expression\": \"Recognized*Susceptible*delta\", \"expression_mathml\": \"RecognizedSusceptibledelta\" }, { \"target\": \"t4\", \"expression\": \"Infected*Susceptible*alpha\", \"expression_mathml\": \"InfectedSusceptiblealpha\" }, { \"target\": \"t5\", \"expression\": \"Infected*epsilon\", \"expression_mathml\": \"Infectedepsilon\" }, { \"target\": \"t6\", \"expression\": \"Infected*zeta\", \"expression_mathml\": \"Infectedzeta\" }, { \"target\": \"t7\", \"expression\": \"Infected*lambda\", \"expression_mathml\": \"Infectedlambda\" }, { \"target\": \"t8\", \"expression\": \"Diagnosed*eta\", \"expression_mathml\": \"Diagnosedeta\" }, { \"target\": \"t9\", \"expression\": \"Diagnosed*rho\", \"expression_mathml\": \"Diagnosedrho\" }, { \"target\": \"t10\", \"expression\": \"Ailing*theta\", \"expression_mathml\": \"Ailingtheta\" }, { \"target\": \"t11\", \"expression\": \"Ailing*kappa\", \"expression_mathml\": \"Ailingkappa\" }, { \"target\": \"t12\", \"expression\": \"Ailing*mu\", \"expression_mathml\": \"Ailingmu\" }, { \"target\": \"t13\", \"expression\": \"Recognized*nu\", \"expression_mathml\": \"Recognizednu\" }, { \"target\": \"t14\", \"expression\": \"Recognized*xi\", \"expression_mathml\": \"Recognizedxi\" }, { \"target\": \"t15\", \"expression\": \"Threatened*tau\", \"expression_mathml\": \"Threatenedtau\" }, { \"target\": \"t16\", \"expression\": \"Threatened*sigma\", \"expression_mathml\": \"Threatenedsigma\" } ], \"initials\": [ { \"target\": \"Susceptible\", \"expression\": \"0.999996300000000\", \"expression_mathml\": \"0.99999629999999995\" }, { \"target\": \"Diagnosed\", \"expression\": \"3.33333333000000e-7\", \"expression_mathml\": \"3.33333333e-7\" }, { \"target\": \"Infected\", \"expression\": \"3.33333333000000e-6\", \"expression_mathml\": \"3.3333333299999999e-6\" }, { \"target\": \"Ailing\", \"expression\": \"1.66666666000000e-8\", \"expression_mathml\": \"1.6666666599999999e-8\" }, { \"target\": \"Recognized\", \"expression\": \"3.33333333000000e-8\", \"expression_mathml\": \"3.33333333e-8\" }, { \"target\": \"Healed\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" }, { \"target\": \"Threatened\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" }, { \"target\": \"Extinct\", \"expression\": \"0.0\", \"expression_mathml\": \"0.0\" } ], \"parameters\": [ { \"id\": \"beta\", \"value\": 0.011, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008799999999999999, \"maximum\": 0.0132 } } }, { \"id\": \"gamma\", \"value\": 0.456, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.3648, \"maximum\": 0.5472 } } }, { \"id\": \"delta\", \"value\": 0.011, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008799999999999999, \"maximum\": 0.0132 } } }, { \"id\": \"alpha\", \"value\": 0.57, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.45599999999999996, \"maximum\": 0.6839999999999999 } } }, { \"id\": \"epsilon\", \"value\": 0.171, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1368, \"maximum\": 0.20520000000000002 } } }, { \"id\": \"zeta\", \"value\": 0.125, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1, \"maximum\": 0.15 } } }, { \"id\": \"lambda\", \"value\": 0.034, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.027200000000000002, \"maximum\": 0.0408 } } }, { \"id\": \"eta\", \"value\": 0.125, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.1, \"maximum\": 0.15 } } }, { \"id\": \"rho\", \"value\": 0.034, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.027200000000000002, \"maximum\": 0.0408 } } }, { \"id\": \"theta\", \"value\": 0.371, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.2968, \"maximum\": 0.4452 } } }, { \"id\": \"kappa\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"mu\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"nu\", \"value\": 0.027, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.0216, \"maximum\": 0.0324 } } }, { \"id\": \"xi\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } }, { \"id\": \"tau\", \"value\": 0.01, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.008, \"maximum\": 0.012 } } }, { \"id\": \"sigma\", \"value\": 0.017, \"distribution\": { \"type\": \"StandardUniform1\", \"parameters\": { \"minimum\": 0.013600000000000001, \"maximum\": 0.0204 } } } ], \"observables\": [ { \"id\": \"Cases\", \"name\": \"Cases\", \"expression\": \"Diagnosed + Recognized + Threatened\", \"expression_mathml\": \"DiagnosedRecognizedThreatened\" }, { \"id\": \"Hospitalizations\", \"name\": \"Hospitalizations\", \"expression\": \"Recognized + Threatened\", \"expression_mathml\": \"RecognizedThreatened\" }, { \"id\": \"Deaths\", \"name\": \"Deaths\", \"expression\": \"Extinct\", \"expression_mathml\": \"Extinct\" } ], \"time\": { \"id\": \"t\", \"units\": { \"expression\": \"day\", \"expression_mathml\": \"day\" } } } }, \"metadata\": { \"annotations\": { \"license\": \"CC0\", \"authors\": [], \"references\": [ \"pubmed:32322102\" ], \"time_scale\": null, \"time_start\": null, \"time_end\": null, \"locations\": [], \"pathogens\": [ \"ncbitaxon:2697049\" ], \"diseases\": [ \"doid:0080600\" ], \"hosts\": [ \"ncbitaxon:9606\" ], \"model_types\": [ \"mamo:0000028\" ] } }}",
+ "timespan": {"start": 0, "end": 90}
+ }
diff --git a/paths.yaml b/paths.yaml
deleted file mode 100644
index c0bb6da..0000000
--- a/paths.yaml
+++ /dev/null
@@ -1,176 +0,0 @@
-/simulate:
- post:
- summary: Perform a simulation
- operationId: simulateModel
- requestBody:
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- engine:
- type: string
- enum: [sciml, ciemss]
- example: sciml
- model_config_id:
- type: string
- example: "ba8da8d4-047d-11ee-be56"
- timespan:
- type: object
- properties:
- start:
- type: integer
- example: 0
- end:
- type: integer
- example: 0
- items:
- type: integer
- example: [0, 90]
- extra:
- description: optional extra system specific arguments for advanced use cases
- type: object
- required:
- - engine
- - model_config_id
- - timespan
- responses:
- '200':
- description: Simulation created successfully
- content:
- application/json:
- schema:
- type: object
- properties:
- simulation_id:
- type: string
- example: fc5d80e4-0483-11ee-be56
-
-/calibrate:
- post:
- summary: Calibrate a model to data then simulate
- description: Calibrate a model and perform a "fitting" simulation over the time range of the calibration dataset and a simulation of a time range specified in `timespan` if `timespan` is specified. The SciML engine allows for calibration without additional simulation; in that case `timespan` is left off the payload.
- operationId: calibratesimulateModel
- requestBody:
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- engine:
- type: string
- enum: [sciml, ciemss]
- example: sciml
- model_config_id:
- type: string
- example: "c1cd941a-047d-11ee-be56"
- dataset:
- type: object
- properties:
- id:
- type: string
- example: "cd339570-047d-11ee-be55"
- filename:
- type: string
- example: "dataset.csv"
- mappings:
- type: object
- timespan:
- type: object
- properties:
- start:
- type: integer
- example: 0
- end:
- type: integer
- example: 0
- extra:
- description: optional extra system specific arguments for advanced use cases
- type: object
- required:
- - engine
- - model_config_id
- - dataset_id
- responses:
- '200':
- description: Calibration/simulation created successfully
- content:
- application/json:
- schema:
- type: object
- properties:
- simulation_id:
- type: string
- example: fc5d80e4-0483-11ee-be56
-/ensemble:
- post:
- summary: Perform an ensemble simulation
- operationId: createEnsemble
- requestBody:
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- engine:
- type: string
- enum: [sciml, ciemss]
- example: sciml
- model_config_ids:
- type: array
- items:
- type: string
- example: ["ba8da8d4-047d-11ee-be56", "c1cd941a-047d-11ee-be56", "c4b9f88a-047d-11ee-be56"]
- timespan:
- type: object
- properties:
- start:
- type: integer
- example: 0
- end:
- type: integer
- example: 0
- extra:
- description: optional extra system specific arguments for advanced use cases
- type: object
- required:
- - engine
- - model_config_id
- - timespan
- responses:
- '200':
- description: Ensemble created successfully
- content:
- application/json:
- schema:
- type: object
- properties:
- simulation_id:
- type: string
- example: fc5d80e4-0483-11ee-be56
-
-/status/{simulation_id}:
- get:
- summary: Retrieve the status of a simulation
- operationId: getStatus
- parameters:
- - name: simulation_id
- in: path
- required: true
- schema:
- type: string
- example: fc5d80e4-0483-11ee-be56
- responses:
- '200':
- description: Status retrieved successfully
- content:
- application/json:
- schema:
- type: object
- properties:
- status:
- type: string
- enum: [queued, running, complete, error]
diff --git a/src/Settings.jl b/src/Settings.jl
deleted file mode 100644
index a18fc39..0000000
--- a/src/Settings.jl
+++ /dev/null
@@ -1,71 +0,0 @@
-"""
-Project-wide environment settings
-"""
-module Settings
-
-"""
-The current settings for the project
-"""
-settings = Dict{String, Any}()
-
-"""
-Add a setting from the enviroment
-"""
-macro setting(name::Symbol, type::Union{DataType, Type}, default_value::Any)
- fixed_default = isa(default_value, Symbol) ? eval(default_value) : default_value
- if !isnothing(fixed_default)
- @assert typeof(fixed_default) == type
- end
-
- env_key = String(name)
-
- function grab_env()
- if in(env_key, keys(ENV))
- if type == String
- return ENV[env_key]
- else
- return parse(type, ENV[env_key])
- end
- else
- if !isnothing(fixed_default)
- ENV[env_key] = fixed_default
- return fixed_default
- else
- throw("Variable not in environment and no default provided!")
- end
- end
- end
- :(settings[$env_key] = ($grab_env)())
-end
-
-"""
-Coerce `type` from `Symbol` to `Type`
-"""
-macro setting(name::Symbol, type::Symbol, default_value::Any)
- :(@setting(name, eval(type), fixed_default))
-end
-
-"""
-Set an option while inferring the type
-"""
-macro setting(name::Symbol, default_value::Any)
- type = typeof(default_value)
- :(@setting($name, $type, $default_value))
-end
-
-"""
-Set a string option
-"""
-macro setting(name::Symbol)
- :(@setting($name, String, nothing))
-end
-
-@setting RABBITMQ_ENABLED false
-@setting RABBITMQ_LOGIN "guest"
-@setting RABBITMQ_PASSWORD "guest"
-@setting RABBITMQ_ROUTE "terarium"
-@setting RABBITMQ_PORT 5672
-@setting ENABLE_TDS true
-@setting TDS_URL "http://localhost:8001"
-
-end # module Settings
diff --git a/src/SimulationService.jl b/src/SimulationService.jl
index d81a4b4..1805342 100644
--- a/src/SimulationService.jl
+++ b/src/SimulationService.jl
@@ -1,77 +1,476 @@
-"""
-Interface for relevant ASKEM simulation libraries
-"""
-module SimulationService
-
-import AlgebraicPetri: LabelledPetriNet
-import Symbolics
-import Oxygen: serveparallel, resetstate, json, setschema, terminate, @post, @get
-import SwaggerMarkdown: build, @swagger, OpenAPI, validate_spec, openApiToDict, DOCS
-import YAML
-import JSON3 as JSON
-import JobSchedulers: scheduler_start, set_scheduler, scheduler_stop, submit!, job_query, result, generate_id, update_queue!, Job, JobSchedulers
+module SimulationService
-include("./service/Service.jl")
-import .Service: make_deterministic_run, retrieve_job
-include("./Settings.jl"); import .Settings: settings
+import AMQPClient
+import CSV
+import DataFrames: DataFrame
+import Dates
+import DifferentialEquations
+import Downloads: download
+import EasyConfig: EasyConfig, Config
+import HTTP
+import InteractiveUtils: subtypes
+import JobSchedulers
+import JSON3
+import MathML
+import ModelingToolkit: @parameters, substitute, Differential, Num, @variables, ODESystem, ODEProblem
+import OpenAPI
+import Oxygen
+import SciMLBase: SciMLBase, DiscreteCallback, solve
+import SwaggerMarkdown
+import UUIDs
+import YAML
export start!, stop!
-OPENAPI_SPEC = "paths.yaml"
-
-"""
-Print out settings
-"""
-function health_check()
- tds_url = settings["TDS_URL"]
- mq_route = settings["RABBITMQ_ROUTE"]
-
- return "Simulation-service. TDS_URL=$tds_url, RABBITMQ_ROUTE=$mq_route"
-end
-
-
-"""
-Specify endpoint to function mappings
-"""
-function register!()
- @get "/" health_check
- @get "/{element}/{uuid}" retrieve_job
- @post "/{operation}" make_deterministic_run
-
- info = Dict("title" => "Simulation Service", "version" => "0.6.0")
- openAPI = OpenAPI("3.0.0", info)
- openAPI.paths = YAML.load_file(OPENAPI_SPEC)
- documentation = build(openAPI)
- setschema(documentation)
-end
-
-"""
-Load API endpoints and start listening for sim run jobs
-"""
-function start!()
- resetstate()
- register!()
- if Threads.nthreads() > 1
- set_scheduler(
- max_cpu=0.5,
- max_mem=0.5,
- update_second=0.05,
- max_job=5000,
+#-----------------------------------------------------------------------------# notes
+# Example request to /{operation}:
+# {
+# "model_config_id": "22739963-0f82-4d6f-aecc-1082712ed299",
+# "timespan": {"start":0, "end":90},
+# "engine": "sciml",
+# "dataset": {
+# "dataset_id": "adfasdf",
+# "mappings": [], #optional column mappings... renames column headers
+# "filename":"asdfa",
+# }
+# }
+
+# ASKEM Model Representation: https://github.com/DARPA-ASKEM/Model-Representations/blob/main/petrinet/petrinet_schema.json
+
+# pre-rewrite commit: https://github.com/DARPA-ASKEM/simulation-service/tree/8e4dfc515fd6ddf53067fa535e37450daf1cd63c
+
+# OpenAPI spec: https://raw.githubusercontent.com/DARPA-ASKEM/simulation-api-spec/main/openapi.yaml
+
+#-----------------------------------------------------------------------------# __init__
+const rabbit_mq_channel = Ref{Any}() # TODO: replace Any with what AMQPClient.channel returns
+const server_url = Ref{String}()
+const openapi_spec = Ref{Config}() # populated from https://github.com/DARPA-ASKEM/simulation-api-spec
+
+function __init__()
+ if Threads.nthreads() == 1
+ @warn "SimulationService.jl requires `Threads.nthreads() > 1`. Use e.g. `julia --threads=auto`."
+ end
+
+ # RabbitMQ Channel to reuse
+ if SIMSERVICE_RABBITMQ_ENABLED
+ auth_params = Dict{String,Any}(
+ "MECHANISM" => "AMQPLAIN",
+ "LOGIN" => SIMSERVICE_RABBITMQ_LOGIN,
+ "PASSWORD" => SIMSERVICE_RABBITMQ_PASSWORD,
)
- scheduler_start()
- serveparallel(host="0.0.0.0", async=true)
+ conn = AMQPClient.connection(; virtualhost="/", host="localhost", port=SIMSERVICE_RABBITMQ_PORT, auth_params)
+ rabbitmq_channel[] = AMQPClient.channel(conn, AMQPClient.UNUSED_CHANNEL, true)
+ end
+
+ server_url[] = "http://$SIMSERVICE_HOST:$SIMSERVICE_PORT"
+
+ spec = download("https://raw.githubusercontent.com/DARPA-ASKEM/simulation-api-spec/main/openapi.yaml")
+ openapi_spec[] = Config(YAML.load_file(spec))
+end
+
+#-----------------------------------------------------------------------------# start!
+function start!(; host=SIMSERVICE_HOST, port=SIMSERVICE_PORT, kw...)
+ SIMSERVICE_ENABLE_TDS || @warn "TDS is disabled. Some features will not work."
+ stop!() # Stop server if it's already running
+ server_url[] = "http://$host:$port"
+ JobSchedulers.scheduler_start()
+ JobSchedulers.set_scheduler(max_cpu=0.5, max_mem=0.5, update_second=0.05, max_job=5000)
+ Oxygen.resetstate()
+ # routes:
+ Oxygen.@get "/" health
+ Oxygen.@get "/status/{job_id}" job_status
+ Oxygen.@get "/result/{job_id}" job_result
+ Oxygen.@post "/{operation_name}" operation
+ Oxygen.@post "/kill/{job_id}" job_kill
+
+ # Below commented out because of: https://github.com/JuliaData/YAML.jl/issues/117 ????
+ # api = SwaggerMarkdown.OpenAPI("3.0", Dict(string(k) => v for (k,v) in openapi_spec[]))
+ # swagger = SwaggerMarkdown.build(api)
+ # Oxygen.mergeschema(swagger)
+
+ # server:
+ if Threads.nthreads() > 1 # true in production
+ Oxygen.serveparallel(; host, port, async=true, kw...)
else
- throw("The server is not parallelized. You need to start the REPL like `julia --threads 5`")
+ @warn "Server starting single-threaded. This should only be used for testing. Try starting Julia via `julia --threads=auto`."
+ Oxygen.serve(; host, port, async=true, kw...)
end
- nothing
end
-"""
-Shutdown server
-"""
+#-----------------------------------------------------------------------------# stop!
function stop!()
- scheduler_stop()
- terminate()
+ JobSchedulers.scheduler_stop()
+ Oxygen.terminate()
+end
+
+#-----------------------------------------------------------------------------# settings
+# Server
+SIMSERVICE_HOST = get(ENV, "SIMSERVICE_HOST", "0.0.0.0")
+SIMSERVICE_PORT = parse(Int, get(ENV, "SIMSERVICE_PORT", "8000"))
+
+# Terrarium Data Service (TDS)
+SIMSERVICE_ENABLE_TDS = get(ENV, "SIMSERVICE_ENABLE_TDS", "true") == "true" #
+SIMSERVICE_TDS_URL = get(ENV, "SIMSERVICE_TDS_URL", "http://localhost:8001")
+SIMSERVICE_TDS_RETRIES = parse(Int, get(ENV, "SIMSERVICE_TDS_RETRIES", "10"))
+
+# RabbitMQ (Note: assumes running on localhost)
+SIMSERVICE_RABBITMQ_ENABLED = get(ENV, "SIMSERVICE_RABBITMQ_ENABLED", "false") == "true" && SIMSERVICE_ENABLE_TDS
+SIMSERVICE_RABBITMQ_LOGIN = get(ENV, "SIMSERVICE_RABBITMQ_LOGIN", "guest")
+SIMSERVICE_RABBITMQ_PASSWORD = get(ENV, "SIMSERVICE_RABBITMQ_PASSWORD", "guest")
+SIMSERVICE_RABBITMQ_ROUTE = get(ENV, "SIMSERVICE_RABBITMQ_ROUTE", "terarium")
+SIMSERVICE_RABBITMQ_PORT = parse(Int, get(ENV, "SIMSERVICE_RABBITMQ_PORT", "5672"))
+
+#-----------------------------------------------------------------------------# utils
+JSON_HEADER = ["Content-Type" => "application/json"]
+
+get_json(url::String)::Config = JSON3.read(HTTP.get(url, JSON_HEADER).body, Config)
+
+jobhash(x::String) = reinterpret(Int, hash(x))
+
+# Print message when TDS unavailable, e.g. SIMSERVICE_ENABLE_TDS || no_tds(:myfunc; id="id", filename="result.csv")
+function no_tds(f; kw...)
+ msg = "TDS unavailable in function: `$f`\n"
+ for (k, v) in kw
+ msg *= "\n$k = $v"
+ end
+ @info msg
+end
+
+# TODO: more tests. This is an important function.
+function ode_system_from_amr(obj::Config)
+ model = obj.model
+ ode = obj.semantics.ode
+
+ t = only(@variables t)
+ D = Differential(t)
+
+ statenames = [Symbol(s.id) for s in model.states]
+ statevars = [only(@variables $s) for s in statenames]
+ statefuncs = [only(@variables $s(t)) for s in statenames]
+
+ # get parameter values and state initial values
+ paramnames = [Symbol(x.id) for x in ode.parameters]
+ paramvars = [only(@parameters $x) for x in paramnames]
+ paramvals = [x.value for x in ode.parameters]
+ sym_defs = paramvars .=> paramvals
+ initial_exprs = [MathML.parse_str(x.expression_mathml) for x in ode.initials]
+ initial_vals = map(x -> substitute(x, sym_defs), initial_exprs)
+
+ # build equations from transitions and rate expressions
+ rates = Dict(Symbol(x.target) => MathML.parse_str(x.expression_mathml) for x in ode.rates)
+ eqs = Dict(s => Num(0) for s in statenames)
+ for tr in model.transitions
+ ratelaw = rates[Symbol(tr.id)]
+ for s in tr.input
+ s = Symbol(s)
+ eqs[s] = eqs[s] - ratelaw
+ end
+ for s in tr.output
+ s = Symbol(s)
+ eqs[s] = eqs[s] + ratelaw
+ end
+ end
+
+ subst = Dict(statevars .=> statefuncs)
+ eqs = [D(statef) ~ substitute(eqs[state], subst) for (state, statef) in (statenames .=> statefuncs)]
+
+ ODESystem(eqs, t, statefuncs, paramvars; defaults = [statefuncs .=> initial_vals; sym_defs], name=Symbol(obj.name))
+end
+
+#-----------------------------------------------------------------------------# health: GET /
+health(::HTTP.Request) = (; status="ok", SIMSERVICE_RABBITMQ_ENABLED, SIMSERVICE_RABBITMQ_ROUTE,
+ SIMSERVICE_ENABLE_TDS)
+
+#-----------------------------------------------------------------------------# job endpoints
+get_job(job_id::String) = JobSchedulers.job_query(jobhash(job_id))
+
+const NO_JOB =
+ HTTP.Response(404, ["Content-Type" => "text/plain; charset=utf-8"], body="Job does not exist")
+
+# /status/{job_id}
+function job_status(::HTTP.Request, job_id::String)
+ job = get_job(job_id)
+ isnothing(job) && return NO_JOB
+ SCHEDULER_TO_API_STATUS_MAP = Dict(
+ JobSchedulers.QUEUING => :queued,
+ JobSchedulers.RUNNING => :running,
+ JobSchedulers.DONE => :complete,
+ JobSchedulers.FAILED => :error,
+ JobSchedulers.CANCELLED => :cancelled,
+ )
+ return (; status = SCHEDULER_TO_API_STATUS_MAP[job.state])
+end
+
+# /result/{job_id}
+function job_result(request::HTTP.Request, job_id::String)
+ job = get_job(job_id)
+ isnothing(job) && return NO_JOB
+ job.state == :done ?
+ JobSchedulers.result(job) :
+ Response(400, ["Content-Type" => "text/plain; charset=utf-8"], body="Job has not completed")
+end
+
+# /kill/{job_id}
+function job_kill(request::HTTP.Request, job_id::String)
+ job = JobSchedulers.job_query(jobhash(job_id))
+ isnothing(job) && return NO_JOB
+ JobSchedulers.cancel!(job)
+ return HTTP.Response(200)
+end
+
+#-----------------------------------------------------------------------------# RabbitMQ
+# Content sent to client as JSON3.write(content)
+# If !SIMSERVICE_RABBITMQ_ENABLED, then just log the content
+function publish_to_rabbitmq(content)
+ SIMSERVICE_RABBITMQ_ENABLED || return no_tds(:publish_to_rabbitmq; content)
+ json = Vector{UInt8}(codeunits(JSON3.write(content)))
+ message = AMQPClient.Message(json, content_type="application/json")
+ AMQPClient.basic_publish(rabbitmq_channel[], message; exchange="", routing_key=SIMSERVICE_RABBITMQ_ROUTE)
+end
+publish_to_rabbitmq(; kw...) = publish_to_rabbitmq(Dict(kw...))
+
+
+
+
+#-----------------------------------------------------------------------------# Operations
+### Example of `obj` inside an OperationRequest
+# {
+# "model_config_id": "22739963-0f82-4d6f-aecc-1082712ed299",
+# "timespan": {"start":0, "end":90},
+# "engine": "sciml",
+# "dataset": {
+# "dataset_id": "adfasdf",
+# "mappings": [], #optional column mappings... renames column headers
+# "filename":"asdfa",
+# }
+# }
+
+
+# An Operation requires:
+# 1) an Operation(::OperationRequest) constructor
+# 2) a solve(::Operation; callback) method
+#
+# An Operation's fields should be separate from any request-specific things for ease of testing.
+abstract type Operation end
+
+
+#-----------------------------------------------------------------------------# OperationRequest
+# An OperationRequest contains all the information required to run an Operation
+# It's created immediately from a client request and we pass it around to keep all info together
+
+# endpoint: required_keys... | optional_keys...
+ # /simulate: (engine, model_config_id, timespan) | extra
+ # /calibrate: (engine, model_config_id, dataset_id) | extra, timespan
+ # /ensemble: (engine, model_config_ids, timespan) | extra
+mutable struct OperationRequest{T <: Operation}
+ obj::Config # untouched JSON from request body
+ required::Config # required keys for endpoint
+ optional::Config # optional keys for endpoint
+ model::Union{Config, Vector{Config}} # ASKEM Model Representation(s)
+ df::Union{Nothing, DataFrame}
+ timespan::Union{Nothing, Tuple{Float64, Float64}}
+ job_id::String
+ operation_type::Type{T}
+ results::Any # result of solving operaiont
+ results_to_upload::Any # processed results to send back to client (body, header, filename)
+
+ function OperationRequest(req::HTTP.Request, route::String)
+ @info "Creating OperationRequest: POST $route"
+ job_id = "sciml-$(UUIDs.uuid4())"
+ # TODO: make operation_dict const
+ operation_dict = Dict(replace(lowercase(string(T)), "simulationservice." => "") => T for T in subtypes(Operation))
+ operation_type = operation_dict[route]
+ obj = JSON3.read(req.body, Config)
+ schema = openapi_spec[].paths["/$route"].post.requestBody.content."application/json".schema
+ required = Config(k => obj[k] for k in schema.required)
+ optional = Config(k => obj[k] for k in setdiff(schema.properties, schema.required))
+ model = Config()
+ df = nothing
+ timespan = nothing
+ # EasyConfig.delete_empty!(obj)
+ for (k,v) in obj
+ if k == :model_config_id
+ model = SIMSERVICE_ENABLE_TDS ?
+ get_json("$SIMSERVICE_TDS_URL/model_configurations/$v", Config) :
+ Config()
+ elseif k == :model_config_ids
+ model = map(v) do id
+ SIMSERVICE_ENABLE_TDS ?
+ get_json("$SIMSERVICE_TDS_URL/model_configurations/$id", Config) :
+ Config()
+ end
+ elseif k == :timespan
+ timespan = Tuple{Float64,Float64}(v)
+ elseif k == :dataset # calibrate only. keys(v) = (:id, :filename, :mappings)
+ if SIMSERVICE_ENABLE_TDS
+ tds_url = "$SIMSERVICE_TDS_URL/datasets/$(v.id)/download-url?filename=$(v.filename)"
+ s3_url = get_json(tds_url).url
+ df = CSV.read(download(s3_url), DataFrame)
+ rename!(df, v.mappings)
+ else
+ df = DataFrame()
+ end
+
+ # Keys for testing only:
+ elseif k == :csv
+ df = CSV.read(codeunits(v), DataFrame)
+ elseif k == :local_csv # local CSV file
+ df = CSV.read(v, DataFrame)
+ elseif k == :model # JSON
+ model = v
+ end
+ end
+ new{operation_type}(obj, required, optional, model, df, timespan, job_id, operation_type, nothing, nothing)
+ end
+end
+
+#--------------------------------------------------------------------# IntermediateResults callback
+# Publish intermediate results to RabbitMQ with at least `every` seconds inbetween callbacks
+mutable struct IntermediateResults
+ last_callback::Dates.DateTime # Track the last time the callback was called
+ every::Dates.TimePeriod # Callback frequency e.g. `Dates.Second(5)`
+ job_id::String
+ function IntermediateResults(job_id::String; every=Dates.Second(5))
+ new(typemin(Dates.DateTime), every, job_id)
+ end
+end
+function (o::IntermediateResults)(integrator)
+ if o.last_callback + o.every ≤ Dates.now()
+ o.last_callback = Dates.now()
+ (; iter, t, u, uprev) = integrator
+ publish_to_rabbitmq(; iter=iter, time=t, params=u, abserr=norm(u - uprev), job_id=o.jobid,
+ retcode=SciMLBase.check_error(integrator))
+ end
+end
+get_callback(o::OperationRequest) = DiscreteCallback((args...) -> true, IntermediateResults(o.job_id))
+
+#--------------------------------------------------------------------------# Terrarium Data Service
+# Retry a function `n` times if error is HTTP 404
+default_retry_contion(ex) = ex isa HTTP.Exceptions.StatusError && ex.status == 404
+
+function retry_n(f; n::Int=SIMSERVICE_TDS_RETRIES, sleep_between::Int=1, condition=default_retry_contion)
+ res = nothing
+ for _ in 1:n
+ try
+ res = f()
+ break
+ catch ex
+ if condition(ex)
+ sleep(sleep_between)
+ continue
+ else
+ rethrow(ex)
+ end
+ end
+ end
+ return res
+end
+
+function update_job_status!(o::OperationRequest; kw...)
+ SIMSERVICE_ENABLE_TDS || return no_tds(:update_job_status!; kw...)
+ job_id = o.job_id
+ url = "$SIMSERVICE_TDS_URL/simulations/$job_id" # joshday: rename simulations => jobs?
+ obj = retry_n(() -> get_json(url))
+ # If JobID is not found in the TDS, we will create it
+ obj = isnothing(obj) ? Dict() : Dict(obj)
+
+ body = JSON3.write(merge(Dict(obj), Dict(kw)))
+ HTTP.put(url, JSON_HEADER; body=body)
+end
+
+
+function upload_results!(o::OperationRequest)
+ isnothing(o.results) && error("No results. Run `solve!(o)` first.")
+
+ # DataFrame result saved as CSV. Everything else saved as JSON.
+ o.results_to_upload = if o.results isa DataFrame
+ io = IOBuffer()
+ CSV.write(io, o.results)
+ body = String(take!(io))
+ filename = "result.csv"
+ header = ["Content-Type" => "text/csv"]
+ else
+ body = JSON3.write(o.results)
+ filename = "result.json"
+ header = JSON_HEADER
+ end
+
+ if !SIMSERVICE_ENABLE_TDS
+ return no_tds(:upload_results!; filename, header, bodysummary=repr(summary(body)))
+ end
+
+ tds_url = "$SIMSERVICE_TDS_URL/simulations/sciml-$(o.job_id)/upload-url?filename=$filename)"
+ s3_url = get_json(tds_url).url
+ HTTP.put(s3_url, header; body=body)
+end
+
+#-----------------------------------------------------------------------------# solve!
+function solve!(o::OperationRequest)
+ try
+ update_job_status!(o; status="running", start_time=time())
+ operation = o.operation_type(o)
+ callback = get_callback(o)
+ o.results = solve(operation; callback)
+ upload_results!(o)
+ update_job_status!(o; status="complete", complete_time=time())
+ return o.results_to_upload
+ catch ex
+ update_job_status!(o; status="error", error=string(ex))
+ end
+end
+
+#-----------------------------------------------------------------------------# POST /{operation}
+# For debugging. When a job fails, you can check out last_operation[] and last_job[].
+last_operation = Ref{OperationRequest}()
+last_job = Ref{JobSchedulers.Job}()
+
+# TODO: add try-catch back in? It's useful for debugging to leave it out.
+function operation(req::HTTP.Request, operation_name::String)
+ # try
+ o = OperationRequest(req, operation_name)
+ @info "Scheduling Job: $(o.job_id)"
+ job = JobSchedulers.Job(@task(solve!(o)))
+ job.id = jobhash(o.job_id)
+ JobSchedulers.submit!(job)
+
+ last_operation[] = o # For debugging
+ last_job[] = job # For debugging
+
+ body = JSON3.write((; simulation_id = o.job_id))
+ return HTTP.Response(201, ["Content-Type" => "application/json; charset=utf-8"], body; request=req)
+ # catch ex
+ # return HTTP.Response(500, ["Content-Type" => "application/json; charset=utf-8"], JSON3.write((; error=string(ex))))
+ # end
+end
+
+
+#-----------------------------------------------------------------------------# simulate
+struct Simulate <: Operation
+ sys::ODESystem
+ timespan::Tuple{Float64, Float64}
+end
+
+Simulate(o::OperationRequest) = Simulate(ode_system_from_amr(o.model), o.timespan)
+
+function solve(op::Simulate; kw...)
+ # joshday: What does providing `u0 = []` do? Don't we know what u0 is from AMR?
+ prob = ODEProblem(op.sys, [], op.timespan, saveat=1)
+ sol = solve(prob; progress = true, progress_steps = 1, kw...)
+ DataFrame(sol)
+end
+
+#-----------------------------------------------------------------------------# calibrate
+struct Calibrate <: Operation
+ # TODO
+end
+Calibrate(o::OperationRequest) = error("TODO")
+solve(o::Calibrate; callback) = error("TODO")
+
+#-----------------------------------------------------------------------------# ensemble
+struct Ensemble <: Operation
+ # TODO
end
+Ensemble(o::OperationRequest) = error("TODO")
+solve(o::Ensemble; callback) = error("TODO")
-end # module SimulationService
+end # module
diff --git a/src/contracts/Available.jl b/src/contracts/Available.jl
deleted file mode 100644
index 7dcead7..0000000
--- a/src/contracts/Available.jl
+++ /dev/null
@@ -1,70 +0,0 @@
-"""
-Operations interface for the simulation service
-"""
-module Available
-
-import CSV
-import AlgebraicPetri: LabelledPetriNet, AbstractPetriNet
-import DataFrames: DataFrame
-
-include("./ProblemInputs.jl"); import .ProblemInputs: conversions_for_valid_inputs
-include("./SystemInputs.jl"); import .SystemInputs: Context
-include("../operations/Operations.jl"); import .Operations
-include("../Settings.jl"); import .Settings: settings
-
-export available_operations
-
-available_operations = Dict{String, Function}()
-
-"""
-Retrieve internal atomic operations
-"""
-function get_operation(operation::Symbol)
- if in(operation, names(Operations; all=false, imported=true))
- return getfield(Operations, operation)
- else
- return nothing
- end
-end
-
-function simulate(;
- model,
- timespan=(0.0, 100.0)::Tuple{Float64,Float64},
- context
-)
- Dict("result" => get_operation(:simulate)(;model=model, timespan=timespan, context))
-end
-
-available_operations["simulate"] = simulate
-
-function calibrate_then_simulate(;
- model,
- dataset::DataFrame,
- timespan::Union{Nothing, Tuple{Float64, Float64}} = nothing,
- context,
-)
- results = Dict{String, Any}()
- calibrated_params = get_operation(:calibrate)(;model=model, dataset=dataset, context=context)
- results["parameters"] = calibrated_params
- if in(NaN, values(calibrated_params))
- return results
- end
- for (sym, val) in calibrated_params
- model.defaults[sym] = val
- end
- tmin, tmax = (dataset.timestep[1], dataset.timestep[end])
- results["simulation"] = get_operation(:simulate)(;model=model, timespan=(tmin, tmax), context=context)
- if isnothing(timespan)
- return results
- end
- results["extra-simulation"] = get_operation(:simulate)(;model=model, timespan=timespan, context=context)
- results
-end
-
-available_operations["calibrate"] = calibrate_then_simulate
-
-
-
-
-
-end # module Available
diff --git a/src/contracts/Interface.jl b/src/contracts/Interface.jl
deleted file mode 100644
index 1f97d3a..0000000
--- a/src/contracts/Interface.jl
+++ /dev/null
@@ -1,37 +0,0 @@
-"""
-SciML Operations interface for the simulation service
-"""
-module Interface
-
-import CSV
-
-include("./ProblemInputs.jl"); import .ProblemInputs: conversions_for_valid_inputs
-include("./SystemInputs.jl"); import .SystemInputs: Context
-include("./Available.jl"); import .Available: available_operations
-include("../operations/Operations.jl"); import .Operations
-include("../Settings.jl"); import .Settings: settings
-
-export use_operation, available_operations, conversions_for_valid_inputs, Context
-
-"""
-Return an operation wrapped with necessary handlers
-"""
-function use_operation(context::Context)
- operation = available_operations[string(context.operation)]
-
- method = collect(methods(operation))[1]
- inputs = ccall(:jl_uncompress_argnames, Vector{Symbol}, (Any,), method.slot_syms)[2:end]
-
-
- # NOTE: This runs inside the job so we can't use it to validate on request ATM
- function coerced_operation(arglist::Dict{Symbol, Any})
- # TODO(five): Fail properly on extra params
- fixed_args = Dict(
- name => conversions_for_valid_inputs[name](arglist[name])
- for name in inputs if name != :context
- )
- operation(;fixed_args..., context=context)
- end
-end
-
-end # module Interface
diff --git a/src/contracts/ProblemInputs.jl b/src/contracts/ProblemInputs.jl
deleted file mode 100644
index 8034c5b..0000000
--- a/src/contracts/ProblemInputs.jl
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-User-provided, problem-specific inputs
-"""
-module ProblemInputs
-
-import AlgebraicPetri: PropertyLabelledPetriNet, LabelledPetriNet, AbstractPetriNet
-import Catlab.CategoricalAlgebra: parse_json_acset
-import ModelingToolkit: @parameters, substitute, Differential, Num, @variables, ODESystem
-import DataFrames: DataFrame
-import CSV
-import JSON
-import MathML
-
-export conversions_for_valid_inputs
-
-"""
-Transform string into dataframe before it is used as input
-"""
-coerce_dataset(val::String) = CSV.read(IOBuffer(val), DataFrame)
-
-"""
-Act as identity since the value is already coerced
-"""
-coerce_dataset(val::DataFrame) = val
-
-"""
-Transform payload in ASKEM model rep into an ODESystem
-"""
-function coerce_model(val)
- obj = JSON.Parser.parse(val)
- model = obj["model"]
- ode = obj["semantics"]["ode"]
-
- t = only(@variables t)
- D = Differential(t)
-
- statenames = [Symbol(s["id"]) for s in model["states"]]
- statevars = [only(@variables $s) for s in statenames]
- statefuncs = [only(@variables $s(t)) for s in statenames]
-
- # get parameter values and state initial values
- paramnames = [Symbol(x["id"]) for x in ode["parameters"]]
- paramvars = [only(@parameters $x) for x in paramnames]
- paramvals = [x["value"] for x in ode["parameters"]]
- sym_defs = paramvars .=> paramvals
- initial_exprs = [MathML.parse_str(x["expression_mathml"]) for x in ode["initials"]]
- initial_vals = map(x->substitute(x, sym_defs), initial_exprs)
-
- # build equations from transitions and rate expressions
- rates = Dict(Symbol(x["target"]) => MathML.parse_str(x["expression_mathml"]) for x in ode["rates"])
- eqs = Dict(s => Num(0) for s in statenames)
- for tr in model["transitions"]
- ratelaw = rates[Symbol(tr["id"])]
- for s in tr["input"]
- s = Symbol(s)
- eqs[s] = eqs[s] - ratelaw
- end
- for s in tr["output"]
- s = Symbol(s)
- eqs[s] = eqs[s] + ratelaw
- end
- end
-
- subst = Dict(zip(statevars, statefuncs))
- eqs = [D(statef) ~ substitute(eqs[state], subst) for (state, statef) in zip(statenames, statefuncs)]
-
- ODESystem(eqs, t, statefuncs, paramvars; defaults = [statefuncs .=> initial_vals; sym_defs], name=Symbol(obj["name"]))
-end
-
-"""
-Coerce timespan
-"""
-coerce_timespan(val) = !isnothing(val) ? Tuple{Float64,Float64}(val) : nothing
-
-"""
-Inputs converted from payload to arguments expanded in operations.
-"""
-conversions_for_valid_inputs = Dict{Symbol,Function}(
- :model => coerce_model,
- :models => val -> coerce_model.(val),
- :timespan => coerce_timespan,
- :params => (val) -> Dict{String,Float64}(val),
- :initials => (val) -> Dict{String,Float64}(val),
- :dataset => coerce_dataset,
-)
-
-end # module ProblemInputs
diff --git a/src/contracts/SystemInputs.jl b/src/contracts/SystemInputs.jl
deleted file mode 100644
index dba521c..0000000
--- a/src/contracts/SystemInputs.jl
+++ /dev/null
@@ -1,30 +0,0 @@
-"""
-System provided information that is made available to operations
-"""
-module SystemInputs
-
-export Context
-
-struct Context
- job_id::Int64
- interactivity_hook::Function
- operation::Symbol
- raw_args
- function Context(job_id::Int64, interactivity_hook::Function, operation::Symbol, raw_args)
- new(job_id, interactivity_hook, operation, deepcopy(raw_args))
- end
-end
-
-function Base.iterate(context::Context, state=nothing)
- if isnothing(state)
- state = Set(fieldnames(Context))
- end
- unused = intersect(Set(fieldnames(Context)), state)
- if isempty(unused)
- return nothing
- end
- chosen_field = pop!(unused)
- (chosen_field=>getfield(context, chosen_field), unused)
-end
-
-end # module SystemInputs
\ No newline at end of file
diff --git a/src/operations/Operations.jl b/src/operations/Operations.jl
deleted file mode 100644
index 8b4b354..0000000
--- a/src/operations/Operations.jl
+++ /dev/null
@@ -1,137 +0,0 @@
-"""
-SciML Operation definitions
-"""
-module Operations
-
-import AlgebraicPetri: LabelledPetriNet, AbstractPetriNet
-import DataFrames: DataFrame, names
-import DifferentialEquations: solve, DiscreteCallback
-import ModelingToolkit: remake, ODESystem, ODEProblem
-import Symbolics: Num, getname, @variables, substitute
-import SymbolicIndexingInterface: states, parameters
-import EasyModelAnalysis
-import SciMLBase
-
-using LinearAlgebra: norm
-using Dates: Dates, DateTime, now
-
-# import MathML
-
-# NOTE: Operations exposed to the rest of the Simulation Service
-export simulate, calibrate, ensemble
-
-
-#-----------------------------------------------------------------------------# utils
-
-# Transform model representation into a SciML ODEProblem
-function to_prob(sys, tspan)
- ODEProblem(sys, [], tspan, saveat=1)
-end
-
-# Separate keys and values
-unzip(d::Dict) = (collect(keys(d)), collect(values(d)))
-
-# Unzip a collection of pairs
-unzip(ps) = first.(ps), last.(ps)
-
-
-# Transform list of args into Symbolics variables
-function symbolize_args(incoming_values, sys_vars)
- pairs = collect(incoming_values)
- ks, values = unzip(pairs)
- symbols = Symbol.(ks)
- vars_as_symbols = getname.(sys_vars)
- symbols_to_vars = Dict(vars_as_symbols .=> sys_vars)
- Dict(
- [
- symbols_to_vars[vars_as_symbols[findfirst(x -> x == symbol, vars_as_symbols)]]
- for symbol in symbols
- ] .=> values
- )
-end
-
-
-# Generate data and timestep list from a dataframe
-function select_data(df::DataFrame)
- data = Dict(
- key => df[!, key]
- for key in names(df) if key != "timestep"
- )
- df[!, "timestep"], data
-end
-
-#-----------------------------------------------------------------------------# IntermediateReulsts callback
-mutable struct IntermediateResults
- last_callback::DateTime # Track the last time the callback was called
- every::Dates.TimePeriod # Callback frequency e.g. `Dates.Second(5)`
- context # ::Union{Nothing, Context} (context.interactivity_hook sends Dict to frontend via RabbitMQ)
-end
-IntermediateResults(context; every=Dates.Second(5)) = IntermediateResults(typemin(DateTime), every, context)
-
-intermediate_results_to_rabbitmq(integrator) = Dict(
- :iter => integrator.iter,
- :time => integrator.t,
- :params => integrator.u,
- :abserr => norm(integrator.u - integrator.uprev),
- :retcode => Symbol(SciMLBase.check_error(integrator)),
-)
-
-function (o::IntermediateResults)(integrator)
- if o.last_callback + o.every ≤ now()
- o.last_callback = now()
- d = intermediate_results_to_rabbitmq(integrator)
- if isnothing(o.context)
- @info "IntermediateResults: $(NamedTuple(d))"
- else
- d[:job_id] = o.context.job_id
- o.context.interactivity_hook(d)
- end
- end
-end
-
-#-----------------------------------------------------------------------------# simulate
-function simulate(; model::ODESystem, timespan::Tuple{Float64,Float64}=(0.0, 100.0), context=nothing)
- prob = to_prob(model, timespan)
- callback = DiscreteCallback((args...) -> true, IntermediateResults(context))
- sol = solve(prob; progress = true, progress_steps = 1, callback)
- DataFrame(sol)
-end
-
-#-----------------------------------------------------------------------------# calibrate
-function calibrate(; model, dataset::DataFrame, context=nothing)
- timesteps, data = select_data(dataset)
- prob = to_prob(model, extrema(timesteps))
- p = Vector{Pair{Num, Float64}}([Num(param) => model.defaults[param] for param in parameters(model)])
- @show p
- data = symbolize_args(data, states(model))
- fitp = EasyModelAnalysis.datafit(prob, p, timesteps, data)
- @info fitp
- # DataFrame(fitp)
- fitp
-end
-
-#-----------------------------------------------------------------------------# ensemble
-function ensemble(; models::AbstractArray{AbstractPetriNet}, timespan::Tuple{Float64, Float64} = (0.0, 100.0), context=nothing)
- throw("ENSEMBLE IS NOT YET IMPLEMENTED")
-end
-
-
-# joshday: what is this function?
-"long running functions like global_datafit and sensitivity wrappers will need to be refactored to share callback info incrementally"
-function _global_datafit(; model::LabelledPetriNet,
- parameter_bounds::Dict{String,Tuple{Float64,Float64}},
- params::Dict{String,Float64},
- initials::Dict{String,Float64},
- t::Vector{Number},
- data::Dict{String,Vector{Float64}}
-)::DataFrame
- ks, vs = unzip(parameter_bounds)
- @assert all(issorted.(vs))
- prob = to_prob(model, params, initials, extrema(t))
- sys = prob.f.sys
- p = symbolize_args(params, parameters(sys)) # this ends up being a second call to symbolize_args 🤷
- fitp = global_datafit(prob, collect(p), t, data)
- DataFrame(fitp)
-end
-
-end # module Operations
diff --git a/src/service/ArgIO.jl b/src/service/ArgIO.jl
deleted file mode 100644
index 8690e94..0000000
--- a/src/service/ArgIO.jl
+++ /dev/null
@@ -1,122 +0,0 @@
-"""
-Provide external awareness / service-related side-effects to SciML operations
-"""
-module ArgIO
-
-import Symbolics
-import DataFrames: rename!, transform!, DataFrame, ByRow
-import CSV
-import HTTP: Request
-import JSON3 as JSON
-
-include("../Settings.jl"); import .Settings: settings
-include("./AssetManager.jl"); import .AssetManager: fetch_dataset, fetch_model, update_simulation, upload
-
-export prepare_input, prepare_output
-
-
-# """
-# Transform requests into arguments to be used by operation
-
-# Optionally, IDs are hydrated with the corresponding entity from TDS.
-# """
-function prepare_input(args; context...)
- if settings["ENABLE_TDS"]
- update_simulation(context[:job_id], Dict([:status=>"running", :start_time => time()]))
- end
- if in(:timespan, keys(args))
- args[:timespan] = (args[:timespan]["start"], args[:timespan]["end"])
- end
- if in(:model_config_id, keys(args))
- args[:model] = fetch_model(args[:model_config_id])
- end
- if in(:dataset, keys(args)) && !isa(args[:dataset], String)
- if !isa(args[:dataset], String)
- args[:dataset] = fetch_dataset(args[:dataset]["id"], args[:dataset]["filename"], get(args[:dataset], "mappings", Dict()))
- else
- io = IOBuffer(args[:dataset])
- seekstart(io)
- args[:dataset] = CSV.read(io, DataFrame)
- end
- end
- if in(:model_config_ids, keys(args))
- args[:models] = fetch_model.(map(string, args[:model_ids]))
- end
- if !in(:timespan, keys(args))
- args[:timespan] = nothing
- end
- if in(:extra, keys(args))
- for (key, value) in Dict(args[:extra])
- args[Symbol(key)] = value
- end
- end
- args
-end
-
-# """
-# Generate a `prepare_input` function that is already contextualized
-# """
-function prepare_input(context)
- function contextualized_prepare_input(args)
- prepare_input(args; context...)
- end
-end
-
-# """
-# Normalize the header of the resulting dataframe and return a CSV
-
-# Optionally, the CSV is saved to TDS instead an the coreresponding ID is returned.
-# """
-function prepare_output(dataframe::DataFrame; name="0", context...)
- stripped_names = names(dataframe) .=> (r -> replace(r, "(t)"=>"")).(names(dataframe))
- rename!(dataframe, stripped_names)
- if !settings["ENABLE_TDS"]
- io = IOBuffer()
- # TODO(five): Write to remote server
- CSV.write(io, dataframe)
- return String(take!(io))
- else
- return upload(dataframe, context[:job_id]; name=name)
- end
-end
-
-# """
-# Coerces NaN values to nothing for each parameter
-# """
-function prepare_output(params::Vector{Pair{Symbolics.Num, Float64}}; name="0", context...)
- nan_to_nothing(value) = isnan(value) ? nothing : value
- fixed_params = Dict(key => nan_to_nothing(value) for (key, value) in params)
- if settings["ENABLE_TDS"]
- return upload(fixed_params, context[:job_id]; name=name)
- else
- params
- end
-end
-
-
-# """
-# Coerces NaN values to nothing for each parameter
-# """
-function prepare_output(results::Dict{String}; context...)
- prepared_outputs = []
- for (name, value) in results
- append!(prepared_outputs, [prepare_output(value; context..., name=name)])
- end
- if settings["ENABLE_TDS"]
- update_simulation(context[:job_id], Dict([:status => "complete", :result_files => prepared_outputs, :completed_time => time()]))
- else
- results
- end
-end
-
-# """
-# Generate a `prepare_output` function that is already contextualized
-# """
-function prepare_output(context)
- function contextualized_prepare_output(arg)
- prepare_output(arg; context...)
- end
-end
-
-
-end
diff --git a/src/service/AssetManager.jl b/src/service/AssetManager.jl
deleted file mode 100644
index 03daa6c..0000000
--- a/src/service/AssetManager.jl
+++ /dev/null
@@ -1,107 +0,0 @@
-"""
-Asset fetching from TDS
-"""
-module AssetManager
-
-import DataFrames: rename!, DataFrame
-import CSV, Downloads, HTTP
-import OpenAPI.Clients: Client
-import JSON3 as JSON
-import UUIDs: UUID
-include("../Settings.jl"); import .Settings: settings
-
-export fetch_dataset, fetch_model, update_simulation, upload
-
-"""
-Generate UUID with prefix
-"""
-function gen_uuid(job_id)
- "sciml-" * string(UUID(job_id))
-end
-
-"""
-Return model JSON as string from TDS by ID
-"""
-function fetch_model(model_id::String)
- response = HTTP.get("$(settings["TDS_URL"])/model_configurations/$model_id", ["Content-Type" => "application/json"])
- body = response.body |> JSON.read ∘ String
- JSON.write(body.configuration)
-end
-
-"""
-Return csv from TDS by ID
-"""
-function fetch_dataset(dataset_id::String, filename::String, mappings::Dict=Dict())
- # TODO(five): Select name dynamicially
- url = "$(settings["TDS_URL"])/datasets/$dataset_id/download-url?filename=$filename"
- response = HTTP.get(url, ["Content-Type" => "application/json"])
- body = response.body |> JSON.read ∘ String
- io = IOBuffer()
- Downloads.download(body.url, io)
- seekstart(io)
- dataframe = CSV.read(io, DataFrame)
- for (from, to) in mappings rename!(dataframe, Symbol(from)=>Symbol(to)) end
- dataframe
-end
-
-"""
-Report the job as completed
-"""
-function update_simulation(job_id::Int64, updated_fields::Dict{Symbol})
- uuid = gen_uuid(job_id)
- response = nothing
- remaining_retries = 10 # TODO(five)??: Set this with environment variable
- while remaining_retries != 0
- remaining_retries -= 1
- sleep(2)
- try
- response = HTTP.get("$(settings["TDS_URL"])/simulations/$uuid", ["Content-Type" => "application/json"])
- break
- catch exception
- if isa(exception,HTTP.Exceptions.StatusError) && exception.status == 404
- response = nothing
- else
- throw(exception)
- end
- end
- end
- if isnothing(response)
- throw("Job cannot finish because it does not exist in TDS")
- end
- body = response.body |> Dict ∘ JSON.read ∘ String
- for field in updated_fields
- body[field.first] = field.second
- end
- HTTP.put("$(settings["TDS_URL"])/simulations/$uuid", ["Content-Type" => "application/json"], body=JSON.write(body))
-end
-
-"""
-Upload a CSV to S3/MinIO
-"""
-function upload(output::DataFrame, job_id; name="result")
- uuid = gen_uuid(job_id)
- response = HTTP.get("$(settings["TDS_URL"])/simulations/$uuid/upload-url?filename=$name.csv", ["Content-Type" => "application/json"])
- # TODO(five): Stream so there isn't duplication
- io = IOBuffer()
- CSV.write(io, output)
- seekstart(io)
- url = JSON.read(response.body)[:url]
- HTTP.put(url, ["Content-Type" => "application/json"], body = take!(io))
- bare_url = split(url, "?")[1]
- bare_url
-end
-
-
-"""
-Upload a JSON to S3/MinIO
-"""
-function upload(output::Dict, job_id; name="result")
- uuid = gen_uuid(job_id)
- response = HTTP.get("$(settings["TDS_URL"])/simulations/$uuid/upload-url?filename=$name.json", ["Content-Type" => "application/json"])
- url = JSON.read(response.body)[:url]
- HTTP.put(url, ["Content-Type" => "application/json"], body = JSON.write(output))
- bare_url = split(url, "?")[1]
- bare_url
-end
-
-end # module AssetManager
diff --git a/src/service/Execution.jl b/src/service/Execution.jl
deleted file mode 100644
index acf7a9f..0000000
--- a/src/service/Execution.jl
+++ /dev/null
@@ -1,115 +0,0 @@
-"""
-Manage jobs
-"""
-module Execution
-
-import HTTP: Request, Response
-import JSON3 as JSON
-import Oxygen: json
-import JobSchedulers: submit!, job_query, result, generate_id, Job, JobSchedulers
-import UUIDs: UUID
-
-include("../contracts/Interface.jl"); import .Interface: available_operations, use_operation, Context
-include("./AssetManager.jl"); import .AssetManager: update_simulation
-include("./ArgIO.jl"); import .ArgIO: prepare_input, prepare_output
-include("./Queuing.jl"); import .Queuing: publish_to_rabbitmq
-include("../Settings.jl"); import .Settings: settings
-
-export make_deterministic_run, retrieve_job
-
-SCHEDULER_TO_API_STATUS_MAP = Dict(
- JobSchedulers.QUEUING => :queued,
- JobSchedulers.RUNNING => :running,
- JobSchedulers.DONE => :complete,
- JobSchedulers.FAILED => :error,
- JobSchedulers.CANCELLED => :cancelled,
-)
-
-"""
-Generate the task to run with the correct context
-"""
-function contextualize_prog(context)
- function prog(args)
- try
- (prepare_output(context) ∘ use_operation(context) ∘ prepare_input(context))(args)
- catch exception
- if settings["ENABLE_TDS"]
- update_simulation(context.job_id, Dict([:status=>"error"]))
- end
- rethrow(exception)
- end
- end
-end
-
-# Coerce request object to dict
-make_deterministic_run(req::Request, operation::String) = make_deterministic_run(json(req, Dict{Symbol, Any}), operation)
-
-"""
-Schedule a sim run given an operation
-"""
-function make_deterministic_run(args, operation::String)
- # TODO(five): Spawn remote workers and run jobs on them
- if !in(operation, keys(available_operations))
- return Response(
- 404,
- ["Content-Type" => "text/plain; charset=utf-8"],
- body="Operation not found"
- )
- end
-
- publish_hook = settings["RABBITMQ_ENABLED"] ? publish_to_rabbitmq : (_...) -> nothing
-
- context = Context(
- generate_id(),
- publish_hook,
- Symbol(operation),
- args
- )
- prog = contextualize_prog(context)
- sim_run = Job(@task(prog(args)))
- sim_run.id = context.job_id
- submit!(sim_run)
- uuid = "sciml-" * string(UUID(sim_run.id))
- Response(
- 201,
- ["Content-Type" => "application/json; charset=utf-8"],
- body=JSON.write("simulation_id" => uuid)
- )
-end
-
-
-"""
-Get status of sim
-"""
-function retrieve_job(_, uuid::String, element::String)
- id = Int64(UUID(split(uuid, "sciml-")[2]).value)
- job = job_query(id)
- if isnothing(job)
- return Response(
- 404,
- ["Content-Type" => "text/plain; charset=utf-8"],
- body="Job does not exist"
- )
- end
- if element == "status"
- return Dict("status" => SCHEDULER_TO_API_STATUS_MAP[job.state])
- elseif element == "result"
- if job.state == :done
- return result(job)
- else
- return Response(
- 400,
- ["Content-Type" => "text/plain; charset=utf-8"],
- body="Job has not completed"
- )
- end
- else
- return Response(
- 404,
- ["Content-Type" => "text/plain; charset=utf-8"],
- body="Element not found"
- )
- end
-end
-
-end # module Execution
diff --git a/src/service/Queuing.jl b/src/service/Queuing.jl
deleted file mode 100644
index a4714fa..0000000
--- a/src/service/Queuing.jl
+++ /dev/null
@@ -1,55 +0,0 @@
-"""
-RabbitMQ Integration
-"""
-module Queuing
-
-import Logging: AbstractLogger, LogLevel
-import Logging
-import AMQPClient: amqps_configure, basic_publish, channel, connection, Message, AMQPS_DEFAULT_PORT, UNUSED_CHANNEL
-import JSON3 as JSON
-
-include("../Settings.jl"); import .Settings: settings
-
-"""
-Connect to channel
-"""
-function get_channel()
- conn = connection(;
- virtualhost="/",
- host="localhost",
- port=settings["RABBITMQ_PORT"],
- auth_params=Dict{String, Any}("MECHANISM"=>"AMQPLAIN", "LOGIN"=>settings["RABBITMQ_LOGIN"], "PASSWORD"=>settings["RABBITMQ_PASSWORD"]),
- #amqps=amqps_configure()
- )
- channel(conn, UNUSED_CHANNEL, true)
-end
-
-"""
-Publish JSON to RabbitMQ
-"""
-function publish_to_rabbitmq(content)
- chan = get_channel() # TODO(five): Don't recreate for each call
- json = convert(Vector{UInt8}, codeunits(JSON.write(content)))
- message = Message(json, content_type="application/json")
- # TODO(five): Regen channel
- basic_publish(chan, message; exchange="", routing_key=settings["RABBITMQ_ROUTE"])
-end
-
-"""
-Logger that calls an arbitrary hook on a message
-"""
-struct MQLogger <: AbstractLogger
- publish_hook::Function
-end
-
-"""
-MQLogger preloaded with RabbitMQ publishing
-"""
-MQLogger() = MQLogger(publish_to_rabbitmq)
-
-Logging.shouldlog(::MQLogger, args...; kwargs...) = true
-Logging.min_enabled_level(::MQLogger) = LogLevel(0)
-Logging.handle_message(logger::MQLogger, level, message, args...; kwargs...) = logger.publish_hook(message)
-Logging.catch_exceptions(::MQLogger) = true
-
-end # module Queuing
diff --git a/src/service/Service.jl b/src/service/Service.jl
deleted file mode 100644
index 167f604..0000000
--- a/src/service/Service.jl
+++ /dev/null
@@ -1,12 +0,0 @@
-module Service
-
-import Reexport: @reexport
-include("../Settings.jl")
-
-include("./AssetManager.jl")
-include("./ArgIO.jl")
-include("./Queuing.jl")
-include("./Execution.jl")
-@reexport using .ArgIO, .AssetManager, .Queuing, .Execution
-
-end # module Service
diff --git a/test/ensemble.jl b/test/ensemble.jl
deleted file mode 100644
index 885dd73..0000000
--- a/test/ensemble.jl
+++ /dev/null
@@ -1,119 +0,0 @@
-
-dfc = CSV.read("cases.csv", DataFrame)
-dfd = CSV.read("deaths.csv", DataFrame)
-dfh = CSV.read("hosp.csv", DataFrame)
-function calibration_data(dfc, dfd, dfh; use_hosp=false)
-
- us_ = dfc[dfc.location.=="US", :]
- usd_ = dfd[dfd.location.=="US", :]
- ush_ = dfh[dfh.location.=="US", :]
-
- rename!(us_, :value => :cases)
- rename!(usd_, :value => :deaths)
- rename!(ush_, :value => :hosp)
-
- if use_hosp
- d_ = innerjoin(us_, usd_, ush_, on=:date, makeunique=true)
- d = d_[:, [:date, :cases, :deaths, :hosp]]
- else
- d_ = innerjoin(us_, usd_, on=:date, makeunique=true)
- d = d_[:, [:date, :cases, :deaths]]
- end
-
- us_ = d
- sort!(us_, :date)
- us = deepcopy(us_)
- # us[!, :unix] = datetime2unix.(DateTime.(us.date))
- insertcols!(us, 1, :unix => datetime2unix.(DateTime.(us.date)))
- # us
-end
-covidhub = calibration_data(dfc, dfh, dfd, use_hosp=true)
-fitdata = covidhub[1:20, [:t, :cases, :deaths, :hosp]]
-jdata = objecttable(fitdata)
-write("fitdata.json", jdata)
-
-# todo global_datafit
-sir_fn = "/Users/anand/.julia/dev/simulation-scheduler/examples/sir.json"
-sird_fn = "/Users/anand/.julia/dev/simulation-scheduler/examples/sird.json"
-sirh_fn = "/Users/anand/.julia/dev/simulation-scheduler/examples/sirh.json"
-sirhd_fn = "/Users/anand/.julia/dev/simulation-scheduler/examples/sirhd.json"
-pns = sir, sird, sirh, sirhd = [read_json_acset(T, fn) for fn in (sir_fn, sird_fn, sirh_fn, sirhd_fn)]
-
-syss = sys1, sys2, sys3, sys4 = ODESystem.(pns)
-
-strat_fn = "/Users/anand/.julia/dev/ASKEM_Evaluation_Staging/docs/src/Scenario3/sirhd_renew_vax.json"
-sp = read_json_acset(LabelledPetriNet, strat_fn)
-@which ODESystem(sp)
-st_sys = ODESystem(sp)
-st_sts = states(st_sys)
-st_ps = parameters(st_sys)
-
-# this section demonstrates the difficulty of quickly building observed maps from stratified petrinets
-
-strat_st_vecs = eval.(Meta.parse.(String.(Symbolics.getname.(st_sts))))
-vsts = st_sts[findall(==("V"), last.(strat_st_vecs))]
-usts = st_sts[findall(==("U"), last.(strat_st_vecs))]
-ists = st_sts[findall(==("I"), first.(strat_st_vecs))]
-
-sidarthe = ODESystem(petri)
-@unpack Susceptible, Infected, Diagnosed, Ailing, Recognized, Threatened, Healed, Extinct = sidarthe
-S, I, D, A, R, T, H, E = Susceptible, Infected, Diagnosed, Ailing, Recognized, Threatened,
-Healed, Extinct
-Hospitalizations = Recognized + Threatened
-Cases = Diagnosed + Recognized + Threatened
-cases_data = map(sum, eachrow(df[:, ["Diagnosed(t)", "Recognized(t)", "Threatened(t)"]]))
-hospitalizations_data = map(sum, eachrow(df[:, ["Recognized(t)", "Threatened(t)"]]))
-df[!, "Cases(t)"] = cases_data
-df[!, "Hospitalizations(t)"] = hospitalizations_data
-df[!, "Extinct"] = hospitalizations_data
-sym_data = [=> df[:, "Susceptible(t)"]]
-
-
-sns = snames.(pns)
-all_sns = map(x -> string.(x), sns)
-tns = tnames.(pns)
-all_tns = map(x -> string.(x), tns)
-to_init(x) = x .=> rand(length(x))
-all_inits = to_init.(all_sns)
-all_tspan = (0.0, 100.0)
-all_params = to_init.(all_tns)
-
-mapping = Dict([
- "I" => "cases",
- "H" => "hosp",
- "D" => "deaths"
-])
-
-jd = (;)
-sirhd_j = generate_json_acset(sirhd)
-ensemble_nt = (; models=[(; petri=sirhd_j, params=Dict(all_params[4]), initials=Dict(all_inits[4]), tspan=all_tspan, mapping=mapping)], data=namedtuple(JSON3.read(jdata)))
-ensemble_json = JSON3.write(ensemble_nt)
-write(_log("ensemble.json"), ensemble_json)
-b = JSON3.read(read(_log("ensemble.json")))
-models = b.models
-m = b.models[1]
-data = b.data
-mp = collect(Dict(m.mapping))
-map_to_data(mp, d) = string.(first.(mp)) .=> map(x -> Float64.(collect(d[Symbol(x)])), last.(mp))
-# build_cali_nt
-mpn = JSON3.write(m.petri)
-
-# write_json_acset("sirhd.json", m.petri)
-parse_json_acset(TAny, mpn)
-function ensemble_calibrate(; models, data)
- # m = models[1]
- fits = []
- for m in models
- data_ = map_to_data(mp, data)
-
- params_ = collect(m.params)
- paramsd = Dict(string.(first.(params_)) .=> last.(params_))
-
- initials_ = collect(m.initials)
- initialsd = Dict(string.(first.(initials_)) .=> last.(initials_))
- t = data.t
- nt = (; model=parse_json_acset(TAny, mpn), params=paramsd, initials=initialsd, t=Float64.(collect(t)), data=Dict(data_))
- push!(fits, SimulationService.SciMLInterface.calibrate(; nt...))
- end
- fits
-end
\ No newline at end of file
diff --git a/test/runtests.jl b/test/runtests.jl
index 9afcca1..a0ca2d6 100644
--- a/test/runtests.jl
+++ b/test/runtests.jl
@@ -1,27 +1,81 @@
using Test
-using Downloads: download
+using DataFrames
+using EasyConfig
using HTTP
using JSON3
+using Oxygen
+using SciMLBase: solve
+
using SimulationService
-# using SafeTestsets
+SimulationService.SIMSERVICE_ENABLE_TDS = false
#-----------------------------------------------------------------------------# Operations
@testset "Operations" begin
@testset "simulate" begin
url = "https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/main/petrinet/examples/sir.json"
- json_string = read(download(url), String)
- model = SimulationService.Service.Execution.Interface.Available.ProblemInputs.coerce_model(json_string)
- f = SimulationService.Service.Execution.Interface.Available.get_operation(:simulate)
- f(; model, context=nothing)
+ obj = SimulationService.get_json(url)
+ sys = SimulationService.ode_system_from_amr(obj)
+ op = SimulationService.Simulate(sys, (0.0, 100.0))
+ df = solve(op)
+ @test df isa DataFrame
+ @test extrema(df.timestamp) == (0.0, 100.0)
end
+
@testset "calibrate" begin
# TODO
end
+
@testset "ensemble" begin
# TODO
end
end
+#-----------------------------------------------------------------------------# test routes
+@testset "Server Routes" begin
+ SimulationService.SIMSERVICE_ENABLE_TDS = false
+ start!()
+
+ url = SimulationService.server_url[]
+
+ sleep(1) # wait for server to start
+
+ @testset "/" begin
+ res = HTTP.get(url)
+ @test res.status == 200
+ @test JSON3.read(res.body).status == "ok"
+ end
+
+ @testset "/simulate" begin
+ file = joinpath(@__DIR__, "..", "examples", "BIOMD0000000955_askenet.json")
+ amr = JSON3.read(read(file), Config)
+ json = Config(test_amr = amr, timespan=(0, 90))
+ body = JSON3.write(json)
+ res = HTTP.post("$url/simulate", ["Content-Type" => "application/json"]; body=body)
+ @test res.status == 201
-# @safetestset "sciml" begin include("sciml.jl") end
+ done_or_failed = false
+ job_id = JSON3.read(res.body).simulation_id
+ while !done_or_failed
+ status = JSON3.read(HTTP.get("$url/status/$job_id").body)
+ if status.status == "complete"
+ @test true
+ done_or_failed = true
+ elseif status.status == "error"
+ @test false
+ done_or_failed = true
+ end
+ sleep(1)
+ end
+ end
+
+ @testset "/calibrate" begin
+ @test true # TODO
+ end
+
+ @testset "/ensemble" begin
+ @test true # TODO
+ end
+
+ stop!()
+end
diff --git a/test/sciml.jl b/test/sciml.jl
deleted file mode 100644
index 6a67aa9..0000000
--- a/test/sciml.jl
+++ /dev/null
@@ -1,58 +0,0 @@
-using SimulationService, AlgebraicPetri, DataFrames, DifferentialEquations, ModelingToolkit, Symbolics, EasyModelAnalysis, Catlab, Catlab.CategoricalAlgebra, JSON3, UnPack, SimulationService.Service.Execution.Interface.Operations
-using CSV, DataFrames, JSONTables
-using ForwardDiff
-
-_datadir() = joinpath(@__DIR__, "../examples")
-_data(s) = joinpath(_datadir(), s)
-
-_logdir() = joinpath(@__DIR__, "logs")
-_log(s) = joinpath(_logdir(), s)
-mkpath(_logdir())
-
-bn = "BIOMD0000000955_miranet.json"
-fn = _data(bn)
-T = PropertyLabelledReactionNet{Number,Number,Dict}
-TAny = PropertyLabelledReactionNet{Any,Any,Any}
-
-# we should be able to assume that all concentration and rate are set (despite this not being the case for the other 2 Miras from ben)
-petri = read_json_acset(T, fn)
-ps = string.(tnames(petri)) .=> petri[:rate]
-u0 = string.(snames(petri)) .=> petri[:concentration]
-
-params = Dict(ps)
-initials = Dict(u0)
-timespan = (0.0, 100.0)
-
-nt = (; model=petri, params, initials, timespan)
-body = Dict(pairs(nt))
-j = JSON3.write(body)
-forecast_fn = _log("forecast.json")
-write(forecast_fn, j)
-
-df = SimulationService.Service.Execution.Interface.Available.get_operation(:simulate)(; nt..., context=nothing)
-@test df isa DataFrame
-
-params["t1"] = 0.1
-nt = (; model = petri, params, initials, timespan)
-df2 = SimulationService.Service.Execution.Interface.Available.get_operation(:simulate)(; nt..., context=nothing)
-
-timesteps = df.timestamp
-data = Dict(["Susceptible" => df[:, 2]])
-rename!(df, Dict("Susceptible(t)" => "Susceptible", "timestamp" => "timestep"))
-fit_args = (; model=petri, params, initials, dataset=df[:, ["timestep", "Susceptible"]])
-fit_body = Dict(pairs(fit_args))
-fit_j = JSON3.write(fit_body)
-calibrate_fn = _log("calibrate.json")
-write(calibrate_fn, fit_j)
-
-fitp = SimulationService.Service.Execution.Interface.Available.get_operation(:calibrate)(; fit_args..., context=nothing)
-prob = SimulationService.Service.Execution.Interface.Operations.Utils.to_prob(petri, params, initials, extrema(timesteps))
-sys = prob.f.sys
-
-# example of dloss/dp
-pkeys = parameters(sys)
-pvals = [params[string(x)] for x in pkeys]
-data = [states(sys)[1] => df[:, 2]]
-
-l = EasyModelAnalysis.l2loss(pvals, (prob, pkeys, timesteps, data))
-ForwardDiff.gradient(p -> EasyModelAnalysis.l2loss(p, (prob, pkeys, timesteps, data)), last.(fitp))