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
2
4
3
5
struct DiagonalArray{T,N,Diag<: AbstractVector{T} ,F} <: AbstractDiagonalArray{T,N}
4
6
diag:: Diag
@@ -7,15 +9,13 @@ struct DiagonalArray{T,N,Diag<:AbstractVector{T},F} <: AbstractDiagonalArray{T,N
7
9
end
8
10
9
11
function 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
13
13
) where {T,N}
14
14
return DiagonalArray {T,N,typeof(diag),typeof(getunstoredindex)} (diag, d, getunstoredindex)
15
15
end
16
16
17
17
function DiagonalArray {T,N} (
18
- diag:: AbstractVector , d:: Tuple{Vararg{Int,N}} , getunstoredindex= default_getunstoredindex
18
+ diag:: AbstractVector , d:: Tuple{Vararg{Int,N}} , getunstoredindex= getzero
19
19
) where {T,N}
20
20
return DiagonalArray {T,N} (T .(diag), d, getunstoredindex)
21
21
end
@@ -25,7 +25,7 @@ function DiagonalArray{T,N}(diag::AbstractVector, d::Vararg{Int,N}) where {T,N}
25
25
end
26
26
27
27
function DiagonalArray {T} (
28
- diag:: AbstractVector , d:: Tuple{Vararg{Int,N}} , getunstoredindex= default_getunstoredindex
28
+ diag:: AbstractVector , d:: Tuple{Vararg{Int,N}} , getunstoredindex= getzero
29
29
) where {T,N}
30
30
return DiagonalArray {T,N} (diag, d, getunstoredindex)
31
31
end
44
44
45
45
# Infer size from diagonal
46
46
function 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))
48
48
end
49
49
50
50
function DiagonalArray {<:Any,N} (diag:: AbstractVector{T} ) where {T,N}
53
53
54
54
# undef
55
55
function DiagonalArray {T,N} (
56
- :: UndefInitializer , d:: Tuple{Vararg{Int,N}} , getunstoredindex= default_getunstoredindex
56
+ :: UndefInitializer , d:: Tuple{Vararg{Int,N}} , getunstoredindex= getzero
57
57
) where {T,N}
58
58
return DiagonalArray {T,N} (Vector {T} (undef, minimum (d)), d, getunstoredindex)
59
59
end
@@ -63,16 +63,14 @@ function DiagonalArray{T,N}(::UndefInitializer, d::Vararg{Int,N}) where {T,N}
63
63
end
64
64
65
65
function DiagonalArray {T} (
66
- :: UndefInitializer , d:: Tuple{Vararg{Int,N}} , getunstoredindex= default_getunstoredindex
66
+ :: UndefInitializer , d:: Tuple{Vararg{Int,N}} , getunstoredindex= getzero
67
67
) where {T,N}
68
68
return DiagonalArray {T,N} (undef, d, getunstoredindex)
69
69
end
70
70
71
71
# Axes version
72
72
function DiagonalArray {T} (
73
- :: UndefInitializer ,
74
- axes:: Tuple{Vararg{AbstractUnitRange,N}} ,
75
- getunstoredindex= default_getunstoredindex,
73
+ :: UndefInitializer , axes:: Tuple{Vararg{AbstractUnitRange,N}} , getunstoredindex= getzero
76
74
) where {T,N}
77
75
@assert all (isone, first .(axes))
78
76
return DiagonalArray {T,N} (undef, length .(axes), getunstoredindex)
0 commit comments