Forward problems

The SimulatorForwardProblem defines a forward map $\mathcal{F}: \Phi \mapsto \{\mathbf{Y}_i\}$ for $i=1\dots N$ from parameters $\Phi$ to a set of $N$ observables. Observables are functions of the simulator state that can be either diagnostics or true observable quantities that may be later compared to data.

A SimulatorForwardProblem is a wrapper around any other type of SciML problem that characterizes a simulator as well as one or more observables computed from the output of the simulation.

The simulator can also be defined by any arbitrary Julia function of the form f(::AbstractVector)::Any in which case the function is treated as a simple forward map from input parameters to some output type that is processed by the Observables.

Note that forward problems typically need to be defined with some initial input parameters:

p0 = ones(10)
forward_prob = SimulatorForwardProblem(sum, p0)
SimulatorForwardProblem for #sum with 0 observables ()

These parameters can be updated using the remake method from SciMLBase:

new_prob = remake(forward_prob, p=2*p0)
SimulatorForwardProblem for #sum with 0 observables ()

Solve interface

Like any SciML problem, SimulatorForwardProblem supports the SciML solve interface which allows the forward problem to be solved using any appropriate solver for the underlying problem.

For example, a ODE-based simulator can be solved using algorithms from OrdinaryDiffEq:

p = ComponentArray(α=0.1)
odeprob = ODEProblem((u,p,t) -> -p.α*u, [1.0], (0.0,1.0), p)
observable = SimulatorObservable(state -> state.u, size(odeprob.u0), name = :u, output = TimeSampled(0.0, 0.1:0.1:1.0, samplerate=0.01))
forward_prob = SimulatorForwardProblem(odeprob, observable)
forward_sol = solve(forward_prob, Tsit5())
SimulatorForwardSolution{SciMLBase.ODESolution{Float64, 2, Vector{Vector{Float64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Vector{Vector{Float64}}, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, OrdinaryDiffEqTsit5.Tsit5ConstantCache, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}, SimulatorForwardProblem{SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, Nothing, Tuple{TimeSampledObservable{1, TimeSampled{Float64, Any, typeof(mean), typeof(convert)}, Main.var"#5#6", Tuple{Dim{:dim1, UnitRange{Int64}}}}}, (:u,)}, SimulationData{SimulationBasedInference.InMemoryStorage{Any, Any, Any}}}(SimulatorForwardProblem{SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, Nothing, Tuple{TimeSampledObservable{1, TimeSampled{Float64, Any, typeof(mean), typeof(convert)}, Main.var"#5#6", Tuple{Dim{:dim1, UnitRange{Int64}}}}}, (:u,)}(SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}(SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}(Main.var"#2#3"(), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, nothing, nothing, nothing), [1.0], (0.0, 1.0), (α = 0.1), Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}(), SciMLBase.StandardODEProblem()), (α = 0.1), (u = TimeSampledObservable{1, TimeSampled{Float64, Any, typeof(mean), typeof(convert)}, Main.var"#5#6", Tuple{Dim{:dim1, UnitRange{Int64}}}}(:u, Main.var"#5#6"(), TimeSampled{Float64, Any, typeof(mean), typeof(convert)}((0.0, 1.0), [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.060000000000000005, 0.06999999999999999, 0.08, 0.09  …  0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, 1.0], [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], convert, Statistics.mean), (↓ dim1 1:1)),), nothing), SciMLBase.ODESolution{Float64, 2, Vector{Vector{Float64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Vector{Vector{Float64}}, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, OrdinaryDiffEqTsit5.Tsit5ConstantCache, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}([[1.0], [0.9048374180359599]], nothing, nothing, [0.0, 1.0], [[[1.0]]], nothing, SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}(SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}(Main.var"#2#3"(), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, nothing, nothing, nothing), [1.0], (0.0, 1.0), (α = 0.1), Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}(), SciMLBase.StandardODEProblem()), OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}(OrdinaryDiffEqCore.trivial_limiter!, OrdinaryDiffEqCore.trivial_limiter!, static(false)), OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Vector{Vector{Float64}}, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, OrdinaryDiffEqTsit5.Tsit5ConstantCache, Nothing}(SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}(Main.var"#2#3"(), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, nothing, nothing, nothing), [[1.0], [0.9048374180359599]], [0.0, 1.0], [[[1.0]]], nothing, false, OrdinaryDiffEqTsit5.Tsit5ConstantCache(), nothing, false), false, 0, SciMLBase.DEStats(591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0.0), nothing, SciMLBase.ReturnCode.Success, nothing, nothing, nothing), SimulationData{SimulationBasedInference.InMemoryStorage{Any, Any, Any}}(SimulationBasedInference.InMemoryStorage{Any, Any, Any}(Any[nothing], OrderedCollections.OrderedDict{Symbol, Any}[OrderedCollections.OrderedDict()], OrderedCollections.OrderedDict{Symbol, Vector{Any}}[OrderedCollections.OrderedDict(:u => [[0.9950174542624578], [0.9846235683121568], [0.9752052818514476], [0.9651267153661394], [0.9558949234725294], [0.9460159259747961], [0.9366029102354126], [0.927283555567557], [0.9180569300279974], [0.9089221109464907]])]), 1, Base.RefValue{Union{Nothing, SimulationBasedInference.StorageHandle}}(SimulationBasedInference.InMemoryStorageHandle(SimulationBasedInference.InMemoryStorage{Any, Any, Any}(Any[nothing], OrderedCollections.OrderedDict{Symbol, Any}[OrderedCollections.OrderedDict()], OrderedCollections.OrderedDict{Symbol, Vector{Any}}[OrderedCollections.OrderedDict(:u => [[0.9950174542624578], [0.9846235683121568], [0.9752052818514476], [0.9651267153661394], [0.9558949234725294], [0.9460159259747961], [0.9366029102354126], [0.927283555567557], [0.9180569300279974], [0.9089221109464907]])]), 1, true, Dict{Symbol, Any}(:u => Any[])))))

