Skip to content

Commit 8c45817

Browse files
Merge pull request #2811 from AayushSabharwal/as/more-metadata
feat: dump more variable metadata
2 parents a203b86 + 230eb16 commit 8c45817

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

src/systems/abstractsystem.jl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2625,12 +2625,22 @@ See also: [`ModelingToolkit.dump_variable_metadata`](@ref), [`ModelingToolkit.du
26252625
"""
26262626
function dump_parameters(sys::AbstractSystem)
26272627
defs = defaults(sys)
2628-
map(dump_variable_metadata.(parameters(sys))) do meta
2628+
pdeps = parameter_dependencies(sys)
2629+
metas = map(dump_variable_metadata.(parameters(sys))) do meta
26292630
if haskey(defs, meta.var)
26302631
meta = merge(meta, (; default = defs[meta.var]))
26312632
end
26322633
meta
26332634
end
2635+
pdep_metas = map(collect(keys(pdeps))) do sym
2636+
val = pdeps[sym]
2637+
meta = dump_variable_metadata(sym)
2638+
meta = merge(meta,
2639+
(; dependency = pdeps[sym],
2640+
default = symbolic_evaluate(pdeps[sym], merge(defs, pdeps))))
2641+
return meta
2642+
end
2643+
return vcat(metas, pdep_metas)
26342644
end
26352645

26362646
"""

src/variables.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ function dump_variable_metadata(var)
4747
if desc == ""
4848
desc = nothing
4949
end
50+
default = hasdefault(uvar) ? getdefault(uvar) : nothing
5051
guess = getguess(uvar)
5152
disturbance = isdisturbance(uvar) || nothing
5253
tunable = istunable(uvar, isparameter(uvar))
@@ -72,7 +73,8 @@ function dump_variable_metadata(var)
7273
disturbance,
7374
tunable,
7475
dist,
75-
type
76+
type,
77+
default
7678
)
7779

7880
return NamedTuple(k => v for (k, v) in pairs(meta) if v !== nothing)

test/test_variable_metadata.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ using ModelingToolkit
1616
@test hasguess(y) === true
1717
@test ModelingToolkit.dump_variable_metadata(y).guess == 0
1818

19+
# Default
20+
@variables y = 0
21+
@test ModelingToolkit.getdefault(y) === 0
22+
@test ModelingToolkit.hasdefault(y) === true
23+
@test ModelingToolkit.dump_variable_metadata(y).default == 0
24+
1925
# Issue#2653
2026
@variables y[1:3] [guess = ones(3)]
2127
@test getguess(y) == ones(3)
@@ -124,3 +130,15 @@ sp = Set(p)
124130
@named sys = ODESystem([u ~ p], t)
125131

126132
@test_nowarn show(stdout, "text/plain", sys)
133+
134+
# Defaults overridden by system, parameter dependencies
135+
@variables x(t) = 1.0
136+
@parameters p=2.0 q
137+
@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
141+
params_meta = ModelingToolkit.dump_parameters(sys)
142+
params_meta = Dict([ModelingToolkit.getname(meta.var) => meta for meta in params_meta])
143+
@test params_meta[:p].default == 3.0
144+
@test isequal(params_meta[:q].dependency, 2p)

0 commit comments

Comments
 (0)