Skip to content

Commit 6083ca5

Browse files
committed
More compact show for block sparse arrays
1 parent 88aa06f commit 6083ca5

File tree

4 files changed

+83
-2
lines changed

4 files changed

+83
-2
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ SparseArraysBase = "0.2.10"
4747
SplitApplyCombine = "1.2.3"
4848
TensorAlgebra = "0.1.0"
4949
Test = "1.10"
50-
TypeParameterAccessors = "0.2.0"
50+
TypeParameterAccessors = "0.3.0"
5151
julia = "1.10"
5252

5353
[extras]

src/BlockSparseArrays.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ include("blocksparsearrayinterface/cat.jl")
2525

2626
# functions defined for any abstractblocksparsearray
2727
include("abstractblocksparsearray/abstractblocksparsearray.jl")
28-
include("abstractblocksparsearray/wrappedabstractblocksparsearray.jl")
2928
include("abstractblocksparsearray/abstractblocksparsematrix.jl")
3029
include("abstractblocksparsearray/abstractblocksparsevector.jl")
30+
include("abstractblocksparsearray/wrappedabstractblocksparsearray.jl")
3131
include("abstractblocksparsearray/views.jl")
3232
include("abstractblocksparsearray/arraylayouts.jl")
3333
include("abstractblocksparsearray/sparsearrayinterface.jl")

src/abstractblocksparsearray/abstractblocksparsearray.jl

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,49 @@ function Base.setindex!(
7777
blocks(a)[Int.(I)...] = value
7878
return a
7979
end
80+
81+
using TypeParameterAccessors: unspecify_type_parameters
82+
function show_typeof_blocksparse(io::IO, a::AbstractBlockSparseArray)
83+
Base.show(io, unspecify_type_parameters(typeof(a)))
84+
print(io, '{')
85+
show(io, eltype(a))
86+
print(io, ", ")
87+
show(io, ndims(a))
88+
print(io, ", ")
89+
show(io, blocktype(a))
90+
print(io, ", …")
91+
print(io, '}')
92+
return nothing
93+
end
94+
95+
# Copied from `BlockArrays.jl`.
96+
block2string(b, s) = string(join(map(string,b), '×'), "-blocked ", Base.dims2string(s))
97+
98+
function summary_blocksparse(io::IO, a::AbstractArray)
99+
print(io, block2string(blocksize(a), size(a)))
100+
print(io, ' ')
101+
show_typeof_blocksparse(io, a)
102+
return nothing
103+
end
104+
105+
function Base.summary(io::IO, a::AbstractBlockSparseArray)
106+
summary_blocksparse(io, a)
107+
return nothing
108+
end
109+
110+
function Base.showarg(io::IO, a::AbstractBlockSparseArray, toplevel::Bool)
111+
if toplevel
112+
show_typeof_blocksparse(io, a)
113+
else
114+
print(io, "::")
115+
show_typeof_blocksparse(io, a)
116+
end
117+
return nothing
118+
end
119+
120+
# TypeParameterAccessors.jl interface
121+
using TypeParameterAccessors: TypeParameterAccessors, Position, set_type_parameters
122+
TypeParameterAccessors.position(::Type{BlockSparseArray}, eltype) = Position(1)
123+
TypeParameterAccessors.position(::Type{BlockSparseArray}, ndims) = Position(2)
124+
TypeParameterAccessors.position(::Type{BlockSparseArray}, blocktype) = Position(3)
125+
TypeParameterAccessors.position(::Type{BlockSparseArray}, blockstype) = Position(4)

src/blocksparsearray/blocksparsearray.jl

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,38 @@ blockstype(arraytype::Type{<:BlockSparseArray}) = SparseArrayDOK{AbstractArray}
199199
## # TODO: Preserve GPU data!
200200
## return BlockSparseArray{elt}(undef, axes)
201201
## end
202+
203+
# TypeParameterAccessors.jl interface
204+
using TypeParameterAccessors: TypeParameterAccessors, Position, set_type_parameters
205+
TypeParameterAccessors.position(::Type{BlockSparseArray}, eltype) = Position(1)
206+
TypeParameterAccessors.position(::Type{BlockSparseArray}, ndims) = Position(2)
207+
TypeParameterAccessors.position(::Type{BlockSparseArray}, blocktype) = Position(3)
208+
TypeParameterAccessors.position(::Type{BlockSparseArray}, blockstype) = Position(4)
209+
210+
# TODO: Make this generic to `AbstractBlockSparseVector` using
211+
# TypeParameterAccessors.jl, for example using:
212+
# `set_ndims(unspecify_type_parameters(typeof(a)), 1)`.
213+
function show_typeof_blocksparse(io::IO, a::BlockSparseVector)
214+
print(io, "BlockSparseVector")
215+
print(io, '{')
216+
show(io, eltype(a))
217+
print(io, ", ")
218+
show(io, blocktype(a))
219+
print(io, ", …")
220+
print(io, '}')
221+
return nothing
222+
end
223+
224+
# TODO: Make this generic to `AbstractBlockSparseMatrix` using
225+
# TypeParameterAccessors.jl, for example using:
226+
# `set_ndims(unspecify_type_parameters(typeof(a)), 2)`.
227+
function show_typeof_blocksparse(io::IO, a::BlockSparseMatrix)
228+
print(io, "BlockSparseMatrix")
229+
print(io, '{')
230+
show(io, eltype(a))
231+
print(io, ", ")
232+
show(io, blocktype(a))
233+
print(io, ", …")
234+
print(io, '}')
235+
return nothing
236+
end

0 commit comments

Comments
 (0)