Repository navigation
Tracking: open deprecations #11721
Description
This issue tracks every deprecation and pending behaviour change currently on main (357efad), so we can decide when to finalize them instead of letting warnings accumulate for years.
Age is the time since users first saw a FutureWarning (as of 2026-10-13):
- 🟢 fresh: less than 6 months
- 🟡 ok: 6 months to 2 years
- 🔴 old: more than 2 years
(strong) marks changes that silently alter results instead of raising an error; these probably deserve a longer cycle.
Note: #11112 (v2026.02.0, 2026-02-13) turned all DeprecationWarnings into FutureWarnings, so for many items "Introduced" is much older than "FutureWarning since". See the end of this issue for the difference between the warning categories.
Active FutureWarnings
| Age | API | Change | Introduced | FutureWarning since |
|---|---|---|---|---|
| 🔴 | Subclasses of xarray objects without __slots__ |
raise error | v0.13.0 (2019-09-17), #3250 | v0.13.0 |
| 🔴 | apply_ufunc(meta=..., output_sizes=...) |
remove; pass via dask_gufunc_kwargs |
v0.16.1 (2020-09-20), #4060 | v0.16.1 |
| 🔴 | .dt.weekofyear, .dt.week |
remove; use .dt.isocalendar().week |
v0.16.2 (2020-11-30), #4534 | v0.16.2 |
| 🔴 | .chunk(chunks=None) (Dataset, DataArray, Variable/NamedArray) |
raise error; use {} |
v0.17.0 (2021-02-25), #4633 | v0.17.0 |
| 🔴 | quantile(interpolation=...) |
remove; use method |
v2022.03.0 (2022-03-02), #6108 | v2022.03.0 |
| 🔴 | Positional args to plot methods | raise error | v2022.11.0 (2022-11-04), #7052 | v2022.11.0 |
| 🔴 | FacetGrid.axes |
remove; use FacetGrid.axs |
v2022.11.0 (2022-11-04), #7194 | v2022.11.0 |
| 🔴 | 1D plot hue_style= |
remove argument | v2023.07.0 (2023-07-17), #7925 | v2023.07.0 |
| 🔴 | Updating a PandasMultiIndex dim coordinate alone | raise error | v2023.09.0 (2023-09-26), #8094 | v2023.09.0 |
| 🔴 | Passing a pandas.MultiIndex directly as coord/data var (strong) |
stop implicit promotion; use Coordinates.from_pandas_multiindex |
v2023.09.0 (2023-09-26), #8094 | v2023.09.0 |
| 🔴 | reset_encoding() (Dataset, DataArray, Variable) |
remove; use drop_encoding |
v2023.10.0 (2023-10-19), #8287 | v2023.10.0 (as UserWarning) |
| 🔴 | cftime frequency aliases ("A", "Y", "M", "H", "T", ...) |
raise error; use "YE", "ME", "h", "min", ... |
v2023.11.0 (2023-11-17), #8415, #8629 | v2023.11.0 |
| 🔴 | Dataset.dims used as a mapping (strong) |
return a set of names (#8496) | v2023.12.0 (2023-12-08), #8500 | v2023.12.0 |
| 🔴 | as_variable(obj, name=...) auto-converting to IndexVariable (strong) |
stop converting | v2024.03.0 (2024-03-29), #8711 | v2024.03.0 |
| 🔴 | Positional args for keyword-only params on groupby, groupby_bins, resample |
raise error | v2024.07.0 (2024-07-30), #9236 | v2024.07.0 |
| 🟡 | Positional args for keyword-only params on Variable.rolling_window, Rolling.construct |
raise error | v2024.11.0 (2024-11-22), #9720 | v2024.11.0 |
| 🟡 | use_cftime= on open_* / decode_cf |
remove; use decode_times=CFDatetimeCoder(use_cftime=...) |
v2025.01.1 (2025-01-09), #9901 | v2025.01.1 |
| 🟡 | CFTimeIndex.to_datetimeindex() default time_unit (strong) |
default "ns" → "us" |
v2025.01.2 (2025-01-31), #9965 | v2025.01.2 |
| 🟡 | xr.cftime_range() |
remove; use date_range(..., use_cftime=True) |
v2025.03.0 (2025-03-19), #10024 | v2025.03.0 |
| 🟡 | h5netcdf phony_dims default warning |
default already changed; drop the warning | v2025.03.0 (2025-03-19), #10058 | v2025.03.0 (as UserWarning) |
| 🟡 | pydap output_grid= |
remove argument | v2025.04.0 (2025-04-29), #10182 | v2025.04.0 |
| 🟡 | Third-party Index.equals(self, other) without exclude |
drop compatibility wrapper | v2025.06.0 (2025-06-10), #10293 | v2025.06.0 |
| 🟡 | use_new_combine_kwarg_defaults (concat, merge, combine_*, open_mfdataset, align) (strong) |
flip defaults: data_vars → None, coords → "minimal", compat → "override", join → "exact" (#8778) |
v2025.08.0 (2025-08-14), #10062 | v2025.08.0 |
| 🟡 | Dataset.eval(parser=...) |
remove argument | v2026.01.0 (2026-01-28), #11064 | v2026.01.0 |
| 🟡 | Dataset.drop / DataArray.drop |
remove; use drop_vars / drop_sel |
v0.14.1 (2019-11-19), #3475, #8497 | v2026.02.0 |
| 🟡 | rolling(...).reduce(dim=...) |
dim has no effect; remove/raise |
v0.14.1 (2019-11-19), #3513 | v2026.02.0 |
| 🟡 | DataArray/Variable.argmin()/argmax() without dim/axis (strong) |
return dict of indices per dim | v0.16.0 (2020-07-11), #3936 | v2026.02.0 |
| 🟡 | Dataset.argmin()/argmax() without dim |
raise error | v0.16.0 (2020-07-11), #3936 | v2026.02.0 |
| 🟡 | drop_vars dropping a single MultiIndex level |
raise error | v2022.06.0 (2022-07-22), #6592 | v2026.02.0 |
| 🟡 | Creating an index from float16 data (strong) |
stop casting to float64 |
v2023.04.0 (2023-04-14), #7724 | v2026.02.0 |
| 🟡 | .chunk() with dimension-ordered tuple/list |
raise error; use dict | v2023.11.0 (2023-11-17), #8341 | v2026.02.0 |
| 🟡 | DataTree/TreeNode .iter_lineage(), .lineage, .ancestors |
remove; use .parents |
v2024.10.0 (2024-10-24) | v2026.02.0 |
| 🟡 | groupby(eagerly_compute_group=...) |
no-op, remove argument | v2025.04.0 (2025-04-29), #10253 | v2026.02.0 |
| 🟢 | keepdims= in groupby/resample/rolling reductions |
ignored; remove/raise | v2026.09.0 (2026-09-29), #11521 | v2026.09.0 |
Still PendingDeprecationWarning (hidden by default)
These should be escalated to FutureWarning. Age is measured from introduction.
| Age | API | Change | Introduced |
|---|---|---|---|
| 🔴 | Dataset.apply, GroupBy.apply, Resample.apply |
remove; use .map |
v0.14.1 (2019-11-19), #3459 |
| 🔴 | dims= / dimensions= → dim (deprecate_dims) on xr.dot, DataArray.dot, transpose, stack, unstack, set_dims |
remove old names | v2023.12.0 (2023-12-08), #8487; v2024.05.0 (2024-05-12), #8982 |
| 🟡 | interpolate_na(method="spline") |
remove; use method="polynomial" |
v2024.10.0 (2024-10-24), #9526 |
Documented as deprecated but no warning yet
These should start warning. Age is measured from introduction.
| Age | API | Change | Introduced |
|---|---|---|---|
| 🔴 | Dataset.to_array |
soft-deprecated; use to_dataarray |
v2023.11.0 (2023-11-17), #8438 |
| 🔴 | DataTree.ds |
"soft-deprecated alias" for .dataset |
v2024.09.0 (2024-09-11), #9476 |
| 🟡 | set_options(display_expand_groups=...) |
no-op | v2026.01.0 (2026-01-28), #10816 |
| netCDF4 engine guessing for remote URLs | stop guessing netcdf4 for non-zarr URLs |
not started (#10951) |
Done
| API | Change | Introduced | FutureWarning since | PR(s) |
|---|---|---|---|---|
Variable.to_variable, Variable.to_coord, IndexVariable.to_coord |
remove; use to_base_variable / to_index_variable |
v0.9.0 (2017-01-25), #993 | v0.9.0 | #11726 |
set_options(enable_cftimeindex=...) |
no-op, remove option | v0.11.0 (2018-11-07), #2516 | v0.11.0 | #11729 |
Small cleanups found while compiling this
Dataset.argmax()warning message saysargmin(copy-paste)._deprecate_positional_argsonDataArray.groupby_bins/Dataset.groupby_binsnever fires: neither signature has a*.reset_encodingwarns with a plainUserWarningand says "since 2023.11", but shipped in v2023.10.0.cftime_rangedocstring says.. deprecated:: 2025.02.0, which was never released (first was v2025.03.0).conventions.decode_cf_variablesstill setswarnings.filterwarnings("once", "decode_timedelta", FutureWarning), though that deprecation was finalized in Finalize change in behavior ofdecode_timedelta=None#11173.TreeNode.lineagewarns twice (it callsiter_lineage).- Several deprecations have no whats-new entry under "Deprecations" (e.g. Dataset.map #3459, ENH: use
dask.array.apply_gufuncinxr.apply_ufunc#4060, change default in ds.chunk and datarray.chunk variable.chunk #4633, Restore old MultiIndex dropping behaviour #6592, Support vectorized interpolation with more scipy interpolators #9526, opendap / dap4 support for pydap backend #10182,Dataset.evalworks with >2 dims #11064).
Warning categories
| Category | Shown by default? | Meaning |
|---|---|---|
PendingDeprecationWarning |
Never, not even in scripts or notebooks | The feature will be deprecated in the future |
DeprecationWarning |
Only when attributed to code in __main__ (a script or notebook cell, PEP 565); hidden when attributed to a library |
Deprecated; aimed at other Python developers |
FutureWarning |
Always | Deprecated or behaviour will change; aimed at end users |
pytest shows DeprecationWarning and PendingDeprecationWarning in its warnings summary, so test suites see them, but interactive users usually don't. Only FutureWarning reliably reaches users, which is why the age above is measured from "FutureWarning since".
Activity
headtr1ck commentedon Oct 13, 2026
Top 10 things that can be done right away. All are 🔴 and raise errors instead of silently changing results, or are pure cleanups:
Variable.to_variable,Variable.to_coord,IndexVariable.to_coordaliases (since v0.9.0, Coordinate -> IndexVariable and other deprecations #993) (Remove deprecated Variable.to_variable and to_coord aliases #11726)set_options(enable_cftimeindex=...)option (since v0.11.0, Switch enable_cftimeindex to True by default #2516) (Remove the no-op enable_cftimeindex option #11729)apply_ufunc(meta=..., output_sizes=...); only accept them viadask_gufunc_kwargs(since v0.16.1, ENH: usedask.array.apply_gufuncinxr.apply_ufunc#4060).dt.weekofyearand.dt.week(since v0.16.2, Add isocalendar to dt fields #4534).chunk(chunks=None)(since v0.17.0, change default in ds.chunk and datarray.chunk variable.chunk #4633)quantile(interpolation=...)(since v2022.03.0, quantile: rename interpolation arg to method #6108)FacetGrid.axesand 1Dhue_style=(since v2022.11.0 / v2023.07.0, Add typing to plot methods #7052, Align naming convention with plt.subplots #7194, Remove hue_style from plot1d docstring #7925)groupby,groupby_bins,resamplekeyword-only (since v2024.07.0, groupby, resample: Deprecate some positional args #9236; the message promised "two releases later").groupby_binsalso needs the missing*, as its decorator currently never fires.PendingDeprecationWarnings (apply→map,dims=→dim,interpolate_na(method="spline")) toFutureWarning, and start warning for the documented-only deprecations (Dataset.to_array,DataTree.ds,display_expand_groups)Dataset.argmax()message saysargmin;reset_encodinguses a plainUserWarningwith a wrong version;cftime_rangedocstring cites the unreleased 2025.02.0; leftoverdecode_timedeltawarnings filter inconventions.py;TreeNode.lineagewarns twice (BUG: Fix Dataset.argmax warning and error messages #11723, Small deprecation cleanups from #11721 #11724)[This is Claude Code on behalf of Michael Niklas]
nightcityblade commentedon Oct 13, 2026
Hi, I'd like to take the Dataset.argmax warning/error copy-paste cleanup. I'll submit a focused PR shortly.
Small deprecation cleanups from pydata#11721
Yagnik-Trivedi commentedon Oct 13, 2026
I'd like to take the first item: removing the
Variable.to_variable,Variable.to_coordandIndexVariable.to_coordaliases (#993). I'll open a PR shortly.[This is Claude Code on behalf of Yagnik Trivedi]
Small deprecation cleanups from #11721 (#11724)
Remove deprecated Variable.to_variable and to_coord aliases (#11726)
Remove the no-op enable_cftimeindex option (#11729)