Extensions¶
Extensions are coherent sets of functionality that are commonly implemented across array libraries. Each array library supporting this standard may, but is not required to, implement an extension. If an extension is supported, it must be accessible inside the main array API supporting namespace as a separate namespace.
Extension module implementors must aim to provide all functions and other
public objects in an extension. The rationale for this is that downstream usage
can then check whether or not the extension is present (using hasattr(xp,
'extension_name')
should be enough), and can then assume that functions are
implemented. This in turn makes it also easy for array-consuming libraries to
document which array libraries they support - e.g., “all libraries implementing
the array API standard and its linear algebra extension”.
The mechanism through which the extension namespace is made available is up to
the implementer, e.g. via a regular submodule that is imported under the
linalg
name, or via a module-level __getattr__
.
The functions in an extension must adhere to the same conventions as those in the array API standard. See API specification.