Skip to content

Commit 44bff5e

Browse files
committed
robust isparameter
1 parent 06e31ce commit 44bff5e

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

src/parameters.jl

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
1-
import SymbolicUtils: symtype, term, hasmetadata
1+
import SymbolicUtils: symtype, term, hasmetadata, issym
22
struct MTKParameterCtx end
33

4-
isparameter(x::Num) = isparameter(value(x))
5-
isparameter(x::Symbolic) = getmetadata(x, MTKParameterCtx, false)
6-
isparameter(x) = false
4+
function isparameter(x)
5+
x = unwrap(x)
6+
if istree(x) && operation(x) isa Symbolic
7+
getmetadata(x, MTKParameterCtx, false) ||
8+
isparameter(operation(x))
9+
elseif istree(x) && operation(x) == (getindex)
10+
isparameter(arguments(x)[1])
11+
elseif x isa Symbolic
12+
getmetadata(x, MTKParameterCtx, false)
13+
else
14+
false
15+
end
16+
end
717

818
"""
919
toparam(s::Sym)
@@ -15,13 +25,11 @@ function toparam(s)
1525
Symbolics.wrap(toparam(Symbolics.unwrap(s)))
1626
elseif s isa AbstractArray
1727
map(toparam, s)
18-
elseif symtype(s) <: AbstractArray
19-
Symbolics.recurse_and_apply(toparam, s)
2028
else
2129
setmetadata(s, MTKParameterCtx, true)
2230
end
2331
end
24-
toparam(s::Num) = Num(toparam(value(s)))
32+
toparam(s::Num) = wrap(toparam(value(s)))
2533

2634
"""
2735
tovar(s::Sym)

test/variable_parsing.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ end
4949

5050
@test all(ModelingToolkit.isparameter, collect(t))
5151
@test all(ModelingToolkit.isparameter, collect(s))
52-
@test all(ModelingToolkit.isparameter, Any[σ[1], σ[2]])
52+
@test all(ModelingToolkit.isparameter, Any[σ(t)[1], σ(t)[2]])
5353

5454
# fntype(n, T) = FnType{NTuple{n, Any}, T}
5555
# t1 = Num[Variable{Real}(:t, 1), Variable{Real}(:t, 2)]

0 commit comments

Comments
 (0)