From 888cf0d3f99b1b024603d12606c18dc25f64b6dd Mon Sep 17 00:00:00 2001 From: Yingbo Ma Date: Thu, 8 Jul 2021 09:05:42 -0400 Subject: [PATCH] Optimize issymbollike --- src/vector_of_array.jl | 20 ++++++-------------- test/utils_test.jl | 4 ++++ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/vector_of_array.jl b/src/vector_of_array.jl index e05cb917..8b7172d4 100644 --- a/src/vector_of_array.jl +++ b/src/vector_of_array.jl @@ -16,20 +16,12 @@ struct AllObserved end Base.@pure __parameterless_type(T) = Base.typename(T).wrapper -const _Symbolics_Operation = Symbol("Symbolics.Operation") -const _Symbolics_Variable = Symbol("Symbolics.Variable") -const _Symbolics_Sym = Symbol("Symbolics.Sym") -const _Symbolics_Num = Symbol("Symbolics.Num") -const _Symbolics_Term = Symbol("Symbolics.Term") -issymbollike(x::Symbol) = true -issymbollike(x::AllObserved) = true -function issymbollike(x) - s = Symbol(__parameterless_type(typeof(x))) - s === :Operation || s === _Symbolics_Operation || - s === :Variable || s === _Symbolics_Variable || - s === :Sym || s === _Symbolics_Sym || - s === :Num || s === _Symbolics_Num || - s === :Term || s === _Symbolics_Term + +@generated function issymbollike(x) + x <: Union{Symbol,AllObserved} && return true + ss = ["Operation", "Variable", "Sym", "Num", "Term"] + s = string(Symbol(__parameterless_type(x))) + any(x->occursin(x, s), ss) end Base.Array(VA::AbstractVectorOfArray{T,N,A}) where {T,N,A <: AbstractVector{<:AbstractVector}} = reduce(hcat,VA.u) diff --git a/test/utils_test.jl b/test/utils_test.jl index 15de73ee..567e3641 100644 --- a/test/utils_test.jl +++ b/test/utils_test.jl @@ -66,3 +66,7 @@ function test_recursive_bottom_eltype() test_value(1.0u"kg", eltype(1.0u"kg")) end test_recursive_bottom_eltype() + +using RecursiveArrayTools: issymbollike +@test !issymbollike(1) +@test issymbollike(:a)