Skip to content

Commit 4fb8f0e

Browse files
authored
Fix direction of circshift (#260)
1 parent ead48fe commit 4fb8f0e

File tree

3 files changed

+9
-6
lines changed

3 files changed

+9
-6
lines changed

src/SparseArrays.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ using Base.Sort: Forward
1111
using LinearAlgebra
1212
using LinearAlgebra: AdjOrTrans, matprod
1313

14+
# Temporary workaround for simplifying SparseArrays.jl upgrade in JuliaLang/julia
15+
# to workaround circshift! bug, see https://github.com/JuliaLang/julia/pull/46759
16+
const CIRCSHIFT_WRONG_DIRECTION = circshift!([1, 2, 3], 1) != circshift([1, 2, 3], 1)
1417

1518

1619
import Base: +, -, *, \, /, &, |, xor, ==, zero

src/sparsematrix.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4203,16 +4203,16 @@ function Base.swaprows!(A::AbstractSparseMatrixCSC, i, j)
42034203
rows[rr[iidx]] = j
42044204
jidx == 0 && continue
42054205
rotate_range = rr[iidx]:jrange[jidx]
4206-
circshift!(@view(vals[rotate_range]), -1)
4207-
circshift!(@view(rows[rotate_range]), -1)
4206+
circshift!(@view(vals[rotate_range]), CIRCSHIFT_WRONG_DIRECTION ? -1 : 1)
4207+
circshift!(@view(rows[rotate_range]), CIRCSHIFT_WRONG_DIRECTION ? -1 : 1)
42084208
else
42094209
# Same as i, but in the opposite direction
42104210
@assert has_j
42114211
rows[jrange[jidx]] = i
42124212
iidx > length(rr) && continue
42134213
rotate_range = rr[iidx]:jrange[jidx]
4214-
circshift!(@view(vals[rotate_range]), 1)
4215-
circshift!(@view(rows[rotate_range]), 1)
4214+
circshift!(@view(vals[rotate_range]), CIRCSHIFT_WRONG_DIRECTION ? 1 : -1)
4215+
circshift!(@view(rows[rotate_range]), CIRCSHIFT_WRONG_DIRECTION ? 1 : -1)
42164216
end
42174217
end
42184218
return nothing

src/sparsevector.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2223,8 +2223,8 @@ function subvector_shifter!(R::AbstractVector, V::AbstractVector, start::Integer
22232223
end
22242224
end
22252225
# ...but rowval should be sorted within columns
2226-
circshift!(@view(R[start:fin]), split-start+1)
2227-
circshift!(@view(V[start:fin]), split-start+1)
2226+
circshift!(@view(R[start:fin]), (CIRCSHIFT_WRONG_DIRECTION ? (+) : (-))(split-start+1))
2227+
circshift!(@view(V[start:fin]), (CIRCSHIFT_WRONG_DIRECTION ? (+) : (-))(split-start+1))
22282228
end
22292229

22302230
function circshift!(O::SparseVector, X::SparseVector, (r,)::Base.DimsInteger{1})

0 commit comments

Comments
 (0)