@@ -5,6 +5,14 @@ function filter_kwargs(kwargs)
5
5
end
6
6
pairs (NamedTuple (kwargs))
7
7
end
8
+ function gen_quoted_kwargs (kwargs)
9
+ kwargparam = Expr (:parameters )
10
+ for kw in kwargs
11
+ push! (kwargparam. args, Expr (:kw , kw[1 ], kw[2 ]))
12
+ end
13
+ kwargparam
14
+ end
15
+
8
16
function calculate_tgrad (sys:: AbstractODESystem ;
9
17
simplify = false )
10
18
isempty (get_tgrad (sys)[]) || return get_tgrad (sys)[] # use cached tgrad, if possible
@@ -829,13 +837,14 @@ function ODEProblemExpr{iip}(sys::AbstractODESystem, u0map, tspan,
829
837
kwargs... )
830
838
linenumbers = get (kwargs, :linenumbers , true )
831
839
kwargs = filter_kwargs (kwargs)
832
-
840
+ kwarg_params = gen_quoted_kwargs (kwargs)
841
+ odep = Expr (:call , :ODEProblem , kwarg_params, :f , :u0 , :tspan , :p )
833
842
ex = quote
834
843
f = $ f
835
844
u0 = $ u0
836
845
tspan = $ tspan
837
846
p = $ p
838
- ODEProblem (f, u0, tspan, p; $ (kwargs ... ))
847
+ $ odep
839
848
end
840
849
! linenumbers ? striplines (ex) : ex
841
850
end
@@ -874,16 +883,17 @@ function DAEProblemExpr{iip}(sys::AbstractODESystem, du0map, u0map, tspan,
874
883
sts = states (sys)
875
884
differential_vars = map (Base. Fix2 (in, diffvars), sts)
876
885
kwargs = filter_kwargs (kwargs)
877
-
886
+ kwarg_params = gen_quoted_kwargs (kwargs)
887
+ push! (kwarg_params. args, Expr (:kw , :differential_vars , :differential_vars ))
888
+ prob = Expr (:call , :(DAEProblem{$ iip}), kwarg_params, :f , :du0 , :u0 , :tspan , :p )
878
889
ex = quote
879
890
f = $ f
880
891
u0 = $ u0
881
892
du0 = $ du0
882
893
tspan = $ tspan
883
894
p = $ p
884
895
differential_vars = $ differential_vars
885
- DAEProblem {$iip} (f, du0, u0, tspan, p; differential_vars = differential_vars,
886
- $ (kwargs... ))
896
+ $ prob
887
897
end
888
898
! linenumbers ? striplines (ex) : ex
889
899
end
@@ -946,11 +956,13 @@ function SteadyStateProblemExpr{iip}(sys::AbstractODESystem, u0map,
946
956
check_length, kwargs... )
947
957
linenumbers = get (kwargs, :linenumbers , true )
948
958
kwargs = filter_kwargs (kwargs)
959
+ kwarg_params = gen_quoted_kwargs (kwargs)
960
+ prob = Expr (:call , :SteadyStateProblem , kwarg_params, :f , :u0 , :p )
949
961
ex = quote
950
962
f = $ f
951
963
u0 = $ u0
952
964
p = $ p
953
- SteadyStateProblem (f, u0, p; $ (kwargs ... ))
965
+ $ prob
954
966
end
955
967
! linenumbers ? striplines (ex) : ex
956
968
end
0 commit comments