Bug: structured data transpose changes face mapping in from_xarray
メンテナーはふだん 3 日以内に返信
@sunxiuguo がすでに取り組んでいます。
2026年10月19日 から。
評価
調査の方向性
Read _map_dims_to_ugrid in uxarray/core/utils.py and face construction in uxarray/io/_structured.py, then inspect the existing structured mapping regression test. Reproduce the issue using the supplied (y, x) and (x, y) datasets and add a regression test showing both conversions map values identically to the same grid faces. Done when the test passes and the mapping remains consistent with the documented face ordering.
索引モデルが issue の本文から書いたものです。
説明
Version
Source main at 6d6c6dacd2472fda8c6a3f71af659e1eb1cbadc9; Python 3.12.14, NumPy 2.5.4, xarray 2026.9.0 on Linux.
How did you install UXarray?
Source
What happened?
Converting equivalent structured datasets with UxDataset.from_xarray(..., uxgrid=grid) associates different values with the same grid faces when the spatial dimension order is transposed. The conversion succeeds without a warning. This matters when normalizing structured member files into a shared unstructured representation for regional statistics or integration.
For the synthetic example below, (y, x) produces face values [0, 0, 0, 100, 100, 100], while the equivalent (x, y) input produces [0, 100, 0, 100, 0, 100]. Both retain exactly the same Grid object and its face connectivity. The integral changes from 67.08123535225863 to 79.37563993526874 for this example; this is not a general error bound.
What did you expect to happen?
Transposing named input dimensions should preserve the physical field and its association with grid faces, so both mapped values and integration results should agree.
Can you provide a MCVE to repoduce the bug?
import numpy as np
import xarray as xr
import uxarray as ux
original = xr.Dataset(
{"temperature": (("y", "x"), [[0., 0., 0.], [100., 100., 100.]])},
coords={"x": [0., 20., 40.], "y": [-10., 50.]},
)
transposed = original.transpose("x", "y")
xr.testing.assert_identical(original, transposed.transpose("y", "x"))
grid = ux.Grid.from_structured(lon=original.x, lat=original.y)
a = ux.UxDataset.from_xarray(original, uxgrid=grid)
b = ux.UxDataset.from_xarray(transposed, uxgrid=grid)
assert a.uxgrid is b.uxgrid is grid
print(a.temperature.values) # [0., 0., 0., 100., 100., 100.]
print(b.temperature.values) # [0., 100., 0., 100., 0., 100.]
print(float(a.temperature.integrate())) # 67.08123535225863
print(float(b.temperature.integrate())) # 79.37563993526874
np.testing.assert_array_equal(a.temperature.values, b.temperature.values)
The last assertion fails. I also reproduced the mapping after writing the two synthetic members as separate NetCDF files and reading them through xarray. Explicitly transposing the source back to (..., "y", "x") before conversion restores the correct values and integral.
Investigation and scope
_map_dims_to_ugrid chooses its stacking order from a data variable's final dimension, while _read_structured_grid constructs face connectivity in latitude-major, longitude-minor order. The existing structured mapping regression test also documents face k as (k // n_lon, k % n_lon).
This reproduction uses the existing from_xarray API on main, without the changes in #1827. It does not call weighted_mean, so it is distinct from #1800's reduction-axis issue. No implementation changes are included here. I would be happy to work on a focused fix and regression tests if this can be assigned to me, following the contribution guide.
AI assistance: OpenAI Codex assisted with investigation and synthetic reproduction; the recorded results were actually executed against the pinned source.
- 主要言語
- Python
- スター
- 230
- フォーク
- 57
- 平均マージ
- 4日 14時間
- マージ済み PR(30日)
- 7
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
UXARRAY/uxarray のほかの issue
-
Update installation docs to include new conda recipes対応中かも @Sevans711 が 19 日前に担当しました。 オープンdocumentation
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
UXARRAY/uxarray#1793 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 3 日以内に返信
-
developer experience
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
メンテナーはふだん 3 日以内に返信
-
zonal_mean() and weighted_mean() should return the same type of object再び着手できるかも @Sevans711 が 28 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
UXARRAY/uxarray#1733 · 担当者 1 名 ·
メンテナーはふだん 3 日以内に返信
-
documentation
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
メンテナーはふだん 3 日以内に返信
-
Neighborhood filter radii in kilometers対応中かも @cmdupuis3 が 6 日前に担当しました。 オープンimprovement
UXARRAY/uxarray#1824 · 担当者 1 名 ·
メンテナーはふだん 3 日以内に返信
UXARRAY/uxarray の issue をすべて見る
似ている issue
-
Edit tool converts CRLF files to LF対応中かも @RaphaelFakhri が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
huggingface/tau#774 ·
メンテナーはふだん 1 日以内に返信
-
show ignores the row limit when a column or table name contains "limit"対応中かも @RaphaelFakhri が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
メンテナーはふだん 2 日以内に返信
-
documentation good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
eclipse-score/inc_someip_gateway#356 ·
メンテナーはふだん 2 日以内に返信