|
109 | 109 | KVStore = None
|
110 | 110 |
|
111 | 111 | have_zarr_v3 = False
|
| 112 | +have_sharding_v3 = False |
112 | 113 | try:
|
113 |
| - # as of Zarr v2.13 these imports require environment variable |
| 114 | + # as of Zarr v2.14 these imports require environment variable |
114 | 115 | # ZARR_V3_EXPERIMENTAL_API=1
|
115 | 116 | from zarr import DirectoryStoreV3, KVStoreV3
|
116 | 117 |
|
117 | 118 | have_zarr_v3 = True
|
| 119 | + |
| 120 | + from zarr._storage.v3_storage_transformers import v3_sharding_available |
| 121 | + |
| 122 | + # TODO: change to try except ImportError when available at the top-level zarr namespace |
| 123 | + if v3_sharding_available: |
| 124 | + # as of Zarr v2.14 these imports require environment variable |
| 125 | + # ZARR_V3_SHARDING=1 |
| 126 | + # TODO: change import to |
| 127 | + # from zarr import ShardingStorageTransformer |
| 128 | + # when ShardingStorageTransformer becomes available at the top-level zarr namespace |
| 129 | + from zarr._storage.v3_storage_transformers import ShardingStorageTransformer |
| 130 | + |
| 131 | + have_sharding_v3 = True |
| 132 | + |
118 | 133 | except ImportError:
|
119 | 134 | KVStoreV3 = None
|
120 | 135 |
|
@@ -2660,6 +2675,39 @@ def create_zarr_target(self):
|
2660 | 2675 | yield tmp
|
2661 | 2676 |
|
2662 | 2677 |
|
| 2678 | +@pytest.mark.skipif(not have_zarr_v3, reason="requires zarr version 3") |
| 2679 | +class TestZarrStorageTransformersV3(TestZarrDirectoryStoreV3): |
| 2680 | + @pytest.mark.skipif(not have_sharding_v3, reason="requires sharding") |
| 2681 | + def test_sharding_storage_transformer(self): |
| 2682 | + original = create_test_data().chunk({"dim1": 2, "dim2": 3, "dim3": 2}) |
| 2683 | + |
| 2684 | + encoding = { |
| 2685 | + "var1": { |
| 2686 | + "storage_transformers": [ |
| 2687 | + ShardingStorageTransformer("indexed", chunks_per_shard=(2, 1)) |
| 2688 | + ], |
| 2689 | + }, |
| 2690 | + "var2": { |
| 2691 | + "storage_transformers": [ |
| 2692 | + ShardingStorageTransformer("indexed", chunks_per_shard=(2, 2)) |
| 2693 | + ], |
| 2694 | + }, |
| 2695 | + "var3": { |
| 2696 | + "storage_transformers": [ |
| 2697 | + ShardingStorageTransformer("indexed", chunks_per_shard=(1, 1)) |
| 2698 | + ], |
| 2699 | + }, |
| 2700 | + } |
| 2701 | + |
| 2702 | + with self.roundtrip( |
| 2703 | + original, save_kwargs={"encoding": encoding}, open_kwargs={"chunks": {}} |
| 2704 | + ) as ds1: |
| 2705 | + assert_identical(ds1, original) |
| 2706 | + |
| 2707 | + with self.roundtrip_append(original, open_kwargs={"chunks": {}}) as ds2: |
| 2708 | + assert_identical(ds2, original) |
| 2709 | + |
| 2710 | + |
2663 | 2711 | @requires_zarr
|
2664 | 2712 | @requires_fsspec
|
2665 | 2713 | def test_zarr_storage_options() -> None:
|
|
0 commit comments