Skip to content

Commit c926307

Browse files
meggartrafaqz
andauthored
Fix a case of wrong aliasing for setindex (#164)
* Fix a case of wrong aliasing for setindex * Update src/diskarray.jl Co-authored-by: Rafael Schouten <[email protected]> * Update src/diskarray.jl Co-authored-by: Rafael Schouten <[email protected]> * update version --------- Co-authored-by: Rafael Schouten <[email protected]>
1 parent b3f3d1e commit c926307

File tree

3 files changed

+12
-13
lines changed

3 files changed

+12
-13
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "DiskArrays"
22
uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3"
33
authors = ["Fabian Gans <[email protected]>"]
4-
version = "0.4.1"
4+
version = "0.4.2"
55

66
[deps]
77
LRUCache = "8ac3fa9e-de4c-5943-b1dc-09c6b5f20637"

src/diskarray.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,10 @@ splitcs(::Tuple{}, csnow, csrem) = (csnow, csrem)
165165

166166
#Determine wether output and temp array can a) be identical b) share memory through reshape or
167167
# c) need to be allocated individually
168-
function output_aliasing(di::DiskIndex)
168+
function output_aliasing(di::DiskIndex, ndims_dest, ndims_source)
169169
if all(i->isa(i,Union{Int,AbstractUnitRange,Colon}),di.temparray_indices) &&
170170
all(i->isa(i,Union{Int,AbstractUnitRange,Colon}),di.output_indices)
171-
if di.output_size == di.temparray_size
171+
if di.output_size == di.temparray_size && ndims_dest == ndims_source
172172
return :identical
173173
else
174174
return :reshapeoutput
@@ -229,7 +229,7 @@ function getindex_disk_nobatch!(out,a,i)
229229
indices = resolve_indices(a, i, NoBatch(allow_steprange(a), 1.0))
230230
#@debug output_size, temparray_size, output_indices, temparray_indices, data_indices
231231
outputarray = create_outputarray(out, a, indices.output_size)
232-
outalias = output_aliasing(indices)
232+
outalias = output_aliasing(indices,ndims(outputarray),ndims(a))
233233
if outalias === :identical
234234
readblock!(a, outputarray, indices.data_indices...)
235235
elseif outalias === :reshapeoutput
@@ -297,7 +297,7 @@ end
297297

298298
function setindex_disk_nobatch!(a,v,i)
299299
indices = resolve_indices(a, i, NoBatch())
300-
outalias = output_aliasing(indices)
300+
outalias = output_aliasing(indices,ndims(a),ndims(v))
301301
if outalias === :identical
302302
writeblock!(a, v, indices.data_indices...)
303303
elseif outalias === :reshapeoutput

test/runtests.jl

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ function test_setindex(a)
7575
a[1, 1, 1] = 1
7676
a[1, 2] = 2
7777
a[1, 3, 1, 1] = 3
78-
a[2, :] = [1, 2, 3, 4, 5]
78+
a[2:2, :] = [1, 2, 3, 4, 5]
7979
a[3, 3:4, 1, 1] = [3, 4]
8080
# Test bitmask indexing
8181
m = falses(4, 5, 1)
@@ -468,21 +468,20 @@ end
468468
a = AccessCountDiskArray(reshape(1:20, 4, 5, 1); chunksize=(4, 1, 1))
469469
i = (1:3,:,:)
470470
di = DiskArrays.resolve_indices(a,i,DiskArrays.NoBatch())
471-
@test DiskArrays.output_aliasing(di) == :identical
471+
@test DiskArrays.output_aliasing(di,3,3) == :identical
472+
@test DiskArrays.output_aliasing(di,2,3) == :reshapeoutput
472473
i = (1,:,:)
473474
di = DiskArrays.resolve_indices(a,i,DiskArrays.NoBatch())
474-
@test DiskArrays.output_aliasing(di) == :reshapeoutput
475+
@test DiskArrays.output_aliasing(di,2,2) == :reshapeoutput
475476
i = ([1,3],:,:)
476477
di = DiskArrays.resolve_indices(a,i,DiskArrays.NoBatch())
477-
@test DiskArrays.output_aliasing(di) == :noalign
478+
@test DiskArrays.output_aliasing(di,3,3) == :noalign
478479
i = (1:3,:)
479480
di = DiskArrays.resolve_indices(a,i,DiskArrays.NoBatch())
480-
@test DiskArrays.output_aliasing(di) == :reshapeoutput
481+
@test DiskArrays.output_aliasing(di,2,2) == :reshapeoutput
481482
i = (1:3,:,:,1,1)
482483
di = DiskArrays.resolve_indices(a,i,DiskArrays.NoBatch())
483-
@test DiskArrays.output_aliasing(di) == :identical
484-
485-
484+
@test DiskArrays.output_aliasing(di,3,3) == :identical
486485
end
487486

488487

0 commit comments

Comments
 (0)