Skip to content

Commit 8096aff

Browse files
committed
feat: HasTranspose
1 parent e624509 commit 8096aff

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

src/array_api_typing/_array.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,35 @@ def size(self) -> int | None:
146146
...
147147

148148

149+
class HasTranspose(Protocol):
150+
"""Protocol for array classes that support the transpose operation."""
151+
152+
def T(self) -> Self: # noqa: N802
153+
"""Transpose of the array.
154+
155+
The array instance must be two-dimensional. If the array instance is not
156+
two-dimensional, an error should be raised.
157+
158+
Returns:
159+
Self: two-dimensional array whose first and last dimensions (axes)
160+
are permuted in reverse order relative to original array. The
161+
returned array must have the same data type as the original
162+
array.
163+
164+
Notes:
165+
Limiting the transpose to two-dimensional arrays (matrices) deviates
166+
from the NumPy et al practice of reversing all axes for arrays
167+
having more than two-dimensions. This is intentional, as reversing
168+
all axes was found to be problematic (e.g., conflicting with the
169+
mathematical definition of a transpose which is limited to matrices;
170+
not operating on batches of matrices; et cetera). In order to
171+
reverse all axes, one is recommended to use the functional
172+
`PermuteDims` interface found in this specification.
173+
174+
"""
175+
...
176+
177+
149178
@docstring_setter(**_array_docstrings)
150179
class Array(
151180
# ------ Attributes -------
@@ -155,6 +184,7 @@ class Array(
155184
HasNDim,
156185
HasShape,
157186
HasSize,
187+
HasTranspose,
158188
# ------ Methods -------
159189
HasArrayNamespace[NS_co],
160190
op.CanPosSelf,

0 commit comments

Comments
 (0)