From c6da908c2df948e0a8ab9b1b7c52af943403d684 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sat, 9 Jan 2021 17:23:38 -0500 Subject: [PATCH 1/9] updates for new Symutils --- docs/src/tutorials/generated_systems.md | 8 ++++---- src/networkapi.jl | 2 +- test/make_model.jl | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/src/tutorials/generated_systems.md b/docs/src/tutorials/generated_systems.md index 86ce227ee6..63108b5451 100644 --- a/docs/src/tutorials/generated_systems.md +++ b/docs/src/tutorials/generated_systems.md @@ -15,18 +15,18 @@ API method listed first: Each `Reaction` within `reactions(rn)` has a number of subfields. For `rx` a `Reaction` we have: -* `rx.substrates`, a vector of `ModelingToolkit.Term`s storing each +* `rx.substrates`, a vector of ModelingToolkit expressions storing each substrate variable. -* `rx.products`, a vector of `ModelingToolkit.Term`s storing each product +* `rx.products`, a vector of ModelingToolkit expressions storing each product variable. * `rx.substoich`, a vector storing the corresponding integer stoichiometry of each substrate species in `rx.substrates`. * `rx.prodstoich`, a vector storing the corresponding integer stoichiometry of each product species in `rx.products`. -* `rx.rate`, a `Number, `ModelingToolkit.Sym` or `ModelingToolkit.Term` +* `rx.rate`, a `Number, `ModelingToolkit.Sym` or ModelingToolkit expression representing the reaction rate. E.g., for a reaction like `k*X, Y --> X+Y`, we'd have `rate = k*X`. -* `rx.netstoich`, a vector of pairs mapping the `ModelingToolkit.Term` for +* `rx.netstoich`, a vector of pairs mapping the ModelingToolkit expression for each species that changes numbers by the reaction to how much it changes. E.g., for `k, X + 2Y --> X + W`, we'd have `rx.netstoich = [Y(t) => -2, W(t) => 1]`. * `rx.only_use_rate`, a boolean that is `true` if the reaction was made with diff --git a/src/networkapi.jl b/src/networkapi.jl index 80af9ec689..5305e49449 100644 --- a/src/networkapi.jl +++ b/src/networkapi.jl @@ -284,7 +284,7 @@ id of the parameter within the system. """ function addparam!(network::ReactionSystem, p::Symbolic; disablechecks=false) # we don't check subsystems since we will add it to the top-level system... - if p isa Term && !(p.op isa Sym) + if istree(p) && !(operation(p) isa Sym) error("If the passed in parameter is an expression, it must correspond to an underlying Variable.") end curidx = disablechecks ? nothing : findfirst(S -> isequal(S, p), network.ps) diff --git a/test/make_model.jl b/test/make_model.jl index bc1465bbe9..18a47f2358 100644 --- a/test/make_model.jl +++ b/test/make_model.jl @@ -1,15 +1,15 @@ ### Fetch required packages and reaction networks ### using DiffEqBase, Catalyst, Random, Test, UnPack -using ModelingToolkit: operation, Sym, Term +using ModelingToolkit: operation, Sym, istree include("test_networks.jl") ### Debugg functions ### -function opname(x::Term) - nameof(operation(x)) +function opname(x) + istree(x) && return nameof(operation(x)) + nameof(s) end -opname(s::Sym) = nameof(s) alleq(xs,ys) = all(isequal(x,y) for (x, y) in zip(xs, ys)) From 0bf139802266821b0d4e8e779143f3a01b3fdf4c Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sat, 9 Jan 2021 18:54:20 -0500 Subject: [PATCH 2/9] fix opname --- test/make_model.jl | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/make_model.jl b/test/make_model.jl index 18a47f2358..5a4b976c40 100644 --- a/test/make_model.jl +++ b/test/make_model.jl @@ -6,10 +6,7 @@ include("test_networks.jl") ### Debugg functions ### -function opname(x) - istree(x) && return nameof(operation(x)) - nameof(s) -end +opname(x) = istree(x) ? nameof(operation(x)) : nameof(x) alleq(xs,ys) = all(isequal(x,y) for (x, y) in zip(xs, ys)) From 3ec4bcc42157fffce23f84d9a36a483764bd096b Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 18 Jan 2021 19:17:58 -0500 Subject: [PATCH 3/9] fix latexify --- test/latexify.jl | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/test/latexify.jl b/test/latexify.jl index 29eed41733..51f17af5ee 100644 --- a/test/latexify.jl +++ b/test/latexify.jl @@ -85,15 +85,42 @@ end p_a k n d_a p_b d_b r_a r_b @test latexify(r) == replace( raw"\begin{align} \require{mhchem} -\ce{ \varnothing &<=>[\frac{p_{a} \left( B\left( t \right) \right)^{n}}{k^{n} + \left( B\left( t \right) \right)^{n}}][d_{a}] A}\\ -\ce{ \varnothing &<=>[p_{b}][d_{b}] B}\\ -\ce{ 3 B &<=>[r_{a}][r_{b}] A} +\ce{ \varnothing &->[K1^{n1} v1^{2} \left( \mathrm{X4}\left( t \right) \right)^{n1} \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X2}\left( t \right) \right)^{n1} \right) \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X4}\left( t \right) \right)^{n1} \right)] X1}\\ +\ce{ \varnothing &->[v2 \left( \mathrm{X5}\left( t \right) \right)^{n2} \mathrm{inv}\left( K2^{n2} + \left( \mathrm{X5}\left( t \right) \right)^{n2} \right)] X2}\\ +\ce{ \varnothing &->[v3 \left( \mathrm{X3}\left( t \right) \right)^{n3} \mathrm{inv}\left( K3^{n3} + \left( \mathrm{X3}\left( t \right) \right)^{n3} \right)] X3}\\ +\ce{ \varnothing &->[v4 K4^{n4} \mathrm{inv}\left( K4^{n4} + \left( \mathrm{X1}\left( t \right) \right)^{n4} \right)] X4}\\ +\ce{ \varnothing &->[v5 \left( \mathrm{X2}\left( t \right) \right)^{n5} \mathrm{inv}\left( K5^{n5} + \left( \mathrm{X2}\left( t \right) \right)^{n5} \right)] X5}\\ +\ce{ X2 &<=>[k1][k2] X1 + 2 X4}\\ +\ce{ X4 &<=>[k3][k4] X3}\\ +\ce{ 3 X5 + X1 &<=>[k5][k6] X2}\\ +\ce{ X1 &->[d1] \varnothing}\\ +\ce{ X2 &->[d2] \varnothing}\\ +\ce{ X3 &->[d3] \varnothing}\\ +\ce{ X4 &->[d4] \varnothing}\\ +\ce{ X5 &->[d5] \varnothing} \end{align} ", "\r\n"=>"\n") # Latexify.@generate_test latexify(r, mathjax=false) @test latexify(r, mathjax = false) == replace( raw"\begin{align} +\ce{ \varnothing &->[$K1^{n1} v1^{2} \left( \mathrm{X4}\left( t \right) \right)^{n1} \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X2}\left( t \right) \right)^{n1} \right) \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X4}\left( t \right) \right)^{n1} \right)$] X1}\\ +\ce{ \varnothing &->[$v2 \left( \mathrm{X5}\left( t \right) \right)^{n2} \mathrm{inv}\left( K2^{n2} + \left( \mathrm{X5}\left( t \right) \right)^{n2} \right)$] X2}\\ +\ce{ \varnothing &->[$v3 \left( \mathrm{X3}\left( t \right) \right)^{n3} \mathrm{inv}\left( K3^{n3} + \left( \mathrm{X3}\left( t \right) \right)^{n3} \right)$] X3}\\ +\ce{ \varnothing &->[$v4 K4^{n4} \mathrm{inv}\left( K4^{n4} + \left( \mathrm{X1}\left( t \right) \right)^{n4} \right)$] X4}\\ +\ce{ \varnothing &->[$v5 \left( \mathrm{X2}\left( t \right) \right)^{n5} \mathrm{inv}\left( K5^{n5} + \left( \mathrm{X2}\left( t \right) \right)^{n5} \right)$] X5}\\ +\ce{ X2 &<=>[$k1$][$k2$] X1 + 2 X4}\\ +\ce{ X4 &<=>[$k3$][$k4$] X3}\\ +\ce{ 3 X5 + X1 &<=>[$k5$][$k6$] X2}\\ +\ce{ X1 &->[$d1$] \varnothing}\\ +\ce{ X2 &->[$d2$] \varnothing}\\ +\ce{ X3 &->[$d3$] \varnothing}\\ +\ce{ X4 &->[$d4$] \varnothing}\\ +\ce{ X5 &->[$d5$] \varnothing} +\end{align} +", "\r\n"=>"\n") +@test latexify(r, mathjax = false) == replace( +raw"\begin{align} \ce{ \varnothing &<=>[$\frac{p_{a} \left( B\left( t \right) \right)^{n}}{k^{n} + \left( B\left( t \right) \right)^{n}}$][$d_{a}$] A}\\ \ce{ \varnothing &<=>[$p_{b}$][$d_{b}$] B}\\ \ce{ 3 B &<=>[$r_{a}$][$r_{b}$] A} From 724c324a4da515709343f95548975dd876ccd604 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 18 Jan 2021 20:15:38 -0500 Subject: [PATCH 4/9] use isapprox instead of 100*eps() --- test/make_model.jl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/make_model.jl b/test/make_model.jl index 5a4b976c40..5ebfe5b690 100644 --- a/test/make_model.jl +++ b/test/make_model.jl @@ -175,9 +175,9 @@ for networks in identical_networks_1 u0 = factor*rand(length(networks[1].states)) p = factor*rand(length(networks[1].ps)) t = rand() - @test all(abs.(f1(u0,p,t) .- f2(u0,p,t)) .< 100*eps()) - @test all(abs.(f1.jac(u0,p,t) .- f2.jac(u0,p,t)) .< 100*eps()) - @test all(abs.(g1(u0,p,t) .- g2(u0,p,t)) .< 100*eps()) + @test all(abs.(f1(u0,p,t) .≈ f2(u0,p,t))) + @test all(abs.(f1.jac(u0,p,t) .≈ f2.jac(u0,p,t))) + @test all(abs.(g1(u0,p,t) .≈ g2(u0,p,t))) end end @@ -230,9 +230,9 @@ for networks in identical_networks_2 u0 = factor*rand(length(networks[1].states)) p = factor*rand(length(networks[1].ps)) t = rand() - @test all(abs.(f1(u0,p,t) .- f2(u0,p,t)) .< 100*eps()) - @test all(abs.(f1.jac(u0,p,t) .- f2.jac(u0,p,t)) .< 100*eps()) - @test all(abs.(g1(u0,p,t) .- g2(u0,p,t)) .< 100*eps()) + @test all(f1(u0,p,t) .≈ f2(u0,p,t)) + @test all(f1.jac(u0,p,t) .≈ f2.jac(u0,p,t)) + @test all(g1(u0,p,t) .≈ g2(u0,p,t)) end end @@ -346,9 +346,9 @@ for factor in [1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3] κ2 = factor*rand(); κ3 = factor*rand(); κ6 = factor*rand(); τ = rand() p1 = [τ, κ2, κ3, τ, τ, κ6]; p2 = [κ2, κ3, κ6]; - @test all(abs.(f1(u0,p1,τ) .- f2(u0,p2,τ)) .< 100*eps()) - @test all(abs.(f1.jac(u0,p1,τ) .- f2.jac(u0,p2,τ)) .< 100*eps()) - @test all(abs.(g1(u0,p1,τ) .- g2(u0,p2,τ)) .< 100*eps()) + @test all(f1(u0,p1,τ) .≈ f2(u0,p2,τ)) + @test all(f1.jac(u0,p1,τ) .≈ f2.jac(u0,p2,τ)) + @test all(g1(u0,p1,τ) .≈ g2(u0,p2,τ)) end From d816f89ace4033a16fb821a56756d32cdf6c7010 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 18 Jan 2021 20:31:21 -0500 Subject: [PATCH 5/9] import istree Co-authored-by: "Samuel Isaacson" --- src/Catalyst.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Catalyst.jl b/src/Catalyst.jl index 8d9416f6d6..f79f137974 100644 --- a/src/Catalyst.jl +++ b/src/Catalyst.jl @@ -1,7 +1,7 @@ module Catalyst using Reexport, ModelingToolkit -using ModelingToolkit: Symbolic, value +using ModelingToolkit: Symbolic, value, istree @reexport using ModelingToolkit import MacroTools import Base: (==), merge!, merge From 635f71479cec86b102a8d59e30449ec5ee86e2fb Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 18 Jan 2021 23:14:47 -0500 Subject: [PATCH 6/9] bump MTK dep --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 7bfd707ae8..e2a152939f 100644 --- a/Project.toml +++ b/Project.toml @@ -13,7 +13,7 @@ Reexport = "189a3867-3050-52da-a836-e630ba90ab69" Catlab = "0.7.3, 0.8, 0.9, 0.10" Latexify = "0.13.5, 0.14" MacroTools = "0.5.5" -ModelingToolkit = "4.4.1" +ModelingToolkit = "5" Reexport = "0.2, 1.0" julia = "1.3" From 2e4af6f12f53526e7602e149d2afb584eef42558 Mon Sep 17 00:00:00 2001 From: Samuel Isaacson Date: Fri, 22 Jan 2021 12:43:53 -0500 Subject: [PATCH 7/9] fix latexify tests --- Project.toml | 2 +- test/latexify.jl | 57 +++++++++++++----------------------------------- 2 files changed, 16 insertions(+), 43 deletions(-) diff --git a/Project.toml b/Project.toml index e2a152939f..61ebd9baea 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "Catalyst" uuid = "479239e8-5488-4da2-87a7-35f2df7eef83" -version = "6.3.1" +version = "6.4.1" [deps] Catlab = "134e5e36-593f-5add-ad60-77f754baafbe" diff --git a/test/latexify.jl b/test/latexify.jl index 51f17af5ee..a9f04dc41e 100644 --- a/test/latexify.jl +++ b/test/latexify.jl @@ -38,11 +38,11 @@ end v1 K1 n1 v2 K2 n2 v3 K3 n3 v4 K4 n4 v5 K5 n5 k1 k2 k3 k4 k5 k6 d1 d2 d3 d4 d @test latexify(r) == replace( raw"\begin{align} \require{mhchem} -\ce{ \varnothing &->[\frac{v1 K1^{n1}}{K1^{n1} + \left( \mathrm{X2}\left( t \right) \right)^{n1}} \frac{v1 \left( \mathrm{X4}\left( t \right) \right)^{n1}}{K1^{n1} + \left( \mathrm{X4}\left( t \right) \right)^{n1}}] X1}\\ -\ce{ \varnothing &->[\frac{v2 \left( \mathrm{X5}\left( t \right) \right)^{n2}}{K2^{n2} + \left( \mathrm{X5}\left( t \right) \right)^{n2}}] X2}\\ -\ce{ \varnothing &->[\frac{v3 \left( \mathrm{X3}\left( t \right) \right)^{n3}}{K3^{n3} + \left( \mathrm{X3}\left( t \right) \right)^{n3}}] X3}\\ -\ce{ \varnothing &->[\frac{v4 K4^{n4}}{K4^{n4} + \left( \mathrm{X1}\left( t \right) \right)^{n4}}] X4}\\ -\ce{ \varnothing &->[\frac{v5 \left( \mathrm{X2}\left( t \right) \right)^{n5}}{K5^{n5} + \left( \mathrm{X2}\left( t \right) \right)^{n5}}] X5}\\ +\ce{ \varnothing &->[K1^{n1} v1^{2} \left( \mathrm{X4}\left( t \right) \right)^{n1} \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X2}\left( t \right) \right)^{n1} \right) \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X4}\left( t \right) \right)^{n1} \right)] X1}\\ +\ce{ \varnothing &->[v2 \left( \mathrm{X5}\left( t \right) \right)^{n2} \mathrm{inv}\left( K2^{n2} + \left( \mathrm{X5}\left( t \right) \right)^{n2} \right)] X2}\\ +\ce{ \varnothing &->[v3 \left( \mathrm{X3}\left( t \right) \right)^{n3} \mathrm{inv}\left( K3^{n3} + \left( \mathrm{X3}\left( t \right) \right)^{n3} \right)] X3}\\ +\ce{ \varnothing &->[v4 K4^{n4} \mathrm{inv}\left( K4^{n4} + \left( \mathrm{X1}\left( t \right) \right)^{n4} \right)] X4}\\ +\ce{ \varnothing &->[v5 \left( \mathrm{X2}\left( t \right) \right)^{n5} \mathrm{inv}\left( K5^{n5} + \left( \mathrm{X2}\left( t \right) \right)^{n5} \right)] X5}\\ \ce{ X2 &<=>[k1][k2] X1 + 2 X4}\\ \ce{ X4 &<=>[k3][k4] X3}\\ \ce{ 3 X5 + X1 &<=>[k5][k6] X2}\\ @@ -54,15 +54,14 @@ raw"\begin{align} \end{align} ", "\r\n"=>"\n") - # Latexify.@generate_test latexify(r, mathjax=false) @test latexify(r, mathjax = false) == replace( raw"\begin{align} -\ce{ \varnothing &->[$\frac{v1 K1^{n1}}{K1^{n1} + \left( \mathrm{X2}\left( t \right) \right)^{n1}} \frac{v1 \left( \mathrm{X4}\left( t \right) \right)^{n1}}{K1^{n1} + \left( \mathrm{X4}\left( t \right) \right)^{n1}}$] X1}\\ -\ce{ \varnothing &->[$\frac{v2 \left( \mathrm{X5}\left( t \right) \right)^{n2}}{K2^{n2} + \left( \mathrm{X5}\left( t \right) \right)^{n2}}$] X2}\\ -\ce{ \varnothing &->[$\frac{v3 \left( \mathrm{X3}\left( t \right) \right)^{n3}}{K3^{n3} + \left( \mathrm{X3}\left( t \right) \right)^{n3}}$] X3}\\ -\ce{ \varnothing &->[$\frac{v4 K4^{n4}}{K4^{n4} + \left( \mathrm{X1}\left( t \right) \right)^{n4}}$] X4}\\ -\ce{ \varnothing &->[$\frac{v5 \left( \mathrm{X2}\left( t \right) \right)^{n5}}{K5^{n5} + \left( \mathrm{X2}\left( t \right) \right)^{n5}}$] X5}\\ +\ce{ \varnothing &->[$K1^{n1} v1^{2} \left( \mathrm{X4}\left( t \right) \right)^{n1} \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X2}\left( t \right) \right)^{n1} \right) \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X4}\left( t \right) \right)^{n1} \right)$] X1}\\ +\ce{ \varnothing &->[$v2 \left( \mathrm{X5}\left( t \right) \right)^{n2} \mathrm{inv}\left( K2^{n2} + \left( \mathrm{X5}\left( t \right) \right)^{n2} \right)$] X2}\\ +\ce{ \varnothing &->[$v3 \left( \mathrm{X3}\left( t \right) \right)^{n3} \mathrm{inv}\left( K3^{n3} + \left( \mathrm{X3}\left( t \right) \right)^{n3} \right)$] X3}\\ +\ce{ \varnothing &->[$v4 K4^{n4} \mathrm{inv}\left( K4^{n4} + \left( \mathrm{X1}\left( t \right) \right)^{n4} \right)$] X4}\\ +\ce{ \varnothing &->[$v5 \left( \mathrm{X2}\left( t \right) \right)^{n5} \mathrm{inv}\left( K5^{n5} + \left( \mathrm{X2}\left( t \right) \right)^{n5} \right)$] X5}\\ \ce{ X2 &<=>[$k1$][$k2$] X1 + 2 X4}\\ \ce{ X4 &<=>[$k3$][$k4$] X3}\\ \ce{ 3 X5 + X1 &<=>[$k5$][$k6$] X2}\\ @@ -85,44 +84,18 @@ end p_a k n d_a p_b d_b r_a r_b @test latexify(r) == replace( raw"\begin{align} \require{mhchem} -\ce{ \varnothing &->[K1^{n1} v1^{2} \left( \mathrm{X4}\left( t \right) \right)^{n1} \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X2}\left( t \right) \right)^{n1} \right) \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X4}\left( t \right) \right)^{n1} \right)] X1}\\ -\ce{ \varnothing &->[v2 \left( \mathrm{X5}\left( t \right) \right)^{n2} \mathrm{inv}\left( K2^{n2} + \left( \mathrm{X5}\left( t \right) \right)^{n2} \right)] X2}\\ -\ce{ \varnothing &->[v3 \left( \mathrm{X3}\left( t \right) \right)^{n3} \mathrm{inv}\left( K3^{n3} + \left( \mathrm{X3}\left( t \right) \right)^{n3} \right)] X3}\\ -\ce{ \varnothing &->[v4 K4^{n4} \mathrm{inv}\left( K4^{n4} + \left( \mathrm{X1}\left( t \right) \right)^{n4} \right)] X4}\\ -\ce{ \varnothing &->[v5 \left( \mathrm{X2}\left( t \right) \right)^{n5} \mathrm{inv}\left( K5^{n5} + \left( \mathrm{X2}\left( t \right) \right)^{n5} \right)] X5}\\ -\ce{ X2 &<=>[k1][k2] X1 + 2 X4}\\ -\ce{ X4 &<=>[k3][k4] X3}\\ -\ce{ 3 X5 + X1 &<=>[k5][k6] X2}\\ -\ce{ X1 &->[d1] \varnothing}\\ -\ce{ X2 &->[d2] \varnothing}\\ -\ce{ X3 &->[d3] \varnothing}\\ -\ce{ X4 &->[d4] \varnothing}\\ -\ce{ X5 &->[d5] \varnothing} +\ce{ \varnothing &<=>[p_{a} \left( B\left( t \right) \right)^{n} \mathrm{inv}\left( k^{n} + \left( B\left( t \right) \right)^{n} \right)][d_{a}] A}\\ +\ce{ \varnothing &<=>[p_{b}][d_{b}] B}\\ +\ce{ 3 B &<=>[r_{a}][r_{b}] A} \end{align} ", "\r\n"=>"\n") # Latexify.@generate_test latexify(r, mathjax=false) @test latexify(r, mathjax = false) == replace( raw"\begin{align} -\ce{ \varnothing &->[$K1^{n1} v1^{2} \left( \mathrm{X4}\left( t \right) \right)^{n1} \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X2}\left( t \right) \right)^{n1} \right) \mathrm{inv}\left( K1^{n1} + \left( \mathrm{X4}\left( t \right) \right)^{n1} \right)$] X1}\\ -\ce{ \varnothing &->[$v2 \left( \mathrm{X5}\left( t \right) \right)^{n2} \mathrm{inv}\left( K2^{n2} + \left( \mathrm{X5}\left( t \right) \right)^{n2} \right)$] X2}\\ -\ce{ \varnothing &->[$v3 \left( \mathrm{X3}\left( t \right) \right)^{n3} \mathrm{inv}\left( K3^{n3} + \left( \mathrm{X3}\left( t \right) \right)^{n3} \right)$] X3}\\ -\ce{ \varnothing &->[$v4 K4^{n4} \mathrm{inv}\left( K4^{n4} + \left( \mathrm{X1}\left( t \right) \right)^{n4} \right)$] X4}\\ -\ce{ \varnothing &->[$v5 \left( \mathrm{X2}\left( t \right) \right)^{n5} \mathrm{inv}\left( K5^{n5} + \left( \mathrm{X2}\left( t \right) \right)^{n5} \right)$] X5}\\ -\ce{ X2 &<=>[$k1$][$k2$] X1 + 2 X4}\\ -\ce{ X4 &<=>[$k3$][$k4$] X3}\\ -\ce{ 3 X5 + X1 &<=>[$k5$][$k6$] X2}\\ -\ce{ X1 &->[$d1$] \varnothing}\\ -\ce{ X2 &->[$d2$] \varnothing}\\ -\ce{ X3 &->[$d3$] \varnothing}\\ -\ce{ X4 &->[$d4$] \varnothing}\\ -\ce{ X5 &->[$d5$] \varnothing} -\end{align} -", "\r\n"=>"\n") -@test latexify(r, mathjax = false) == replace( -raw"\begin{align} -\ce{ \varnothing &<=>[$\frac{p_{a} \left( B\left( t \right) \right)^{n}}{k^{n} + \left( B\left( t \right) \right)^{n}}$][$d_{a}$] A}\\ +\ce{ \varnothing &<=>[$p_{a} \left( B\left( t \right) \right)^{n} \mathrm{inv}\left( k^{n} + \left( B\left( t \right) \right)^{n} \right)$][$d_{a}$] A}\\ \ce{ \varnothing &<=>[$p_{b}$][$d_{b}$] B}\\ \ce{ 3 B &<=>[$r_{a}$][$r_{b}$] A} \end{align} ", "\r\n"=>"\n") + From 3181d08f6c8f5a9a035728ce02a8f9653c09eed3 Mon Sep 17 00:00:00 2001 From: Samuel Isaacson Date: Fri, 22 Jan 2021 13:02:24 -0500 Subject: [PATCH 8/9] fix version number --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 61ebd9baea..75f40f8a56 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "Catalyst" uuid = "479239e8-5488-4da2-87a7-35f2df7eef83" -version = "6.4.1" +version = "6.4" [deps] Catlab = "134e5e36-593f-5add-ad60-77f754baafbe" From 9cffb9ff81064ddcac43bb03f9f36aba7eae19ea Mon Sep 17 00:00:00 2001 From: Samuel Isaacson Date: Sun, 24 Jan 2021 09:27:15 -0500 Subject: [PATCH 9/9] try to fix SDE tests by not actually solving the SDEs and just checking generated functions... --- test/solve_SDEs.jl | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/test/solve_SDEs.jl b/test/solve_SDEs.jl index 7965ca65dc..e77203461f 100644 --- a/test/solve_SDEs.jl +++ b/test/solve_SDEs.jl @@ -95,15 +95,14 @@ for (i,networks) in enumerate(identical_networks) (i==2) && (u0[1] += 1000.) (i==3) ? (p[2:2:6] .*= 1000.; u0 .+= 1000) : (p[1] += 500.) prob1 = SDEProblem(networks[1],u0,(0.,100.),p) - sol1 = solve(prob1,ImplicitEM(),saveat=0.01,maxiters=1e7) prob2 = SDEProblem(networks[2][1],networks[2][2],u0,(0.,100.),p,noise_rate_prototype=networks[2][3]) - sol2 = solve(prob2,ImplicitEM(),saveat=0.01,maxiters=1e7) - for i = 1:length(u0) - vals1 = getindex.(sol1.u[1000:end],i); - vals2 = getindex.(sol1.u[1000:end],i); - @test 0.8 < mean(vals1)/mean(vals2) < 1.25 - @test 0.8 < std(vals1)/std(vals2) < 1.25 - end + du1 = similar(u0); du2 = similar(u0); + prob1.f.f(du1,u0,p,0.0); prob2.f.f(du2,u0,p,0.0) + @test all(isapprox.(du1,du2)) + g1 = zeros(numspecies(networks[1]),numreactions(networks[1])) + g2 = copy(g1) + prob1.f.g(g1,u0,p,0.0); prob2.f.g(g2,u0,p,0.0) + @test all(isapprox.(g1,g2)) end end