diff --git a/Project.toml b/Project.toml index 8d5d5af..7fce3cb 100644 --- a/Project.toml +++ b/Project.toml @@ -4,7 +4,7 @@ keywords = ["netcdf", "GRIB", "climate and forecast conventions", "oceanography" license = "MIT" desc = "CommonDataModel is a module that defines types common to NetCDF and GRIB data" authors = ["Alexander Barth "] -version = "0.4.0" +version = "0.4.1" [deps] CFTime = "179af706-886a-5703-950a-314cd64e0468" diff --git a/src/CommonDataModel.jl b/src/CommonDataModel.jl index 1c59baf..8c2fb86 100644 --- a/src/CommonDataModel.jl +++ b/src/CommonDataModel.jl @@ -11,6 +11,7 @@ import DiskArrays: AbstractDiskArray, AbstractSubDiskArray, subarray, + view_disk, writeblock!, readblock!, ChunkStyle, @@ -36,6 +37,8 @@ import Base: reduce, show, size, + vec, + view, write import Statistics diff --git a/src/subvariable.jl b/src/subvariable.jl index d1ffa3f..370e5bd 100644 --- a/src/subvariable.jl +++ b/src/subvariable.jl @@ -92,16 +92,11 @@ close(ds) """ function Base.view(a::AbstractVariable,i...) - i2 = DiskArrays._replace_colon.(size(a), i) # TODO improve - return SubVariable(SubArray(a, i2)) + disk_sub_array = DiskArrays.view_disk(a, i...) + return SubVariable(DiskArrays.subarray(disk_sub_array)) end -# copied from https://github.com/JuliaIO/DiskArrays.jl/blob/6522ba32759f81945396890ebba5525d33342244/src/subarray.jl#L28 -# this is done to not depend on DiskArray Internals. -_replace_colon(s, ::Colon) = Base.OneTo(s) -_replace_colon(s, r) = r - -Base.view(a::AbstractVariable, i::CartesianIndices) = view(a, i.indices...) +Base.vec(a::AbstractVariable) = view(a, :) dimnames(ds::SubDataset) = dimnames(ds.ds) defDim(ds::SubDataset,name::SymbolOrString,len) = defDim(ds.ds,name,len) diff --git a/test/test_subvariable.jl b/test/test_subvariable.jl index 8b48d5d..6fe5899 100644 --- a/test/test_subvariable.jl +++ b/test/test_subvariable.jl @@ -252,3 +252,14 @@ v = select(sst_view, @test size(v) == (4,3,8) @test all(v[:,1,1] .≈ 2:5) @test all(v[1,:,2] .≈ [3,5,7]) + + +## regression test for https://github.com/JuliaGeo/NCDatasets.jl/issues/287 +fname = tempname() +ds = TDS(fname, "c") +v = defVar(ds, "temperature", zeros(10,11), ("lon", "lat")) +m = iseven.(reshape(1:(10*11),(10,11))) + +@test size(view(v,m)) == (count(m),) +v[m] .= 1 +@test Array(v) == m \ No newline at end of file