@@ -404,82 +404,25 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem,
404404
405405 obs = observed (sys)
406406 observedfun = if steady_state
407- let sys = sys, dict = Dict (), ps = ps
407+ let sys = sys, dict = Dict ()
408408 function generated_observed (obsvar, args... )
409409 obs = get! (dict, value (obsvar)) do
410- build_explicit_observed_function (sys, obsvar)
410+ SymbolicIndexingInterface . observed (sys, obsvar)
411411 end
412412 if args === ()
413- let obs = obs, ps_T = typeof (ps)
414- (u, p, t = Inf ) -> if p isa MTKParameters
415- obs (u, p... , t)
416- elseif ps_T <: Tuple
417- obs (u, p... , t)
418- else
419- obs (u, p, t)
420- end
413+ return let obs = obs
414+ fn1 (u, p, t = Inf ) = obs (u, p, t)
415+ fn1
421416 end
417+ elseif length (args) == 2
418+ return obs (args... , Inf )
422419 else
423- if args[2 ] isa MTKParameters
424- if length (args) == 2
425- u, p = args
426- obs (u, p... , Inf )
427- else
428- u, p, t = args
429- obs (u, p... , t)
430- end
431- elseif ps isa Tuple
432- if length (args) == 2
433- u, p = args
434- obs (u, p... , Inf )
435- else
436- u, p, t = args
437- obs (u, p... , t)
438- end
439- else
440- if length (args) == 2
441- u, p = args
442- obs (u, p, Inf )
443- else
444- u, p, t = args
445- obs (u, p, t)
446- end
447- end
420+ return obs (args... )
448421 end
449422 end
450423 end
451424 else
452- let sys = sys, dict = Dict (), ps = ps
453- function generated_observed (obsvar, args... )
454- obs = get! (dict, value (obsvar)) do
455- build_explicit_observed_function (sys,
456- obsvar;
457- checkbounds = checkbounds,
458- ps)
459- end
460- if args === ()
461- let obs = obs, ps_T = typeof (ps)
462- (u, p, t) -> if p isa MTKParameters
463- obs (u, p... , t)
464- elseif ps_T <: Tuple
465- obs (u, p... , t)
466- else
467- obs (u, p, t)
468- end
469- end
470- else
471- u, p, t = args
472- if p isa MTKParameters
473- u, p, t = args
474- obs (u, p... , t)
475- elseif ps isa Tuple # split parameters
476- obs (u, p... , t)
477- else
478- obs (args... )
479- end
480- end
481- end
482- end
425+ ObservedFunctionCache (sys)
483426 end
484427
485428 jac_prototype = if sparse
@@ -571,24 +514,7 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
571514 _jac = nothing
572515 end
573516
574- obs = observed (sys)
575- observedfun = let sys = sys, dict = Dict ()
576- function generated_observed (obsvar, args... )
577- obs = get! (dict, value (obsvar)) do
578- build_explicit_observed_function (sys, obsvar; checkbounds = checkbounds)
579- end
580- if args === ()
581- let obs = obs
582- fun (u, p, t) = obs (u, p, t)
583- fun (u, p:: MTKParameters , t) = obs (u, p... , t)
584- fun
585- end
586- else
587- u, p, t = args
588- p isa MTKParameters ? obs (u, p... , t) : obs (u, p, t)
589- end
590- end
591- end
517+ observedfun = ObservedFunctionCache (sys)
592518
593519 jac_prototype = if sparse
594520 uElType = u0 === nothing ? Float64 : eltype (u0)
0 commit comments