Skip to content

Commit 5a85e7d

Browse files
authored
Merge pull request #156 from SciML/myb/opt
Optimize issymbollike
2 parents b74867d + 888cf0d commit 5a85e7d

File tree

2 files changed

+10
-14
lines changed

2 files changed

+10
-14
lines changed

src/vector_of_array.jl

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,12 @@ struct AllObserved
1616
end
1717

1818
Base.@pure __parameterless_type(T) = Base.typename(T).wrapper
19-
const _Symbolics_Operation = Symbol("Symbolics.Operation")
20-
const _Symbolics_Variable = Symbol("Symbolics.Variable")
21-
const _Symbolics_Sym = Symbol("Symbolics.Sym")
22-
const _Symbolics_Num = Symbol("Symbolics.Num")
23-
const _Symbolics_Term = Symbol("Symbolics.Term")
24-
issymbollike(x::Symbol) = true
25-
issymbollike(x::AllObserved) = true
26-
function issymbollike(x)
27-
s = Symbol(__parameterless_type(typeof(x)))
28-
s === :Operation || s === _Symbolics_Operation ||
29-
s === :Variable || s === _Symbolics_Variable ||
30-
s === :Sym || s === _Symbolics_Sym ||
31-
s === :Num || s === _Symbolics_Num ||
32-
s === :Term || s === _Symbolics_Term
19+
20+
@generated function issymbollike(x)
21+
x <: Union{Symbol,AllObserved} && return true
22+
ss = ["Operation", "Variable", "Sym", "Num", "Term"]
23+
s = string(Symbol(__parameterless_type(x)))
24+
any(x->occursin(x, s), ss)
3325
end
3426

3527
Base.Array(VA::AbstractVectorOfArray{T,N,A}) where {T,N,A <: AbstractVector{<:AbstractVector}} = reduce(hcat,VA.u)

test/utils_test.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,7 @@ function test_recursive_bottom_eltype()
6666
test_value(1.0u"kg", eltype(1.0u"kg"))
6767
end
6868
test_recursive_bottom_eltype()
69+
70+
using RecursiveArrayTools: issymbollike
71+
@test !issymbollike(1)
72+
@test issymbollike(:a)

0 commit comments

Comments
 (0)