Abstract your array operations.
Project description
autoray
is a lightweight python AUTOmatic-arRAY library for
abstracting your tensor operations. Primarily it provides an
automatic dispatch mechanism
that means you can write backend agnostic code that works for:
- numpy
- pytorch
- jax
- cupy
- dask
- autograd
- tensorflow
- sparse
- mars
- ... and indeed any library that provides a numpy-ish api, even if it
knows nothing about
autoray
.
Beyond that, abstracting the array interface allows you to:
- swap custom versions of functions for specific backends
- trace through computations lazily without actually running them
- automatically share intermediates and fold constants in computations
- compile functions with a unified interface for different backends
Basic usage
The main function of autoray
is
do
,
which takes a function
name followed by *args
and **kwargs
, and automatically looks up (and
caches) the correct function to match the equivalent numpy call:
from autoray as ar
def noised_svd(x):
# automatic dispatch based on supplied array
U, s, VH = ar.do('linalg.svd', x)
# automatic dispatch based on different array
sn = s + 0.1 * ar.do('random.normal', size=ar.shape(s), like=s)
# automatic dispatch for multiple arrays for certain functions
return ar.do('einsum', 'ij,j,jk->ik', U, sn, VH)
# explicit backend given by string
x = ar.do('random.uniform', size=(100, 100), like="torch")
# this function now works for any backend
y = noised_svd(x)
# explicit inference of backend from array
ar.infer_backend(y)
# 'torch'
If you don't like the explicit do
syntax, or simply want a
drop-in replacement for existing code, you can also import the autoray.numpy
module:
from autoray import numpy as np
# set a temporary default backend
with ar.backend_like('cupy'):
z = np.ones((3, 4), dtype='float32')
np.exp(z)
# array([[2.7182817, 2.7182817, 2.7182817, 2.7182817],
# [2.7182817, 2.7182817, 2.7182817, 2.7182817],
# [2.7182817, 2.7182817, 2.7182817, 2.7182817]], dtype=float32)
Custom backends and functions can be dynamically registered with:
The main documentation is available at autoray.readthedocs.io.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file autoray-0.6.8.tar.gz
.
File metadata
- Download URL: autoray-0.6.8.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8e31832597cb2075e5f9f65894fafff9d726d9287718415d3c8b008e592f0197 |
|
MD5 | ade605919546ca535a67797004ec5a6a |
|
BLAKE2b-256 | f064b1700485b164ab770b600ce96f928a41919b38dde9f1a57b075301ff6852 |
File details
Details for the file autoray-0.6.8-py3-none-any.whl
.
File metadata
- Download URL: autoray-0.6.8-py3-none-any.whl
- Upload date:
- Size: 49.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 56ce1a1e105e14fd74e5e2d724a92421af7601b34b73f10c0cf58d678958fde4 |
|
MD5 | a64ffabb68d4adf783b77e08ee0e89ee |
|
BLAKE2b-256 | ea23cd4104e209b29ea11ae9cfdff0d5859121981d59af77249117d6bfd60d0b |