Skip to content
Array interface object for Python with pluggable backends and a multiple-dispatch mechanism for defining down-stream functions
Branch: master
Clone or download
Latest commit d246d02 May 14, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.conda Switch linting to Black. May 9, 2019
binder Fix Binder May 1, 2019
docs Move things around and reformat. May 14, 2019
notebooks Update notebooks. Apr 23, 2019
requirements Add sparse backend. May 9, 2019
unumpy Fix RTD. May 14, 2019
.coveragerc Fix a bunch of stuff. (#118) Apr 1, 2019
.gitattributes Start fresh. Mar 12, 2019
.gitignore Update .gitignore. Apr 10, 2019 Create May 1, 2019 Add sparse backend. May 9, 2019
LICENSE Add License Sep 5, 2018 Update readme. May 9, 2019
azure-pipelines.yml Fix Azure Pipelines. Apr 26, 2019
doc8.ini Add doc8 linting for docs. Apr 10, 2019
pytest.ini Move to a functional-first approach. May 11, 2019
readthedocs.yml Fix RTD. Apr 13, 2019
requirements.txt Start fresh. Mar 12, 2019
setup.cfg Switch linting to Black. May 9, 2019 Fix backends for protocol approach. May 13, 2019 Switch linting to Black. May 9, 2019

uarray - A back-end mechanism geared towards array computing

Join the chat at Binder Build Status PyPI

uarray logo


NumPy has become very popular as an array object --- but it implements a very specific "kind" of array which is sometimes called a fancy pointer to strided memory. This model is quite popular and has allowed SciPy and many other tools to be built by linking to existing code.

Over the past decade, newer hardware including GPUs and FPGA, newer software systems (including JIT compilers and code-generation systems) have become popular. Also new "kinds" of arrays have been created or contemplated including distributed arrays, sparse arrays, "unevaluated arrays", "compressed-storage" arrays, and so forth. Quite often, the downstream packages and algorithms that use these arrays don't need the implementation details of the array. They just need a set of basic operations to work (the interface).

The goal of uarray is to construct an interface to a general array concept and build a high-level multiple-dispatch mechanism to redirect function calls whose implementations are dependent on the specific kind of array. The desire is for down-stream libraries to be able to use/expect uarray objects based on the interface and then have their implementation configurable. Ongoing discussions are happening on the NumPy mailing list in order to retrofit NumPy as this array interface. uarray is an alternative approach with different contraints and benefits.

Python array computing needs multiple-dispatch. Ufuncs are fundamentally multiple-dispatch systems, but only at the lowest level. It is time to raise the visibility of this into Python. This effort differs from XND in that XND is low-level and cross-language. The uarray is "high-level" and Python only. The concepts could be applied to other languages but we do not try to solve that problem with this library. XND can be used by some implementations of the uarray concept.

Our desire with uarray is to build a useful array interface for Python that can help library writers write to a standard interface while allowing backend implementers to innovate in performance. This effort is being incubated at Quansight Labs which is an R&D group inside of Quansight that hires developers, community/product managers, and tech writers to build and maintain shared open-source infrastructure. It is funded by donations and grants. The efforts are highly experimental at this stage and we are looking for funding for the effort in order to make better progress.


This project is in active development and not ready for production use. However, you can install it with:

pip install uarray


conda install -c conda-forge -c uarray uarray


See for more information on how to contribute to uarray.

You can’t perform that action at this time.