Skip to content

Commit 904449a

Browse files
authored
Merge branch 'main' into async-dtreec
2 parents 943715e + 3ec5a38 commit 904449a

12 files changed

Lines changed: 147 additions & 42 deletions

File tree

.github/workflows/ci-additional.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ jobs:
214214
uses: Parcels-code/pixi-lock/restore@9a2866f8258b87a3c616d5ad7d51c6cd853df78b
215215
with:
216216
cache-key: ${{ needs.cache-pixi-lock.outputs.cache-key }}
217-
- uses: prefix-dev/setup-pixi@v0.9.3
217+
- uses: prefix-dev/setup-pixi@v0.9.4
218218
with:
219219
pixi-version: ${{ needs.cache-pixi-lock.outputs.pixi-version }}
220220
cache: true

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ jobs:
103103
uses: Parcels-code/pixi-lock/restore@9a2866f8258b87a3c616d5ad7d51c6cd853df78b
104104
with:
105105
cache-key: ${{ needs.cache-pixi-lock.outputs.cache-key }}
106-
- uses: prefix-dev/setup-pixi@v0.9.3
106+
- uses: prefix-dev/setup-pixi@v0.9.4
107107
with:
108108
pixi-version: ${{ needs.cache-pixi-lock.outputs.pixi-version }}
109109
cache: true

.github/workflows/hypothesis.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ jobs:
8484
uses: Parcels-code/pixi-lock/restore@9a2866f8258b87a3c616d5ad7d51c6cd853df78b
8585
with:
8686
cache-key: ${{ needs.cache-pixi-lock.outputs.cache-key }}
87-
- uses: prefix-dev/setup-pixi@v0.9.3
87+
- uses: prefix-dev/setup-pixi@v0.9.4
8888
with:
8989
pixi-version: ${{ needs.cache-pixi-lock.outputs.pixi-version }}
9090
cache: true

.github/workflows/upstream-dev-ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ jobs:
141141
uses: Parcels-code/pixi-lock/restore@9a2866f8258b87a3c616d5ad7d51c6cd853df78b
142142
with:
143143
cache-key: ${{ needs.cache-pixi-lock.outputs.cache-key }}
144-
- uses: prefix-dev/setup-pixi@v0.9.3
144+
- uses: prefix-dev/setup-pixi@v0.9.4
145145
with:
146146
pixi-version: ${{ needs.cache-pixi-lock.outputs.pixi-version }}
147147
cache: true

.readthedocs.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ build:
1818
- (git --no-pager log --pretty="tformat:%s" -1 | grep -vqF "[skip-rtd]") || exit 183
1919
- git fetch --unshallow || true
2020
install:
21-
- pixi install -e doc
21+
- pixi install --concurrent-solves 2 -e doc
2222
build:
2323
html:
2424
- pixi run doc BUILDDIR=$READTHEDOCS_OUTPUT

doc/conf.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"sphinx.ext.mathjax",
5555
"sphinx.ext.napoleon",
5656
"jupyter_sphinx",
57+
"myst_parser",
5758
"nbsphinx",
5859
"sphinx_autosummary_accessors",
5960
"sphinx.ext.linkcode",

doc/contribute/contributing.rst

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ development environment:
208208

209209
That's it! Now you're ready to contribute to Xarray.
210210

211-
Pixi defines multiple environments as well as tasks to help you with development. These include tasks for:
211+
Pixi defines multiple environments as well as tasks to help you with development (view these by running ``pixi task list``). These include tasks for:
212212

