@@ -46,17 +46,17 @@ Update the property in the parent structure.
4646- if key is indexed (i.e. "a[1]"), it will update parent["a"][1]
4747"""
4848function update_parent_property! (parent, key, value)
49- @info " Update $key -> $value "
49+ @debug " Update $key -> $value "
5050 if contains (key, " ." )
5151 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 "
5353 m = match (r" ^(.*)\[ (.*)\] $" , key_head)
5454 _parent = if ! isnothing (m)
5555 parent[m[1 ]][parse (Int, m[2 ])]
5656 else
5757 parent[key]
5858 end
59- @info m
59+ @debug m
6060 update_parent_property! (_parent, key_tail, value)
6161 else
6262 m = match (r" ^(.*)\[ (.*)\] $" , key)
@@ -106,14 +106,17 @@ end
106106widen_container_type (container:: OrderedDict{K} ) where {K} = convert (OrderedDict{K,Any}, container)
107107widen_container_type (container:: Vector ) = convert (Vector{Any}, container)
108108
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)
111114 container = widen_container_type (container)
112115 for (key, value) in pairs (container)
113116 if value == placeholder
114117 container[key] = deepcopy (model)
115118 else
116- container[key] = replace_in_template ! (value, placeholder, model)
119+ container[key] = _replace_in_template ! (value, placeholder, model)
117120 end
118121 end
119122 container
@@ -126,7 +129,7 @@ function apply_wrappers!(container::Union{OrderedDict,Vector})
126129 wrapper = container[" WRAPPER" ]
127130 delete! (container, " WRAPPER" )
128131 for (key, sub) in pairs (container)
129- container[key] = replace_in_template! (wrapper, " MODEL" , sub)
132+ container[key] = replace_in_template (wrapper, " MODEL" , sub)
130133 end
131134 container
132135end
@@ -146,13 +149,13 @@ function parse_network(file)
146149 resolved_something = false
147150 for (mod, deps) in dependencies
148151 if deps ⊆ resolved_models
149- @info " Resolving $mod -> $deps "
152+ @debug " Resolving $mod -> $deps "
150153 recursive_resolve! (data[" Models" ], data[" Models" ][mod])
151154 delete! (dependencies, mod)
152155 push! (resolved_models, mod)
153156 resolved_something = true
154157 else
155- @info " Skip $mod -> $deps "
158+ @debug " Skip $mod -> $deps "
156159 end
157160 end
158161 resolved_something && continue
@@ -191,6 +194,7 @@ function _depth_first_construct!(constructors, data::Union{OrderedDict,Vector})
191194 key ∈ (" CONSTRUCTOR" , " ARGS" ) && continue
192195 kwargs[Symbol (key)] = value
193196 end
197+ @debug " call: $(data[" CONSTRUCTOR" ]) (args...; $(kwargs) )"
194198 return constructors[data[" CONSTRUCTOR" ]](args... ; kwargs... )
195199 end
196200 data
@@ -199,14 +203,16 @@ end
199203function build_network (data, constructors)
200204 vertexm = VertexModel[]
201205 for (k, v) in data[" VertexModels" ]
206+ @debug " Constructing VertexModel $k "
202207 vm = recursive_construct (constructors, v)
203208 set_graphelement! (vm, k)
204209 push! (vertexm, vm)
205210 end
206211
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)
210216
211217 m = match (r" ^(.*)=>(.*)$" , k)
212218 isnothing (m) && error (" Edge key must be of form 'src=>dst', got $k " )
@@ -216,9 +222,15 @@ function build_network(data, constructors)
216222 src = m[1 ]
217223 end
218224 if isnothing (dst)
219- dst = m[1 ]
225+ dst = m[2 ]
220226 end
221- set_graphelement! (vm , src, dst)
222- push! (vertexm, vm )
227+ set_graphelement! (em , src => dst)
228+ push! (edgem, em )
223229 end
230+ Network (vertexm, edgem)
231+ end
232+
233+ function load_network (constructors, file)
234+ data = parse_network (file)
235+ build_network (data, constructors)
224236end
0 commit comments