Welcome to arraycontext’s documentation!

GPU arrays? Deferred-evaluation arrays? Just plain numpy arrays? You’d like your code to work with all of them? No problem! Comes with pre-made array context implementations for:

arraycontext started life as an array abstraction for use with the meshmode unstrucuted discretization package.

Design Guidelines

Here are some of the guidelines we aim to follow in arraycontext. There exist numerous other, related efforts, such as the Python array API standard. These points may aid in clarifying and differentiating our objectives.

  • The array context is about exposing the common subset of operations available in immutable and mutable arrays. As a result, the interface does not seek to support interfaces that provide, enable, or are typically used only with in-place mutation.

    For example: The equivalents of numpy.empty() were deprecated and will eventually be removed.

  • Each array context offers a specific subset of of numpy under arraycontext.ArrayContext.np. Functions under this namespace must be unconditionally numpy-compatible, that is, they may not offer an interface beyond what numpy offers. Functions that are incompatible, for example by supporting tag metadata (cf. arraycontext.ArrayContext.einsum()) should live under the ArrayContext directly.

  • Similarly, we strive to minimize redundancy between attributes of ArrayContext and arraycontext.ArrayContext.np.

    For example: ArrayContext.empty_like was deprecated.

  • Array containers are data structures that may contain arrays. See arraycontext.container. We strive to support these, where sensible, in ArrayContext and arraycontext.ArrayContext.np.


Indices and tables