@@ -46,17 +46,17 @@ Update the property in the parent structure.
46
46
- if key is indexed (i.e. "a[1]"), it will update parent["a"][1]
47
47
"""
48
48
function update_parent_property! (parent, key, value)
49
- @info " Update $key -> $value "
49
+ @debug " Update $key -> $value "
50
50
if contains (key, " ." )
51
51
key_head, key_tail = split (key, " ." , limit= 2 )
52
- @info " Found nested key $key_head -> $key_tail "
52
+ @debug " Found nested key $key_head -> $key_tail "
53
53
m = match (r" ^(.*)\[ (.*)\] $" , key_head)
54
54
_parent = if ! isnothing (m)
55
55
parent[m[1 ]][parse (Int, m[2 ])]
56
56
else
57
57
parent[key]
58
58
end
59
- @info m
59
+ @debug m
60
60
update_parent_property! (_parent, key_tail, value)
61
61
else
62
62
m = match (r" ^(.*)\[ (.*)\] $" , key)
@@ -106,14 +106,17 @@ end
106
106
widen_container_type (container:: OrderedDict{K} ) where {K} = convert (OrderedDict{K,Any}, container)
107
107
widen_container_type (container:: Vector ) = convert (Vector{Any}, container)
108
108
109
- replace_in_template! (template, placeholder, model) = template
110
- function replace_in_template! (container:: Union{OrderedDict,Vector} , placeholder, model)
109
+ function replace_in_template (template, placeholder, model)
110
+ _replace_in_template! (deepcopy (template), placeholder, model)
111
+ end
112
+ _replace_in_template! (template, placeholder, model) = template
113
+ function _replace_in_template! (container:: Union{OrderedDict,Vector} , placeholder, model)
111
114
container = widen_container_type (container)
112
115
for (key, value) in pairs (container)
113
116
if value == placeholder
114
117
container[key] = deepcopy (model)
115
118
else
116
- container[key] = replace_in_template ! (value, placeholder, model)
119
+ container[key] = _replace_in_template ! (value, placeholder, model)
117
120
end
118
121
end
119
122
container
@@ -126,7 +129,7 @@ function apply_wrappers!(container::Union{OrderedDict,Vector})
126
129
wrapper = container[" WRAPPER" ]
127
130
delete! (container, " WRAPPER" )
128
131
for (key, sub) in pairs (container)
129
- container[key] = replace_in_template! (wrapper, " MODEL" , sub)
132
+ container[key] = replace_in_template (wrapper, " MODEL" , sub)
130
133
end
131
134
container
132
135
end
@@ -146,13 +149,13 @@ function parse_network(file)
146
149
resolved_something = false
147
150
for (mod, deps) in dependencies
148
151
if deps ⊆ resolved_models
149
- @info " Resolving $mod -> $deps "
152
+ @debug " Resolving $mod -> $deps "
150
153
recursive_resolve! (data[" Models" ], data[" Models" ][mod])
151
154
delete! (dependencies, mod)
152
155
push! (resolved_models, mod)
153
156
resolved_something = true
154
157
else
155
- @info " Skip $mod -> $deps "
158
+ @debug " Skip $mod -> $deps "
156
159
end
157
160
end
158
161
resolved_something && continue
@@ -191,6 +194,7 @@ function _depth_first_construct!(constructors, data::Union{OrderedDict,Vector})
191
194
key ∈ (" CONSTRUCTOR" , " ARGS" ) && continue
192
195
kwargs[Symbol (key)] = value
193
196
end
197
+ @debug " call: $(data[" CONSTRUCTOR" ]) (args...; $(kwargs) )"
194
198
return constructors[data[" CONSTRUCTOR" ]](args... ; kwargs... )
195
199
end
196
200
data
@@ -199,14 +203,16 @@ end
199
203
function build_network (data, constructors)
200
204
vertexm = VertexModel[]
201
205
for (k, v) in data[" VertexModels" ]
206
+ @debug " Constructing VertexModel $k "
202
207
vm = recursive_construct (constructors, v)
203
208
set_graphelement! (vm, k)
204
209
push! (vertexm, vm)
205
210
end
206
211
207
- edgem = EdgeModel[]
208
- for (k, v) in data[" VertexModels" ]
209
- vm = recursive_construct (constructors, v)
212
+ edgem = EdgeModel[]
213
+ for (k, v) in data[" EdgeModels" ]
214
+ @debug " Constructing EdgeModel $k "
215
+ em = recursive_construct (constructors, v)
210
216
211
217
m = match (r" ^(.*)=>(.*)$" , k)
212
218
isnothing (m) && error (" Edge key must be of form 'src=>dst', got $k " )
@@ -216,9 +222,15 @@ function build_network(data, constructors)
216
222
src = m[1 ]
217
223
end
218
224
if isnothing (dst)
219
- dst = m[1 ]
225
+ dst = m[2 ]
220
226
end
221
- set_graphelement! (vm , src, dst)
222
- push! (vertexm, vm )
227
+ set_graphelement! (em , src => dst)
228
+ push! (edgem, em )
223
229
end
230
+ Network (vertexm, edgem)
231
+ end
232
+
233
+ function load_network (constructors, file)
234
+ data = parse_network (file)
235
+ build_network (data, constructors)
224
236
end
0 commit comments