From 77766946260ce594c987e66b2e117bbd29785924 Mon Sep 17 00:00:00 2001 From: Torkel Date: Mon, 20 May 2024 11:34:47 -0400 Subject: [PATCH 1/5] init --- src/network_analysis.jl | 20 +++++++++++++++++++- test/network_analysis/conservation_laws.jl | 21 ++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/network_analysis.jl b/src/network_analysis.jl index a34aae0c1b..580f0f8139 100644 --- a/src/network_analysis.jl +++ b/src/network_analysis.jl @@ -542,6 +542,23 @@ end ### Conservation Laws ### +# Implements the `conservationquantity` parameter metadata. +struct ConservationQuantity end +Symbolics.option_to_metadata_type(::Val{:conservationquantity}) = ConservationQuantity + +""" + isconservationquantity(p) + +Checks if the input parameter (`p`) is a conserved quantity (i.e. have the `conservationquantity`) +metadata. +""" +isconservationquantity(x::Num, args...) = isconservationquantity(Symbolics.unwrap(x), args...) +function isconservationquantity(x, default = false) + p = Symbolics.getparent(x, nothing) + p === nothing || (x = p) + Symbolics.getmetadata(x, ConservationQuantity, default) +end + """ conservedequations(rn::ReactionSystem) @@ -635,7 +652,8 @@ function cache_conservationlaw_eqs!(rn::ReactionSystem, N::AbstractMatrix, col_o indepspecs = sts[indepidxs] depidxs = col_order[(r + 1):end] depspecs = sts[depidxs] - constants = MT.unwrap.(MT.scalarize((@parameters Γ[1:nullity])[1])) + constants = MT.unwrap.(MT.scalarize(only( + @parameters $(CONSERVED_CONSTANT_SYMBOL)[1:nullity] [conservationquantity=true]))) conservedeqs = Equation[] constantdefs = Equation[] diff --git a/test/network_analysis/conservation_laws.jl b/test/network_analysis/conservation_laws.jl index e153e73d0f..20f802ad47 100644 --- a/test/network_analysis/conservation_laws.jl +++ b/test/network_analysis/conservation_laws.jl @@ -142,4 +142,23 @@ let sprob3.g(g3, u3, sprob3.p, 1.0) @test isapprox(g1, g2[istsidxs, :]) @test isapprox(g2[istsidxs, :], g3) -end \ No newline at end of file +end + +### ConservedQuantity Metadata Tests ### + +# Checks that `conservationquantity` metadata is added correctly to parameters. +# Checks that the `isconservationquantity` getter function works correctly. +let + # Creates ODESystem with conserved quantities. + rs = @reaction_network begin + (k1,k2), X1 <--> X2 + (k1,k2), Y1 <--> Y2 + end + osys = convert(ODESystem, rs) + + # Checks that the correct parameters have the `conservationquantity` metadata. + @test Catalyst.isconservationquantity(osys.Γ[1]) + @test Catalyst.isconservationquantity(osys.Γ[2]) + @test !Catalyst.isconservationquantity(osys.k1) + @test !Catalyst.isconservationquantity(osys.k2) +end From 59d9c49076ceedb6a6edd2b589f6cf05eeb54bf5 Mon Sep 17 00:00:00 2001 From: Torkel Date: Mon, 20 May 2024 15:37:05 -0400 Subject: [PATCH 2/5] test fix --- test/network_analysis/conservation_laws.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/network_analysis/conservation_laws.jl b/test/network_analysis/conservation_laws.jl index 20f802ad47..bdc0d976dc 100644 --- a/test/network_analysis/conservation_laws.jl +++ b/test/network_analysis/conservation_laws.jl @@ -154,7 +154,7 @@ let (k1,k2), X1 <--> X2 (k1,k2), Y1 <--> Y2 end - osys = convert(ODESystem, rs) + osys = convert(ODESystem, rs; remove_conserved = true) # Checks that the correct parameters have the `conservationquantity` metadata. @test Catalyst.isconservationquantity(osys.Γ[1]) From 861caa05faaaa65e006d44371e03df9be384a726 Mon Sep 17 00:00:00 2001 From: Torkel Loman Date: Tue, 21 May 2024 10:34:27 -0400 Subject: [PATCH 3/5] Update src/network_analysis.jl Co-authored-by: Sam Isaacson --- src/network_analysis.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network_analysis.jl b/src/network_analysis.jl index 580f0f8139..49216fbe76 100644 --- a/src/network_analysis.jl +++ b/src/network_analysis.jl @@ -543,7 +543,7 @@ end ### Conservation Laws ### # Implements the `conservationquantity` parameter metadata. -struct ConservationQuantity end +struct ConservedParameter end Symbolics.option_to_metadata_type(::Val{:conservationquantity}) = ConservationQuantity """ From 913e5f6d8c76b9b570c50324064f0c7758a30c9d Mon Sep 17 00:00:00 2001 From: Torkel Loman Date: Tue, 21 May 2024 10:34:32 -0400 Subject: [PATCH 4/5] Update src/network_analysis.jl Co-authored-by: Sam Isaacson --- src/network_analysis.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network_analysis.jl b/src/network_analysis.jl index 49216fbe76..3662a62a5e 100644 --- a/src/network_analysis.jl +++ b/src/network_analysis.jl @@ -544,7 +544,7 @@ end # Implements the `conservationquantity` parameter metadata. struct ConservedParameter end -Symbolics.option_to_metadata_type(::Val{:conservationquantity}) = ConservationQuantity +Symbolics.option_to_metadata_type(::Val{:conserved}) = ConservationQuantity """ isconservationquantity(p) From 334ccb2cfa362d8a1606cd21bf266b0e1cda0fe1 Mon Sep 17 00:00:00 2001 From: Torkel Date: Tue, 21 May 2024 10:41:40 -0400 Subject: [PATCH 5/5] chaneg names --- src/network_analysis.jl | 16 ++++++++-------- test/network_analysis/conservation_laws.jl | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/network_analysis.jl b/src/network_analysis.jl index 3662a62a5e..cc33f9b63e 100644 --- a/src/network_analysis.jl +++ b/src/network_analysis.jl @@ -542,21 +542,21 @@ end ### Conservation Laws ### -# Implements the `conservationquantity` parameter metadata. +# Implements the `conserved` parameter metadata. struct ConservedParameter end -Symbolics.option_to_metadata_type(::Val{:conserved}) = ConservationQuantity +Symbolics.option_to_metadata_type(::Val{:conserved}) = ConservedParameter """ - isconservationquantity(p) +isconserved(p) -Checks if the input parameter (`p`) is a conserved quantity (i.e. have the `conservationquantity`) +Checks if the input parameter (`p`) is a conserved quantity (i.e. have the `conserved`) metadata. """ -isconservationquantity(x::Num, args...) = isconservationquantity(Symbolics.unwrap(x), args...) -function isconservationquantity(x, default = false) +isconserved(x::Num, args...) = isconserved(Symbolics.unwrap(x), args...) +function isconserved(x, default = false) p = Symbolics.getparent(x, nothing) p === nothing || (x = p) - Symbolics.getmetadata(x, ConservationQuantity, default) + Symbolics.getmetadata(x, ConservedParameter, default) end """ @@ -653,7 +653,7 @@ function cache_conservationlaw_eqs!(rn::ReactionSystem, N::AbstractMatrix, col_o depidxs = col_order[(r + 1):end] depspecs = sts[depidxs] constants = MT.unwrap.(MT.scalarize(only( - @parameters $(CONSERVED_CONSTANT_SYMBOL)[1:nullity] [conservationquantity=true]))) + @parameters $(CONSERVED_CONSTANT_SYMBOL)[1:nullity] [conserved=true]))) conservedeqs = Equation[] constantdefs = Equation[] diff --git a/test/network_analysis/conservation_laws.jl b/test/network_analysis/conservation_laws.jl index bdc0d976dc..d7fa4dc9a4 100644 --- a/test/network_analysis/conservation_laws.jl +++ b/test/network_analysis/conservation_laws.jl @@ -144,10 +144,10 @@ let @test isapprox(g2[istsidxs, :], g3) end -### ConservedQuantity Metadata Tests ### +### ConservedParameter Metadata Tests ### -# Checks that `conservationquantity` metadata is added correctly to parameters. -# Checks that the `isconservationquantity` getter function works correctly. +# Checks that `conserved` metadata is added correctly to parameters. +# Checks that the `isconserved` getter function works correctly. let # Creates ODESystem with conserved quantities. rs = @reaction_network begin @@ -156,9 +156,9 @@ let end osys = convert(ODESystem, rs; remove_conserved = true) - # Checks that the correct parameters have the `conservationquantity` metadata. - @test Catalyst.isconservationquantity(osys.Γ[1]) - @test Catalyst.isconservationquantity(osys.Γ[2]) - @test !Catalyst.isconservationquantity(osys.k1) - @test !Catalyst.isconservationquantity(osys.k2) + # Checks that the correct parameters have the `conserved` metadata. + @test Catalyst.isconserved(osys.Γ[1]) + @test Catalyst.isconserved(osys.Γ[2]) + @test !Catalyst.isconserved(osys.k1) + @test !Catalyst.isconserved(osys.k2) end