|
153 | 153 | @test issetequal(parameters(rn5), @parameters k B X)
|
154 | 154 | end
|
155 | 155 |
|
156 |
| -# Test whether user-defined functions are properly expanded in equations. |
157 |
| -let |
158 |
| - f(A, t) = 2*A*t |
159 |
| - |
160 |
| - # Test user-defined function |
161 |
| - rn = @reaction_network begin |
162 |
| - @equations D(A) ~ f(A, t) |
163 |
| - end |
164 |
| - @test length(equations(rn)) == 1 |
165 |
| - @test equations(rn)[1] isa Equation |
166 |
| - @species A(t) |
167 |
| - @test isequal(equations(rn)[1], D(A) ~ 2*A*t) |
168 |
| - |
169 |
| - |
170 |
| - hill_unregistered(A, v, K, n) = v*(A^n) / (A^n + K^n) |
171 |
| - rn2 = @reaction_network begin |
172 |
| - @parameters v K n |
173 |
| - @equations D(A) ~ hill_unregistered(A, v, K, n) |
174 |
| - end |
175 |
| - @test length(equations(rn2)) == 1 |
176 |
| - @test equations(rn2)[1] isa Equation |
177 |
| - @parameters v K n |
178 |
| - @test isequal(equations(rn2)[1], D(A) ~ v*(A^n) / (A^n + K^n)) |
179 |
| - |
180 |
| - hill2(A, v, K, n) = v*(A^n) / (A^n + K^n) |
181 |
| - @register_symbolic hill2(A, v, K, n) |
182 |
| - # Test Catalyst function |
183 |
| - rn2r = @reaction_network begin |
184 |
| - @parameters v K n |
185 |
| - @equations D(A) ~ hill2(A, v, K, n) |
186 |
| - end |
187 |
| - @test length(equations(rn2r)) == 1 |
188 |
| - @test equations(rn2r)[1] isa Equation |
189 |
| - @parameters v K n |
190 |
| - @test isequal(equations(rn2r)[1], D(A) ~ hill2(A, v, K, n)) |
191 |
| - |
192 |
| - |
193 |
| - rn3 = @reaction_network begin |
194 |
| - @species Iapp(t) |
195 |
| - @equations begin |
196 |
| - D(A) ~ Iapp |
197 |
| - Iapp ~ f(A,t) |
198 |
| - end |
199 |
| - end |
200 |
| - @test length(equations(rn3)) == 2 |
201 |
| - @test equations(rn3)[1] isa Equation |
202 |
| - @test equations(rn3)[2] isa Equation |
203 |
| - @variables Iapp(t) |
204 |
| - @test isequal(equations(rn3)[1], D(A) ~ Iapp) |
205 |
| - @test isequal(equations(rn3)[2], Iapp ~ 2*A*t) |
206 |
| - |
207 |
| - @species Iapp(t) A(t) |
208 |
| - eq = [D(A) ~ Iapp, Iapp ~ f(A, t)] |
209 |
| - @named rn3_sym = ReactionSystem(eq, t) |
210 |
| - rn3_sym = complete(rn3_sym) |
211 |
| - @test isequivalent(rn3, rn3_sym) |
212 |
| - |
213 |
| - |
214 |
| - |
215 |
| - |
216 |
| - g(A, K, n) = A^n + K^n |
217 |
| - rn4 = @reaction_network begin |
218 |
| - @parameters v K n |
219 |
| - @equations D(A) ~ hill(A, v, K, n)*g(A, K, n) |
220 |
| - end |
221 |
| - @test length(equations(rn4)) == 1 |
222 |
| - @test equations(rn4)[1] isa Equation |
223 |
| - @parameters v n |
224 |
| - @test isequal(Catalyst.expand_registered_functions(equations(rn4)[1]), D(A) ~ v*(A^n)) |
225 |
| -end |
226 |
| - |
227 | 156 | # Test inferring with stoichiometry symbols and interpolation.
|
228 | 157 | let
|
229 | 158 | @parameters k g h gg X y [isconstantspecies = true]
|
@@ -1024,3 +953,76 @@ let
|
1024 | 953 | @unpack k1, A = rn3
|
1025 | 954 | @test isequal(rl, k1*A^2)
|
1026 | 955 | end
|
| 956 | + |
| 957 | +# Test whether user-defined functions are properly expanded in equations. |
| 958 | +let |
| 959 | + f(A, t) = 2*A*t |
| 960 | + |
| 961 | + # Test user-defined function |
| 962 | + rn = @reaction_network begin |
| 963 | + @equations D(A) ~ f(A, t) |
| 964 | + end |
| 965 | + @test length(equations(rn)) == 1 |
| 966 | + @test equations(rn)[1] isa Equation |
| 967 | + @species A(t) |
| 968 | + @test isequal(equations(rn)[1], D(A) ~ 2*A*t) |
| 969 | + |
| 970 | + |
| 971 | + # Test whether expansion happens properly for unregistered/registered functions. |
| 972 | + hill_unregistered(A, v, K, n) = v*(A^n) / (A^n + K^n) |
| 973 | + rn2 = @reaction_network begin |
| 974 | + @parameters v K n |
| 975 | + @equations D(A) ~ hill_unregistered(A, v, K, n) |
| 976 | + end |
| 977 | + @test length(equations(rn2)) == 1 |
| 978 | + @test equations(rn2)[1] isa Equation |
| 979 | + @parameters v K n |
| 980 | + @test isequal(equations(rn2)[1], D(A) ~ v*(A^n) / (A^n + K^n)) |
| 981 | + |
| 982 | + hill2(A, v, K, n) = v*(A^n) / (A^n + K^n) |
| 983 | + @register_symbolic hill2(A, v, K, n) |
| 984 | + # Registered symbolic function should not expand. |
| 985 | + rn2r = @reaction_network begin |
| 986 | + @parameters v K n |
| 987 | + @equations D(A) ~ hill2(A, v, K, n) |
| 988 | + end |
| 989 | + @test length(equations(rn2r)) == 1 |
| 990 | + @test equations(rn2r)[1] isa Equation |
| 991 | + @parameters v K n |
| 992 | + @test isequal(equations(rn2r)[1], D(A) ~ hill2(A, v, K, n)) |
| 993 | + |
| 994 | + |
| 995 | + rn3 = @reaction_network begin |
| 996 | + @species Iapp(t) |
| 997 | + @equations begin |
| 998 | + D(A) ~ Iapp |
| 999 | + Iapp ~ f(A,t) |
| 1000 | + end |
| 1001 | + end |
| 1002 | + @test length(equations(rn3)) == 2 |
| 1003 | + @test equations(rn3)[1] isa Equation |
| 1004 | + @test equations(rn3)[2] isa Equation |
| 1005 | + @variables Iapp(t) |
| 1006 | + @test isequal(equations(rn3)[1], D(A) ~ Iapp) |
| 1007 | + @test isequal(equations(rn3)[2], Iapp ~ 2*A*t) |
| 1008 | + |
| 1009 | + # Test whether the DSL and symbolic ways of creating the network generate the same system |
| 1010 | + @species Iapp(t) A(t) |
| 1011 | + eq = [D(A) ~ Iapp, Iapp ~ f(A, t)] |
| 1012 | + @named rn3_sym = ReactionSystem(eq, t) |
| 1013 | + rn3_sym = complete(rn3_sym) |
| 1014 | + @test isequivalent(rn3, rn3_sym) |
| 1015 | + |
| 1016 | + |
| 1017 | + # Test more complicated expression involving both registered function and a user-defined function. |
| 1018 | + g(A, K, n) = A^n + K^n |
| 1019 | + rn4 = @reaction_network begin |
| 1020 | + @parameters v K n |
| 1021 | + @equations D(A) ~ hill(A, v, K, n)*g(A, K, n) |
| 1022 | + end |
| 1023 | + @test length(equations(rn4)) == 1 |
| 1024 | + @test equations(rn4)[1] isa Equation |
| 1025 | + @parameters v n |
| 1026 | + @test isequal(Catalyst.expand_registered_functions(equations(rn4)[1]), D(A) ~ v*(A^n)) |
| 1027 | +end |
| 1028 | + |
0 commit comments