Typing for multi-dimensional arrays
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 1.8k
- Fork
- 302
- Merge medio
- 23h
- PR unite (30g)
- 8
Descrizione
I'd like to open a discussion about typing for multi-dimensional arrays in general, and more specifically for NumPy. We have already been discussing this over in the NumPy issue tracker (https://github.com/numpy/numpy/issues/7370) and recently opened a new repository to start writing type stubs (https://github.com/numpy/numpy_stubs).
To help guide discussion, I wrote a document outlining ideas for array shape typing.
To summarize:
- We would like to be able to type-check both data types (e.g.,
float64) and shapes (e.g., a 3x4 array) for multi-dimensional arrays. - There are many uses cases where support for checks using dimension identity would be valuable, e.g., to indicate that a function transforms an array with shape
(N, M)to shape(N,)for arbitrary integersNandM. These dimension variables look very similar toTypeVar, ifTypeVarsupported integers as types. - A notion of "zero or more additional dimensions" would also be quite valuable, and is a core part of the type for many NumPy operations (generalized ufuncs). This might be naturally written with Ellipsis, e.g.,
(...., N)for an array with a last dimension of lengthNand any number of proceeding dimensions. There are particular rules (broadcasting) that should be enforced for matching multiple arguments with variable numbers of dimensions.
This will likely require some new typing features (as well as type-checker support). Notably:
- Support for literal values (https://github.com/python/typing/issues/478), so we can type check operations like
array.sum(axis=0). - Variadic generics (https://github.com/python/typing/issues/193), we can write types like
NDArray[N]andNDArray[N, M]. - Some sort of support for dimension identity in shapes (e.g., integer types, or
DimensionVaras described in my doc). - Standard syntax for writing array dtype/shape annotations: what should these look like?
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia leggendo l’issue, l’issue di NumPy collegata e il repository numpy_stubs, quindi esamina il documento collegato sulla tipizzazione della forma degli array. Confronta le proposte relative ai valori letterali, ai generics variadici, all’identità delle dimensioni e alla sintassi delle annotazioni; l’issue non definisce un obiettivo di implementazione concreto né un test che permetta di stabilire il completamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- numpy, python
- Ambito
- tooling
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100