@@ -829,10 +829,33 @@ end
829
829
@brownian a
830
830
x = _x (t)
831
831
832
- @testset " $Problem " for (Problem, alg, rhss) in [
833
- (ODEProblem, Tsit5 (), 0 ), (SDEProblem, ImplicitEM (), a),
834
- (DDEProblem, MethodOfSteps (Tsit5 ()), _x (t - 0.1 )),
835
- (SDDEProblem, ImplicitEM (), _x (t - 0.1 ) + a)]
832
+ @testset " $Problem with $(SciMLBase. parameterless_type (typeof (alg))) " for (System, Problem, alg, rhss) in [
833
+ (System, ODEProblem, Tsit5 (), 0 ),
834
+ (System, SDEProblem, ImplicitEM (), a),
835
+ (System, DDEProblem, MethodOfSteps (Tsit5 ()), _x (t - 0.1 )),
836
+ (System, SDDEProblem, ImplicitEM (), _x (t - 0.1 ) + a),
837
+ # polyalg cache
838
+ (NonlinearSystemWrapper, NonlinearProblemWrapper,
839
+ FastShortcutNonlinearPolyalg (), 0 ),
840
+ # generalized first order cache
841
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, NewtonRaphson (), 0 ),
842
+ # quasi newton cache
843
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, Klement (), 0 ),
844
+ # noinit cache
845
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, SimpleNewtonRaphson (), 0 ),
846
+ # DFSane cache
847
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, DFSane (), 0 ),
848
+ # Least squares
849
+ # polyalg cache
850
+ (NonlinearSystemWrapper, NLLSProblemWrapper, FastShortcutNLLSPolyalg (), 0 ),
851
+ # generalized first order cache
852
+ (NonlinearSystemWrapper, NLLSProblemWrapper, LevenbergMarquardt (), 0 ),
853
+ # noinit cache
854
+ (NonlinearSystemWrapper, NLLSProblemWrapper, SimpleGaussNewton (), 0 )
855
+ ]
856
+ is_nlsolve = alg isa SciMLBase. AbstractNonlinearAlgorithm
857
+ D = is_nlsolve ? v -> v^ 3 : Differential (t)
858
+
836
859
@mtkbuild sys = System (
837
860
[D (x) ~ 2 x + r + rhss], t; parameter_dependencies = [r ~ p + 2 q, q ~ p + 3 ],
838
861
guesses = [p => 1.0 ])
@@ -850,21 +873,44 @@ end
850
873
@brownian a b
851
874
x = _x (t)
852
875
853
- @testset " $Problem " for (Problem, alg, rhss) in [
854
- (ODEProblem, Tsit5 (), zeros (2 )), (SDEProblem, ImplicitEM (), [a, b]),
855
- (DDEProblem, MethodOfSteps (Tsit5 ()), [_x (t - 0.1 ), 0.0 ]),
856
- (SDDEProblem, ImplicitEM (), [_x (t - 0.1 ) + a, b])]
876
+ @testset " $Problem with $(SciMLBase. parameterless_type (typeof (alg))) " for (System, Problem, alg, rhss) in [
877
+ (System, ODEProblem, Tsit5 (), zeros (2 )),
878
+ (System, SDEProblem, ImplicitEM (), [a, b]),
879
+ (System, DDEProblem, MethodOfSteps (Tsit5 ()), [_x (t - 0.1 ), 0.0 ]),
880
+ (System, SDDEProblem, ImplicitEM (), [_x (t - 0.1 ) + a, b]),
881
+ # polyalg cache
882
+ (NonlinearSystemWrapper, NonlinearProblemWrapper,
883
+ FastShortcutNonlinearPolyalg (), zeros (2 )),
884
+ # generalized first order cache
885
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, NewtonRaphson (), zeros (2 )),
886
+ # quasi newton cache
887
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, Klement (), zeros (2 )),
888
+ # noinit cache
889
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, SimpleNewtonRaphson (), zeros (2 )),
890
+ # DFSane cache
891
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, DFSane (), zeros (2 )),
892
+ # Least squares
893
+ # polyalg cache
894
+ (NonlinearSystemWrapper, NLLSProblemWrapper, FastShortcutNLLSPolyalg (), zeros (2 )),
895
+ # generalized first order cache
896
+ (NonlinearSystemWrapper, NLLSProblemWrapper, LevenbergMarquardt (), zeros (2 )),
897
+ # noinit cache
898
+ (NonlinearSystemWrapper, NLLSProblemWrapper, SimpleGaussNewton (), zeros (2 ))
899
+ ]
900
+ is_nlsolve = alg isa SciMLBase. AbstractNonlinearAlgorithm
901
+ D = is_nlsolve ? v -> v^ 3 : Differential (t)
902
+
857
903
@mtkbuild sys = System (
858
904
[D (x) ~ x + rhss[1 ], p ~ x + y + rhss[2 ]], t; defaults = [p => missing ], guesses = [
859
905
x => 0.0 , p => 0.0 ])
860
906
prob = Problem (sys, [x => 1.0 , y => 1.0 ], (0.0 , 1.0 ))
861
907
@test init (prob, alg). ps[p] ≈ 2.0
862
908
# nonsensical value for y just to test that equations work
863
- prob2 = remake (prob; u0 = [x => 1.0 , y => 2 x + exp (t )])
864
- @test init (prob2, alg). ps[p] ≈ 4.0
909
+ prob2 = remake (prob; u0 = [x => 1.0 , y => 2 x + exp (x )])
910
+ @test init (prob2, alg). ps[p] ≈ 3 + exp ( 1 )
865
911
# solve for `x` given `p` and `y`
866
- prob3 = remake (prob; u0 = [x => nothing , y => 1.0 ], p = [p => 2 x + exp (t )])
867
- @test init (prob3, alg)[x] ≈ 0.0
912
+ prob3 = remake (prob; u0 = [x => nothing , y => 1.0 ], p = [p => 2 x + exp (y )])
913
+ @test init (prob3, alg)[x] ≈ 1 - exp ( 1 )
868
914
@test_logs (:warn , r" overdetermined" ) remake (
869
915
prob; u0 = [x => 1.0 , y => 2.0 ], p = [p => 4.0 ])
870
916
prob4 = remake (prob; u0 = [x => 1.0 , y => 2.0 ], p = [p => 4.0 ])
@@ -880,44 +926,68 @@ end
880
926
@brownian a
881
927
x = _x (t)
882
928
883
- @testset " $Problem " for (Problem, alg, rhss) in [
884
- (ODEProblem, Tsit5 (), 0 ), (SDEProblem, ImplicitEM (), a),
885
- (DDEProblem, MethodOfSteps (Tsit5 ()), _x (t - 0.1 )),
886
- (SDDEProblem, ImplicitEM (), _x (t - 0.1 ) + a)]
929
+ @testset " $Problem with $(SciMLBase. parameterless_type (typeof (alg))) " for (System, Problem, alg, rhss) in [
930
+ (System, ODEProblem, Tsit5 (), 0 ),
931
+ (System, SDEProblem, ImplicitEM (), a),
932
+ (System, DDEProblem, MethodOfSteps (Tsit5 ()), _x (t - 0.1 )),
933
+ (System, SDDEProblem, ImplicitEM (), _x (t - 0.1 ) + a),
934
+ # polyalg cache
935
+ (NonlinearSystemWrapper, NonlinearProblemWrapper,
936
+ FastShortcutNonlinearPolyalg (), 0 ),
937
+ # generalized first order cache
938
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, NewtonRaphson (), 0 ),
939
+ # quasi newton cache
940
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, Klement (), 0 ),
941
+ # noinit cache
942
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, SimpleNewtonRaphson (), 0 ),
943
+ # DFSane cache
944
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, DFSane (), 0 ),
945
+ # Least squares
946
+ # polyalg cache
947
+ (NonlinearSystemWrapper, NLLSProblemWrapper, FastShortcutNLLSPolyalg (), 0 ),
948
+ # generalized first order cache
949
+ (NonlinearSystemWrapper, NLLSProblemWrapper, LevenbergMarquardt (), 0 ),
950
+ # noinit cache
951
+ (NonlinearSystemWrapper, NLLSProblemWrapper, SimpleGaussNewton (), 0 )
952
+ ]
953
+ is_nlsolve = alg isa SciMLBase. AbstractNonlinearAlgorithm
954
+ D = is_nlsolve ? v -> v^ 3 : Differential (t)
955
+ alge_eqs = [y^ 2 * q + q^ 2 * x ~ 0 , z * p - p^ 2 * x * z ~ 0 ]
956
+
887
957
@mtkbuild sys = System (
888
- [D (x) ~ x * p + y * q + rhss, y ^ 2 * q + q ^ 2 * x ~ 0 , z * p - p ^ 2 * x * z ~ 0 ],
958
+ [D (x) ~ x * p + y^ 2 * q + rhss; alge_eqs ],
889
959
t; guesses = [x => 0.0 , y => 0.0 , z => 0.0 , p => 0.0 , q => 0.0 ])
890
- prob = Problem (sys, [x => 1.0 ], (0.0 , 1.0 ), [p => 1.0 , q => missing ])
960
+ prob = Problem (sys, [x => 1.0 ], (0.0 , 1.0 ), [p => 1.0 , q => missing ]; initialization_eqs = is_nlsolve ? alge_eqs : [] )
891
961
@test is_variable (prob. f. initialization_data. initializeprob, q)
892
962
ps = prob. p
893
963
newps = SciMLStructures. replace (Tunable (), ps, ForwardDiff. Dual .(ps. tunable))
894
964
prob2 = remake (prob; p = newps)
895
- @test eltype (prob2. f. initialization_data. initializeprob. u0 ) <: ForwardDiff.Dual
965
+ @test eltype (state_values ( prob2. f. initialization_data. initializeprob) ) <: ForwardDiff.Dual
896
966
@test eltype (prob2. f. initialization_data. initializeprob. p. tunable) < :
897
967
ForwardDiff. Dual
898
- @test prob2. f. initialization_data. initializeprob. u0 ≈
899
- prob. f. initialization_data. initializeprob. u0
968
+ @test state_values ( prob2. f. initialization_data. initializeprob) ≈
969
+ state_values ( prob. f. initialization_data. initializeprob)
900
970
901
971
prob2 = remake (prob; u0 = ForwardDiff. Dual .(prob. u0))
902
- @test eltype (prob2. f. initialization_data. initializeprob. u0 ) <: ForwardDiff.Dual
972
+ @test eltype (state_values ( prob2. f. initialization_data. initializeprob) ) <: ForwardDiff.Dual
903
973
@test eltype (prob2. f. initialization_data. initializeprob. p. tunable) <: Float64
904
- @test prob2. f. initialization_data. initializeprob. u0 ≈
905
- prob. f. initialization_data. initializeprob. u0
974
+ @test state_values ( prob2. f. initialization_data. initializeprob) ≈
975
+ state_values ( prob. f. initialization_data. initializeprob)
906
976
907
977
prob2 = remake (prob; u0 = ForwardDiff. Dual .(prob. u0), p = newps)
908
- @test eltype (prob2. f. initialization_data. initializeprob. u0 ) <: ForwardDiff.Dual
978
+ @test eltype (state_values ( prob2. f. initialization_data. initializeprob) ) <: ForwardDiff.Dual
909
979
@test eltype (prob2. f. initialization_data. initializeprob. p. tunable) < :
910
980
ForwardDiff. Dual
911
- @test prob2. f. initialization_data. initializeprob. u0 ≈
912
- prob. f. initialization_data. initializeprob. u0
981
+ @test state_values ( prob2. f. initialization_data. initializeprob) ≈
982
+ state_values ( prob. f. initialization_data. initializeprob)
913
983
914
984
prob2 = remake (prob; u0 = [x => ForwardDiff. Dual (1.0 )],
915
985
p = [p => ForwardDiff. Dual (1.0 ), q => missing ])
916
- @test eltype (prob2. f. initialization_data. initializeprob. u0 ) <: ForwardDiff.Dual
986
+ @test eltype (state_values ( prob2. f. initialization_data. initializeprob) ) <: ForwardDiff.Dual
917
987
@test eltype (prob2. f. initialization_data. initializeprob. p. tunable) < :
918
988
ForwardDiff. Dual
919
- @test prob2. f. initialization_data. initializeprob. u0 ≈
920
- prob. f. initialization_data. initializeprob. u0
989
+ @test state_values ( prob2. f. initialization_data. initializeprob) ≈
990
+ state_values ( prob. f. initialization_data. initializeprob)
921
991
end
922
992
end
923
993
@@ -927,19 +997,42 @@ end
927
997
@brownian a
928
998
x = _x (t)
929
999
930
- @testset " $Problem " for (Problem, alg, rhss) in [
931
- (ODEProblem, Tsit5 (), 0 ), (SDEProblem, ImplicitEM (), a),
932
- (DDEProblem, MethodOfSteps (Tsit5 ()), _x (t - 0.1 )),
933
- (SDDEProblem, ImplicitEM (), _x (t - 0.1 ) + a)]
1000
+ @testset " $Problem with $(SciMLBase. parameterless_type (typeof (alg))) " for (System, Problem, alg, rhss) in [
1001
+ (System, ODEProblem, Tsit5 (), 0 ),
1002
+ (System, SDEProblem, ImplicitEM (), a),
1003
+ (System, DDEProblem, MethodOfSteps (Tsit5 ()), _x (t - 0.1 )),
1004
+ (System, SDDEProblem, ImplicitEM (), _x (t - 0.1 ) + a),
1005
+ # polyalg cache
1006
+ (NonlinearSystemWrapper, NonlinearProblemWrapper,
1007
+ FastShortcutNonlinearPolyalg (), 0 ),
1008
+ # generalized first order cache
1009
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, NewtonRaphson (), 0 ),
1010
+ # quasi newton cache
1011
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, Klement (), 0 ),
1012
+ # noinit cache
1013
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, SimpleNewtonRaphson (), 0 ),
1014
+ # DFSane cache
1015
+ (NonlinearSystemWrapper, NonlinearProblemWrapper, DFSane (), 0 ),
1016
+ # Least squares
1017
+ # polyalg cache
1018
+ (NonlinearSystemWrapper, NLLSProblemWrapper, FastShortcutNLLSPolyalg (), 0 ),
1019
+ # generalized first order cache
1020
+ (NonlinearSystemWrapper, NLLSProblemWrapper, LevenbergMarquardt (), 0 ),
1021
+ # noinit cache
1022
+ (NonlinearSystemWrapper, NLLSProblemWrapper, SimpleGaussNewton (), 0 )
1023
+ ]
1024
+ is_nlsolve = alg isa SciMLBase. AbstractNonlinearAlgorithm
1025
+ D = is_nlsolve ? v -> v^ 3 : Differential (t)
1026
+ alge_eqs = [y^ 2 + 4 y * p^ 2 ~ x^ 3 ]
934
1027
@mtkbuild sys = System (
935
- [D (x) ~ x + p * y + rhss, y ^ 2 + 4 y * p ^ 2 ~ x ], t; guesses = [
1028
+ [D (x) ~ x + p * y^ 2 + rhss; alge_eqs ], t; guesses = [
936
1029
y => 1.0 , p => 1.0 ])
937
- prob = Problem (sys, [x => 1.0 ], (0.0 , 1.0 ), [p => 1.0 ])
1030
+ prob = Problem (sys, [x => 1.0 ], (0.0 , 1.0 ), [p => 1.0 ]; initialization_eqs = is_nlsolve ? alge_eqs : [] )
938
1031
@test is_variable (prob. f. initialization_data. initializeprob, y)
939
1032
prob2 = @test_nowarn remake (prob; p = [p => 3.0 ]) # ensure no over/under-determined warning
940
1033
@test is_variable (prob. f. initialization_data. initializeprob, y)
941
1034
942
- prob = Problem (sys, [y => 1.0 , x => 2.0 ], (0.0 , 1.0 ), [p => missing ])
1035
+ prob = Problem (sys, [y => 1.0 , x => 2.0 ], (0.0 , 1.0 ), [p => missing ]; initialization_eqs = is_nlsolve ? alge_eqs : [] )
943
1036
@test is_variable (prob. f. initialization_data. initializeprob, p)
944
1037
prob2 = @test_nowarn remake (prob; u0 = [y => 0.5 ])
945
1038
@test is_variable (prob. f. initialization_data. initializeprob, p)
0 commit comments