1- using SparseArraysBase: SparseArraysBase, SparseArrayDOK, default_getunstoredindex # # , Zero, getindex_zero_function
1+ function getzero (a:: AbstractArray{<:Any,N} , I:: Vararg{Int,N} ) where {N}
2+ return zero (eltype (a))
3+ end
24
35struct DiagonalArray{T,N,Diag<: AbstractVector{T} ,F} <: AbstractDiagonalArray{T,N}
46 diag:: Diag
@@ -7,15 +9,13 @@ struct DiagonalArray{T,N,Diag<:AbstractVector{T},F} <: AbstractDiagonalArray{T,N
79end
810
911function DiagonalArray {T,N} (
10- diag:: AbstractVector{T} ,
11- d:: Tuple{Vararg{Int,N}} ,
12- getunstoredindex= default_getunstoredindex,
12+ diag:: AbstractVector{T} , d:: Tuple{Vararg{Int,N}} , getunstoredindex= getzero
1313) where {T,N}
1414 return DiagonalArray {T,N,typeof(diag),typeof(getunstoredindex)} (diag, d, getunstoredindex)
1515end
1616
1717function DiagonalArray {T,N} (
18- diag:: AbstractVector , d:: Tuple{Vararg{Int,N}} , getunstoredindex= default_getunstoredindex
18+ diag:: AbstractVector , d:: Tuple{Vararg{Int,N}} , getunstoredindex= getzero
1919) where {T,N}
2020 return DiagonalArray {T,N} (T .(diag), d, getunstoredindex)
2121end
@@ -25,7 +25,7 @@ function DiagonalArray{T,N}(diag::AbstractVector, d::Vararg{Int,N}) where {T,N}
2525end
2626
2727function DiagonalArray {T} (
28- diag:: AbstractVector , d:: Tuple{Vararg{Int,N}} , getunstoredindex= default_getunstoredindex
28+ diag:: AbstractVector , d:: Tuple{Vararg{Int,N}} , getunstoredindex= getzero
2929) where {T,N}
3030 return DiagonalArray {T,N} (diag, d, getunstoredindex)
3131end
4444
4545# Infer size from diagonal
4646function DiagonalArray {T,N} (diag:: AbstractVector ) where {T,N}
47- return DiagonalArray {T,N} (diag, default_size ( diag, N))
47+ return DiagonalArray {T,N} (diag, ntuple ( Returns ( length ( diag)) , N))
4848end
4949
5050function DiagonalArray {<:Any,N} (diag:: AbstractVector{T} ) where {T,N}
5353
5454# undef
5555function DiagonalArray {T,N} (
56- :: UndefInitializer , d:: Tuple{Vararg{Int,N}} , getunstoredindex= default_getunstoredindex
56+ :: UndefInitializer , d:: Tuple{Vararg{Int,N}} , getunstoredindex= getzero
5757) where {T,N}
5858 return DiagonalArray {T,N} (Vector {T} (undef, minimum (d)), d, getunstoredindex)
5959end
@@ -63,16 +63,14 @@ function DiagonalArray{T,N}(::UndefInitializer, d::Vararg{Int,N}) where {T,N}
6363end
6464
6565function DiagonalArray {T} (
66- :: UndefInitializer , d:: Tuple{Vararg{Int,N}} , getunstoredindex= default_getunstoredindex
66+ :: UndefInitializer , d:: Tuple{Vararg{Int,N}} , getunstoredindex= getzero
6767) where {T,N}
6868 return DiagonalArray {T,N} (undef, d, getunstoredindex)
6969end
7070
7171# Axes version
7272function DiagonalArray {T} (
73- :: UndefInitializer ,
74- axes:: Tuple{Vararg{AbstractUnitRange,N}} ,
75- getunstoredindex= default_getunstoredindex,
73+ :: UndefInitializer , axes:: Tuple{Vararg{AbstractUnitRange,N}} , getunstoredindex= getzero
7674) where {T,N}
7775 @assert all (isone, first .(axes))
7876 return DiagonalArray {T,N} (undef, length .(axes), getunstoredindex)
0 commit comments