213213
- running the test suite
214214
- building the documentation
@@ -221,16 +221,10 @@ are only run in a single environment (e.g., building the documentation or runnin
221221

222222
You can see all available environments and tasks by running::
223223

224-
pixi list
224+
pixi info
225225

226-
For example:
227226

228-
- ``pixi run doc`` will build the documentation
229-
- ``pixi run mypy`` will run the static type checker
230-
- ``pixi run test`` will run the test suite
231-
- ``pixi run pre-commit`` will run all code formatters and linters - defined via the pre-commit hooks
232-
233-
When running ``pixi run test`` you will be prompted to select which environment you want to use. You can specify the environment
227+
When running a test you may be prompted to select which environment you want to use. You can specify the environment
234228
directly by providing the ``-e`` flag, e.g., ``pixi run -e my_environment test`` . Our CI setup uses Pixi as well - you can easily
235229
reproduce CI tests by running the same tasks in the same environments as defined in the CI.
236230

doc/whats-new.rst

Lines changed: 84 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,51 @@
66
What's New
77
==========
88

9-
.. _whats-new.2026.02.0:
9+
.. _whats-new.2026.03.0:
1010

11-
v2026.02.0 (unreleased)
11+
v2026.03.0 (unreleased)
1212
-----------------------
1313

1414
New Features
1515
~~~~~~~~~~~~
1616

17+
18+
Breaking Changes
19+
~~~~~~~~~~~~~~~~
20+
21+
22+
Deprecations
23+
~~~~~~~~~~~~
24+
25+
26+
Bug Fixes
27+
~~~~~~~~~
28+
29+
30+
Documentation
31+
~~~~~~~~~~~~~
32+
33+
34+
Internal Changes
35+
~~~~~~~~~~~~~~~~
36+
37+
38+
.. _whats-new.2026.02.0:
39+
40+
v2026.02.0 (Feb 13, 2026)
41+
-------------------------
42+
43+
This release adds support for 1D coordinates in NDPointIndex for scattered point
44+
indexing, switches all deprecation warnings to FutureWarning for better end-user
45+
visibility, fixes silent data corruption when writing dask arrays to sharded Zarr
46+
stores, and improves chunked array tokenization performance.
47+
48+
Thanks to the 11 contributors to this release:
49+
Antonio Valentino, Chris Barker, Christine P. Chai, Deepak Cherian, Ewan Short, Harikrishna KP, Ian Hunt-Isaak, Julia Signell, Justus Magin, Kristian Kollsgård and Nick Hodgskin
50+
51+
New Features
52+
~~~~~~~~~~~~
53+
1754
- Added ``max_concurrency`` parameter to :py:func:`open_datatree` to control
1855
the maximum number of concurrent I/O operations when opening groups in parallel
1956
with the Zarr backend (:pull:`10742`).
@@ -33,42 +70,77 @@ Breaking Changes
3370
switches to using ``FutureWarning`` everywhere (:pull:`11112`).
3471
By `Julia Signell <https://github.com/jsignell>`_.
3572

36-
Deprecations
37-
~~~~~~~~~~~~
38-
39-
4073
Bug Fixes
4174
~~~~~~~~~
4275

43-
- Fix slicing with negative step (:issue:`11000` and :pull:`11044`).
76+
- Fix slicing with negative step (:issue:`11000`, :pull:`11044`).
4477
By `Antonio Valentino <https://github.com/avalentino>`_.
4578
- Fix ``.plot`` error when using positional args with ``col`` and
46-
``row`` (:issue:`11104` :pull:`11111`).
79+
``row`` (:issue:`11104`, :pull:`11111`).
4780
By `Julia Signell <https://github.com/jsignell>`_.
48-
- Slightly amend `Xarray's Zarr Encoding Specification doc <https://docs.xarray.dev/en/latest/internals/zarr-encoding-spec.html>`_ for clarity, and provide a code comment in ``xarray.backends.zarr._get_zarr_dims_and_attrs`` referencing the doc (:issue:`8749` :pull:`11013`).
81+
- Slightly amend `Xarray's Zarr Encoding Specification doc <https://docs.xarray.dev/en/latest/internals/zarr-encoding-spec.html>`_
82+
for clarity, and provide a code comment in
83+
``xarray.backends.zarr._get_zarr_dims_and_attrs`` referencing the doc
84+
(:issue:`8749`, :pull:`11013`).
4985
By `Ewan Short <https://github.com/eshort0401>`_.
5086
- Fix silent data corruption when writing dask arrays to sharded Zarr stores.
5187
Dask chunk boundaries must now align with shard boundaries, not just internal
52-
Zarr chunk boundaries (:issue:`10831`).
88+
Zarr chunk boundaries (:issue:`10831`, :pull:`11117`).
89+
By `Kristian Kollsgård <https://github.com/kkollsga>`_.
5390
- Fix :py:meth:`Dataset.sortby` and :py:meth:`DataArray.sortby` placing NaN values
54-
at the beginning instead of the end when using ``ascending=False`` (:issue:`7358`).
91+
at the beginning instead of the end when using ``ascending=False``
92+
(:issue:`7358`, :pull:`11118`).
5593
By `Kristian Kollsgård <https://github.com/kkollsga>`_.
5694
- Raise :py:class:`FileNotFoundError` instead of a confusing ``ValueError`` when
5795
:py:func:`open_dataset` is called with a non-existent local file path
58-
(:issue:`10896`).
96+
(:issue:`10896`, :pull:`11150`).
5997
By `Kristian Kollsgård <https://github.com/kkollsga>`_.
98+
- Improve error message when a chunk manager is not available, suggesting how
99+
to install the required package (:pull:`11056`).
100+
By `Julia Signell <https://github.com/jsignell>`_.
101+
- Raise :py:class:`ValueError` on slice-based selection of multi-index levels,
102+
which previously returned silently wrong results (:issue:`10534`, :pull:`11168`).
103+
By `Harikrishna KP <https://github.com/Mr-Neutr0n>`_.
60104

61105
Documentation
62106
~~~~~~~~~~~~~
107+
- Add support for myst markdown (:pull:`11167`).
108+
By `Nick Hodgskin <https://github.com/VeckoTheGecko>`_.
63109

110+
- Update docstrings for pandas 3 compatibility (:pull:`11130`).
111+
By `Julia Signell <https://github.com/jsignell>`_.
112+
- Various Numpydoc fixes (:pull:`11122`).
113+
By `Nick Hodgskin <https://github.com/VeckoTheGecko>`_.
114+
- Correct wording mistakes in documentation (:pull:`11120`, :pull:`11127`).
115+
By `Christine P. Chai <https://github.com/star1327p>`_.
116+
- Fix broken links in documentation (:pull:`11115`, :pull:`11135`, :pull:`11161`).
117+
By `Nick Hodgskin <https://github.com/VeckoTheGecko>`_.
118+
- Fix "latest" version displayed on landing page (:pull:`11119`).
119+
By `Nick Hodgskin <https://github.com/VeckoTheGecko>`_.
120+
- Add descriptions for pixi tasks (:pull:`11155`).
121+
By `Nick Hodgskin <https://github.com/VeckoTheGecko>`_.
122+
- Update :py:func:`open_zarr` ``decode_cf`` docstring (:pull:`11165`).
123+
By `Nick Hodgskin <https://github.com/VeckoTheGecko>`_.
124+
- Add MyST Markdown support for documentation (:pull:`11167`).
125+
By `Nick Hodgskin <https://github.com/VeckoTheGecko>`_.
64126

65127
Performance
66128
~~~~~~~~~~~
67129

130+
- Add a fast path that skips normalized chunks during tokenization (:pull:`11017`).
131+
By `Julia Signell <https://github.com/jsignell>`_.
68132

69133
Internal Changes
70134
~~~~~~~~~~~~~~~~
71135

136+
- Temporarily silence shape assignment warnings raised in ``netCDF4``
137+
(:pull:`11146`).
138+
By `Justus Magin <https://github.com/keewis>`_.
139+
- Add osx-64 to the pixi configuration (:pull:`11137`).
140+
By `Chris Barker <https://github.com/ChrisBarker-NOAA>`_.
141+
- Preserve string dtypes instead of converting to object where possible (:pull:`11152`).
142+
By `Julia Signell <https://github.com/jsignell>`_.
143+
72144

73145
.. _whats-new.2026.01.0:
74146

pixi.toml

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ hypothesis = "*"
212212
coveralls = "*"
213213

214214
[feature.test.tasks]
215-
test = { cmd = "pytest" }
215+
test = { cmd = "pytest", description = "Run the test suite with pytest." }
216216

217217
[feature.doc.dependencies]
218218
kerchunk = "*"
@@ -239,10 +239,11 @@ sphinx-remove-toctrees = "*"
239239
sphinxext-opengraph = "*"
240240
sphinxext-rediraffe = "*"
241241
cfgrib = "*"
242+
myst-parser = "*"
242243

243244
[feature.doc.tasks]
244-
doc = { cmd = "make html", cwd = "doc" }
245-
doc-clean = { cmd = "make clean && make html", cwd = "doc" }
245+
doc = { cmd = "make html", cwd = "doc", description = "Build the HTML documentation." }
246+
doc-clean = { cmd = "make clean && make html", cwd = "doc", description = "Clean build artifacts and rebuild the HTML documentation from scratch." }
246247
linkcheck = { cmd = "make linkcheck", cwd = "doc", description = "Check URLs in documentation." }
247248

248249

@@ -270,20 +271,20 @@ types-defusedxml = "*"
270271
types-pexpect = "*"
271272

272273
[feature.typing.tasks]
273-
mypy = "mypy --install-types --non-interactive --cobertura-xml-report mypy_report"
274+
mypy = { cmd = "mypy --install-types --non-interactive --cobertura-xml-report mypy_report", description = "Run mypy type checking and generate a Cobertura XML report." }
274275

275276
[feature.pre-commit.dependencies]
276277
pre-commit = "*"
277278

278279
[feature.pre-commit.tasks]
279-
pre-commit = { cmd = "pre-commit" }
280+
pre-commit = { cmd = "pre-commit", description = "Run pre-commit hooks and linters." }
280281

281282
[feature.release.dependencies]
282283
gitpython = "*"
283284
cytoolz = "*"
284285

285286
[feature.release.tasks]
286-
release-contributors = "python ci/release_contributors.py"
287+
release-contributors = { cmd = "python ci/release_contributors.py", description = "Generate a list of contributors for a release." }
287288

288289
[feature.dev.dependencies]
289290
ipython = ">=9.8.0,<10"
@@ -298,35 +299,47 @@ xarray-minimum-dependency-policy = "*"
298299
[feature.policy.dependencies]
299300
python = "3.13.*"
300301

301-
[feature.policy.tasks.check-policy]
302+
[feature.policy.tasks._check-policy]
302303
cmd = "minimum-versions validate --policy ci/policy.yaml --manifest-path pixi.toml {{ env }}"
303304
args = ["env"]
304305

305306
[feature.policy.tasks]
306307
policy-bare-minimum = [
307-
{ task = "check-policy", args = [
308+
{ task = "_check-policy", args = [
308309
"pixi:test-py311-bare-minimum",
309310
] },
310311
]
311312
policy-bare-min-and-scipy = [
312-
{ task = "check-policy", args = [
313+
{ task = "_check-policy", args = [
313314
"pixi:test-py311-bare-min-and-scipy",
314315
] },
315316
]
316317
policy-min-versions = [
317-
{ task = "check-policy", args = [
318+
{ task = "_check-policy", args = [
318319
"pixi:test-py311-min-versions",
319320
] },
320321
]
321-
policy = [
322-
{ task = "check-policy", args = [
322+
[feature.policy.tasks.policy]
323+
324+
depends-on = [
325+
{ task = "_check-policy", args = [
323326
"""\
324327
pixi:test-py311-bare-minimum \
325328
pixi:test-py311-bare-min-and-scipy \
326329
pixi:test-py311-min-versions \
327330
""",
328331
] },
329332
]
333+
description = "Check all minimum version test environments match Xarray's version policy."
334+
335+
[feature.tools.dependencies]
336+
python = "3.13.*"
337+
338+
[feature.tools.pypi-dependencies]
339+
rst-to-myst = { version = "*", extras = ["sphinx"] }
340+
341+
[feature.tools.tasks]
342+
rst2myst = { cmd = "rst2myst", description = "Convert rst to myst markdown" }
330343

331344
[environments]
332345
# Testing
@@ -440,3 +453,4 @@ default = { features = [
440453
"dev",
441454
] }
442455
policy = { features = ["policy"], no-default-feature = true }
456+
tools = { features = ["tools"], no-default-feature = true }

xarray/backends/zarr.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1593,7 +1593,7 @@ def open_zarr(
15931593
mask_and_scale=True,
15941594
decode_times=True,
15951595
concat_characters=True,
1596-
decode_coords=True,
1596+
decode_coords: Literal["coordinates", "all"] | bool = True,
15971597
drop_variables=None,
15981598
consolidated=None,
15991599
overwrite_encoded_chunks=False,
@@ -1661,9 +1661,17 @@ def open_zarr(
16611661
form string arrays. Dimensions will only be concatenated over (and
16621662
removed) if they have no corresponding variable and if they are only
16631663
used as the last dimension of character arrays.
1664-
decode_coords : bool, optional
1665-
If True, decode the 'coordinates' attribute to identify coordinates in
1666-
the resulting dataset.
1664+
decode_coords : bool or {"coordinates", "all"}, optional
1665+
Controls which variables are set as coordinate variables:
1666+
1667+
- "coordinates" or True: Set variables referred to in the
1668+
``'coordinates'`` attribute of the datasets or individual variables
1669+
as coordinate variables.
1670+
- "all": Set variables referred to in ``'grid_mapping'``, ``'bounds'`` and
1671+
other attributes as coordinate variables.
1672+
1673+
Only existing variables can be set as coordinates. Missing variables
1674+
will be silently ignored.
16671675
drop_variables : str or iterable, optional
16681676
A variable or list of variables to exclude from being parsed from the
16691677
dataset. This may be useful to drop variables with problems or

0 commit comments

Comments
 (0)