8000 Support for __array_function__ implementers (sparse arrays) [WIP] by nvictus · Pull Request #3117 · pydata/xarray · GitHub
[go: up one dir, main page]

Skip to content

Support for __array_function__ implementers (sparse arrays) [WIP] #3117

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

Merged
merged 31 commits into from
Aug 5, 2019
Merged
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
5b5e245
Support for __array_function__ implementers
nvictus Jul 13, 2019
ad403fc
Pep8
nvictus Jul 13, 2019
df618ad
Consistent naming
nvictus Jul 14, 2019
1b62f6d
Check for NEP18 enabled and nep18 non-numpy arrays
nvictus Jul 14, 2019
21c0a21
Replace .values with .data
nvictus Jul 14, 2019
d62820b
Add initial test for nep18
nvictus Jul 14, 2019
0493263
Fix linting issues
nvictus Jul 14, 2019
ad42627
Add parameterized tests
nvictus Jul 14, 2019
ec01625
Internal clean-up of isnull() to avoid relying on pandas
shoyer Jul 15, 2019
fd05566
Merge branch 'master' into isnull-duck
shoyer Jul 15, 2019
5d8edfd
Add sparse to ci requirements
nvictus Jul 17, 2019
7c7a9f2
Moar tests
nvictus Jul 17, 2019
a231571
Two more patches for __array_function__ duck-arrays
nvictus Jul 17, 2019
4009379
Don't use coords attribute from duck-arrays that aren't derived from …
nvictus Jul 17, 2019
2c3b183
Improve checking for coords, and autopep8
nvictus Jul 17, 2019
23633b4
Skip tests if NEP-18 envvar is not set
nvictus Jul 17, 2019
38c4717
flake8
nvictus Jul 17, 2019
e9d9c41
Update xarray/core/dataarray.py
nvictus Jul 18, 2019
3f1eec2
Fix coords parsing
nvictus Jul 19, 2019
56864c3
More tests
nvictus Jul 19, 2019
1876892
Add align tests
nvictus Jul 19, 2019
ef51976
Replace nep18 tests with more extensive tests on pydata/sparse
nvictus Aug 2, 2019
86ee35c
Merge remote-tracking branch 'shoyer/isnull-duck' into sparse_xarrays
nvictus Aug 2, 2019
3afe7e2
Add xfails for missing np.result_type (fixed by pydata/sparse/pull/261)
nvictus Aug 2, 2019
33a07e7
Fix xpasses
nvictus Aug 2, 2019
5a817a8
Revert isnull/notnull
nvictus Aug 4, 2019
5675819
Fix as_like_arrays by coercing dense arrays to COO if any sparse
nvictus Aug 4, 2019
96e1346
Make Variable.load a no-op for non-dask duck arrays
nvictus Aug 5, 2019
563148c
Merge branch 'master' into sparse_xarrays
nvictus Aug 5, 2019
66c2f82
Add additional method tests
nvictus Aug 5, 2019
b353a0b
Fix utils.as_scalar to handle duck arrays with ndim>0
nvictus Aug 5, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix xpasses
  • Loading branch information
