# Symbolics.jacobian_sparsity detection errors with PreallocationTools

When I try to do jacobian sparsity detection, I get error that `ERROR: MethodError: no method matching zero(::Type{Any})`.
The array returned from PreallocationsTools.jl for array of Symbolics.Num datatype, is of type `Vector{Any}`. So when I do some mathematical operations on it, it errors. Here is a MWE

``````using Symbolics, PreallocationTools, SparseArrays
import LinearAlgebra as LA

function f!(du::AbstractArray{T}, u::AbstractArray{T}, p) where {T}
∇, vbd, intp, Γd, tmp, v = p
v = get_tmp(v, first(u))
tmp = get_tmp(tmp, first(u))
v[Γd] .= vbd
v[intp] .= u
@show typeof(v)
LA.mul!(tmp, ∇, v)
tmp - sin.(v)
du .= tmp[intp]
return
end

function main()
n = 1000
Γd = rand(1:n, 10)
v = rand(n)
vcache = DiffCache(v[:])
tmp = DiffCache(v[:])
vbd = v[Γd]
intp = setdiff(1:n, Γd)
∇ = sprand(n, n, 0.3)
p = (∇, vbd, intp, Γd, tmp, vcache)
u = v[intp]
du = similar(u)
f1!(du, u) = f!(du, u, p)
jac_sp = Symbolics.jacobian_sparsity(f1!, du, u)
jac_sp = Float64.(jac_sp)
return jac_sp
end

jac_sp = main()
``````

It seems I’m missing something and there should be an easy fix for this. Thanks in advance.

You might need special handling of it, like `v = v isa Vector{Any} ? typeof(first(v)).(v) : v` to concretize it. Since that would only allocate in the symbolics run, it won’t really impact performance in what you need but should fix the symbolics tracing.

That doesn’t quite for this example, after this change it says

``````ERROR: UndefRefError: access to undefined reference
``````

It seems, preallocationtools hasn’t yet allocated memory for this datatype.
But this idea works if we manually allocate the memory for vector for type T.

``````    v = v isa Vector{Any} ? Vector{T}(undef, length(v)) : v
``````

Thanks a lot Chris.