Skip to content

Commit b07c154

Browse files
committed
Add docs and at nonamespace
1 parent 32a5639 commit b07c154

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

src/ModelingToolkit.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,6 @@ export simplify, substitute
176176
export build_function
177177
export modelingtoolkitize
178178
export @variables, @parameters
179-
export @named
179+
export @named, @nonamespace
180180

181181
end # module

src/systems/abstractsystem.jl

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ function Base.propertynames(sys::AbstractSystem; private=false)
206206
end
207207
end
208208

209-
function Base.getproperty(sys::AbstractSystem, name::Symbol)
209+
function Base.getproperty(sys::AbstractSystem, name::Symbol; namespace=true)
210210
sysname = nameof(sys)
211211
systems = get_systems(sys)
212212
if isdefined(sys, name)
@@ -215,30 +215,30 @@ function Base.getproperty(sys::AbstractSystem, name::Symbol)
215215
elseif !isempty(systems)
216216
i = findfirst(x->nameof(x)==name,systems)
217217
if i !== nothing
218-
return rename(systems[i],renamespace(sysname,name))
218+
return namespace ? rename(systems[i],renamespace(sysname,name)) : systems[i]
219219
end
220220
end
221221

222222
sts = get_states(sys)
223223
i = findfirst(x->getname(x) == name, sts)
224224

225225
if i !== nothing
226-
return rename(sts[i],renamespace(sysname,name))
226+
return namespace ? rename(sts[i],renamespace(sysname,name)) : sts[i]
227227
end
228228

229229
if has_ps(sys)
230230
ps = get_ps(sys)
231231
i = findfirst(x->getname(x) == name,ps)
232232
if i !== nothing
233-
return rename(ps[i],renamespace(sysname,name))
233+
return namespace ? rename(ps[i],renamespace(sysname,name)) : ps[i]
234234
end
235235
end
236236

237237
if has_observed(sys)
238238
obs = get_observed(sys)
239239
i = findfirst(x->getname(x.lhs)==name,obs)
240240
if i !== nothing
241-
return rename(obs[i].lhs,renamespace(sysname,name))
241+
return namespace ? rename(obs[i].lhs,renamespace(sysname,name)) : obs[i]
242242
end
243243
end
244244

@@ -490,10 +490,35 @@ function _named(expr)
490490
:($name = $call)
491491
end
492492

493+
"""
494+
$(SIGNATURES)
495+
496+
Rewrite `@named y = foo(x)` to `y = foo(x; name=:y)`.
497+
"""
493498
macro named(expr)
494499
esc(_named(expr))
495500
end
496501

502+
function _nonamespace(expr)
503+
if Meta.isexpr(expr, :.)
504+
return :($getproperty($(map(_nonamespace, expr.args)...); namespace=false))
505+
elseif expr isa Expr && !isempty(expr.args)
506+
return Expr(expr.head, map(_nonamespace, expr.args)...)
507+
else
508+
expr
509+
end
510+
end
511+
512+
"""
513+
$(SIGNATURES)
514+
515+
Rewrite `@nonamespace a.b.c` to
516+
`getproperty(getproperty(a, :b; namespace = false), :c; namespace = false)`.
517+
"""
518+
macro nonamespace(expr)
519+
esc(_nonamespace(expr))
520+
end
521+
497522
"""
498523
$(SIGNATURES)
499524

test/reduction.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ connected = ODESystem([s ~ a + lorenz1.x
7575
lorenz1.F ~ lorenz2.u
7676
lorenz2.F ~ lorenz1.u],t,systems=[lorenz1,lorenz2])
7777
@test length(Base.propertynames(connected)) == 10
78+
@test isequal((@nonamespace connected.lorenz1.x), x)
7879

7980
# Reduced Flattened System
8081

0 commit comments

Comments
 (0)