-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Allow setting fill_value
on Zarr format 3 arrays
#10161
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -3369,7 +3369,13 @@ def test_zarr_fill_value_setting(self, dtype): | |||||||||||||
# for floats, Xarray inserts a default `np.nan` | ||||||||||||||
expected.foo.attrs["_FillValue"] = np.nan | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. does this assume that There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes. I think so: xarray/xarray/backends/zarr.py Lines 1150 to 1155 in cdebbf5
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. since the zarr spec only defines a special JSON encoding for nan in the specific context of the Also, In zarr-developers/zarr-python#2874 I remove the behavior where all numpy scalars get special serialization to JSON (instead, the dtype object is responsible for that). But it seems like we will break xarray if we move forward with that change. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I checked what zarr v3 does today -- although we apply special JSON encoding to any nan, +infinity, -inifinity when writing JSON (e.g., {"foo": np.nan} -> {"foo": "NaN"}), we only apply special decoding when reading the fill value. Special nan values in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes looks like Ryan added base64 encode/decode. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It would be great if we could take that custom attribute encoding decoding stuff out of Xarray and replace it with @d-v-b's new ZarrDType machinery. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have stand-alone functions that handle this, but they are currently not public API. Would be happy to make them public though! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ("this" meaning "convert special floats to / from JSON") |
||||||||||||||
|
||||||||||||||
open_kwargs = {"mask_and_scale": False, "consolidated": False} | ||||||||||||||
# turn off all decoding so we see what Zarr returns to us. | ||||||||||||||
# Since chunks, are not written, we should receive on `fill_value` | ||||||||||||||
open_kwargs = { | ||||||||||||||
"mask_and_scale": False, | ||||||||||||||
"consolidated": False, | ||||||||||||||
"use_zarr_fill_value_as_mask": False, | ||||||||||||||
} | ||||||||||||||
save_kwargs = dict(compute=False, consolidated=False) | ||||||||||||||
with self.roundtrip( | ||||||||||||||
ds, | ||||||||||||||
|
Uh oh!
There was an error while loading. Please reload this page.