Syntax for typing multi-dimensional arrays
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 1.8k
- フォーク
- 302
- 平均マージ
- 23時間
- マージ済み PR(30日)
- 8
説明
As part of the larger project for multi-dimensional arrays (https://github.com/python/typing/issues/513), one of the first questions I would like to settle is what syntax for typing data-types and shapes should look like.
Both dtype and shape should be optional, and it should be possible to define multi-dimensional arrays for which either or both of these are generic:
dtype: indicates the data type for array elements, e.g.,np.float64shape: indicates the shape of the multi-dimensional array, a tuple of zero or more integers. We would like to support integer and variable sized dimensions, and variable numbers of dimensions. These are most naturally represented with indexing by a variadic number of integer, variable, colon:and/or ellipsis...arguments, e.g.,NDArray[1, N, :, ...]for an array with dimensions of size 1, sizeN, and arbitrary size, followed by 0 or more arbitrary sized dimensions.
For NumPy, ideally we would like to add basic typing support for dtype (using Generic) even before typing for shape is possible. But we'd like to know what the ultimate syntax should look like, so we don't paint ourselves into a corner.
One key question: can we safely rely on using a single generic argument for dtypes (e.g., np.ndarray[np.float64]) as indicating an array without any shape constraints?
My doc (same as in the master issue) considers a number of options under the "Possible syntax" section.
So far, I think the best option is some variation of "two generic arguments", for dtype and shape. But this could quickly get annoyingly verbose when sprinkled all over a code-base, e.g., np.ndarray[np.float32, Shaped[..., N, M]]:
- It would be nice to support syntax like
np.ndarray[np.float32](the multi-dimensional equivalent ofList[float]) as an alias fornp.ndarray[np.float32, Any], but we don't yet have optional arguments for generics (variadic arguments are a somewhat awkward fit for a single argument). - It would also be nice to allow omitting
Shaped[], e.g., by writing dimensions as variadic generics to the array type likenp.ndarray[np.float32, ..., N, M]. One possible ambiguity is how to specify scalar arrays:np.ndarray[np.float32,]looks very similar tonp.ndarray[np.float32]. But scalar arrays are rare enough that these could potentially be resolved by disallowingnp.ndarray[np.float32,]in favor of requiringnp.ndarray[np.float32, Shape[()]].
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
より大きな多次元配列に関する issue (#513) と、リンクされている設計ドキュメント、特にその「Possible syntax」セクションから始めてください。提案されている dtype と shape の形式を、ジェネリック引数および可変長引数を含めて比較し、既存の議論を確認してください。記載されたオプショナルおよびジェネリックなケースをサポートする確定した構文に到達し、それを文書化できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- numpy, python
- 領域
- developer-experience, tooling
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100