Skip to content

Commit ec8c96e

Browse files
committed
Require undef in BlockSparseArray constructors
1 parent cf088ce commit ec8c96e

File tree

4 files changed

+104
-118
lines changed

4 files changed

+104
-118
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "BlockSparseArrays"
22
uuid = "2c9a651f-6452-4ace-a6ac-809f4280fbb4"
33
authors = ["ITensor developers <[email protected]> and contributors"]
4-
version = "0.2.27"
4+
version = "0.3.0"
55

66
[deps]
77
Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"

src/abstractblocksparsearray/arraylayouts.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ function ArrayLayouts.sub_materialize(layout::BlockLayout{<:SparseLayout}, a, ax
3838
# TODO: Define `blocktype`/`blockstype` for `SubArray` wrapping `BlockSparseArray`.
3939
# TODO: Use `similar`?
4040
blocktype_a = blocktype(parent(a))
41-
a_dest = BlockSparseArray{eltype(a),length(axes),blocktype_a}(axes)
41+
a_dest = BlockSparseArray{eltype(a),length(axes),blocktype_a}(undef, axes)
4242
a_dest .= a
4343
return a_dest
4444
end

src/blocksparsearray/blocksparsearray.jl

Lines changed: 48 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@ using DerivableInterfaces: @interface
33
using Dictionaries: Dictionary
44
using SparseArraysBase: SparseArrayDOK
55

6-
# TODO: Delete this.
7-
## using BlockArrays: blocks
8-
96
struct BlockSparseArray{
107
T,
118
N,
@@ -27,40 +24,48 @@ const BlockSparseVector{T,A<:AbstractVector{T},Blocks<:AbstractVector{A},Axes<:T
2724
T,1,A,Blocks,Axes
2825
}
2926

27+
# TODO: Rename to `sparsemortar`.
3028
function BlockSparseArray(
3129
block_data::Dictionary{<:Block{N},<:AbstractArray{<:Any,N}},
3230
axes::Tuple{Vararg{AbstractUnitRange,N}},
3331
) where {N}
3432
blocks = default_blocks(block_data, axes)
33+
# TODO: Rename to `sparsemortar`.
3534
return BlockSparseArray(blocks, axes)
3635
end
3736

37+
# TODO: Rename to `sparsemortar`.
3838
function BlockSparseArray(
3939
block_indices::Vector{<:Block{N}},
4040
block_data::Vector{<:AbstractArray{<:Any,N}},
4141
axes::Tuple{Vararg{AbstractUnitRange,N}},
4242
) where {N}
43+
# TODO: Rename to `sparsemortar`.
4344
return BlockSparseArray(Dictionary(block_indices, block_data), axes)
4445
end
4546

47+
# TODO: Rename to `sparsemortar`.
4648
function BlockSparseArray{T,N,A,Blocks}(
4749
blocks::AbstractArray{<:AbstractArray{T,N},N}, axes::Tuple{Vararg{AbstractUnitRange,N}}
4850
) where {T,N,A<:AbstractArray{T,N},Blocks<:AbstractArray{A,N}}
4951
return BlockSparseArray{T,N,A,Blocks,typeof(axes)}(blocks, axes)
5052
end
5153

54+
# TODO: Rename to `sparsemortar`.
5255
function BlockSparseArray{T,N,A}(
5356
blocks::AbstractArray{<:AbstractArray{T,N},N}, axes::Tuple{Vararg{AbstractUnitRange,N}}
5457
) where {T,N,A<:AbstractArray{T,N}}
5558
return BlockSparseArray{T,N,A,typeof(blocks)}(blocks, axes)
5659
end
5760

61+
# TODO: Rename to `sparsemortar`.
5862
function BlockSparseArray{T,N}(
5963
blocks::AbstractArray{<:AbstractArray{T,N},N}, axes::Tuple{Vararg{AbstractUnitRange,N}}
6064
) where {T,N}
6165
return BlockSparseArray{T,N,eltype(blocks),typeof(blocks),typeof(axes)}(blocks, axes)
6266
end
6367

68+
# TODO: Rename to `sparsemortar`.
6469
function BlockSparseArray{T,N}(
6570
block_data::Dictionary{Block{N,Int},<:AbstractArray{T,N}},
6671
axes::Tuple{Vararg{AbstractUnitRange,N}},
@@ -70,99 +75,88 @@ function BlockSparseArray{T,N}(
7075
end
7176

7277
function BlockSparseArray{T,N,A}(
73-
axes::Tuple{Vararg{AbstractUnitRange,N}}
78+
::UndefInitializer, axes::Tuple{Vararg{AbstractUnitRange,N}}
7479
) where {T,N,A<:AbstractArray{T,N}}
7580
blocks = default_blocks(A, axes)
7681
return BlockSparseArray{T,N,A}(blocks, axes)
7782
end
7883

7984
function BlockSparseArray{T,N,A}(
80-
axes::Vararg{AbstractUnitRange,N}
85+
::UndefInitializer, axes::Vararg{AbstractUnitRange,N}
8186
) where {T,N,A<:AbstractArray{T,N}}
82-
return BlockSparseArray{T,N,A}(axes)
87+
return BlockSparseArray{T,N,A}(undef, axes)
8388
end
8489

8590
function BlockSparseArray{T,N,A}(
86-
dims::Tuple{Vararg{Vector{Int},N}}
91+
::UndefInitializer, dims::Tuple{Vararg{Vector{Int},N}}
8792
) where {T,N,A<:AbstractArray{T,N}}
88-
return BlockSparseArray{T,N,A}(blockedrange.(dims))
93+
return BlockSparseArray{T,N,A}(undef, blockedrange.(dims))
8994
end
9095

9196
# Fix ambiguity error.
92-
function BlockSparseArray{T,0,A}(axes::Tuple{}) where {T,A<:AbstractArray{T,0}}
97+
function BlockSparseArray{T,0,A}(
98+
::UndefInitializer, axes::Tuple{}
99+
) where {T,A<:AbstractArray{T,0}}
93100
blocks = default_blocks(A, axes)
94101
return BlockSparseArray{T,0,A}(blocks, axes)
95102
end
96103

97104
function BlockSparseArray{T,N,A}(
98-
dims::Vararg{Vector{Int},N}
105+
::UndefInitializer, dims::Vararg{Vector{Int},N}
99106
) where {T,N,A<:AbstractArray{T,N}}
100-
return BlockSparseArray{T,N,A}(dims)
101-
end
102-
103-
function BlockSparseArray{T,N}(axes::Tuple{Vararg{AbstractUnitRange,N}}) where {T,N}
104-
return BlockSparseArray{T,N,default_arraytype(T, axes)}(axes)
105-
end
106-
107-
function BlockSparseArray{T,N}(axes::Vararg{AbstractUnitRange,N}) where {T,N}
108-
return BlockSparseArray{T,N}(axes)
107+
return BlockSparseArray{T,N,A}(undef, dims)
109108
end
110109

111-
function BlockSparseArray{T,0}(axes::Tuple{}) where {T}
112-
return BlockSparseArray{T,0,default_arraytype(T, axes)}(axes)
113-
end
114-
115-
function BlockSparseArray{T,N}(dims::Tuple{Vararg{Vector{Int},N}}) where {T,N}
116-
return BlockSparseArray{T,N}(blockedrange.(dims))
117-
end
118-
119-
function BlockSparseArray{T,N}(dims::Vararg{Vector{Int},N}) where {T,N}
120-
return BlockSparseArray{T,N}(dims)
110+
function BlockSparseArray{T,N}(
111+
::UndefInitializer, axes::Tuple{Vararg{AbstractUnitRange,N}}
112+
) where {T,N}
113+
return BlockSparseArray{T,N,default_arraytype(T, axes)}(undef, axes)
121114
end
122115

123-
function BlockSparseArray{T}(dims::Tuple{Vararg{Vector{Int}}}) where {T}
124-
return BlockSparseArray{T,length(dims)}(dims)
116+
function BlockSparseArray{T,N}(
117+
::UndefInitializer, axes::Vararg{AbstractUnitRange,N}
118+
) where {T,N}
119+
return BlockSparseArray{T,N}(undef, axes)
125120
end
126121

127-
function BlockSparseArray{T}(axes::Tuple{Vararg{AbstractUnitRange}}) where {T}
128-
return BlockSparseArray{T,length(axes)}(axes)
122+
function BlockSparseArray{T,0}(::UndefInitializer, axes::Tuple{}) where {T}
123+
return BlockSparseArray{T,0,default_arraytype(T, axes)}(undef, axes)
129124
end
130125

131-
function BlockSparseArray{T}(axes::Tuple{}) where {T}
132-
return BlockSparseArray{T,length(axes)}(axes)
126+
function BlockSparseArray{T,N}(
127+
::UndefInitializer, dims::Tuple{Vararg{Vector{Int},N}}
128+
) where {T,N}
129+
return BlockSparseArray{T,N}(undef, blockedrange.(dims))
133130
end
134131

135-
function BlockSparseArray{T}(dims::Vararg{Vector{Int}}) where {T}
136-
return BlockSparseArray{T}(dims)
132+
function BlockSparseArray{T,N}(::UndefInitializer, dims::Vararg{Vector{Int},N}) where {T,N}
133+
return BlockSparseArray{T,N}(undef, dims)
137134
end
138135

139-
function BlockSparseArray{T}(axes::Vararg{AbstractUnitRange}) where {T}
140-
return BlockSparseArray{T}(axes)
136+
function BlockSparseArray{T}(::UndefInitializer, dims::Tuple{Vararg{Vector{Int}}}) where {T}
137+
return BlockSparseArray{T,length(dims)}(undef, dims)
141138
end
142139

143-
function BlockSparseArray{T}() where {T}
144-
return BlockSparseArray{T}(())
140+
function BlockSparseArray{T}(
141+
::UndefInitializer, axes::Tuple{Vararg{AbstractUnitRange}}
142+
) where {T}
143+
return BlockSparseArray{T,length(axes)}(undef, axes)
145144
end
146145

147-
# undef
148-
function BlockSparseArray{T,N,A,Blocks}(
149-
::UndefInitializer, args...
150-
) where {T,N,A<:AbstractArray{T,N},Blocks<:AbstractArray{A,N}}
151-
return BlockSparseArray{T,N,A,Blocks}(args...)
146+
function BlockSparseArray{T}(::UndefInitializer, axes::Tuple{}) where {T}
147+
return BlockSparseArray{T,length(axes)}(undef, axes)
152148
end
153149

154-
function BlockSparseArray{T,N,A}(
155-
::UndefInitializer, args...
156-
) where {T,N,A<:AbstractArray{T,N}}
157-
return BlockSparseArray{T,N,A}(args...)
150+
function BlockSparseArray{T}(::UndefInitializer, dims::Vararg{Vector{Int}}) where {T}
151+
return BlockSparseArray{T}(undef, dims)
158152
end
159153

160-
function BlockSparseArray{T,N}(::UndefInitializer, args...) where {T,N}
161-
return BlockSparseArray{T,N}(args...)
154+
function BlockSparseArray{T}(::UndefInitializer, axes::Vararg{AbstractUnitRange}) where {T}
155+
return BlockSparseArray{T}(undef, axes)
162156
end
163157

164-
function BlockSparseArray{T}(::UndefInitializer, args...) where {T}
165-
return BlockSparseArray{T}(args...)
158+
function BlockSparseArray{T}(::UndefInitializer) where {T}
159+
return BlockSparseArray{T}(undef, ())
166160
end
167161

168162
# Base `AbstractArray` interface

0 commit comments

Comments
 (0)