Skip to content

Conversation

@tomwhite
Copy link
Contributor

@tomwhite tomwhite commented Oct 3, 2023

This uses duck_array_ops in some more places that were found to cause failures in cubed-dev/cubed-xarray#8

  • Closes #xxxx
  • Tests added
  • User visible changes (including notable bug fixes) are documented in whats-new.rst
  • New functions/methods are listed in api.rst

@github-actions github-actions bot added the topic-arrays related to flexible array support label Oct 3, 2023
Copy link
Member

@TomNicholas TomNicholas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for these additions @tomwhite ! Obviously I missed these ones.

Don't forget to add a note in whatsnew!


import xarray as xr
from xarray import DataArray, Dataset, set_options
from xarray.core import duck_array_ops
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This effectively changes the test from only testing public xarray API to now relying on some internals too, which is not ideal from a code separation perspective.

In practice I think this is probably fine here, and I know you're doing it to allow Cubed arrays to go through the modified tests, but just something to bear in mind.

Copy link
Contributor

@Illviljan Illviljan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't it better to get used to using reshape directly?


if not isinstance(values, CFTimeIndex):
values_as_cftimeindex = CFTimeIndex(values.ravel())
values_as_cftimeindex = CFTimeIndex(duck_array_ops.ravel(values))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
values_as_cftimeindex = CFTimeIndex(duck_array_ops.ravel(values))
values_as_cftimeindex = CFTimeIndex(duck_array_ops.reshape(values, (-1,)))

Can't we just get used to using reshape instead?

access requested datetime component
"""
values_as_series = pd.Series(values.ravel(), copy=False)
values_as_series = pd.Series(duck_array_ops.ravel(values), copy=False)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
values_as_series = pd.Series(duck_array_ops.ravel(values), copy=False)
values_as_series = pd.Series(duck_array_ops.reshape(values, (-1,)), copy=False)


if is_np_datetime_like(values.dtype):
values_as_series = pd.Series(values.ravel(), copy=False)
values_as_series = pd.Series(duck_array_ops.ravel(values), copy=False)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
values_as_series = pd.Series(duck_array_ops.ravel(values), copy=False)
values_as_series = pd.Series(duck_array_ops.reshape(values, (-1,)), copy=False)

method = getattr(values_as_series.dt, name)
else:
values_as_cftimeindex = CFTimeIndex(values.ravel())
values_as_cftimeindex = CFTimeIndex(duck_array_ops.ravel(values))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
values_as_cftimeindex = CFTimeIndex(duck_array_ops.ravel(values))
values_as_cftimeindex = CFTimeIndex(duck_array_ops.reshape(values, (-1,)))

from xarray.coding.cftimeindex import CFTimeIndex

values_as_cftimeindex = CFTimeIndex(values.ravel())
values_as_cftimeindex = CFTimeIndex(duck_array_ops.ravel(values))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
values_as_cftimeindex = CFTimeIndex(duck_array_ops.ravel(values))
values_as_cftimeindex = CFTimeIndex(duck_array_ops.reshape(values, (-1,)))

apply string formatting
"""
values_as_series = pd.Series(values.ravel(), copy=False)
values_as_series = pd.Series(duck_array_ops.ravel(values), copy=False)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
values_as_series = pd.Series(duck_array_ops.ravel(values), copy=False)
values_as_series = pd.Series(duck_array_ops.reshape(values, (-1,)), copy=False)

chunks = dict(zip(array.dims, array.chunks))
dask_coord = chunkmanager.from_array(array[dim].data, chunks=chunks[dim])
res = indx.copy(data=dask_coord[indx.data.ravel()].reshape(indx.shape))
data = dask_coord[duck_array_ops.ravel(indx.data)]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
data = dask_coord[duck_array_ops.ravel(indx.data)]
data = dask_coord[duck_array_ops.reshape(indx.data, (-1,))]

Comment on lines +340 to +343
def ravel(array):
return reshape(array, (-1,))


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def ravel(array):
return reshape(array, (-1,))

@dcherian
Copy link
Contributor

dcherian commented Oct 5, 2023

Thanks @Illviljan I think using ravel is a bit more readable and newcomer friendly.

@dcherian dcherian merged commit bd40c20 into pydata:main Oct 5, 2023
dcherian added a commit to dcherian/xarray that referenced this pull request Oct 14, 2023
* upstream/main: (46 commits)
  xfail flaky test (pydata#8299)
  Most of mypy 1.6.0 passing (pydata#8296)
  Rename `reset_encoding` to `drop_encoding` (pydata#8287)
  Enable `.rolling_exp` to work on dask arrays (pydata#8284)
  Fix `GroupBy` import (pydata#8286)
  Ask bug reporters to confirm they're using a recent version of xarray (pydata#8283)
  Add pyright type checker (pydata#8279)
  Improved typing of align & broadcast (pydata#8234)
  Update ci-additional.yaml (pydata#8280)
  Fix time encoding regression (pydata#8272)
  Allow a function in `.sortby` method (pydata#8273)
  make more args kw only (except 'dim') (pydata#6403)
  Use duck array ops in more places (pydata#8267)
  Don't raise rename warning if it is a no operation (pydata#8266)
  Mandate kwargs on `to_zarr` (pydata#8257)
  copy  the `dtypes` module to the `namedarray` package. (pydata#8250)
  Add xarray-regrid to ecosystem.rst (pydata#8270)
  Use strict type hinting for namedarray (pydata#8241)
  Update type annotation for center argument of dataaray_plot methods (pydata#8261)
  [pre-commit.ci] pre-commit autoupdate (pydata#8262)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

topic-arrays related to flexible array support

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants