@@ -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, " ." = 2 )
52-         @info   " Found nested key $key_head  -> $key_tail " 
52+         @debug   " Found nested key $key_head  -> $key_tail " 
5353        m =  match (r" ^(.*)\[ (.*)\] $" 
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" ^(.*)\[ (.*)\] $" 
@@ -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 !
119+             container[key] =  _replace_in_template !
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" 
132+         container[key] =  replace_in_template (wrapper, " MODEL" 
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" " Models" 
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" ... ; 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" ^(.*)=>(.*)$" 
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