uarray: Attempting to move the ecosystem forward

There comes a time in every project where most technological hurdles have been surpassed, and its adoption is a social problem. I believe uarray and unumpy had reached such a state, a month ago.

I then proceeded, along with Ralf Gommers and Peter Bell to write NumPy Enhancement Proposal 31 or NEP-31. This generated a lot of excellent feedback on the structure and the nuances of the proposal, which you can read both on the pull request and on the mailing list discussion, which led to a lot of restructuring in the contents and the structure of the NEP, but very little in the actual proposal. I take full responsibility for this: I have a bad tendency to assume everyone knows what I'm thinking. Thankfully, I'm not alone in this: It's a known psychological phenomenon.

Of course, social problems can take a long time to resolve one way or another, regardless of the proponents. And I consider this a good thing: it's better not to be stuck with an API decision that may bite you a few years down the line, especially with a project with API compatibility guarantees and number of dependents as NumPy.

I must confess I felt discouraged at some points in the uarray journey: However, realising my flaws will make me perform better in the future.

Although my main focus at this point in my career isn't uarray (not that I don't want it to be, only that social problems don't take very much of your time), it isn't a small library at the back of my head by any means.

With that out of the way, I'd like to present some improvements the Quansight team has made to uarray over the course of the past several months:

Progress on Integration

uarray ❤️ scipy.fft

uarray is now the official override mechanism for scipy.fft. This is a huge win.

NEP-31 merged with draft status

Already discussed above, but NEP-31 is available on the NumPy website in draft form.

In core uarray

C++ Implementation Merged

The C++ implementation of the uarray protocol is now merged. uarray is now lightning fast: About as fast as __array_function__.

Global backend as the "only" backend

The set_global_backend gained an only= kwarg. You can read what this means in the docs, but basically: In the absence of any local backends; no other backend will be tried at all.

Cross-platform CI

We now have cross-platform CI for Windows, macOS and Linux.

Building wheels on CI

... so we don't have to. 😁

Backends can fail fast

... by throwing a ua.BackendNotImplementedError

New website 🥳

https://uarray.org/, and https://unumpy.uarray.org/. 'Nuff said.

Test scipy.fft in CI

... so we don't accidentally break it.

Re-entrant context managers

... so you can cache contexts and use them without worrying.

Then we cache for you

... so you don't have to.

Rich comparison of backends

... so you can specify (via __eq__) which backends to skip

A bit of performance here and there

Backend systems need to be fast. 😉

In unumpy

More coverage of the NumPy API, mainly. 🏃‍

udiff

There's another part of the uarray ecosystem now: udiff. It can perform auto differentiation of any unumpy array.