Array API specification for array object attributes and methods.
A conforming implementation of the array API standard must provide and support an array object having the following attributes and methods adhering to the following conventions.
- Positional parameters must be positional-only parameters. Positional-only parameters have no externally-usable name. When a method accepting positional-only parameters is called, positional arguments are mapped to these parameters based solely on their order.
- Optional parameters must be keyword-only arguments.
- Broadcasting semantics must follow the semantics defined in :ref:`broadcasting`.
- Unless stated otherwise, methods must support the data types defined in :ref:`data-types`.
- Unless stated otherwise, methods must adhere to the type promotion rules defined in :ref:`type-promotion`.
- Unless stated otherwise, floating-point operations must adhere to IEEE 754-2019.
Furthermore, a conforming implementation of the array API standard must support array objects of arbitrary rank N
(i.e., number of dimensions), where N
is greater than or equal to zero.
Note
Conforming implementations must support zero-dimensional arrays.
Apart from array object attributes, such as ndim
, device
, and dtype
, all operations in this standard return arrays (or tuples of arrays), including those operations, such as mean
, var
, and std
, from which some common array libraries (e.g., NumPy) return scalar values.
Rationale: always returning arrays is necessary to (1) support accelerator libraries where non-array return values could force device synchronization and (2) support delayed execution models where an array represents a future value.
A conforming implementation of the array API standard must provide and support an array object supporting the following Python operators.
A conforming implementation of the array API standard must provide and support an array object supporting the following Python arithmetic operators.
+x
: :meth:`.array.__pos__`- -x: :meth:`.array.__neg__`
- x1 + x2: :meth:`.array.__add__`
- x1 - x2: :meth:`.array.__sub__`
- x1 * x2: :meth:`.array.__mul__`
- x1 / x2: :meth:`.array.__truediv__`
- x1 // x2: :meth:`.array.__floordiv__`
- x1 % x2: :meth:`.array.__mod__`
- x1 ** x2: :meth:`.array.__pow__`
Arithmetic operators should be defined for arrays having real-valued data types.
A conforming implementation of the array API standard must provide and support an array object supporting the following Python array operators.
The matmul @
operator should be defined for arrays having real-valued data types.
A conforming implementation of the array API standard must provide and support an array object supporting the following Python bitwise operators.
- ~x: :meth:`.array.__invert__`
- x1 & x2: :meth:`.array.__and__`
- x1 | x2: :meth:`.array.__or__`
- x1 ^ x2: :meth:`.array.__xor__`
- x1 << x2: :meth:`.array.__lshift__`
- x1 >> x2: :meth:`.array.__rshift__`
Bitwise operators should be defined for arrays having integer and boolean data types.
A conforming implementation of the array API standard must provide and support an array object supporting the following Python comparison operators.
- x1 < x2: :meth:`.array.__lt__`
- x1 <= x2: :meth:`.array.__le__`
- x1 > x2: :meth:`.array.__gt__`
- x1 >= x2: :meth:`.array.__ge__`
- x1 == x2: :meth:`.array.__eq__`
- x1 != x2: :meth:`.array.__ne__`
Comparison operators should be defined for arrays having any data type.
A conforming implementation of the array API standard must provide and support an array object supporting the following in-place Python operators.
An in-place operation must not change the data type or shape of the in-place array as a result of :ref:`type-promotion` or :ref:`broadcasting`.
An in-place operation must have the same behavior (including special cases) as its respective binary (i.e., two operand, non-assignment) operation. For example, after in-place addition x1 += x2
, the modified array x1
must always equal the result of the equivalent binary arithmetic operation x1 = x1 + x2
.
Note
In-place operators must be supported as discussed in :ref:`copyview-mutability`.
+=
. May be implemented via__iadd__
.-=
. May be implemented via__isub__
.*=
. May be implemented via__imul__
./=
. May be implemented via__itruediv__
.//=
. May be implemented via__ifloordiv__
.**=
. May be implemented via__ipow__
.%=
. May be implemented via__imod__
.
@=
. May be implemented via__imatmul__
.
&=
. May be implemented via__iand__
.|=
. May be implemented via__ior__
.^=
. May be implemented via__ixor__
.<<=
. May be implemented via__ilshift__
.>>=
. May be implemented via__irshift__
.
A conforming implementation of the array API standard must provide and support an array object supporting the following reflected operators.
The results of applying reflected operators must match their non-reflected equivalents.
Note
All operators for which array <op> scalar
is implemented must have an equivalent reflected operator implementation.
__radd__
__rsub__
__rmul__
__rtruediv__
__rfloordiv__
__rpow__
__rmod__
__rmatmul__
__rand__
__ror__
__rxor__
__rlshift__
__rrshift__
.. currentmodule:: array_api
.. autosummary:: :toctree: generated :template: property.rst array.dtype array.device array.mT array.ndim array.shape array.size array.T
.. autosummary:: :toctree: generated :template: property.rst array.__abs__ array.__add__ array.__and__ array.__array_namespace__ array.__bool__ array.__complex__ array.__dlpack__ array.__dlpack_device__ array.__eq__ array.__float__ array.__floordiv__ array.__ge__ array.__getitem__ array.__gt__ array.__index__ array.__int__ array.__invert__ array.__le__ array.__lshift__ array.__lt__ array.__matmul__ array.__mod__ array.__mul__ array.__ne__ array.__neg__ array.__or__ array.__pos__ array.__pow__ array.__rshift__ array.__setitem__ array.__sub__ array.__truediv__ array.__xor__ array.to_device