Skip to content

Commit 7df7488

Browse files
committed
Adding spzeroscsr methods.
1 parent 29acba6 commit 7df7488

3 files changed

Lines changed: 57 additions & 1 deletion

File tree

src/SparseMatricesCSR.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export SparseMatrixCSR
1313
export SymSparseMatrixCSR
1414
export sparsecsr, symsparsecsr
1515
export colvals, getBi, getoffset
16+
export spzeroscsr
1617

1718
import Polyester: @batch
1819
import Atomix: @atomic
@@ -33,7 +34,7 @@ end # module
3334
# DONE getrowptr
3435
# DONE getnzval
3536
# DONE getcolval
36-
# TODO spzeros
37+
# DONE spzeros
3738
# TODO spdiagm
3839
# TODO blockdiag
3940
# TODO sprand

src/SparseMatrixCSR.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,24 @@ sparsecsr(::Val{Bi},I,J,V,m,n) where Bi = SparseMatrixCSR{Bi}(transpose(sparse(J
103103
sparsecsr(::Val{Bi},I,J,V,m,n,combine) where Bi = SparseMatrixCSR{Bi}(transpose(sparse(J,I,V,n,m,combine)))
104104
dimlub(I) = isempty(I) ? 0 : Int(maximum(I))
105105

106+
"""
107+
spzeroscsr(args...)
108+
109+
Crate a `SparseMatricesCSR` of all zeros
110+
"""
111+
spzeroscsr(m::Integer,n::Integer) = SparseMatrixCSR(transpose(spzeros(n,m)))
112+
spzeroscsr(::Type{Tv},m::Integer,n::Integer) where Tv = SparseMatrixCSR(transpose(spzeros(Tv,n,m)))
113+
spzeroscsr(::Type{Tv},::Type{Ti},m::Integer,n::Integer) where {Tv,Ti} = SparseMatrixCSR(transpose(spzeros(Tv,Ti,n,m)))
114+
# de-splatting variants
115+
spzeroscsr(sz::Tuple{Integer,Integer}) = SparseMatrixCSR(transpose(spzeros((sz[2],sz[1]))))
116+
spzeroscsr(::Type{Tv},sz::Tuple{Integer,Integer}) where Tv = SparseMatrixCSR(transpose(spzeros((sz[2],sz[1]))))
117+
spzeroscsr(::Type{Tv},::Type{Ti},sz::Tuple{Integer,Integer}) where {Ti,Tv} = SparseMatrixCSR(transpose(spzeros(Tv,Ti,(sz[2],sz[1]))))
118+
# below methods require julia 1.10 or later
119+
spzeroscsr(I::AbstractVector,J::AbstractVector) = SparseMatrixCSR(transpose(spzeros(J,I)))
120+
spzeroscsr(I::AbstractVector,J::AbstractVector,m,n) = SparseMatrixCSR(transpose(spzeros(J,I,n,m)))
121+
spzeroscsr(::Type{Tv},I::AbstractVector,J::AbstractVector,m,n) where Tv = SparseMatrixCSR(transpose(spzeros(Tv,J,I,n,m)))
122+
123+
106124
Base.convert(::Type{T},a::T) where T<:SparseMatrixCSR = a
107125
function Base.convert(
108126
::Type{SparseMatrixCSR{Bi,Tv,Ti}},a::SparseMatrixCSR{Bi}) where {Bi,Tv,Ti}

test/SparseMatrixCSR.jl

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,43 @@ function test_csr(Bi,Tv,Ti)
139139
@test nnz(A) == length(SparseArrays.nzvalview(A)) == 3
140140
@test SparseArrays.nzvalview(A) == [4., 5, 6]
141141
end
142+
143+
# spzeroscsr tests
144+
csc = spzeros(10, 9)
145+
csr = spzeroscsr(10, 9)
146+
@test csc == csr
147+
148+
csc = spzeros(Tv, 10, 9)
149+
csr = spzeroscsr(Tv, 10, 9)
150+
@test csc == csr
151+
152+
csc = spzeros(Tv, Ti, 10, 9)
153+
csr = spzeroscsr(Tv, Ti, 10, 9)
154+
@test csc == csr
155+
156+
csc = spzeros((10, 9))
157+
csr = spzeroscsr((10, 9))
158+
@test csc == csr
159+
160+
csc = spzeros(Tv, (10, 9))
161+
csr = spzeroscsr(Tv, (10, 9))
162+
@test csc == csr
163+
164+
csc = spzeros(Tv, Ti, (10, 9))
165+
csr = spzeroscsr(Tv, Ti, (10, 9))
166+
@test csc == csr
167+
168+
csc = spzeros(I, J)
169+
csr = spzeroscsr(I, J)
170+
@test csc == csr
171+
172+
csc = spzeros(I, J, maxrows, maxcols)
173+
csr = spzeroscsr(I, J, maxrows, maxcols)
174+
@test csc == csr
175+
176+
csc = spzeros(Tv, I, J, maxrows, maxcols)
177+
csr = spzeroscsr(Tv, I, J, maxrows, maxcols)
178+
@test csc == csr
142179
end
143180

144181
function test_lu(Bi,I,J,V)

0 commit comments

Comments
 (0)