html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/3232#issuecomment-1190589331,https://api.github.com/repos/pydata/xarray/issues/3232,1190589331,IC_kwDOAMm_X85G9vOT,3019665,2022-07-20T18:01:56Z,2022-07-20T18:01:56Z,NONE,"While it is true to use PyTorch Tensors directly, one would need the Array API implemented in PyTorch. One could use them indirectly by converting them zero-copy to CuPy arrays, which do have Array API support","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-1013174167,https://api.github.com/repos/pydata/xarray/issues/3232,1013174167,IC_kwDOAMm_X848Y8-X,8529,2022-01-14T14:32:49Z,2022-01-14T14:32:49Z,NONE,@keewis @shoyer now that numpy is merged in https://github.com/numpy/numpy/pull/18585 `__array_namespace__` support and pytorch is in the process of add `__array_namespace__` support https://github.com/pytorch/pytorch/issues/58743 is it worth exploring adding support through the `__array_namespace__` API?,"{""total_count"": 2, ""+1"": 2, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-851494928,https://api.github.com/repos/pydata/xarray/issues/3232,851494928,MDEyOklzc3VlQ29tbWVudDg1MTQ5NDkyOA==,35001974,2021-05-31T13:32:29Z,2021-05-31T13:32:29Z,NONE,Thanks for the prompt response. Would love to contribute but I have to climb the learning curve first.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-851118675,https://api.github.com/repos/pydata/xarray/issues/3232,851118675,MDEyOklzc3VlQ29tbWVudDg1MTExODY3NQ==,35001974,2021-05-31T02:09:07Z,2021-05-31T02:09:07Z,NONE,@Duane321 or @keewis do you have the full code example for making this work? I'm a novice on numpy ufuncs and am trying to use get gradients while keeping my xarray coords.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-773489462,https://api.github.com/repos/pydata/xarray/issues/3232,773489462,MDEyOklzc3VlQ29tbWVudDc3MzQ4OTQ2Mg==,19956442,2021-02-04T17:46:15Z,2021-02-04T17:46:15Z,NONE,"Thank again @keewis , that was indeed the case. It was due to my older PyTorch version (1.6.0)","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-770128996,https://api.github.com/repos/pydata/xarray/issues/3232,770128996,MDEyOklzc3VlQ29tbWVudDc3MDEyODk5Ng==,19956442,2021-01-30T01:14:03Z,2021-01-30T01:14:03Z,NONE,"Thank you very much @keewis - your code did what I was trying to do. big help! One thing I noticed with the [missing features](https://xarray.pydata.org/en/stable/duckarrays.html) is the following : ![image](https://user-images.githubusercontent.com/19956442/106342256-1771ac80-6255-11eb-8b25-4f61dbb43132.png) This seems like a bit of a problem. Index-based selection is a primary reason to use xarray's. If that changes `.data` to a numpy array, then autodiff-ing through selection seems not possible. Is there another approach I'm not seeing?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-768529007,https://api.github.com/repos/pydata/xarray/issues/3232,768529007,MDEyOklzc3VlQ29tbWVudDc2ODUyOTAwNw==,19956442,2021-01-27T19:39:32Z,2021-01-29T22:37:28Z,NONE,"I've made some mild progress, but it raises a few questions. I've defined this simple Tensor subclass which meets the duck array criteria: ``` class XArrayTensor(torch.Tensor): def __new__(cls, data=None, requires_grad=False): if data is None: data = torch.Tensor() return torch.Tensor._make_subclass(cls, data, requires_grad) def __init__(self, data=None, dims: Tuple[str] = None): self.dims = dims def __array_function__(self, func, types, args, kwargs): if func not in IMPLEMENTED_FUNCTIONS or not (not all(issubclass(t, torch.Tensor) for t in types)): return NotImplemented return IMPLEMENTED_FUNCTIONS[func](*args, **kwargs) def __array_ufunc__(self, func, types, args, kwargs): if func not in IMPLEMENTED_FUNCTIONS or not (not all(issubclass(t, torch.Tensor) for t in types)): return NotImplementedError return IMPLEMENTED_FUNCTIONS[func](*args, **kwargs) ``` where `IMPLEMENTED_FUNCTIONS` holds a mapping from numpy functions to API compatible tensor operators (similar in style to [this](https://blog.christianperone.com/2019/07/numpy-dispatcher-when-numpy-becomes-a-protocol-for-an-ecosystem/)) I added a `torch_array_type` to `pycompat.py`, which allows DataArray's `.data` attribute to persist as an `XArrayTensor`: ``` xr_tsr = XArrayTensor(torch.rand(3, 2)) data_array = xr.DataArray( xr_tsr, coords=dict(a=[""a1"", ""a2"", ""a3""], b=[""b1"", ""b1""]), dims=[""a"", ""b""], name=""dummy"", attrs={""grad"": xr_tsr.grad}, ) print(type(data_array.data)) --> yields 'xarray_tensor.XArrayTensor' ``` The issue I'm running into is when I run an operation like `np.mean(data_array).` The operation gets dispatched to functions within `duck_array_ops.py`, which are the things I'd like to override. Also, I'd like to confirm something. If the API matching were complete, would the following be possible? ``` some_sum = data_array.sum() some_sum.backward() data_array.grad --> provides the gradient ``` I'm starting to suspect not because that would involve data_array being _both_ `DataArray` and a `Torch.Tensor` object. It seems what I'm in fact enabling is that `DataArray.data` is a `Torch.Tensor`. ","{""total_count"": 2, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 2, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-769656592,https://api.github.com/repos/pydata/xarray/issues/3232,769656592,MDEyOklzc3VlQ29tbWVudDc2OTY1NjU5Mg==,98330,2021-01-29T08:26:23Z,2021-01-29T08:26:23Z,NONE,"> I'm starting to suspect not because that would involve data_array being _both_ `DataArray` and a `Torch.Tensor` object. It seems what I'm in fact enabling is that `DataArray.data` is a `Torch.Tensor`. `some_sum` is still a `DataArray`, which doesn't have a `backward` method. You could use ``` data_array = xr.DataArray( xr_tsr, coords=dict(a=[""a1"", ""a2"", ""a3""], b=[""b1"", ""b1""]), dims=[""a"", ""b""], name=""dummy"", attrs={""grad"": xr_tsr.grad, ""backward"": xr_tsr.backward}, ) ``` and your example should work (I assume you meant `.grad` not `.grid`).","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-766669784,https://api.github.com/repos/pydata/xarray/issues/3232,766669784,MDEyOklzc3VlQ29tbWVudDc2NjY2OTc4NA==,98330,2021-01-25T09:12:51Z,2021-01-25T09:12:51Z,NONE,"> Does this mean I shouldn't fill out `__array_function__` in my subclass? Or is this just a forward looking expectation? No, adding it should be perfectly fine. The dispatch mechanism itself isn't going anywhere, it's part of numpy and it works. Whether or not `torch.Tensor` itself has an `__array_function__` method isn't too relevant for your subclass.","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-766466486,https://api.github.com/repos/pydata/xarray/issues/3232,766466486,MDEyOklzc3VlQ29tbWVudDc2NjQ2NjQ4Ng==,19956442,2021-01-25T00:13:53Z,2021-01-25T00:14:11Z,NONE,"> Note that your the main work in adding __array_function__ is not the dispatch mechanism, but mapping to 100% compatible APIs. That job should have gotten a lot easier now compared to 9 months ago. PyTorch now has a completely matching fft module, and a ~70% complete linalg module in master. And functions in the main namespace have gained dtype keywords, integer-to-float promotion, and other NumPy compat changes. So it should be feasible to write your custom subclass. Glad to hear there's progress I can lean on. I'll come back with a minimum version that does the API matching for maybe 1-2 methods, just to get feedback on theoverall structure. If it works, I can brute through a lot of the rest 🤞 > Looks like you need to patch that internally just a bit, probably adding pytorch to NON_NUMPY_SUPPORTED_ARRAY_TYPES. Thank you, I hesitate to change xarray code but not anymore. > Note that I do not expect anymore that we'll be adding __array_function__ to torch.Tensor, and certainly not any time soon. My current expectation is that the ""get the correct namespace from an array/tensor object directly"" from https://numpy.org/neps/nep-0037-array-module.html#how-to-use-get-array-module and https://data-apis.github.io/array-api/latest/ will turn out to be a much better design long-term. Does this mean I shouldn't fill out `__array_function__` in my subclass? Or is this just a forward looking expectation? ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-766464095,https://api.github.com/repos/pydata/xarray/issues/3232,766464095,MDEyOklzc3VlQ29tbWVudDc2NjQ2NDA5NQ==,19956442,2021-01-25T00:00:46Z,2021-01-25T00:00:46Z,NONE,"> While it would be fantastic to have gpu-enabled auto-diff-able xarrays / DataArrays, an interesting development worth looking into are the named tensor in https://pytorch.org/docs/stable/named_tensor.html. This appears to be an attempt to bridge the gap from the that they are making pytorch tensors increasingly dataarray like. I would not be surprised if within the next few iterations they add indexes to the tensors closing the gap even further. I really hope so. I explored named_tensors at first, but the lack an index for each dimension was a non-starter. So, I'll keep an eye out.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-766090834,https://api.github.com/repos/pydata/xarray/issues/3232,766090834,MDEyOklzc3VlQ29tbWVudDc2NjA5MDgzNA==,923438,2021-01-23T14:50:04Z,2021-01-23T14:50:04Z,NONE,"@Duane321 While it would be fantastic to have gpu-enabled auto-diff-able xarrays / DataArrays, an interesting development worth looking into are the named tensor in https://pytorch.org/docs/stable/named_tensor.html. This appears to be an attempt to bridge the gap from the that they are making pytorch tensors increasingly dataarray like. I would not be surprised if within the next few iterations they add indexes to the tensors closing the gap even further.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-765906982,https://api.github.com/repos/pydata/xarray/issues/3232,765906982,MDEyOklzc3VlQ29tbWVudDc2NTkwNjk4Mg==,98330,2021-01-23T11:12:59Z,2021-01-23T11:12:59Z,NONE,"Note that your the main work in adding `__array_function__` is not the dispatch mechanism, but mapping to 100% compatible APIs. That job should have gotten a lot easier now compared to 9 months ago. PyTorch now has a completely matching `fft` module, and a ~70% complete `linalg` module in master. And functions in the main namespace have gained dtype keywords, integer-to-float promotion, and other NumPy compat changes. So it should be feasible to write your custom subclass.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-765905229,https://api.github.com/repos/pydata/xarray/issues/3232,765905229,MDEyOklzc3VlQ29tbWVudDc2NTkwNTIyOQ==,98330,2021-01-23T10:57:48Z,2021-01-23T11:09:52Z,NONE,"> Create a custom subclass of PyTorch's Tensors which meets the [duck array](http://xarray.pydata.org/en/latest/internals.html) required methods and attributes. Since this isn't officially supported, looks like I could run into issues getting this subclass to persist through tensor operations. If you use PyTorch 1.7.1 or later, then Tensor subclasses are much better preserved through pytorch functions and operations like slicing. So a custom subclass, adding the attributes and methods Xarray requires for a duck array should be feasible. > `data = as_compatible_data(data)` Looks like you need to patch that internally just a bit, probably adding pytorch to `NON_NUMPY_SUPPORTED_ARRAY_TYPES`. Note that I do not expect anymore that we'll be adding `__array_function__` to `torch.Tensor`, and certainly not any time soon. My current expectation is that the ""get the correct namespace from an array/tensor object directly"" from https://numpy.org/neps/nep-0037-array-module.html#how-to-use-get-array-module and https://data-apis.github.io/array-api/latest/ will turn out to be a much better design long-term. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-765738462,https://api.github.com/repos/pydata/xarray/issues/3232,765738462,MDEyOklzc3VlQ29tbWVudDc2NTczODQ2Mg==,19956442,2021-01-22T23:16:49Z,2021-01-22T23:16:49Z,NONE,"> No one is working on __array_function__ at the moment. Implementing it has some backwards compat concerns as well, because people may be relying on np.somefunc(some_torch_tensor) to be coerced to ndarray. It's not a small project, but implementing a prototype with a few function in the torch namespace that are not exactly matching the NumPy API would be a useful way to start pushing this forward. @rgommers Do you expect this solution to work with a PyTorch Tensor custom subclass? Or is monkey patching necessary?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-765710268,https://api.github.com/repos/pydata/xarray/issues/3232,765710268,MDEyOklzc3VlQ29tbWVudDc2NTcxMDI2OA==,19956442,2021-01-22T22:04:20Z,2021-01-22T22:14:50Z,NONE,"I'd like to cast my vote in favor of getting this functionality in. It would be nice to autodiff through xarray operations. From reading this and related threads, I'm trying to determine a gameplan to make this happen. I'm not familiar with xarray code, so any guidance would be much appreciated. This is what I'm thinking : 1) Create a custom subclass of PyTorch's Tensors which meets the [duck array](http://xarray.pydata.org/en/latest/internals.html) required methods and attributes. Since this isn't officially supported, looks like I could run into issues getting this subclass to persist through tensor operations. 2) Implement the [\_\_array_function\_\_ protocol](https://blog.christianperone.com/2019/07/numpy-dispatcher-when-numpy-becomes-a-protocol-for-an-ecosystem/) for PyTorch similar to how is demo-ed [here](https://blog.christianperone.com/2019/07/numpy-dispatcher-when-numpy-becomes-a-protocol-for-an-ecosystem/). 3) Pass this custom class into data array constructors and hope the `.grad` attribute works. My first attempts at this haven't been successful. Whatever custom class I make and past to the `DataArray` constructor gets converted to something xarray can handle with this line : https://github.com/pydata/xarray/blob/bc35548d96caaec225be9a26afbbaa94069c9494/xarray/core/dataarray.py#L408 Any suggestions would be appreciated. I'm hoping to figure out the shortest path to a working prototype.","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-656372249,https://api.github.com/repos/pydata/xarray/issues/3232,656372249,MDEyOklzc3VlQ29tbWVudDY1NjM3MjI0OQ==,923438,2020-07-09T22:01:25Z,2020-07-09T22:02:30Z,NONE,"> @andersy005 I'm about to start working actively on `cupy` support in xarray. Would be great to get some of your input. > > Cupy requests that instead of calling `__array__` you instead call their `.get` method for explicit conversion to numpy. So we need to add a little compatibility code for this. Do you have a sense of the overhead / effort of making jax vs cupy as the gpu backend for xarrays ? One advantage of jax would be built in auto-diff functionality that would enable xarray to be plugged directly into deep learning pipelines. Downside is that it is not as numpy compatible as cupy. How much of a non-starter would this be ?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-606354369,https://api.github.com/repos/pydata/xarray/issues/3232,606354369,MDEyOklzc3VlQ29tbWVudDYwNjM1NDM2OQ==,3019665,2020-03-31T02:07:47Z,2020-03-31T02:07:47Z,NONE,Well here's [a blogpost on using Dask + CuPy]( https://blog.dask.org/2019/03/18/dask-nep18 ). Maybe start there and build up to using Xarray.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-606322579,https://api.github.com/repos/pydata/xarray/issues/3232,606322579,MDEyOklzc3VlQ29tbWVudDYwNjMyMjU3OQ==,923438,2020-03-31T00:24:06Z,2020-03-31T00:24:06Z,NONE,"If you have any pointers on how to go about this - I can give it a try. > > ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-606262540,https://api.github.com/repos/pydata/xarray/issues/3232,606262540,MDEyOklzc3VlQ29tbWVudDYwNjI2MjU0MA==,3019665,2020-03-30T21:31:18Z,2020-03-30T21:31:18Z,NONE,"Yeah Jacob and I played with this a few months back. There were some issues, but my recollection is pretty hazy. If someone gives this another try, it would be interesting to hear how things go.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-606216839,https://api.github.com/repos/pydata/xarray/issues/3232,606216839,MDEyOklzc3VlQ29tbWVudDYwNjIxNjgzOQ==,923438,2020-03-30T20:05:24Z,2020-03-30T20:05:24Z,NONE,"This might be a good time to revive this thread and see if there is wider interest (and bandwidth) in having xarray use CuPy (https://cupy.chainer.org/ ) as a backend (along with numpy). It appears to be a plug-and-play replacement for numpy - so it might not have all the issues that were brought up regarding pytorch/jax ? Any thoughts ? cc @mrocklin ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-524411995,https://api.github.com/repos/pydata/xarray/issues/3232,524411995,MDEyOklzc3VlQ29tbWVudDUyNDQxMTk5NQ==,923438,2019-08-23T18:13:35Z,2019-08-23T18:13:35Z,NONE,"While it is pretty straightforward to implement a lot of standard xarray operations with a pytorch / Jax backend (since they just fallback on native functions) - it will be interesting to think about how to implement rolling operations / expanding / exponential window in a way that is both efficient and maintains differentiability. Expanding and exponential window operations would be easy to do leveraging RNN semantics - but doing rolling using convolutions is going to be very inefficient. Do you have any thoughts on this? ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-524348393,https://api.github.com/repos/pydata/xarray/issues/3232,524348393,MDEyOklzc3VlQ29tbWVudDUyNDM0ODM5Mw==,923438,2019-08-23T15:00:02Z,2019-08-23T15:00:02Z,NONE,"I haven't used JAX - but was just browsing through its documentation and it looks super cool. Any ideas on how it compares with Pytorch in terms of: a) Cxecution speed, esp. on GPU b) Memory management on GPUs. Pytorch has the 'Dataloader/Dataset' paradigm which uses background multithreading to shuttle batches of data back and forth - along with a lot of tips and tricks on efficient memory usage. c) support for deep-learning optimization algorithms ? ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-523101805,https://api.github.com/repos/pydata/xarray/issues/3232,523101805,MDEyOklzc3VlQ29tbWVudDUyMzEwMTgwNQ==,98330,2019-08-20T16:53:40Z,2019-08-20T16:53:40Z,NONE,"> This is a definite downside of reusing NumPy's existing namespace. We didn't discuss an alternative very explicitly I think, but at least we'll have wide adoption fast. Hopefully the pain is limited ....","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-522824647,https://api.github.com/repos/pydata/xarray/issues/3232,522824647,MDEyOklzc3VlQ29tbWVudDUyMjgyNDY0Nw==,98330,2019-08-20T02:18:59Z,2019-08-20T02:18:59Z,NONE,"> Personally, I think the most viable way to achieve seamless integration with deep learning libraries would be to support integration with JAX, which already implements NumPy's API almost exactly. Less familiar with that, but pytorch does have experimental XLA support, so that's a start. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307 https://github.com/pydata/xarray/issues/3232#issuecomment-522824210,https://api.github.com/repos/pydata/xarray/issues/3232,522824210,MDEyOklzc3VlQ29tbWVudDUyMjgyNDIxMA==,98330,2019-08-20T02:16:32Z,2019-08-20T02:16:32Z,NONE,"> I think there has been some discussion about this, but I don't know the current status (CC @rgommers). The PyTorch team is definitely receptive to the idea of adding `__array_function__` and `__array_ufunc__`, as well as expanding the API for better NumPy compatibility. Also, they want a `Tensor.__torch_function__` styled after `__array_function__` so they can make their own API overridable. The tracking issue for all of this is https://github.com/pytorch/pytorch/issues/22402 > The biggest challenge for pytorch would be defining the translation layer that implements NumPy's API. Agreed. No one is working on `__array_function__` at the moment. Implementing it has some backwards compat concerns as well, because people may be relying on `np.somefunc(some_torch_tensor)` to be coerced to `ndarray`. It's not a small project, but implementing a prototype with a few function in the `torch` namespace that are not exactly matching the NumPy API would be a useful way to start pushing this forward.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,482543307