398
398
399
399
# Test basic functionality.
400
400
# Tests various types of indexing.
401
- let
401
+ let
402
402
rn = @reaction_network begin
403
403
@observables begin
404
404
X ~ Xi + Xa
@@ -489,23 +489,23 @@ end
489
489
# Tests using a single observable (without begin/end statement).
490
490
# Tests using observable component not part of reaction.
491
491
# Tests using parameters in observables formula.
492
- let
492
+ let
493
493
rn = @reaction_network begin
494
494
@parameters op_1 op_2
495
495
@species X4 (t)
496
- @observables X ~ X1^ 2 + op_1* (X2 + 2 X3) + X1* X4/ op_2 + p
496
+ @observables X ~ X1^ 2 + op_1* (X2 + 2 X3) + X1* X4/ op_2 + p
497
497
(p,d), 0 <--> X1
498
498
(k1,k2), X1 <--> X2
499
499
(k3,k4), X2 <--> X3
500
500
end
501
-
501
+
502
502
u0 = Dict ([:X1 => 1.0 , :X2 => 2.0 , :X3 => 3.0 , :X4 => 4.0 ])
503
503
ps = Dict ([:p => 1.0 , :d => 0.2 , :k1 => 1.5 , :k2 => 1.5 , :k3 => 5.0 , :k4 => 5.0 , :op_1 => 1.5 , :op_2 => 1.5 ])
504
504
505
505
oprob = ODEProblem (rn, u0, (0.0 , 1000.0 ), ps)
506
506
sol = solve (oprob, Tsit5 ())
507
507
508
- @test sol[:X ][1 ] == u0[:X1 ]^ 2 + ps[:op_1 ]* (u0[:X2 ] + 2 * u0[:X3 ]) + u0[:X1 ]* u0[:X4 ]/ ps[:op_2 ] + ps[:p ]
508
+ @test sol[:X ][1 ] == u0[:X1 ]^ 2 + ps[:op_1 ]* (u0[:X2 ] + 2 * u0[:X3 ]) + u0[:X1 ]* u0[:X4 ]/ ps[:op_2 ] + ps[:p ]
509
509
end
510
510
511
511
# Checks that ivs are correctly found.
535
535
# Declares observables implicitly/explicitly.
536
536
# Cannot test `isequal(rn1, rn2)` because the two sets of observables have some obscure Symbolics
537
537
# substructure that is different.
538
- let
538
+ let
539
539
# Basic case.
540
540
rn1 = @reaction_network rn_observed begin
541
541
@observables X ~ X1 + X2
@@ -609,14 +609,14 @@ let
609
609
(kB,kD), 2 X <--> X2
610
610
(k1,k2), Y1 <--> Y2
611
611
end
612
-
612
+
613
613
@test isspecies (rn. X)
614
614
@test ! isspecies (rn. Y)
615
615
@test ! isspecies (rn. Z)
616
616
end
617
617
618
618
# Tests various erroneous declarations throw errors.
619
- let
619
+ let
620
620
# Independent variable in @observables.
621
621
@test_throws Exception @eval @reaction_network begin
622
622
@observables X (t) ~ X1 + X2
699
699
@equations begin
700
700
X + 5 ~ k* S
701
701
3 Y + X ~ S + X* d
702
- end
702
+ end
703
703
(p,d), 0 <--> S
704
704
end
705
705
747
747
rn2 = @reaction_network rn begin
748
748
@parameters k
749
749
@variables X (t)
750
- @equations begin
750
+ @equations begin
751
751
X + 2 ~ k* S
752
752
end
753
753
(p,d), 0 <--> S
759
759
# Tries with interpolating a value into an equation.
760
760
# Tries using rn.X notation for designating variables.
761
761
# Tries for empty parameter vector.
762
- let
762
+ let
763
763
c = 6.0
764
764
rn = complete (@reaction_network begin
765
765
@variables X (t)
@@ -774,12 +774,12 @@ let
774
774
end
775
775
776
776
# Checks hierarchical model.
777
- let
777
+ let
778
778
base_rn = @network_component begin
779
779
@variables V1 (t)
780
780
@equations begin
781
781
X* 3 V1 ~ X - 2
782
- end
782
+ end
783
783
(p,d), 0 <--> X
784
784
end
785
785
@unpack X, V1, p, d = base_rn
788
788
@variables V2 (t)
789
789
@equations begin
790
790
X* 4 V2 ~ X - 3
791
- end
791
+ end
792
792
(p,d), 0 <--> X
793
793
end
794
794
813
813
@equations begin
814
814
X + 5 ~ k* S
815
815
D (Y) ~ X + S - 5 * Y
816
- end
816
+ end
817
817
(p,d), 0 <--> S
818
818
end
819
819
@unpack X, Y, S, p, d, k = rn
848
848
end
849
849
850
850
# Tests that various erroneous declarations throw errors.
851
- let
851
+ let
852
852
# Using = instead of ~ (for equation).
853
853
@test_throws Exception @eval @reaction_network begin
854
854
@variables X (t)
861
861
@equations X ~ p - S
862
862
(P,D), 0 <--> S
863
863
end
864
+ end
865
+
866
+ # test combinatoric_ratelaws DSL option
867
+ let
868
+ rn = @reaction_network begin
869
+ @combinatoric_ratelaws false
870
+ (k1,k2), 2 A <--> B
871
+ end
872
+ combinatoric_ratelaw = Catalyst. get_combinatoric_ratelaws (rn)
873
+ @test combinatoric_ratelaw == false
874
+ rl = oderatelaw (reactions (rn)[1 ]; combinatoric_ratelaw)
875
+ @unpack k1, A = rn
876
+ @test isequal (rl, k1* A^ 2 )
877
+
878
+ rn2 = @reaction_network begin
879
+ @combinatoric_ratelaws true
880
+ (k1,k2), 2 A <--> B
881
+ end
882
+ combinatoric_ratelaw = Catalyst. get_combinatoric_ratelaws (rn2)
883
+ @test combinatoric_ratelaw == true
884
+ rl = oderatelaw (reactions (rn2)[1 ]; combinatoric_ratelaw)
885
+ @unpack k1, A = rn2
886
+ @test isequal (rl, k1* A^ 2 / 2 )
887
+
888
+ crl = false
889
+ rn3 = @reaction_network begin
890
+ @combinatoric_ratelaws $ crl
891
+ (k1,k2), 2 A <--> B
892
+ end
893
+ combinatoric_ratelaw = Catalyst. get_combinatoric_ratelaws (rn3)
894
+ @test combinatoric_ratelaw == crl
895
+ rl = oderatelaw (reactions (rn3)[1 ]; combinatoric_ratelaw)
896
+ @unpack k1, A = rn3
897
+ @test isequal (rl, k1* A^ 2 )
864
898
end
0 commit comments