Skip to content

Commit e7bd420

Browse files
fix: fix edge cases with metadata dumping, add tests
1 parent c421522 commit e7bd420

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

src/systems/abstractsystem.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2663,11 +2663,15 @@ ModelingToolkit.dump_unknowns(sys)
26632663
See also: [`ModelingToolkit.dump_variable_metadata`](@ref), [`ModelingToolkit.dump_parameters`](@ref)
26642664
"""
26652665
function dump_unknowns(sys::AbstractSystem)
2666-
defs = defaults(sys)
2666+
defs = varmap_with_toterm(defaults(sys))
2667+
gs = varmap_with_toterm(guesses(sys))
26672668
map(dump_variable_metadata.(unknowns(sys))) do meta
26682669
if haskey(defs, meta.var)
26692670
meta = merge(meta, (; default = defs[meta.var]))
26702671
end
2672+
if haskey(gs, meta.var)
2673+
meta = merge(meta, (; guess = gs[meta.var]))
2674+
end
26712675
meta
26722676
end
26732677
end

src/variables.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ function _varmap_to_vars(varmap::Dict, varlist; defaults = Dict(), check = false
208208
return [values[unwrap(var)] for var in varlist]
209209
end
210210

211+
function varmap_with_toterm(varmap; toterm = Symbolics.diff2term)
212+
return merge(todict(varmap), Dict(toterm(unwrap(k)) => v for (k, v) in varmap))
213+
end
214+
211215
function canonicalize_varmap(varmap; toterm = Symbolics.diff2term)
212216
new_varmap = Dict()
213217
for (k, v) in varmap

test/test_variable_metadata.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,15 @@ sp = Set(p)
131131

132132
@test_nowarn show(stdout, "text/plain", sys)
133133

134-
# Defaults overridden by system, parameter dependencies
135-
@variables x(t) = 1.0
134+
# Defaults, guesses overridden by system, parameter dependencies
135+
@variables x(t)=1.0 y(t) [guess = 1.0]
136136
@parameters p=2.0 q
137137
@named sys = ODESystem(Equation[], t, [x], [p]; defaults = Dict(x => 2.0, p => 3.0),
138-
parameter_dependencies = [q => 2p])
139-
x_meta = ModelingToolkit.dump_unknowns(sys)[]
140-
@test x_meta.default == 2.0
138+
guesses = Dict(y => 2.0), parameter_dependencies = [q => 2p])
139+
unks_meta = ModelingToolkit.dump_unknowns(sys)
140+
unks_meta = Dict([ModelingToolkit.getname(meta.var) => meta for meta in unks_meta])
141+
@test unks_meta[:x].default == 2.0
142+
@test unks_meta[:y].guess == 2.0
141143
params_meta = ModelingToolkit.dump_parameters(sys)
142144
params_meta = Dict([ModelingToolkit.getname(meta.var) => meta for meta in params_meta])
143145
@test params_meta[:p].default == 3.0

0 commit comments

Comments
 (0)