[BUG] Documented signatures of `mx.add` and 27 other ops omit the keyword-only `*`, so `stream` (and `equal_nan`) cannot be passed positionally as documented
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 88/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Ambito
- developer-experience, machine-learning
Direzione di ricerca
Leggi python/src/ops.cpp, concentrandoti sulle stringhe nb::sig("def ...") elencate e sui relativi binding nb::kw_only(). Aggiorna le firme in modo che la documentazione includa * prima di stream per le operazioni interessate e prima di equal_nan per array_equal. Verifica con il __doc__ di ogni operazione e con gli esempi di chiamate posizionali; il lavoro è completato quando le firme visualizzate corrispondono alle forme di chiamata accettate.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
☑️ I understand it is strictly prohibited to use AI to write issues.
Describe the bug
The signatures shown in the docs (and in __doc__) of several ops list stream as a regular positional parameter, e.g.
add(a: scalar | array, b: scalar | array, stream: StreamOrDevice = None) -> array.
The bindings declare nb::kw_only() before stream, so passing it positionally raises TypeError. The same signature string is printed in the TypeError message, so the error points to a call form that does not work. array_equal has the same problem for equal_nan.
To Reproduce
Include code snippet
import mlx.core as mx
a, b = mx.array([1, 2]), mx.array([3, 4])
print(mx.add.__doc__.splitlines()[0])
print(mx.add(a, b, stream=mx.cpu)) # works
mx.add(a, b, mx.cpu) # TypeError, although the signature above allows it
Output:
add(a: scalar | array, b: scalar | array, stream: StreamOrDevice = None) -> array
array([4, 6], dtype=int32)
TypeError: add(): incompatible function arguments. The following argument types are supported:
1. add(a: scalar | array, b: scalar | array, stream: StreamOrDevice = None) -> array
Invoked with types: mlx.core.array, mlx.core.array, mlx.core.DeviceType
Same for equal_nan:
import mlx.core as mx
a, b = mx.array([1, 2]), mx.array([3, 4])
mx.array_equal(a, b, True) # equal_nan passed positionally
Output:
TypeError: array_equal(): incompatible function arguments. The following argument types are supported:
1. array_equal(a: scalar | array, b: scalar | array, equal_nan: bool = False, stream: StreamOrDevice = None) -> array
Invoked with types: mlx.core.array, mlx.core.array, bool
Expected behavior
The documented signature matches the binding, i.e. add(a, b, *, stream=None) (as already done for e.g. flatten, squeeze, expand_dims), or stream is accepted positionally.
Desktop (please complete the following information):
- OS Version: macOS 26.6.2 (arm64)
- Version: mlx 0.32.4
Additional context
The hand-written nb::sig("def ...") strings in python/src/ops.cpp lack the * for these 28 functions, while the bindings use nb::kw_only(): add, subtract, multiply, divide, divmod, floor_divide, remainder, equal, not_equal, less, less_equal, greater, greater_equal, array_equal, bitwise_and, bitwise_or, bitwise_xor, left_shift, right_shift, bitwise_invert, isnan, isinf, isfinite, isposinf, isneginf, round, view, hadamard_transform.
Each of them raises TypeError when stream (or equal_nan) is passed positionally. A similar mismatch between nb::sig and the binding was fixed in #3950 (cholesky_inv). Adding * before stream (before equal_nan for array_equal) in these strings should fix it; I can open a PR.
- Lingua principale
- C++
- Stelle
- 29k
- Fork
- 2.4k
- Merge medio
- 3g 12h
- PR unite (30g)
- 111
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
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.
Altre issue di ml-explore/mlx
-
[BUG] `mx.expand_dims` docs: the Args section names `axes`, but the parameter is `axis`Forse già presa @Redempt1onzzZZ l’ha presa oggi. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
ml-explore/mlx#4829 ·
I maintainer di solito rispondono entro 2 giorni
-
[BUG] `mx.qqmm` docs: the Args section names `global_scale`, but the parameter is `global_scale_x`Forse già presa @XXXXRT666 l’ha presa 3 giorni fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
ml-explore/mlx#4815 ·
I maintainer di solito rispondono entro 2 giorni
-
[BUG] FP4 quantization on CPU rounds ties toward zero while Metal rounds to evenForse già presa @projekt11th l’ha presa 5 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
ml-explore/mlx#4753 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
ml-explore/mlx#4819 ·
I maintainer di solito rispondono entro 2 giorni
-
[BUG] Metal scaled_dot_product_attention is ~300x less accurate for 2-8 query tokens at 33-128 stacked rows since #4723 (sdpa_split)Forse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertabug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 22/100
ml-explore/mlx#4808 · 2 commenti ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di ml-explore/mlx
Issue simili
-
bug module:nodes tests
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
rocketride-org/rocketride-server#3020 ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
pocoproject/poco#5636 ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
microsoft/cppwinrt#1646 · 7 commenti ·
I maintainer di solito rispondono entro 1 giorno