Skip to content

Commit 718da93

Browse files
authored
Merge pull request #477 from JuliaDataCubes/fg/open_mfdataset2
Fix open_mfdataset
2 parents cac79bf + 2d1de9d commit 718da93

File tree

3 files changed

+48
-5
lines changed

3 files changed

+48
-5
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "YAXArrays"
22
uuid = "c21b50f5-aa40-41ea-b809-c0f5e47bfa5c"
33
authors = ["Fabian Gans <[email protected]>"]
4-
version = "0.5.14"
4+
version = "0.5.15"
55

66
[deps]
77
CFTime = "179af706-886a-5703-950a-314cd64e0468"

src/DatasetAPI/Datasets.jl

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ using IntervalSets: Interval, (..)
88
using CFTime: timedecode, timeencode, DateTimeNoLeap, DateTime360Day, DateTimeAllLeap
99
using YAXArrayBase
1010
using YAXArrayBase: iscontdimval, add_var
11-
using DiskArrayTools: CFDiskArray, ConcatDiskArray
12-
using DiskArrays: DiskArrays, GridChunks
11+
using DiskArrayTools: CFDiskArray, diskstack
12+
using DiskArrays: DiskArrays, GridChunks, ConcatDiskArray
1313
using Glob: glob
1414
using DimensionalData: DimensionalData as DD
1515

@@ -331,7 +331,17 @@ testrange(x::AbstractArray{<:TimeType}) = x
331331

332332
testrange(x::AbstractArray{<:AbstractString}) = x
333333

334-
_glob(x) = startswith(x, "/") ? glob(x[2:end], "/") : glob(x)
334+
335+
# This is a bit unfortunate since it will disallow globbing hierarchies of directories,
336+
# but necessary to have it work on both windows and Unix systems
337+
function _glob(x)
338+
if isabspath(x)
339+
p, rest = splitdir(x)
340+
glob(rest,p)
341+
else
342+
glob(x)
343+
end
344+
end
335345

336346
open_mfdataset(g::AbstractString; kwargs...) = open_mfdataset(_glob(g); kwargs...)
337347
open_mfdataset(g::Vector{<:AbstractString}; kwargs...) =
@@ -341,7 +351,7 @@ function merge_new_axis(alldatasets, firstcube,var,mergedim)
341351
newdim = DD.rebuild(mergedim,1:length(alldatasets))
342352
alldiskarrays = map(ds->ds.cubes[var].data,alldatasets).data
343353
newda = diskstack(alldiskarrays)
344-
newdims = (DD.dim(firstcube)...,newdim)
354+
newdims = (DD.dims(firstcube)...,newdim)
345355
YAXArray(newdims,newda,deepcopy(firstcube.properties))
346356
end
347357
function merge_existing_axis(alldatasets,firstcube,var,mergedim)

test/Datasets/datasets.jl

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,3 +531,36 @@ end
531531
ds = Dataset(a=a1, b=a2, c=a3, d=a4, e=a5)
532532
@test_throws ArgumentError Cube(ds)
533533
end
534+
535+
@testset "Open_mfdataset" begin
536+
import NetCDF
537+
d1 = DD.X(1:20)
538+
d2 = DD.Y(1:10)
539+
a1 = rand(20,10)
540+
a2 = rand(20,10)
541+
td = mktempdir()
542+
f1, f2 = joinpath.(td,("file_1.nc","file_2.nc"))
543+
544+
array1 = YAXArray((d1,d2),a1)
545+
array2 = YAXArray((d1,d2),a2)
546+
547+
savecube(array1,f1)
548+
savecube(array2,f2)
549+
550+
ds = open_mfdataset(DD.DimArray([f1,f2],(DD.Ti(1:2),)))
551+
552+
@test ds.layer.data[:,:,1] == array1
553+
@test ds.layer.data[:,:,2] == array2
554+
555+
td = mktempdir()
556+
f1, f2 = joinpath.(td,("file_1.nc","file_2.nc"))
557+
td1, td2 = DD.Ti(1:2), DD.Ti(3:4)
558+
a1,a2 = rand(20,10,2), rand(20,10,2)
559+
array1,array2 = YAXArray((d1,d2,td1),a1), YAXArray((d1,d2,td2),a2)
560+
savecube(array1,f1)
561+
savecube(array2,f2)
562+
563+
ds = open_mfdataset(joinpath(td,"*.nc"))
564+
@test ds.layer.data[:,:,1:2] == array1
565+
@test ds.layer.data[:,:,3:4] == array2
566+
end

0 commit comments

Comments
 (0)