-
Notifications
You must be signed in to change notification settings - Fork 39
Closed
Description
I profiled the package loading of FillArrays.jl, and realized that it is massively dominated by SparseArrays.jl:
julia> @time_imports using FillArrays
┌ 7.6 ms SparseArrays.CHOLMOD.__init__() 81.29% compilation time
507.8 ms SparseArrays 6.95% compilation time
1.1 ms Statistics
41.5 ms FillArraysThat will improve on v1.10.beta1 to roughly half of it, but still. Given that many many packages depend directly or indirectly on FillArrays.jl, it would help the ecosystem a lot if package load time of FillArrays.jl could be reduced. Is it possible to make SparseArrays.jl a weak dependency? I see
FillArrays.jl/src/FillArrays.jl
Lines 545 to 590 in 1efbdbb
| ################## | |
| ## Sparse arrays | |
| ################## | |
| SparseVector{T}(Z::ZerosVector) where T = spzeros(T, length(Z)) | |
| SparseVector{Tv,Ti}(Z::ZerosVector) where {Tv,Ti} = spzeros(Tv, Ti, length(Z)) | |
| convert(::Type{AbstractSparseVector}, Z::ZerosVector{T}) where T = spzeros(T, length(Z)) | |
| convert(::Type{AbstractSparseVector{T}}, Z::ZerosVector) where T= spzeros(T, length(Z)) | |
| SparseMatrixCSC{T}(Z::ZerosMatrix) where T = spzeros(T, size(Z)...) | |
| SparseMatrixCSC{Tv,Ti}(Z::Zeros{T,2,Axes}) where {Tv,Ti<:Integer,T,Axes} = spzeros(Tv, Ti, size(Z)...) | |
| convert(::Type{AbstractSparseMatrix}, Z::ZerosMatrix{T}) where T = spzeros(T, size(Z)...) | |
| convert(::Type{AbstractSparseMatrix{T}}, Z::ZerosMatrix) where T = spzeros(T, size(Z)...) | |
| convert(::Type{AbstractSparseArray}, Z::Zeros{T}) where T = spzeros(T, size(Z)...) | |
| convert(::Type{AbstractSparseArray{Tv}}, Z::Zeros{T}) where {T,Tv} = spzeros(Tv, size(Z)...) | |
| convert(::Type{AbstractSparseArray{Tv,Ti}}, Z::Zeros{T}) where {T,Tv,Ti} = spzeros(Tv, Ti, size(Z)...) | |
| convert(::Type{AbstractSparseArray{Tv,Ti,N}}, Z::Zeros{T,N}) where {T,Tv,Ti,N} = spzeros(Tv, Ti, size(Z)...) | |
| SparseMatrixCSC{Tv}(Z::Eye{T}) where {T,Tv} = SparseMatrixCSC{Tv}(I, size(Z)...) | |
| # works around missing `speye`: | |
| SparseMatrixCSC{Tv,Ti}(Z::Eye{T}) where {T,Tv,Ti<:Integer} = | |
| convert(SparseMatrixCSC{Tv,Ti}, SparseMatrixCSC{Tv}(I, size(Z)...)) | |
| convert(::Type{AbstractSparseMatrix}, Z::Eye{T}) where {T} = SparseMatrixCSC{T}(I, size(Z)...) | |
| convert(::Type{AbstractSparseMatrix{Tv}}, Z::Eye{T}) where {T,Tv} = SparseMatrixCSC{Tv}(I, size(Z)...) | |
| convert(::Type{AbstractSparseArray}, Z::Eye{T}) where T = SparseMatrixCSC{T}(I, size(Z)...) | |
| convert(::Type{AbstractSparseArray{Tv}}, Z::Eye{T}) where {T,Tv} = SparseMatrixCSC{Tv}(I, size(Z)...) | |
| convert(::Type{AbstractSparseArray{Tv,Ti}}, Z::Eye{T}) where {T,Tv,Ti} = | |
| convert(SparseMatrixCSC{Tv,Ti}, Z) | |
| convert(::Type{AbstractSparseArray{Tv,Ti,2}}, Z::Eye{T}) where {T,Tv,Ti} = | |
| convert(SparseMatrixCSC{Tv,Ti}, Z) | |
| function SparseMatrixCSC{Tv}(R::RectOrDiagonalFill) where {Tv} | |
| SparseMatrixCSC{Tv,eltype(axes(R,1))}(R) | |
| end | |
| function SparseMatrixCSC{Tv,Ti}(R::RectOrDiagonalFill) where {Tv,Ti} | |
| Base.require_one_based_indexing(R) | |
| v = parent(R) | |
| J = getindex_value(v)*I | |
| SparseMatrixCSC{Tv,Ti}(J, size(R)) | |
| end |
kron stuff going on. The same applies to Statistics.jl, which currently depends strongly on SparseArrays.jl, so to make a difference, both packages would need to be handled as a package extension.Metadata
Metadata
Assignees
Labels
No labels