|
110 | 110 |
|
111 | 111 | have_zarr_v3 = False |
112 | 112 | try: |
113 | | - # as of Zarr v2.13 these imports require environment variable |
| 113 | + # as of Zarr v2.14 these imports require environment variable |
114 | 114 | # ZARR_V3_EXPERIMENTAL_API=1 |
115 | 115 | from zarr import DirectoryStoreV3, KVStoreV3 |
116 | 116 |
|
117 | 117 | have_zarr_v3 = True |
| 118 | + |
| 119 | + from zarr._storage.v3_storage_transformers import v3_sharding_available |
| 120 | + |
| 121 | + if v3_sharding_available: |
| 122 | + # as of Zarr v2.14 these imports require environment variable |
| 123 | + # ZARR_V3_SHARDING=1 |
| 124 | + # TODO: change import to |
| 125 | + # from zarr import ShardingStorageTransformer |
| 126 | + # when ShardingStorageTransformer becomes available at the top-level zarr namespace |
| 127 | + from zarr._storage.v3_storage_transformers import ShardingStorageTransformer |
| 128 | + |
| 129 | + have_sharding_v3 = True |
| 130 | + else: |
| 131 | + have_sharding_v3 = False |
| 132 | + |
118 | 133 | except ImportError: |
119 | 134 | KVStoreV3 = None |
120 | 135 |
|
@@ -2660,6 +2675,32 @@ 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() |
| 2683 | + original["var2"].encoding.update( |
| 2684 | + { |
| 2685 | + "chunks": (2, 3), |
| 2686 | + "storage_transformers": [ |
| 2687 | + ShardingStorageTransformer("indexed", chunks_per_shard=(2, 2)) |
| 2688 | + ], |
| 2689 | + } |
| 2690 | + ) |
| 2691 | + |
| 2692 | + original["var3"].encoding.update( |
| 2693 | + { |
| 2694 | + "chunks": (2, 2), |
| 2695 | + "storage_transformers": [ |
| 2696 | + ShardingStorageTransformer("indexed", chunks_per_shard=(2, 2)) |
| 2697 | + ], |
| 2698 | + } |
| 2699 | + ) |
| 2700 | + with self.roundtrip(original) as ds1: |
| 2701 | + assert_equal(ds1, original) |
| 2702 | + |
| 2703 | + |
2663 | 2704 | @requires_zarr |
2664 | 2705 | @requires_fsspec |
2665 | 2706 | def test_zarr_storage_options() -> None: |
|
0 commit comments