diff --git a/src/core/defcomposite.jl b/src/core/defcomposite.jl index 5a6b3c4fb..86c7cdd66 100644 --- a/src/core/defcomposite.jl +++ b/src/core/defcomposite.jl @@ -109,7 +109,8 @@ function _parse(expr) elseif @capture(arg, (cname_.pname_ | pname_)) cname = (cname === nothing ? :(:*) : cname) # wildcard - push!(regargs, :($cname => $(QuoteNode(pname)))) + push!(regargs, :(obj[$(QuoteNode(cname))] => $(QuoteNode(pname)))) + end end result = :(Mimi.import_param!(obj, $(QuoteNode(localparname)), $(regargs...); diff --git a/test/test_composite.jl b/test/test_composite.jl index e3445bc24..bcedeb18b 100644 --- a/test/test_composite.jl +++ b/test/test_composite.jl @@ -175,6 +175,35 @@ path1 = ComponentPath(:a, :b) path2 = ComponentPath(:c, :d) @test ComponentPath(path1, path2) == ComponentPath(:a, :b, :c, :d) +# renaming + +@defcomp A begin + p1 = Parameter() + p2 = Parameter() + + v1 = Variable() +end + +@defcomp B begin + v2 = Variable() +end + +@defcomposite C begin + + foo = Component(A) + bar = Component(B) + + rename_p1 = Parameter(foo.p1) + + connect(foo.p2, bar.v2) + + rename_v1 = Variable(foo.v1) +end + +for key in [:foo, :bar, :rename_p1, :rename_v1] + @test key in keys(C.namespace) +end + end # module nothing diff --git a/test/test_defcomposite.jl b/test/test_defcomposite.jl deleted file mode 100644 index 2bd305d08..000000000 --- a/test/test_defcomposite.jl +++ /dev/null @@ -1,69 +0,0 @@ -module TestDefComposite - -using Test -using Mimi -using MacroTools - -import Mimi: ComponentPath, build, import_params! - -@defcomp Comp1 begin - par_1_1 = Parameter(index=[time]) # external input - var_1_1 = Variable(index=[time]) # computed - foo = Parameter() - - function run_timestep(p, v, d, t) - v.var_1_1[t] = p.par_1_1[t] - end -end - -@defcomp Comp2 begin - par_2_1 = Parameter(index=[time]) # connected to Comp1.var_1_1 - par_2_2 = Parameter(index=[time]) # external input - var_2_1 = Variable(index=[time]) # computed - foo = Parameter() - - function run_timestep(p, v, d, t) - v.var_2_1[t] = p.par_2_1[t] + p.foo * p.par_2_2[t] - end -end - -@defcomposite A begin - Component(Comp1) - Component(Comp2) - - # imports - bar = Parameter(Comp1.par_1_1) - foo2 = Parameter(Comp2.foo) - - # linked imports - foo = Parameter(Comp1.foo, Comp2.foo) - - # connections - connect(Comp2.par_2_1, Comp1.var_1_1) - connect(Comp2.par_2_2, Comp1.var_1_1) -end - -m = Model() -years = 2005:2020 -set_dimension!(m, :time, years) -add_comp!(m, A) - -#set_param!(m, "/A/Comp1", :par_1_1, 2:2:2*length(years)) - -a = m.md[:A] -set_param!(a, :Comp1, :foo, 10) -set_param!(a, :Comp2, :foo, 4) # TBD: why does this overwrite the 10 above?? - -import_params!(m.md) # so we can set params at top-level -set_param!(m, :par_1_1, 2:2:2*length(years)) - -build(m) -run(m) - -end # module - -m = TestDefComposite.m -A = TestDefComposite.A -md = m.md - -nothing