Skip to main content

metal-linalg for Python

QR, symmetric eigendecomposition and SVD for batches of matrices on Apple GPUs, on MLX arrays. For PyTorch tensors, install metal-linalg-torch instead.

import mlx.core as mx
import metal_linalg as ml

a = mx.random.normal((1000, 64, 32))     # a batch of 1000 matrices

Q, R = ml.qr(a)                          # Q (1000, 64, 32), R (1000, 32, 32)
U, S, Vt = ml.svd(a)                     # thin: U (1000, 64, 32), S (1000, 32), Vt (1000, 32, 32)
w, V = ml.eigh(a.swapaxes(-1, -2) @ a)   # w ascending (1000, 32), V (1000, 32, 32)

Each call is routed to the fastest Metal kernel for its shape and batch, or to LAPACK on the CPU, by a policy measured on the Mac it runs on:

ml.device_name()                      # 'Apple M5 Pro'
ml.eigh_policy_source()               # 'tuned:Apple M5 Pro'
ml.eigh_backend(32, 4096)             # 'ql': 4096 matrices of 32x32 go to the GPU
ml.eigh_backend(512, 64)              # 'cpu': the CPU's cores win 64 of 512x512
ml.set_eigh_policy(gpu_min_batch=1)   # override the measured policy

Inputs may be mx.array, NumPy arrays or nested lists; outputs are float32 mx.array. ml.eigvalsh and ml.svdvals return the values alone, for less work. The kernels and the routing are described in the main README.

Installing

pip install metal-linalg

On an Apple Silicon Mac with macOS 14 or later and Python 3.10 to 3.14, this installs a prebuilt wheel and the mlx it was built against; nothing is compiled.

MLX is pinned to one release. The package shares MLX's own library and passes mx.array objects through MLX's internals, so it works only with the MLX it was built against, and asks pip for exactly that one (mlx==0.32.3 for this release). Installing it may therefore move your mlx to that version, and upgrading mlx past it on its own breaks the import with an ImportError that says so; upgrade both together, pip install -U metal-linalg mlx, once a release of this package for the newer MLX is out.

From source

On a Mac with no matching wheel, pip builds the package from source, which needs Xcode's command line tools (xcode-select --install) and fetches CMake and the rest itself. To build a clone, or the main branch:

pip install .                                                  # in a clone
pip install git+https://github.com/c0rmac/metal-linalg.git     # main branch

Against another MLX

To build against an MLX other than the pinned one, a source build of MLX or Homebrew's, turn off pip's build isolation so the build sees your MLX, and --no-deps so pip leaves it alone. The build must also use the nanobind your MLX was built with: the pip MLX 0.32.3 uses nanobind 3.0.1, Homebrew's MLX 0.32.1 uses 2.15.0. The build checks this before compiling and stops with a message naming the mismatch.

With Homebrew's Python and MLX (brew install mlx includes the mlx Python package), in a virtual environment that can see Homebrew's packages:

python3 -m venv --system-site-packages ~/.venvs/metal-linalg
source ~/.venvs/metal-linalg/bin/activate
pip install scikit-build-core "nanobind==2.15.0"
pip install --no-build-isolation --no-deps git+https://github.com/c0rmac/metal-linalg.git

After upgrading that MLX, reinstall the package the same way.

Calibration

Routing comes from measurements made on each kind of Mac. Where there are none for yours, or they are stale or incomplete, importing the package raises a metal_linalg.CalibrationWarning once per decomposition, saying so and how to measure your Mac (about an hour and a half) and submit the results:

ml.calibration_status()     # {'qr': 'current', 'eigh': 'current', 'svd': 'stale'}

warnings.filterwarnings("ignore", category=ml.CalibrationWarning), or METAL_LINALG_NO_CALIBRATION_NOTICE=1, silences it. Which chips are measured: the measurements page.

Tests

python -m unittest discover -s python/tests -v

Metadata

