Skip to content

Commit a661f56

Browse files
committed
feat: include all of variable metadata in the Model.structure
1 parent a1a02a2 commit a661f56

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

src/systems/model_parsing.jl

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,22 @@ function connector_macro(mod, name, body)
6060
end
6161

6262
function parse_variable_def!(dict, mod, arg, varclass, kwargs, def = nothing)
63+
metatypes = [(:connection_type, VariableConnectType),
64+
(:description, VariableDescription),
65+
(:unit, VariableUnit),
66+
(:bounds, VariableBounds),
67+
(:noise, VariableNoiseType),
68+
(:input, VariableInput),
69+
(:output, VariableOutput),
70+
(:irreducible, VariableIrreducible),
71+
(:state_priority, VariableStatePriority),
72+
(:misc, VariableMisc),
73+
(:disturbance, VariableDisturbance),
74+
(:tunable, VariableTunable),
75+
(:dist, VariableDistribution),
76+
(:binary, VariableBinary),
77+
(:integer, VariableInteger)]
78+
6379
arg isa LineNumberNode && return
6480
MLStyle.@match arg begin
6581
a::Symbol => begin
@@ -79,9 +95,12 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, def = nothing)
7995
def, meta = parse_default(mod, b)
8096
var, _ = parse_variable_def!(dict, mod, a, varclass, kwargs, def)
8197
dict[varclass][getname(var)][:default] = def
82-
if !isnothing(meta)
83-
if (ct = get(meta, VariableConnectType, nothing)) !== nothing
84-
dict[varclass][getname(var)][:connection_type] = nameof(ct)
98+
if meta !== nothing
99+
for (type, key) in metatypes
100+
if (mt = get(meta, key, nothing)) !== nothing
101+
key == VariableConnectType && (mt = nameof(mt))
102+
dict[varclass][getname(var)][type] = mt
103+
end
85104
end
86105
var = set_var_metadata(var, meta)
87106
end
@@ -90,8 +109,14 @@ function parse_variable_def!(dict, mod, arg, varclass, kwargs, def = nothing)
90109
Expr(:tuple, a, b) => begin
91110
var, def = parse_variable_def!(dict, mod, a, varclass, kwargs)
92111
meta = parse_metadata(mod, b)
93-
if (ct = get(meta, VariableConnectType, nothing)) !== nothing
94-
dict[varclass][getname(var)][:connection_type] = nameof(ct)
112+
if meta !== nothing
113+
for (type, key) in metatypes
114+
if (mt = get(meta, key, nothing)) !== nothing
115+
key == VariableConnectType && (mt = nameof(mt))
116+
dict[varclass][getname(var)][type] = mt
117+
end
118+
end
119+
var = set_var_metadata(var, meta)
95120
end
96121
(set_var_metadata(var, meta), def)
97122
end

test/model_parsing.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,17 @@ getdefault(a.b.k) == 1
216216
getdefault(a.b.i) == 20
217217
getdefault(a.b.j) == 30
218218
getdefault(a.b.k) == 40
219+
220+
metadata = Dict(:description => "Variable to test metadata in the Model.structure",
221+
:input => true, :bounds => :((-1, 1)), :connection_type => :Flow, :integer => true,
222+
:binary => false, :tunable => false, :disturbance => true, :dist => :(Normal(1, 1)))
223+
224+
@connector MockMeta begin
225+
m(t), [description = "Variable to test metadata in the Model.structure",
226+
input = true, bounds = (-1, 1), connect = Flow, integer = true,
227+
binary = false, tunable = false, disturbance = true, dist = Normal(1, 1)]
228+
end
229+
230+
for (k, v) in metadata
231+
@test MockMeta.structure[:variables][:m][k] == v
232+
end

0 commit comments

Comments
 (0)