arange(start, /, stop=None, step=1, *, dtype=None, device=None) |
arange(start, stop, step, dtype=None, *, stream=None) |
partial |
stop=None now accepted. Remaining failure: integer args larger than signed 32-bit (e.g. step=2**31) — the nanobind binding uses C++ int, so xp.arange(n-1, n+3) with n = iinfo(int32).max raises TypeError. Still no device. |
ml-explore/mlx#3982 (merged); int32 limit not yet reported |
test_arange |
Failed |
asarray(obj, /, *, dtype=None, device=None, copy=None) |
asarray(a, dtype=None, *, copy=None) |
partial — won't fix |
copy=False raises even for an MLX array already of the requested dtype. Fix was proposed and closed unmerged. No device; dtype not keyword-only. |
ml-explore/mlx#4036 (closed, not merged) |
test_asarray_arrays |
Failed |
empty(shape, *, dtype=None, device=None) |
empty(shape, dtype=float32, *, stream=None) |
undocumented |
Implemented (pure alias) but still absent from MLX docs. No device. |
ml-explore/mlx#3729 (merged) |
test_empty |
Passed |
empty_like(x, /, *, dtype=None, device=None) |
empty_like(a, /, *, dtype=None, stream=None) |
undocumented |
dtype now accepted — empty_like aliases zeros_like, so it inherited the fix. Still undocumented; no device. |
ml-explore/mlx#4028 (merged); #4037 (closed, superseded) |
test_empty_like |
Passed |
eye(n_rows, n_cols=None, /, *, k=0, dtype=None, device=None) |
eye(n, m=None, k=0, dtype=float32, *, stream=None) |
partial |
eye(0) fixed upstream; the too-large-k failure was a test-suite issue, fixed at the tip of array-api-tests. Remaining failure: GPU scatter does not support uint64, so identity creation fails for that dtype. |
ml-explore/mlx#3952 (merged); uint64 case not yet reported |
test_eye |
Failed |
from_dlpack(x, /, *, device=None, copy=None) |
from_dlpack(x, /, *, copy=None) |
Incompatible |
Test fails before reaching from_dlpack: MLX has no x.device and does not have device parameter in the signature |
- |
test_dlpack.py::test_from_dlpack |
Failed |
full(shape, fill_value, *, dtype=None, device=None) |
full(shape, vals, dtype=None, *, stream=None) |
signature mismatch |
fill_value is named vals; dtype not keyword-only; no device. |
— |
test_full |
Passed |
full_like(x, /, fill_value, *, dtype=None, device=None) |
full_like(a, vals, dtype=None, *, stream=None) |
signature mismatch |
fill_value is named vals; dtype not keyword-only; no device. |
— |
test_full_like |
Passed |
linspace(start, stop, /, num, *, dtype=None, device=None, endpoint=True) |
linspace(start, stop, num=50, dtype=float32, stream=None) |
partial — in progress |
endpoint still unsupported, so endpoint=False fails. Draft PR open. No device. |
ml-explore/mlx#4152 (issue, open), #4184 (draft PR, open) |
test_linspace |
Failed |
meshgrid(*arrays, indexing="xy") |
meshgrid(*arrays, sparse=False, indexing="xy", stream=None) |
return mismatch — in progress |
MLX returns a list; Array API 2025.12 requires a tuple. |
ml-explore/mlx#4034 (issue, open) |
test_meshgrid |
Failed |
ones(shape, *, dtype=None, device=None) |
ones(shape, dtype=float32, *, stream=None) |
signature mismatch |
dtype not keyword-only; no device. Behavior passes. |
— |
test_ones |
Passed |
ones_like(x, /, *, dtype=None, device=None) |
ones_like(a, /, *, dtype=None, stream=None) |
signature mismatch |
dtype added upstream as a keyword-only arg. No device. |
ml-explore/mlx#4001 (issue, closed) → #4028 (merged) |
test_ones_like |
Passed |
tril(x, /, *, k=0) |
tril(x, k, *, stream=None) |
signature mismatch |
k accepted positionally; spec makes it keyword-only. Behavior passes. |
— |
test_tril |
Passed |
triu(x, /, *, k=0) |
triu(x, k, *, stream=None) |
signature mismatch |
k accepted positionally; spec makes it keyword-only. Behavior passes. |
— |
test_triu |
Passed |
zeros(shape, *, dtype=None, device=None) |
zeros(shape, dtype=float32, *, stream=None) |
signature mismatch |
dtype not keyword-only; no device. Behavior passes. |
— |
test_zeros |
Passed |
zeros_like(x, /, *, dtype=None, device=None) |
zeros_like(a, /, *, dtype=None, stream=None) |
signature mismatch |
dtype added upstream as a keyword-only arg. No device. |
ml-explore/mlx#4001 (issue, closed) → #4028 (merged) |
test_zeros_like |
Passed |
arange(start, /, stop=None, step=1, *, dtype=None, device=None)arange(start, stop, step, dtype=None, *, stream=None)stop=Nonenow accepted. Remaining failure: integer args larger than signed 32-bit (e.g.step=2**31) — the nanobind binding uses C++int, soxp.arange(n-1, n+3)withn = iinfo(int32).maxraisesTypeError. Still nodevice.test_arangeasarray(obj, /, *, dtype=None, device=None, copy=None)asarray(a, dtype=None, *, copy=None)copy=Falseraises even for an MLX array already of the requested dtype. Fix was proposed and closed unmerged. Nodevice;dtypenot keyword-only.test_asarray_arraysempty(shape, *, dtype=None, device=None)empty(shape, dtype=float32, *, stream=None)device.test_emptyempty_like(x, /, *, dtype=None, device=None)empty_like(a, /, *, dtype=None, stream=None)dtypenow accepted —empty_likealiaseszeros_like, so it inherited the fix. Still undocumented; nodevice.test_empty_likeeye(n_rows, n_cols=None, /, *, k=0, dtype=None, device=None)eye(n, m=None, k=0, dtype=float32, *, stream=None)eye(0)fixed upstream; the too-large-kfailure was a test-suite issue, fixed at the tip of array-api-tests. Remaining failure: GPU scatter does not supportuint64, so identity creation fails for that dtype.test_eyefrom_dlpack(x, /, *, device=None, copy=None)from_dlpack(x, /, *, copy=None)from_dlpack: MLX has nox.deviceand does not have device parameter in the signaturetest_dlpack.py::test_from_dlpackfull(shape, fill_value, *, dtype=None, device=None)full(shape, vals, dtype=None, *, stream=None)fill_valueis namedvals;dtypenot keyword-only; nodevice.test_fullfull_like(x, /, fill_value, *, dtype=None, device=None)full_like(a, vals, dtype=None, *, stream=None)fill_valueis namedvals;dtypenot keyword-only; nodevice.test_full_likelinspace(start, stop, /, num, *, dtype=None, device=None, endpoint=True)linspace(start, stop, num=50, dtype=float32, stream=None)endpointstill unsupported, soendpoint=Falsefails. Draft PR open. Nodevice.test_linspacemeshgrid(*arrays, indexing="xy")meshgrid(*arrays, sparse=False, indexing="xy", stream=None)list; Array API 2025.12 requires atuple.test_meshgridones(shape, *, dtype=None, device=None)ones(shape, dtype=float32, *, stream=None)dtypenot keyword-only; nodevice. Behavior passes.test_onesones_like(x, /, *, dtype=None, device=None)ones_like(a, /, *, dtype=None, stream=None)dtypeadded upstream as a keyword-only arg. Nodevice.test_ones_liketril(x, /, *, k=0)tril(x, k, *, stream=None)kaccepted positionally; spec makes it keyword-only. Behavior passes.test_triltriu(x, /, *, k=0)triu(x, k, *, stream=None)kaccepted positionally; spec makes it keyword-only. Behavior passes.test_triuzeros(shape, *, dtype=None, device=None)zeros(shape, dtype=float32, *, stream=None)dtypenot keyword-only; nodevice. Behavior passes.test_zeroszeros_like(x, /, *, dtype=None, device=None)zeros_like(a, /, *, dtype=None, stream=None)dtypeadded upstream as a keyword-only arg. Nodevice.test_zeros_like