Skip to main content

metal-linalg for Python

QR, symmetric eigendecomposition and SVD for batches of matrices on Apple GPUs, on MLX arrays.

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(512, 64)              # 'block': 64 matrices of 512x512 go to the GPU
ml.eigh_backend(512, 1)               # 'cpu': one matrix is faster on the CPU
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 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.6.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.6.0
File Size Uploaded
metal_linalg-2.6.0.tar.gz 234.1 kB Details

Built distributions (wheels)

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

Total release size: 1.4 MB

Release files / metal_linalg-2.6.0.tar.gz

Download URL metal_linalg-2.6.0.tar.gz
Size 234.1 kB
Tags Source
SHA-256 checksum
How to use checksums
6b8db35db3c573cb7a1f24516e47d6edd97f0fdbe5362780bc4a4cfa63d57a29
BLAKE2b-256 checksum
How to use checksums
814342271b294e2f4aedcf71d373e911ae4fb0f2c396a74cf2e7b6c302fabfc5
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 3, 2026.

Transparency log

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

Download URL metal_linalg-2.6.0-cp314-cp314-macosx_14_0_arm64.whl
Size 229.1 kB
Tags CPython 3.14 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
62bd9c9c8f9a5df472822547ea9d36649b965f37369bb7449e7e0829aaa09a23
BLAKE2b-256 checksum
How to use checksums
2bf9e131cff758e25f6a21f1c623eb0401586b5b55269e283b55a833b2cdec82
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 3, 2026.

Transparency log

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

Download URL metal_linalg-2.6.0-cp313-cp313-macosx_14_0_arm64.whl
Size 229.1 kB
Tags CPython 3.13 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
1eace96f957c484772ae6e66eb2bfcfdee39aa17f0eac2e7b996da26cbd8a229
BLAKE2b-256 checksum
How to use checksums
150819030fe95e5e36997d92f07b539271cbdec2fe8e7b3750268b8110fa6770
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 3, 2026.

Transparency log

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

Download URL metal_linalg-2.6.0-cp312-cp312-macosx_14_0_arm64.whl
Size 229.1 kB
Tags CPython 3.12 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
242dafbcc073b4868cd05655d9e6a2d9c086e09e694092be67f64b8e100beca5
BLAKE2b-256 checksum
How to use checksums
962f894a7083ccc6a243f46db57be825644004eb16dbfcb9b6d8787de3094374
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 3, 2026.

Transparency log

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

Download URL metal_linalg-2.6.0-cp311-cp311-macosx_14_0_arm64.whl
Size 229.8 kB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
b1a63b8c7f1d22534f7a758115398f4cd4228dad64e678a5cde8ad57c7578f80
BLAKE2b-256 checksum
How to use checksums
0502bb405992eb385a7c475f2ca1d431e8053b33f6b1c9d87d34450196bbb280
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 3, 2026.

Transparency log

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

Download URL metal_linalg-2.6.0-cp310-cp310-macosx_14_0_arm64.whl
Size 230.0 kB
Tags CPython 3.10 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
aa65c1b00ccbdf93e5cf23588b15a7b98222e0703e6c71c3c3effc29e69ccd03
BLAKE2b-256 checksum
How to use checksums
730b8dc54e4e973621a646e12d50ac14908e2b46646273602dd1c93f38a2c51c
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 3, 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