The return value of solve for SimulatorForwardProblem is typically a SimulatorForwardSolution which wraps the underlying solution type, the original forward problem, and a SimulationData instance holding the computed observable values. Observable values can be retrieved via get_observable(sol, :name) or the lower-level getvalue(sol.simdata, obs).

For forward problems such as the ODE example above that involve iteration, the problem can also be solved iteratively using init and step!:

solver = init(forward_prob, Tsit5())
step!(solver) # one solver step
# solve to completion
sol = solve!(solver)
SimulatorForwardSolution{SciMLBase.ODESolution{Float64, 2, Vector{Vector{Float64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Vector{Vector{Float64}}, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, OrdinaryDiffEqTsit5.Tsit5ConstantCache, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}, SimulatorForwardProblem{SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, Nothing, Tuple{TimeSampledObservable{1, TimeSampled{Float64, Any, typeof(mean), typeof(convert)}, Main.var"#5#6", Tuple{Dim{:dim1, UnitRange{Int64}}}}}, (:u,)}, SimulationData{SimulationBasedInference.InMemoryStorage{Any, Any, Any}}}(SimulatorForwardProblem{SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, Nothing, Tuple{TimeSampledObservable{1, TimeSampled{Float64, Any, typeof(mean), typeof(convert)}, Main.var"#5#6", Tuple{Dim{:dim1, UnitRange{Int64}}}}}, (:u,)}(SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}(SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}(Main.var"#2#3"(), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, nothing, nothing, nothing), [1.0], (0.0, 1.0), (α = 0.1), Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}(), SciMLBase.StandardODEProblem()), (α = 0.1), (u = TimeSampledObservable{1, TimeSampled{Float64, Any, typeof(mean), typeof(convert)}, Main.var"#5#6", Tuple{Dim{:dim1, UnitRange{Int64}}}}(:u, Main.var"#5#6"(), TimeSampled{Float64, Any, typeof(mean), typeof(convert)}((0.0, 1.0), [0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.060000000000000005, 0.06999999999999999, 0.08, 0.09  …  0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, 1.0], [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], convert, Statistics.mean), (↓ dim1 1:1)),), nothing), SciMLBase.ODESolution{Float64, 2, Vector{Vector{Float64}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}, OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Vector{Vector{Float64}}, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, OrdinaryDiffEqTsit5.Tsit5ConstantCache, Nothing}, SciMLBase.DEStats, Nothing, Nothing, Nothing, Nothing}([[1.0], [0.9048374180359599]], nothing, nothing, [0.0, 1.0], [[[1.0]]], nothing, SciMLBase.ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, false, ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(α = 1,)}}}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}, SciMLBase.StandardODEProblem}(SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}(Main.var"#2#3"(), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, nothing, nothing, nothing), [1.0], (0.0, 1.0), (α = 0.1), Base.Pairs{Symbol, Union{}, Nothing, @NamedTuple{}}(), SciMLBase.StandardODEProblem()), OrdinaryDiffEqTsit5.Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}(OrdinaryDiffEqCore.trivial_limiter!, OrdinaryDiffEqCore.trivial_limiter!, static(false)), OrdinaryDiffEqCore.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Vector{Vector{Float64}}, Vector{Float64}, Vector{Vector{Vector{Float64}}}, Nothing, OrdinaryDiffEqTsit5.Tsit5ConstantCache, Nothing}(SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, Main.var"#2#3", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}(Main.var"#2#3"(), LinearAlgebra.UniformScaling{Bool}(true), nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, SciMLBase.DEFAULT_OBSERVED, nothing, nothing, nothing, nothing), [[1.0], [0.9048374180359599]], [0.0, 1.0], [[[1.0]]], nothing, false, OrdinaryDiffEqTsit5.Tsit5ConstantCache(), nothing, false), false, 0, SciMLBase.DEStats(591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0.0), nothing, SciMLBase.ReturnCode.Success, nothing, nothing, nothing), SimulationData{SimulationBasedInference.InMemoryStorage{Any, Any, Any}}(SimulationBasedInference.InMemoryStorage{Any, Any, Any}(Any[nothing], OrderedCollections.OrderedDict{Symbol, Any}[OrderedCollections.OrderedDict()], OrderedCollections.OrderedDict{Symbol, Vector{Any}}[OrderedCollections.OrderedDict(:u => [[0.9950174542624578], [0.9846235683121568], [0.9752052818514476], [0.9651267153661394], [0.9558949234725294], [0.9460159259747961], [0.9366029102354126], [0.927283555567557], [0.9180569300279974], [0.9089221109464907]])]), 1, Base.RefValue{Union{Nothing, SimulationBasedInference.StorageHandle}}(SimulationBasedInference.InMemoryStorageHandle(SimulationBasedInference.InMemoryStorage{Any, Any, Any}(Any[nothing], OrderedCollections.OrderedDict{Symbol, Any}[OrderedCollections.OrderedDict()], OrderedCollections.OrderedDict{Symbol, Vector{Any}}[OrderedCollections.OrderedDict(:u => [[0.9950174542624578], [0.9846235683121568], [0.9752052818514476], [0.9651267153661394], [0.9558949234725294], [0.9460159259747961], [0.9366029102354126], [0.927283555567557], [0.9180569300279974], [0.9089221109464907]])]), 1, true, Dict{Symbol, Any}(:u => Any[])))))