Release files for metal-linalg 2.13.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for metal-linalg 2.13.0
File Size Uploaded
metal_linalg-2.13.0.tar.gz 741.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for metal-linalg 2.13.0
File
metal_linalg-2.13.0-cp314-cp314-macosx_14_0_arm64.whl CPython 3.14 CPython 3.14 macOS 14.0+ ARM64 Details
metal_linalg-2.13.0-cp313-cp313-macosx_14_0_arm64.whl CPython 3.13 CPython 3.13 macOS 14.0+ ARM64 Details
metal_linalg-2.13.0-cp312-cp312-macosx_14_0_arm64.whl CPython 3.12 CPython 3.12 macOS 14.0+ ARM64 Details
metal_linalg-2.13.0-cp311-cp311-macosx_14_0_arm64.whl CPython 3.11 CPython 3.11 macOS 14.0+ ARM64 Details
metal_linalg-2.13.0-cp310-cp310-macosx_14_0_arm64.whl CPython 3.10 CPython 3.10 macOS 14.0+ ARM64 Details

Total release size: 4.4 MB

Release files / metal_linalg-2.13.0.tar.gz

Download URL metal_linalg-2.13.0.tar.gz
Size 741.2 kB
Tags Source
SHA-256 checksum
How to use checksums
20bd6ed031b763abe3990dcc5af96a767d40ce8cd35e1825afd75f2926a54d16
BLAKE2b-256 checksum
How to use checksums
30712d95194e0564fed543cccfd505f1ff7e4e4363c5a0e5f0f69a10f8adc8c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / metal_linalg-2.13.0-cp314-cp314-macosx_14_0_arm64.whl

Download URL metal_linalg-2.13.0-cp314-cp314-macosx_14_0_arm64.whl
Size 727.8 kB
Tags CPython 3.14 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
38c8f42df1a200565619c00f58aae3c0d6065553a98659ae336b83522e6215c2
BLAKE2b-256 checksum
How to use checksums
b45fc002b53752e1ed38511007daedd8e3179fa8b3741533ee9b756561aff52b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / metal_linalg-2.13.0-cp313-cp313-macosx_14_0_arm64.whl

Download URL metal_linalg-2.13.0-cp313-cp313-macosx_14_0_arm64.whl
Size 727.8 kB
Tags CPython 3.13 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
b4af4e6c50b00b93a6192061b27b85f67759059a1728b0cd8e4af744f0db133f
BLAKE2b-256 checksum
How to use checksums
130236b7dc1063b2b6837fea954f85e24c55f948b20293de7a36aaec96c36977
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / metal_linalg-2.13.0-cp312-cp312-macosx_14_0_arm64.whl

Download URL metal_linalg-2.13.0-cp312-cp312-macosx_14_0_arm64.whl
Size 727.8 kB
Tags CPython 3.12 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
eac4bc78e073c109af0acda6b3b2c9039cad28f3d5ca4ab8cd735c3510bf244f
BLAKE2b-256 checksum
How to use checksums
19d1e4a81055a415bc38aed70cc28934fff581a699456b139c70723c22e01201
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / metal_linalg-2.13.0-cp311-cp311-macosx_14_0_arm64.whl

Download URL metal_linalg-2.13.0-cp311-cp311-macosx_14_0_arm64.whl
Size 728.4 kB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
d635fe991ffe94b2b113810e9fff0facb31418dd1c458fe4cbf4f60389518d8b
BLAKE2b-256 checksum
How to use checksums
729858d88d4525979f955b3e740da1a4b3e452fa3d680defc7f3ee03239b8614
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / metal_linalg-2.13.0-cp310-cp310-macosx_14_0_arm64.whl

Download URL metal_linalg-2.13.0-cp310-cp310-macosx_14_0_arm64.whl
Size 728.6 kB
Tags CPython 3.10 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
237c4415c61654470169199b804f70aa83d2a135ce7a90d12ebd8378eb303e53
BLAKE2b-256 checksum
How to use checksums
3c76584c81c0da573bce06025ed2669f02b6724d3f29ed9c8772df889708187d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page