-
-
Notifications
You must be signed in to change notification settings - Fork 348
Add async oindex and vindex methods to AsyncArray #3083
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
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #3083 +/- ##
==========================================
- Coverage 59.65% 59.60% -0.06%
==========================================
Files 78 78
Lines 8690 8741 +51
==========================================
+ Hits 5184 5210 +26
- Misses 3506 3531 +25
🚀 New features to boost your workflow:
|
@dcherian suggested making the sync oindex and vindex getitem methods call the new async versions. EDIT: I think this is already the case? |
if is_coordinate_selection(new_selection, self.array.shape): | ||
return await self.array.get_coordinate_selection(new_selection, fields=fields) | ||
elif is_mask_selection(new_selection, self.array.shape): | ||
return await self.array.get_mask_selection(new_selection, fields=fields) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I had to add .get_mask_selection
to AsyncArray
to cover this codepath. But I only realised I needed to thanks to mypy. This means that this codepath is
- not needed for me right now (I think)
- definitely not covered by the property tests
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes I haven't added mask indexing to the property test suite
@property | ||
def oindex(self) -> AsyncOIndex[T_ArrayMetadata]: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I chose this API to try to follow this pattern:
Array.__getitem__
(exists)Array.oindex.__getitem__
(exists)Array.vindex.__getitem__
(exists)AsyncArray.getitem
(exists)AsyncArray.oindex.getitem
(new)AsyncArray.vindex.getitem
(new)
because python doesn't let you make an async version of the __getitem__
magic method.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we update the sync versions to use sync(self._async_array.oindex.getitem)
instead of going to _get_selection
directly? That will get us some test coverage
tests/test_properties.py
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should I also be adding tests to test_indexing.py
?
@@ -1425,6 +1427,56 @@ async def getitem( | |||
) | |||
return await self._get_selection(indexer, prototype=prototype) | |||
|
|||
async def get_orthogonal_selection( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
get_basic_selection
also doesn't exist on AsyncArray
- should I add that too?
@pytest.mark.asyncio | ||
@given(data=st.data()) | ||
@pytest.mark.filterwarnings("ignore::zarr.core.dtype.common.UnstableSpecificationWarning") | ||
async def test_oindex_async(data: st.DataObject) -> None: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we just merge these with the sync versions of these tests. we can test both async and sync within one async test function
Array
has.oindex
and.vindex
methods, butAsyncArray
has no equivalent. This PR adds them. It only adds the get methods, not the set methods, which I thought could be deferred to a follow-up PR.I want it for pydata/xarray#10327 (comment)
TODO:
docs/user-guide/*.rst
changes/