Skip to content

Upgrading xarray 0.16 to 0.17

Review needed0.16.2 → 0.17.0New1Changed3Other2

Review neededUpgrade verdict

3 behavior changes.

  • Better handling of cftime-based dates and calendars.
  • Unstacking is faster.
  • Rolling operations use less memory.
Nothing to change

No breaking, platform, security or deprecated items in this range.

Python requirement changed in 0.17.0: >=3.6 → >=3.7.

Installs 6 packages in all (was 5).

Also installs six.

Moves python-dateutil 4.0.0 → 3.0.0. Your build may pick other versions.

Nothing in this upgrade needs a code or configuration change.

Generated by DepDelta from published Python source. Not mixed with prose notes.

  • added: export list_engines
  • changed: function open_dataarray(filename_or_obj, group=…, decode_cf=…, mask_and_scale=…, decode_times=…, autoclose=…, concat_characters=…, decode_coords=…, engine=…, chunks=…, lock=…, cache=…, drop_variables=…, backend_kwargs=…, use_cftime=…, decode_timedelta=…) → function open_dataarray(filename_or_obj, group=…, decode_cf=…, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, engine=…, chunks=…, lock=…, cache=…, drop_variables=…, backend_kwargs=…, use_cftime=…, decode_timedelta=…)
  • changed: function open_dataset(filename_or_obj, group=…, decode_cf=…, mask_and_scale=…, decode_times=…, autoclose=…, concat_characters=…, decode_coords=…, engine=…, chunks=…, lock=…, cache=…, drop_variables=…, backend_kwargs=…, use_cftime=…, decode_timedelta=…) → function open_dataset(filename_or_obj, group=…, decode_cf=…, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, engine=…, chunks=…, lock=…, cache=…, drop_variables=…, backend_kwargs=…, use_cftime=…, decode_timedelta=…)
  • changed: function open_mfdataset(paths, chunks=…, concat_dim=…, compat=…, preprocess=…, engine=…, lock=…, data_vars=…, coords=…, combine=…, autoclose=…, parallel=…, join=…, attrs_file=…, **kwargs) → function open_mfdataset(paths, chunks=…, concat_dim=…, compat=…, preprocess=…, engine=…, lock=…, data_vars=…, coords=…, combine=…, parallel=…, join=…, attrs_file=…, **kwargs)
  • removed: function dataset_from_backend_dataset(ds, filename_or_obj, engine, chunks, cache, overwrite_encoded_chunks, **extra_tokens)
  • removed: function resolve_decoders_kwargs(decode_cf, engine, **decoders)
  • removed: function open_backend_dataset_cfgrib(filename_or_obj, *, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, lock=…, indexpath=…, filter_by_keys=…, read_keys=…, encode_cf=…, squeeze=…, time_dims=…)
  • added: class CfgribfBackendEntrypoint(BackendEntrypoint)
  • added: method CfgribfBackendEntrypoint.guess_can_open(store_spec)
  • added: method CfgribfBackendEntrypoint.open_dataset(filename_or_obj, *, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, lock=…, indexpath=…, filter_by_keys=…, read_keys=…, encode_cf=…, squeeze=…, time_dims=…)
  • added: variable has_cfgrib
  • added: class BackendEntrypoint
  • added: field BackendEntrypoint.open_dataset_parameters: Union[Tuple, None]
  • added: method BackendEntrypoint.guess_can_open(store_spec)
  • added: method BackendEntrypoint.open_dataset()
  • added: variable BACKEND_ENTRYPOINTS: Dict[str, Type[BackendEntrypoint]]
  • removed: function open_backend_dataset_h5necdf(filename_or_obj, *, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, format=…, group=…, lock=…, invalid_netcdf=…, phony_dims=…)
  • changed: static method H5NetCDFStore.open(filename, mode=…, format=…, group=…, lock=…, autoclose=…, invalid_netcdf=…, phony_dims=…) → static method H5NetCDFStore.open(filename, mode=…, format=…, group=…, lock=…, autoclose=…, invalid_netcdf=…, phony_dims=…, decode_vlen_strings=…)
  • added: class H5netcdfBackendEntrypoint(BackendEntrypoint)
  • added: method H5netcdfBackendEntrypoint.guess_can_open(store_spec)
  • added: method H5netcdfBackendEntrypoint.open_dataset(filename_or_obj, *, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, format=…, group=…, lock=…, invalid_netcdf=…, phony_dims=…, decode_vlen_strings=…)
  • added: variable has_h5netcdf
  • added: class NetCDF4BackendEntrypoint(BackendEntrypoint)
  • added: method NetCDF4BackendEntrypoint.guess_can_open(store_spec)
  • added: method NetCDF4BackendEntrypoint.open_dataset(filename_or_obj, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, group=…, mode=…, format=…, clobber=…, diskless=…, persist=…, lock=…, autoclose=…)
  • added: variable has_netcdf4
  • removed: variable ENGINES: T.Dict[str, T.Dict[str, T.Any]]
  • added: function backends_dict_from_pkg(pkg_entrypoints)
  • added: function build_engines(pkg_entrypoints)
  • added: function detect_parameters(open_dataset)
  • added: function get_backend(engine)
  • added: function guess_engine(store_spec)
  • added: function list_engines()
  • added: function remove_duplicates(pkg_entrypoints)
  • added: function set_missing_parameters(backend_entrypoints)
  • added: function sort_backends(backend_entrypoints)
  • added: variable STANDARD_BACKENDS_ORDER
  • added: class PseudoNetCDFBackendEntrypoint(BackendEntrypoint)
  • added: field PseudoNetCDFBackendEntrypoint.open_dataset_parameters
  • added: method PseudoNetCDFBackendEntrypoint.open_dataset(filename_or_obj, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, mode=…, lock=…, **format_kwargs)
  • added: variable has_pseudonetcdf
  • added: class PydapBackendEntrypoint(BackendEntrypoint)
  • added: method PydapBackendEntrypoint.guess_can_open(store_spec)
  • added: method PydapBackendEntrypoint.open_dataset(filename_or_obj, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, session=…)
  • added: variable has_pydap
  • added: class PynioBackendEntrypoint(BackendEntrypoint)
  • added: method PynioBackendEntrypoint.open_dataset(mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, mode=…, lock=…)
  • added: variable has_pynio
  • added: class ScipyBackendEntrypoint(BackendEntrypoint)
  • added: method ScipyBackendEntrypoint.guess_can_open(store_spec)
  • added: method ScipyBackendEntrypoint.open_dataset(filename_or_obj, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, mode=…, format=…, group=…, mmap=…, lock=…)
  • added: variable has_scipy
  • added: class StoreBackendEntrypoint(BackendEntrypoint)
  • added: method StoreBackendEntrypoint.guess_can_open(store_spec)
  • added: method StoreBackendEntrypoint.open_dataset(store, *, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…)
  • removed: function open_backend_dataset_zarr(filename_or_obj, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, group=…, mode=…, synchronizer=…, consolidated=…, consolidate_on_close=…, chunk_store=…)
  • removed: static method ZarrStore.get_chunk(name, var, chunks)
  • removed: static method ZarrStore.maybe_chunk(name, var, chunks, overwrite_encoded_chunks)
  • changed: function open_zarr(store, group=…, synchronizer=…, chunks=…, decode_cf=…, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, consolidated=…, overwrite_encoded_chunks=…, chunk_store=…, decode_timedelta=…, use_cftime=…, **kwargs) → function open_zarr(store, group=…, synchronizer=…, chunks=…, decode_cf=…, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, consolidated=…, overwrite_encoded_chunks=…, chunk_store=…, storage_options=…, decode_timedelta=…, use_cftime=…, **kwargs)
  • changed: static method ZarrStore.open_group(store, mode=…, synchronizer=…, group=…, consolidated=…, consolidate_on_close=…, chunk_store=…, append_dim=…, write_region=…) → static method ZarrStore.open_group(store, mode=…, synchronizer=…, group=…, consolidated=…, consolidate_on_close=…, chunk_store=…, storage_options=…, append_dim=…, write_region=…)
  • added: class ZarrBackendEntrypoint(BackendEntrypoint)
  • added: method ZarrBackendEntrypoint.open_dataset(filename_or_obj, mask_and_scale=…, decode_times=…, concat_characters=…, decode_coords=…, drop_variables=…, use_cftime=…, decode_timedelta=…, group=…, mode=…, synchronizer=…, consolidated=…, consolidate_on_close=…, chunk_store=…, storage_options=…)
  • added: variable has_zarr
  • added: class Microsecond(BaseCFTimeOffset)
  • added: class Millisecond(BaseCFTimeOffset)
  • added: method Microsecond.as_timedelta()
  • added: method Millisecond.as_timedelta()
  • added: variable CF_RELATED_DATA
  • added: variable CF_RELATED_DATA_NEEDS_PARSING
  • changed: function full_like(other, fill_value, dtype: DTypeLike=…) → function full_like(other: Dataset, fill_value, dtype: Union[DTypeLike, Mapping[Hashable, DTypeLike]]=…) -> Dataset | (other: DataArray, fill_value, dtype: DTypeLike=…) -> DataArray | (other: Variable, fill_value, dtype: DTypeLike=…) -> Variable
  • changed: method DataWithCoords.astype(dtype, casting=…, copy=…, keep_attrs=…) → method DataWithCoords.astype(dtype, *, order=…, casting=…, subok=…, copy=…, keep_attrs=…) -> T
  • changed: method DataWithCoords.weighted(weights) → method DataWithCoords.weighted(weights: DataArray) -> Weighted[T_DataWithCoords]
  • added: method DataWithCoords.set_close(close: Optional[Callable[[], None]]) -> None
  • added: variable T_DataWithCoords
  • removed: class LevelCoordinatesSource(Mapping[Hashable, Any])
  • removed: constructor LevelCoordinatesSource(data_object: Union[DataArray, Dataset])
  • changed: method DataArray.chunk(chunks: Union[None, Number, Tuple[Number, ...], Tuple[Tuple[Number, ...], ...], Mapping[Hashable, Union[None, Number, Tuple[Number, ...]]]]=…, name_prefix: str=…, token: str=…, lock: bool=…) -> DataArray → method DataArray.chunk(chunks: Union[Number, Tuple[Number, ...], Tuple[Tuple[Number, ...], ...], Mapping[Hashable, Union[None, Number, Tuple[Number, ...]]]]=…, name_prefix: str=…, token: str=…, lock: bool=…) -> DataArray
  • changed: method DataArray.integrate(dim: Union[Hashable, Sequence[Hashable]], datetime_unit: str=…) -> DataArray → method DataArray.integrate(coord: Union[Hashable, Sequence[Hashable]]=…, datetime_unit: str=…, *, dim: Union[Hashable, Sequence[Hashable]]=…) -> DataArray
  • changed: method DataArray.reorder_levels(dim_order: Mapping[Hashable, Sequence[int]]=…, inplace: bool=…, **dim_order_kwargs: Sequence[int]) -> DataArray → method DataArray.reorder_levels(dim_order: Mapping[Hashable, Sequence[int]]=…, **dim_order_kwargs: Sequence[int]) -> DataArray
  • changed: method DataArray.reset_coords(names: Union[Iterable[Hashable], Hashable, None]=…, drop: bool=…, inplace: bool=…) -> Union[None, DataArray, Dataset] → method DataArray.reset_coords(names: Union[Iterable[Hashable], Hashable, None]=…, drop: bool=…) -> Union[None, DataArray, Dataset]
  • changed: method DataArray.reset_index(dims_or_levels: Union[Hashable, Sequence[Hashable]], drop: bool=…, inplace: bool=…) -> Optional[DataArray] → method DataArray.reset_index(dims_or_levels: Union[Hashable, Sequence[Hashable]], drop: bool=…) -> Optional[DataArray]
  • changed: method DataArray.set_index(indexes: Mapping[Hashable, Union[Hashable, Sequence[Hashable]]]=…, append: bool=…, inplace: bool=…, **indexes_kwargs: Union[Hashable, Sequence[Hashable]]) -> Optional[DataArray] → method DataArray.set_index(indexes: Mapping[Hashable, Union[Hashable, Sequence[Hashable]]]=…, append: bool=…, **indexes_kwargs: Union[Hashable, Sequence[Hashable]]) -> Optional[DataArray]
  • changed: method DataArray.swap_dims(dims_dict: Mapping[Hashable, Hashable]) -> DataArray → method DataArray.swap_dims(dims_dict: Mapping[Hashable, Hashable]=…, **dims_kwargs) -> DataArray
  • changed: method DataArray.transpose(*dims: Hashable, transpose_coords: bool=…) -> DataArray → method DataArray.transpose(*dims: Hashable, transpose_coords: bool=…, missing_dims: str=…) -> DataArray
  • added: method DataArray.drop_isel(indexers=…, **indexers_kwargs)
  • changed: method Dataset.chunk(chunks: Union[None, Number, str, Mapping[Hashable, Union[None, Number, str, Tuple[Number, ...]]]]=…, name_prefix: str=…, token: str=…, lock: bool=…) -> Dataset → method Dataset.chunk(chunks: Union[Number, str, Mapping[Hashable, Union[None, Number, str, Tuple[Number, ...]]]]=…, name_prefix: str=…, token: str=…, lock: bool=…) -> Dataset
  • changed: method Dataset.integrate(coord, datetime_unit=…) → method Dataset.integrate(coord: Union[Hashable, Sequence[Hashable]], datetime_unit: str=…) -> Dataset
  • changed: method Dataset.merge(other: Union[CoercibleMapping, DataArray], inplace: bool=…, overwrite_vars: Union[Hashable, Iterable[Hashable]]=…, compat: str=…, join: str=…, fill_value: Any=…) -> Dataset → method Dataset.merge(other: Union[CoercibleMapping, DataArray], overwrite_vars: Union[Hashable, Iterable[Hashable]]=…, compat: str=…, join: str=…, fill_value: Any=…) -> Dataset
  • changed: method Dataset.reorder_levels(dim_order: Mapping[Hashable, Sequence[int]]=…, inplace: bool=…, **dim_order_kwargs: Sequence[int]) -> Dataset → method Dataset.reorder_levels(dim_order: Mapping[Hashable, Sequence[int]]=…, **dim_order_kwargs: Sequence[int]) -> Dataset
  • changed: method Dataset.reset_coords(names: Union[Hashable, Iterable[Hashable], None]=…, drop: bool=…, inplace: bool=…) -> Dataset → method Dataset.reset_coords(names: Union[Hashable, Iterable[Hashable], None]=…, drop: bool=…) -> Dataset
  • changed: method Dataset.reset_index(dims_or_levels: Union[Hashable, Sequence[Hashable]], drop: bool=…, inplace: bool=…) -> Dataset → method Dataset.reset_index(dims_or_levels: Union[Hashable, Sequence[Hashable]], drop: bool=…) -> Dataset
  • changed: method Dataset.set_coords(names: Union[Hashable, Iterable[Hashable]], inplace: bool=…) -> Dataset → method Dataset.set_coords(names: Union[Hashable, Iterable[Hashable]]) -> Dataset
  • changed: method Dataset.set_index(indexes: Mapping[Hashable, Union[Hashable, Sequence[Hashable]]]=…, append: bool=…, inplace: bool=…, **indexes_kwargs: Union[Hashable, Sequence[Hashable]]) -> Dataset → method Dataset.set_index(indexes: Mapping[Hashable, Union[Hashable, Sequence[Hashable]]]=…, append: bool=…, **indexes_kwargs: Union[Hashable, Sequence[Hashable]]) -> Dataset
  • changed: method Dataset.swap_dims(dims_dict: Mapping[Hashable, Hashable], inplace: bool=…) -> Dataset → method Dataset.swap_dims(dims_dict: Mapping[Hashable, Hashable]=…, **dims_kwargs) -> Dataset
  • changed: method Dataset.update(other: CoercibleMapping, inplace: bool=…) -> Dataset → method Dataset.update(other: CoercibleMapping) -> Dataset
  • added: method Dataset.drop_isel(indexers=…, **indexers_kwargs)
  • changed: function get_neg_infinity(dtype) → function get_neg_infinity(dtype, min_for_int=…)
  • changed: function get_pos_infinity(dtype) → function get_pos_infinity(dtype, max_for_int=…)
  • changed: function astype(data, **kwargs) → function astype(data, dtype, **kwargs)
  • added: variable DISPLAY_MAX_ROWS
  • added: method DataArrayCoarsen.reduce(func: Callable, **kwargs)
  • added: method DatasetCoarsen.reduce(func: Callable, **kwargs)
  • changed: constructor OrderedSet(values: AbstractSet[T]=…) → constructor OrderedSet(values: Iterable[T]=…)
  • changed: function infix_dims(dims_supplied: Collection, dims_all: Collection) -> Iterator → function infix_dims(dims_supplied: Collection, dims_all: Collection, missing_dims: str=…) -> Iterator
  • changed: method OrderedSet.update(values: AbstractSet[T]) -> None → method OrderedSet.update(values: Iterable[T]) -> None
  • added: class HybridMappingProxy(Mapping[K, V])
  • added: constructor HybridMappingProxy(keys: Collection[K], mapping: Mapping[K, V])
  • added: function drop_missing_dims(supplied_dims: Collection, dims: Collection, missing_dims: str) -> Collection
  • added: function maybe_coerce_to_str(index, original_coords)
  • added: function read_magic_number(filename_or_obj, count=…)
  • changed: method Variable.astype(dtype, casting=…, copy=…, keep_attrs=…) → method Variable.astype(dtype, *, order=…, casting=…, subok=…, copy=…, keep_attrs=…) -> VariableType
  • changed: class DataArrayWeighted(Weighted) → class DataArrayWeighted(Weighted['DataArray'])
  • changed: class DatasetWeighted(Weighted) → class DatasetWeighted(Weighted['Dataset'])
  • changed: class Weighted → class Weighted(Generic[T_DataWithCoords])
  • changed: constructor Weighted(obj: DataArray, weights: DataArray) -> None | (obj: Dataset, weights: DataArray) -> None → constructor Weighted(obj: T_DataWithCoords, weights: DataArray)
  • changed: method Weighted.mean(dim: Optional[Union[Hashable, Iterable[Hashable]]]=…, skipna: Optional[bool]=…, keep_attrs: Optional[bool]=…) -> Union[DataArray, Dataset] → method Weighted.mean(dim: Optional[Union[Hashable, Iterable[Hashable]]]=…, skipna: Optional[bool]=…, keep_attrs: Optional[bool]=…) -> T_DataWithCoords
  • changed: method Weighted.sum(dim: Optional[Union[Hashable, Iterable[Hashable]]]=…, skipna: Optional[bool]=…, keep_attrs: Optional[bool]=…) -> Union[DataArray, Dataset] → method Weighted.sum(dim: Optional[Union[Hashable, Iterable[Hashable]]]=…, skipna: Optional[bool]=…, keep_attrs: Optional[bool]=…) -> T_DataWithCoords
  • changed: method Weighted.sum_of_weights(dim: Optional[Union[Hashable, Iterable[Hashable]]]=…, keep_attrs: Optional[bool]=…) -> Union[DataArray, Dataset] → method Weighted.sum_of_weights(dim: Optional[Union[Hashable, Iterable[Hashable]]]=…, keep_attrs: Optional[bool]=…) -> T_DataWithCoords
  • added: variable T_DataWithCoords
  • changed: function scatter(ds, x, y, ax, **kwargs) → function scatter(ds, x, y, ax, u, v, **kwargs)
  • added: function quiver(ds, x, y, ax, u, v, **kwargs)
  • added: method FacetGrid.add_quiverkey(u, v, **kwargs)