[Question] [Feature Request] __matmul__, Internal Type Hinting

Aperta
#271 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
25/100
Tipo di issue
Funzionalità
Chiarezza
Da chiarire
Stato di attività
Ferma
Stack tecnologico
python

Direzione di ricerca

Inizia esaminando i binding Python relativi a arrayfire.Array, set_backend(), clibrary.get() e af.get_devicr_info(), quindi verifica come vengono esposti e testati i metodi pubblici esistenti. Chiarisci se il progetto richiede matmul, wrapper a runtime e annotazioni di tipo statiche prima di modificare qualsiasi cosa. Il lavoro è completato quando è stato concordato l’ambito, con una tipizzazione coerente e un comportamento verificato per l’API pubblica selezionata.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

I wanted to add support for @ operation in python. The __matmult__ operation, that's how it's overloaded, in the arrayfire.Array class.

It's a simple monkey patch on user code. But it'd be nice if it was official.

I went to my local source code and added it, but I wanted to start learning the internal more and maybe do some contribution. Just wondering if it's not redundant or unwanted.

I saw that the internal Python types aren't hinted properly.

The set_backend() takes a string, but that's primitive obsession. It should take a string litteral list.

from typing import Literal

backend: Literal["cuda", "opencl", "cpu"]

Or it should take an Enum.
And other functions.

or clibrary.get() returns a None. That's just due to Lazy Loading.

But a Typed Python interface could exist. Some wrapper python class might be needed so that the type of the exposed code is visible.

All of this would help learning by simply using the autocomplete features of the IDE or text editor.

I hope each backend offers at least some common interface. It should, as the goal of arrayfire is hardware agnostism.

So, every method should be discoverable by the linter at "code editing" time. Just put _ and __ if it's really private.

So get().af wouldn't cause false linting errors.

Anyway, I might get into it if I have time. It seems like a nice contribution, and a nitpick of mine.

the typing package nd TYPE/CHECKING, and simple wrappers are quite powerful.

However, I know that you might not want to expose internal details at all, and so might have purposly not the type hinting of everything. But it's also possible that doing so is just a tedious boilerplate. I'd be fine with doing said tedious boilerplate to make it easier to use and understand.

So, if it's by choice that there isn't any type hinting and wrapper, then I won't do it. But If it's something you'd be interested in, I might do some work on it.

Also there was a bug with af.get_devicr_info(), it seems to give the default device, not active device. Tested it with my cpu graphics card and amd graphics card on arch linux. I'll edit this section once I'm back on my PC. (Away right now).

Lingua principale
Python
Stelle
422
Fork
63
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di arrayfire/arrayfire-python

Tutte le issue di arrayfire/arrayfire-python

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.