@@ -84,14 +84,37 @@ function generate_tgrad(sys::AbstractODESystem, dvs = states(sys), ps = paramete
84
84
simplify = false , kwargs... )
85
85
tgrad = calculate_tgrad (sys, simplify = simplify)
86
86
pre = get_preprocess_constants (tgrad)
87
- return build_function (tgrad, dvs, ps, get_iv (sys); postprocess_fbody = pre, kwargs... )
87
+ if ps isa Tuple
88
+ return build_function (tgrad,
89
+ dvs,
90
+ ps... ,
91
+ get_iv (sys);
92
+ postprocess_fbody = pre,
93
+ kwargs... )
94
+ else
95
+ return build_function (tgrad,
96
+ dvs,
97
+ ps,
98
+ get_iv (sys);
99
+ postprocess_fbody = pre,
100
+ kwargs... )
101
+ end
88
102
end
89
103
90
104
function generate_jacobian (sys:: AbstractODESystem , dvs = states (sys), ps = parameters (sys);
91
105
simplify = false , sparse = false , kwargs... )
92
106
jac = calculate_jacobian (sys; simplify = simplify, sparse = sparse)
93
107
pre = get_preprocess_constants (jac)
94
- return build_function (jac, dvs, ps, get_iv (sys); postprocess_fbody = pre, kwargs... )
108
+ if ps isa Tuple
109
+ return build_function (jac,
110
+ dvs,
111
+ ps... ,
112
+ get_iv (sys);
113
+ postprocess_fbody = pre,
114
+ kwargs... )
115
+ else
116
+ return build_function (jac, dvs, ps, get_iv (sys); postprocess_fbody = pre, kwargs... )
117
+ end
95
118
end
96
119
97
120
function generate_control_jacobian (sys:: AbstractODESystem , dvs = states (sys),
@@ -364,8 +387,15 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem, dvs = s
364
387
tgrad_oop, tgrad_iip = eval_expression ?
365
388
(drop_expr (@RuntimeGeneratedFunction (eval_module, ex)) for ex in tgrad_gen) :
366
389
tgrad_gen
367
- _tgrad (u, p, t) = tgrad_oop (u, p, t)
368
- _tgrad (J, u, p, t) = tgrad_iip (J, u, p, t)
390
+ if p isa Tuple
391
+ __tgrad (u, p, t) = tgrad_oop (u, p... , t)
392
+ __tgrad (J, u, p, t) = tgrad_iip (J, u, p... , t)
393
+ _tgrad = __tgrad
394
+ else
395
+ ___tgrad (u, p, t) = tgrad_oop (u, p, t)
396
+ ___tgrad (J, u, p, t) = tgrad_iip (J, u, p, t)
397
+ _tgrad = ___tgrad
398
+ end
369
399
else
370
400
_tgrad = nothing
371
401
end
@@ -379,8 +409,15 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem, dvs = s
379
409
jac_oop, jac_iip = eval_expression ?
380
410
(drop_expr (@RuntimeGeneratedFunction (eval_module, ex)) for ex in jac_gen) :
381
411
jac_gen
382
- _jac (u, p, t) = jac_oop (u, p, t)
383
- _jac (J, u, p, t) = jac_iip (J, u, p, t)
412
+ if p isa Tuple
413
+ __jac (u, p, t) = jac_oop (u, p... , t)
414
+ __jac (J, u, p, t) = jac_iip (J, u, p... , t)
415
+ _jac = __jac
416
+ else
417
+ ___jac (u, p, t) = jac_oop (u, p, t)
418
+ ___jac (J, u, p, t) = jac_iip (J, u, p, t)
419
+ _jac = ___jac
420
+ end
384
421
else
385
422
_jac = nothing
386
423
end
0 commit comments