From f1f2cc0f79e217319717aa3acd9e34a458291db1 Mon Sep 17 00:00:00 2001 From: Fabian Gans Date: Thu, 26 Mar 2026 17:32:15 +0100 Subject: [PATCH 1/3] Fix newly introduced bug when opening Zarr arrays --- Project.toml | 2 +- ext/ZarrExt.jl | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index 7a5ee9c..86dff51 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "YAXArrayBase" uuid = "90b8fcef-0c2d-428d-9c56-5f86629e9d14" authors = ["Fabian Gans "] -version = "0.7.9" +version = "0.7.10" [deps] DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" diff --git a/ext/ZarrExt.jl b/ext/ZarrExt.jl index 6dd8c35..79b2ae3 100644 --- a/ext/ZarrExt.jl +++ b/ext/ZarrExt.jl @@ -15,7 +15,10 @@ end struct ZarrDataset g::ZGroup end -function ZarrDataset(g::String; mode="r", path="", kwargs...) +function ZarrDataset(g::Union{String,ZGroup}; mode="r", path="", kwargs...) + if g isa ZGroup + return ZarrDataset(g) + end store = if endswith(g, "zip") ZipStore(ZipReader(SimpleFileDiskArray(g))) else From 2c2db8fd1ec2572cfaa27cdd8b0d7be7384f909c Mon Sep 17 00:00:00 2001 From: Felix Cremer Date: Fri, 27 Mar 2026 15:09:29 +0100 Subject: [PATCH 2/3] Fix tests for zarr data and add test on to_dataset for Zgroup --- test/datasets.jl | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/test/datasets.jl b/test/datasets.jl index 20f57fc..ce22da6 100644 --- a/test/datasets.jl +++ b/test/datasets.jl @@ -64,17 +64,19 @@ end end @testset "Reading Zarr" begin -p = "gs://cmip6/CMIP6/HighResMIP/CMCC/CMCC-CM2-HR4/highresSST-present/r1i1p1f1/6hrPlev/psl/gn/v20170706/" +p = "https://s3.bgc-jena.mpg.de:9000/esdl-esdc-v3.0.2/esdc-16d-2.5deg-46x72x1440-3.0.2.zarr" +z = zopen(p) +ds_zopen = to_dataset(z) ds_zarr = to_dataset(p,driver=:zarr) +@test ds_zopen == ds_zarr vn = get_varnames(ds_zarr) -@test sort(vn) == ["lat", "lat_bnds", "lon", "lon_bnds", "psl", "time", "time_bnds"] -@test get_var_dims(ds_zarr, "psl") == ["lon", "lat", "time"] +@test sort(vn) == ["aerosol_optical_thickness_550", "air_temperature_2m", "bare_soil_evaporation", "burnt_area", "cot", "cth", "ctt", "evaporation", "evaporation_era5", "evaporative_stress", "gross_primary_productivity", "interception_loss", "kndvi", "lat", "latent_energy", "lon", "max_air_temperature_2m", "min_air_temperature_2m", "nbar_blue", "nbar_green", "nbar_nir", "nbar_red", "nbar_swir1", "nbar_swir2", "nbar_swir3", "ndvi", "net_ecosystem_exchange", "net_radiation", "nirv", "open_water_evaporation", "potential_evaporation", "precipitation_era5", "radiation_era5", "root_moisture", "sensible_heat", "sif_gome2_jj", "sif_gome2_pk", "sif_gosif", "sif_rtsif", "sm", "snow_sublimation", "surface_moisture", "terrestrial_ecosystem_respiration", "time", "transpiration"] +@test get_var_dims(ds_zarr, "sm") == ["lon", "lat", "time"] @test get_var_dims(ds_zarr, "time") == ["time"] -@test get_var_dims(ds_zarr, "time_bnds") == ["bnds", "time"] -@test get_var_attrs(ds_zarr,"psl")["long_name"] == "Sea Level Pressure" -h = get_var_handle(ds_zarr, "psl") +@test get_var_attrs(ds_zarr,"sm")["long_name"] == "Volumetric Soil Moisture" +h = get_var_handle(ds_zarr, "air_temperature_2m") @test YAXArrayBase.iscompressed(h) -@test all(isapprox.(h[1:2,1:2,1], [99360.8 99334.9; 99360.8 99335.4])) +@test all(isapprox.(h[1:2,1:2,1], [-28.8662 -23.4534; -28.8041 -23.1681])) @test allow_parallel_write(ds_zarr) == true @test allow_missings(ds_zarr) == false end From bbf0ce2ae89a0123b348ca95038dfe9283ac4291 Mon Sep 17 00:00:00 2001 From: Felix Cremer Date: Fri, 27 Mar 2026 15:18:57 +0100 Subject: [PATCH 3/3] Fix tests --- test/datasets.jl | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/test/datasets.jl b/test/datasets.jl index ce22da6..11f3952 100644 --- a/test/datasets.jl +++ b/test/datasets.jl @@ -64,21 +64,19 @@ end end @testset "Reading Zarr" begin -p = "https://s3.bgc-jena.mpg.de:9000/esdl-esdc-v3.0.2/esdc-16d-2.5deg-46x72x1440-3.0.2.zarr" -z = zopen(p) -ds_zopen = to_dataset(z) -ds_zarr = to_dataset(p,driver=:zarr) -@test ds_zopen == ds_zarr -vn = get_varnames(ds_zarr) -@test sort(vn) == ["aerosol_optical_thickness_550", "air_temperature_2m", "bare_soil_evaporation", "burnt_area", "cot", "cth", "ctt", "evaporation", "evaporation_era5", "evaporative_stress", "gross_primary_productivity", "interception_loss", "kndvi", "lat", "latent_energy", "lon", "max_air_temperature_2m", "min_air_temperature_2m", "nbar_blue", "nbar_green", "nbar_nir", "nbar_red", "nbar_swir1", "nbar_swir2", "nbar_swir3", "ndvi", "net_ecosystem_exchange", "net_radiation", "nirv", "open_water_evaporation", "potential_evaporation", "precipitation_era5", "radiation_era5", "root_moisture", "sensible_heat", "sif_gome2_jj", "sif_gome2_pk", "sif_gosif", "sif_rtsif", "sm", "snow_sublimation", "surface_moisture", "terrestrial_ecosystem_respiration", "time", "transpiration"] -@test get_var_dims(ds_zarr, "sm") == ["lon", "lat", "time"] -@test get_var_dims(ds_zarr, "time") == ["time"] -@test get_var_attrs(ds_zarr,"sm")["long_name"] == "Volumetric Soil Moisture" -h = get_var_handle(ds_zarr, "air_temperature_2m") -@test YAXArrayBase.iscompressed(h) -@test all(isapprox.(h[1:2,1:2,1], [-28.8662 -23.4534; -28.8041 -23.1681])) -@test allow_parallel_write(ds_zarr) == true -@test allow_missings(ds_zarr) == false + p = "https://s3.bgc-jena.mpg.de:9000/esdl-esdc-v3.0.2/esdc-16d-2.5deg-46x72x1440-3.0.2.zarr" + for ds_zarr in [to_dataset(p,driver=:zarr), to_dataset(zopen(p))] + vn = get_varnames(ds_zarr) + @test sort(vn) == ["aerosol_optical_thickness_550", "air_temperature_2m", "bare_soil_evaporation", "burnt_area", "cot", "cth", "ctt", "evaporation", "evaporation_era5", "evaporative_stress", "gross_primary_productivity", "interception_loss", "kndvi", "lat", "latent_energy", "lon", "max_air_temperature_2m", "min_air_temperature_2m", "nbar_blue", "nbar_green", "nbar_nir", "nbar_red", "nbar_swir1", "nbar_swir2", "nbar_swir3", "ndvi", "net_ecosystem_exchange", "net_radiation", "nirv", "open_water_evaporation", "potential_evaporation", "precipitation_era5", "radiation_era5", "root_moisture", "sensible_heat", "sif_gome2_jj", "sif_gome2_pk", "sif_gosif", "sif_rtsif", "sm", "snow_sublimation", "surface_moisture", "terrestrial_ecosystem_respiration", "time", "transpiration"] + @test get_var_dims(ds_zarr, "sm") == ["lon", "lat", "time"] + @test get_var_dims(ds_zarr, "time") == ["time"] + @test get_var_attrs(ds_zarr,"sm")["long_name"] == "Volumetric Soil Moisture" + h = get_var_handle(ds_zarr, "air_temperature_2m") + @test YAXArrayBase.iscompressed(h) + @test all(isapprox.(h[1:2,1:2,1], [-28.8662 -23.4534; -28.8041 -23.1681])) + @test allow_parallel_write(ds_zarr) == true + @test allow_missings(ds_zarr) == false + end end @testset "Reading ArchGDAL" begin using ArchGDAL