Skip to content

Commit d7755bf

Browse files
feat: track parameter dependency defaults and guesses
1 parent 5874f97 commit d7755bf

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/systems/diffeqs/odesystem.jl

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,8 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
237237
ctrl′ = value.(controls)
238238
dvs′ = value.(dvs)
239239
dvs′ = filter(x -> !isdelay(x, iv), dvs′)
240+
parameter_dependencies, ps′ = process_parameter_dependencies(
241+
parameter_dependencies, ps′)
240242
if !(isempty(default_u0) && isempty(default_p))
241243
Base.depwarn(
242244
"`default_u0` and `default_p` are deprecated. Use `defaults` instead.",
@@ -246,6 +248,8 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
246248
var_to_name = Dict()
247249
process_variables!(var_to_name, defaults, dvs′)
248250
process_variables!(var_to_name, defaults, ps′)
251+
process_variables!(var_to_name, defaults, [eq.lhs for eq in parameter_dependencies])
252+
process_variables!(var_to_name, defaults, [eq.rhs for eq in parameter_dependencies])
249253
defaults = Dict{Any, Any}(value(k) => value(v)
250254
for (k, v) in pairs(defaults) if v !== nothing)
251255

@@ -257,9 +261,15 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
257261
hasaguess = findall(!isnothing, syspsguesses)
258262
ps_guesses = ps′[hasaguess] .=> syspsguesses[hasaguess]
259263
syspsguesses = isempty(ps_guesses) ? Dict() : todict(ps_guesses)
264+
syspdepguesses = [ModelingToolkit.getguess(eq.lhs) for eq in parameter_dependencies]
265+
hasaguess = findall(!isnothing, syspdepguesses)
266+
pdep_guesses = [eq.lhs for eq in parameter_dependencies][hasaguess] .=>
267+
syspdepguesses[hasaguess]
268+
syspdepguesses = isempty(pdep_guesses) ? Dict() : todict(pdep_guesses)
260269

261-
guesses = merge(sysdvsguesses, syspsguesses, todict(guesses))
262-
guesses = Dict{Any, Any}(value(k) => value(v) for (k, v) in pairs(guesses))
270+
guesses = merge(sysdvsguesses, syspsguesses, syspdepguesses, todict(guesses))
271+
guesses = Dict{Any, Any}(value(k) => value(v)
272+
for (k, v) in pairs(guesses) if v !== nothing)
263273

264274
isempty(observed) || collect_var_to_name!(var_to_name, (eq.lhs for eq in observed))
265275

@@ -274,8 +284,7 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
274284
end
275285
cont_callbacks = SymbolicContinuousCallbacks(continuous_events)
276286
disc_callbacks = SymbolicDiscreteCallbacks(discrete_events)
277-
parameter_dependencies, ps′ = process_parameter_dependencies(
278-
parameter_dependencies, ps′)
287+
279288
if is_dde === nothing
280289
is_dde = _check_if_dde(deqs, iv′, systems)
281290
end

0 commit comments

Comments
 (0)