nvictus committed Aug 2, 2019
commit 33a07e7f3ccb49e500892adc4715fd062bc3c0d9
67 changes: 32 additions & 35 deletions xarray/tests/test_sparse.py
10000
Original file line number Diff line number Diff line change
Expand Up @@ -86,24 +86,21 @@ def test_variable_property(prop):
@pytest.mark.parametrize("func,sparse_output", [
(do('all'), False),
(do('any'), False),
(do('astype', dtype=int), True),
(do('clip', min=0, max=1), True),
(do('coarsen', windows={'x': 2}, func=np.sum), True),
(do('conj'), True),
(do('copy'), True),
(do('count'), False),
param(do('fillna', 0), True,
marks=xfail(reason='Missing implementation for np.result_type')),
(do('get_axis_num', dim='x'), False),
(do('isel', x=slice(2, 4)), True),
(do('isnull'), True),
param(do('prod'), False,
marks=xfail(reason='Missing implementation for np.result_type')),
(do('mean'), False),
(do('notnull'), True),
(do('roll'), True),
(do('round'), True),
(do('set_dims', dims=('x', 'y', 'z')), True),
(do('stack', dimensions={'flat': ('x', 'y')}), True),
param(do('sum'), False,
marks=xfail(reason='Missing implementation for np.result_type')),
(do('to_base_variable'), True),
(do('transpose'), True),
(do('unstack', dimensions={'x': {'x1': 5, 'x2': 2}}), True),
Expand All @@ -113,8 +110,6 @@ def test_variable_property(prop):
marks=xfail(reason='Missing implementation for np.argmax')),
param(do('argsort'), True,
marks=xfail(reason="'COO' object has no attribute 'argsort'")),
param(do('astype', dtype=int), True,
marks=xfail),
param(do('broadcast_equals', make_xrvar({'x': 10, 'y': 5})), True,
marks=xfail(reason='mixed sparse-dense operation')),
param(do('chunk', chunks=(5, 5)), True,
Expand All @@ -132,6 +127,8 @@ def test_variable_property(prop):
marks=xfail(reason='Missing implementation for np.nancumsum')),
param(do('equals', make_xrvar({'x': 10, 'y': 5})), True,
marks=xfail(reason='mixed sparse-dense operation')),
param(do('fillna', 0), True,
marks=xfail(reason='Missing implementation for np.result_type')),
param(do('identical', other=make_xrvar({'x': 10, 'y': 5})), True,
marks=xfail(reason='mixed sparse-dense operation')),
param(do('item', (1, 1)), False,
Expand All @@ -140,18 +137,16 @@ def test_variable_property(prop):
marks=xfail(reason='Coercion to dense')),
param(do('max'), False,
marks=xfail(reason='Coercion to dense')),
param(do('mean'), False,
marks=xfail(reason='Coercion to dense')),
param(do('median'), False,
marks=xfail(reason='Coercion to dense')),
param(do('min'), False,
marks=xfail(reason='Coercion to dense')),
param(do('no_conflicts', other=make_xrvar({'x': 10, 'y': 5})), True,
marks=xfail(reason='mixed sparse-dense operation')),
param(do('notnull'), True,
marks=xfail(reason='Coercion to dense')),
param(do('pad_with_fill_value', pad_widths={'x': (1, 1)}, fill_value=5), True, # noqa
marks=xfail(reason='Missing implementation for np.pad')),
param(do('prod'), False,
marks=xfail(reason='Missing implementation for np.result_type')),
param(do('quantile', q=0.5), True,
marks=xfail(reason='Missing implementation for np.nanpercentile')),
param(do('rank', dim='x'), False,
Expand All @@ -164,6 +159,8 @@ def test_variable_property(prop):
marks=xfail(reason='mixed sparse-dense operation')),
param(do('std'), False,
marks=xfail(reason='Coercion to dense')),
param(do('sum'), False,
marks=xfail(reason='Missing implementation for np.result_type')),
param(do('var'), False,
marks=xfail(reason='Coercion to dense')),
param(do('to_dict'), False,
Expand Down Expand Up @@ -294,8 +291,6 @@ def test_dataarray_property(prop):
(do('diff', 'x'), True),
(do('drop', 'x'), True),
(do('expand_dims', {'z': 2}, axis=2), True),
param(do('fillna', 0), True,
marks=xfail(reason='Missing implementation for np.result_type')),
(do('get_axis_num', 'x'), False),
(do('get_index', 'x'), False),
# (do('groupby'), False),
Expand All @@ -305,18 +300,13 @@ def test_dataarray_property(prop):
(do('isel', {'x': slice(0, 3), 'y': slice(2, 4)}), True),
# (do('isel_points'), False),
(do('isnull'), True),
param(do('pipe', np.sum, axis=1), True,
marks=xfail(reason='Missing implementation for np.result_type')),
param(do('prod'), False,
marks=xfail(reason='Missing implementation for np.result_type')),
(do('mean'), False),
(do('reindex', {'x': [1, 2, 3]}), True),
(do('rename', 'foo'), True),
(do('reorder_levels'), True),
# (do('resample'), False),
(do('reset_coords', drop=True), True),
(do('reset_index', 'x'), True),
param(do('roll', x=2), True,
marks=xfail(reason='Missing implementation for np.result_type')),
# (do('rolling'), False),
# (do('rolling_exp'), False),
(do('round'), True),
Expand All @@ -330,6 +320,7 @@ def test_dataarray_property(prop):
marks=xfail(reason='Missing implementation for np.result_type')),
# (do('swap_dims'), True),
(do('transpose'), True),

param(do('argmax'), True,
marks=xfail(reason='Missing implementation for np.argmax')),
param(do('argmin'), True,
Expand All @@ -345,7 +336,7 @@ def test_dataarray_property(prop):
param(do('combine_first', make_xrarray({'x': 10, 'y': 5})), True,
marks=xfail(reason='mixed sparse-dense operation')),
param(do('compute'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='compute Coercion to dense')),
param(do('conjugate'), False,
marks=xfail(reason="'COO' object has no attribute 'conjugate'")),
param(do('cumprod'), True,
Expand All @@ -357,54 +348,60 @@ def test_dataarray_property(prop):
param(do('dot', make_xrarray({'x': 10, 'y': 5})), True,
marks=xfail(reason='Missing implementation for np.einsum')),
param(do('dropna', 'x'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='dropna Coercion to dense')),
param(do('equals', make_xrarray({'x': 10, 'y': 5})), False,
marks=xfail(reason='mixed sparse-dense operation')),
param(do('ffill', 'x'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='ffill Coercion to dense')),
param(do('fillna', 0), True,
marks=xfail(reason='Missing implementation for np.result_type')),
param(do('interp', coords={'x': np.arange(10) + 0.5}), True,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='interp Coercion to dense')),
param(do('interp_like',
make_xrarray({'x': 10, 'y': 5},
coords={'x': np.arange(10) + 0.5,
'y': np.arange(5) + 0.5})), True,
marks=xfail(reason='Indexing COO with more than one iterable index')), # noqa
param(do('interpolate_na', 'x'), True,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='interpolate_na Coercion to dense')),
param(do('isin', [1, 2, 3]), False,
marks=xfail(reason='Missing implementation for np.isin')),
param(do('item', (1, 1)), False,
marks=xfail(reason="'COO' object has no attribute 'item'")),
param(do('load'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='load Coercion to dense')),
param(do('max'), False,
marks=xfail(reason='Coercion to dense')),
param(do('mean'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='max Coercion to dense')),
param(do('median'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='median Coercion to dense')),
param(do('min'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='min Coercion to dense')),
param(do('notnull'), False,
marks=xfail(reason="'COO' object has no attribute 'notnull'")),
param(do('persist'), False,
marks=xfail(reason='mixed sparse-dense operation')),
param(do('pipe', np.sum, axis=1), True,
marks=xfail(reason='Missing implementation for np.result_type')),
param(do('prod'), False,
marks=xfail(reason='Missing implementation for np.result_type')),
param(do('quantile', q=0.5), False,
marks=xfail(reason='Missing implementation for np.nanpercentile')),
param(do('rank', 'x'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='rank Coercion to dense')),
param(do('reduce', np.sum, dim='x'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='reduce Coercion to dense')),
param(do('reindex_like',
make_xrarray({'x': 10, 'y': 5},
coords={'x': np.arange(10) + 0.5,
'y': np.arange(5) + 0.5})),
True,
marks=xfail(reason='Indexing COO with more than one iterable index')), # noqa
param(do('roll', x=2), True,
marks=xfail(reason='Missing implementation for np.result_type')),
param(do('std'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='std Coercion to dense')),
param(do('var'), False,
marks=xfail(reason='Coercion to dense')),
marks=xfail(reason='var Coercion to dense')),
param(do('where', make_xrarray({'x': 10, 'y': 5}) > 0.5), False,
marks=xfail(reason='Conversion of dense to sparse when using sparse mask')), # noqa
])
Expand Down
0