@@ -312,12 +312,13 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
312312 analytic = nothing ,
313313 split_idxs = nothing ,
314314 initialization_data = nothing ,
315+ cse = true ,
315316 kwargs... ) where {iip, specialize}
316317 if ! iscomplete (sys)
317318 error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `ODEFunction`" )
318319 end
319320 f_gen = generate_function (sys, dvs, ps; expression = Val{true },
320- expression_module = eval_module, checkbounds = checkbounds,
321+ expression_module = eval_module, checkbounds = checkbounds, cse,
321322 kwargs... )
322323 f_oop, f_iip = eval_or_rgf .(f_gen; eval_expression, eval_module)
323324 f = GeneratedFunctionWrapper {(2, 3, is_split(sys))} (f_oop, f_iip)
@@ -333,7 +334,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
333334 tgrad_gen = generate_tgrad (sys, dvs, ps;
334335 simplify = simplify,
335336 expression = Val{true },
336- expression_module = eval_module,
337+ expression_module = eval_module, cse,
337338 checkbounds = checkbounds, kwargs... )
338339 tgrad_oop, tgrad_iip = eval_or_rgf .(tgrad_gen; eval_expression, eval_module)
339340 _tgrad = GeneratedFunctionWrapper {(2, 3, is_split(sys))} (tgrad_oop, tgrad_iip)
@@ -345,7 +346,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
345346 jac_gen = generate_jacobian (sys, dvs, ps;
346347 simplify = simplify, sparse = sparse,
347348 expression = Val{true },
348- expression_module = eval_module,
349+ expression_module = eval_module, cse,
349350 checkbounds = checkbounds, kwargs... )
350351 jac_oop, jac_iip = eval_or_rgf .(jac_gen; eval_expression, eval_module)
351352
@@ -365,7 +366,7 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
365366 end
366367
367368 observedfun = ObservedFunctionCache (
368- sys; steady_state, eval_expression, eval_module, checkbounds)
369+ sys; steady_state, eval_expression, eval_module, checkbounds, cse )
369370
370371 jac_prototype = if sparse
371372 uElType = u0 === nothing ? Float64 : eltype (u0)
@@ -420,12 +421,13 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
420421 eval_module = @__MODULE__ ,
421422 checkbounds = false ,
422423 initialization_data = nothing ,
424+ cse = true ,
423425 kwargs... ) where {iip}
424426 if ! iscomplete (sys)
425427 error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating a `DAEFunction`" )
426428 end
427429 f_gen = generate_function (sys, dvs, ps; implicit_dae = true ,
428- expression = Val{true },
430+ expression = Val{true }, cse,
429431 expression_module = eval_module, checkbounds = checkbounds,
430432 kwargs... )
431433 f_oop, f_iip = eval_or_rgf .(f_gen; eval_expression, eval_module)
@@ -435,7 +437,7 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
435437 jac_gen = generate_dae_jacobian (sys, dvs, ps;
436438 simplify = simplify, sparse = sparse,
437439 expression = Val{true },
438- expression_module = eval_module,
440+ expression_module = eval_module, cse,
439441 checkbounds = checkbounds, kwargs... )
440442 jac_oop, jac_iip = eval_or_rgf .(jac_gen; eval_expression, eval_module)
441443
@@ -445,7 +447,7 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
445447 end
446448
447449 observedfun = ObservedFunctionCache (
448- sys; eval_expression, eval_module, checkbounds = get (kwargs, :checkbounds , false ))
450+ sys; eval_expression, eval_module, checkbounds = get (kwargs, :checkbounds , false ), cse )
449451
450452 jac_prototype = if sparse
451453 uElType = u0 === nothing ? Float64 : eltype (u0)
@@ -479,14 +481,15 @@ function DiffEqBase.DDEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
479481 eval_module = @__MODULE__ ,
480482 checkbounds = false ,
481483 initialization_data = nothing ,
484+ cse = true ,
482485 kwargs... ) where {iip}
483486 if ! iscomplete (sys)
484487 error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `DDEFunction`" )
485488 end
486489 f_gen = generate_function (sys, dvs, ps; isdde = true ,
487490 expression = Val{true },
488491 expression_module = eval_module, checkbounds = checkbounds,
489- kwargs... )
492+ cse, kwargs... )
490493 f_oop, f_iip = eval_or_rgf .(f_gen; eval_expression, eval_module)
491494 f = GeneratedFunctionWrapper {(3, 4, is_split(sys))} (f_oop, f_iip)
492495
@@ -503,19 +506,20 @@ function DiffEqBase.SDDEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys
503506 eval_module = @__MODULE__ ,
504507 checkbounds = false ,
505508 initialization_data = nothing ,
509+ cse = true ,
506510 kwargs... ) where {iip}
507511 if ! iscomplete (sys)
508512 error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `SDDEFunction`" )
509513 end
510514 f_gen = generate_function (sys, dvs, ps; isdde = true ,
511515 expression = Val{true },
512516 expression_module = eval_module, checkbounds = checkbounds,
513- kwargs... )
517+ cse, kwargs... )
514518 f_oop, f_iip = eval_or_rgf .(f_gen; eval_expression, eval_module)
515519 f = GeneratedFunctionWrapper {(3, 4, is_split(sys))} (f_oop, f_iip)
516520
517521 g_gen = generate_diffusion_function (sys, dvs, ps; expression = Val{true },
518- isdde = true , kwargs... )
522+ isdde = true , cse, kwargs... )
519523 g_oop, g_iip = eval_or_rgf .(g_gen; eval_expression, eval_module)
520524 g = GeneratedFunctionWrapper {(3, 4, is_split(sys))} (g_oop, g_iip)
521525
@@ -841,6 +845,7 @@ function SciMLBase.BVProblem{iip, specialize}(sys::AbstractODESystem, u0map = []
841845 warn_initialize_determined = true ,
842846 eval_expression = false ,
843847 eval_module = @__MODULE__ ,
848+ cse = true ,
844849 kwargs... ) where {iip, specialize}
845850 if ! iscomplete (sys)
846851 error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating an `BVProblem`" )
@@ -864,12 +869,12 @@ function SciMLBase.BVProblem{iip, specialize}(sys::AbstractODESystem, u0map = []
864869 _u0map = has_alg_eqs (sys) ? u0map : merge (Dict (u0map), Dict (guesses))
865870 f, u0, p = process_SciMLProblem (ODEFunction{iip, specialize}, sys, _u0map, parammap;
866871 t = tspan != = nothing ? tspan[1 ] : tspan, guesses,
867- check_length, warn_initialize_determined, eval_expression, eval_module, kwargs... )
872+ check_length, warn_initialize_determined, eval_expression, eval_module, cse, kwargs... )
868873
869874 stidxmap = Dict ([v => i for (i, v) in enumerate (sts)])
870875 u0_idxs = has_alg_eqs (sys) ? collect (1 : length (sts)) : [stidxmap[k] for (k, v) in u0map]
871876
872- fns = generate_function_bc (sys, u0, u0_idxs, tspan)
877+ fns = generate_function_bc (sys, u0, u0_idxs, tspan; cse )
873878 bc_oop, bc_iip = eval_or_rgf .(fns; eval_expression, eval_module)
874879 bc (sol, p, t) = bc_oop (sol, p, t)
875880 bc (resid, u, p, t) = bc_iip (resid, u, p, t)
@@ -988,15 +993,16 @@ function DiffEqBase.DDEProblem{iip}(sys::AbstractODESystem, u0map = [],
988993 eval_expression = false ,
989994 eval_module = @__MODULE__ ,
990995 u0_constructor = identity,
996+ cse = true ,
991997 kwargs... ) where {iip}
992998 if ! iscomplete (sys)
993999 error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating a `DDEProblem`" )
9941000 end
9951001 f, u0, p = process_SciMLProblem (DDEFunction{iip}, sys, u0map, parammap;
9961002 t = tspan != = nothing ? tspan[1 ] : tspan,
997- symbolic_u0 = true , u0_constructor,
1003+ symbolic_u0 = true , u0_constructor, cse,
9981004 check_length, eval_expression, eval_module, kwargs... )
999- h_gen = generate_history (sys, u0; expression = Val{true })
1005+ h_gen = generate_history (sys, u0; expression = Val{true }, cse )
10001006 h_oop, h_iip = eval_or_rgf .(h_gen; eval_expression, eval_module)
10011007 h = h_oop
10021008 u0 = float .(h (p, tspan[1 ]))
@@ -1027,15 +1033,16 @@ function DiffEqBase.SDDEProblem{iip}(sys::AbstractODESystem, u0map = [],
10271033 eval_expression = false ,
10281034 eval_module = @__MODULE__ ,
10291035 u0_constructor = identity,
1036+ cse = true ,
10301037 kwargs... ) where {iip}
10311038 if ! iscomplete (sys)
10321039 error (" A completed system is required. Call `complete` or `structural_simplify` on the system before creating a `SDDEProblem`" )
10331040 end
10341041 f, u0, p = process_SciMLProblem (SDDEFunction{iip}, sys, u0map, parammap;
10351042 t = tspan != = nothing ? tspan[1 ] : tspan,
10361043 symbolic_u0 = true , eval_expression, eval_module, u0_constructor,
1037- check_length, kwargs... )
1038- h_gen = generate_history (sys, u0; expression = Val{true })
1044+ check_length, cse, kwargs... )
1045+ h_gen = generate_history (sys, u0; expression = Val{true }, cse )
10391046 h_oop, h_iip = eval_or_rgf .(h_gen; eval_expression, eval_module)
10401047 h = h_oop
10411048 u0 = h (p, tspan[1 ])
0 commit comments