When applying xdas.fft on data with more than 2 coordinates (e.g. ABYSS data with station, latitude, etc. in addition to time and distance), doing xdas.fft.rfft(data) will trigger:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[32], [line 1](vscode-notebook-cell:?execution_count=32&line=1)
----> [1](vscode-notebook-cell:?execution_count=32&line=1) fs = rfft(da)
Cell In[27], [line 61](vscode-notebook-cell:?execution_count=27&line=61)
[59](vscode-notebook-cell:?execution_count=27&line=59) dims = tuple(newdim if dim == olddim else dim for dim in da.dims)
[60](vscode-notebook-cell:?execution_count=27&line=60) print(dims)
---> [61](vscode-notebook-cell:?execution_count=27&line=61) return DataArray(data, coords, dims, da.name, da.attrs)
File ~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/dataarray.py:69, in DataArray.__init__(self, data, coords, dims, name, attrs)
[67](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/dataarray.py:67) raise ValueError("different number of dimensions on `data` and `dims`")
[68](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/dataarray.py:68) coords = Coordinates(coords, dims)
---> [69](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/dataarray.py:69) coords._assign_parent(self)
[70](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/dataarray.py:70) self._coords = coords
[72](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/dataarray.py:72) # metadata
File ~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/coordinates.py:234, in Coordinates._assign_parent(self, parent)
[232](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/coordinates.py:232) def _assign_parent(self, parent):
[233](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/coordinates.py:233) if not len(self.dims) == parent.ndim:
--> [234](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/coordinates.py:234) raise ValueError(
[235](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/coordinates.py:235) "infered dimension number from `coords` does not match "
[236](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/coordinates.py:236) "`data` dimensionality`"
[237](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/coordinates.py:237) )
[238](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/coordinates.py:238) for dim, size in zip(self.dims, parent.shape):
[239](https://vscode-remote+ssh-002dremote-002babyss.vscode-resource.vscode-cdn.net/home/vanden/abyss/T-waves/abyss_events/~/miniconda3/envs/abyss/lib/python3.12/site-packages/xdas/core/coordinates.py:239) if (dim in self) and (not len(self[dim]) == size):
ValueError: infered dimension number from `coords` does not match `data` dimensionality`
The issue is that in Coordinates.__assign_parent it compares the total number of coordinates (station, latitude, ...), not the number of dimensions (time and distance).
When applying
xdas.fft
on data with more than 2 coordinates (e.g. ABYSS data withstation
,latitude
, etc. in addition totime
anddistance
), doingxdas.fft.rfft(data)
will trigger:The issue is that in
Coordinates.__assign_parent
it compares the total number of coordinates (station
,latitude
, ...), not the number of dimensions (time
anddistance
).