It's a very complicated method signature, e.g.
_[()] returns Self if 1d+, otherwise (if 0d) returns its scalar type
_[int] returns Self[DTypeT, ShapeT[1:]] if 1d+, otherwise (if 0d) returns its scalar type
_[int, int] returns Self[DTypeT, ShapeT[1:]] if 1d+, otherwise (if 0d) returns its scalar type
- ...
_[None] returns array[DTypeT, (int, *ShapeT)]
_[None, None] returns array[DTypeT, (int, int, *ShapeT)]
- ...
_[slice | array-indexer] returns Self for 1d+, otherwise rejects
_[slice | array-indexer, slice | array-indexer] returns Self for 2d+, otherwise rejects
- ...
_[...] returns Self for 0d+
almost all possible combinations are also valid 😅
It's a very complicated method signature, e.g.
_[()]returnsSelfif 1d+, otherwise (if 0d) returns its scalar type_[int]returnsSelf[DTypeT, ShapeT[1:]]if 1d+, otherwise (if 0d) returns its scalar type_[int, int]returnsSelf[DTypeT, ShapeT[1:]]if 1d+, otherwise (if 0d) returns its scalar type_[None]returnsarray[DTypeT, (int, *ShapeT)]_[None, None]returnsarray[DTypeT, (int, int, *ShapeT)]_[slice | array-indexer]returnsSelffor 1d+, otherwise rejects_[slice | array-indexer, slice | array-indexer]returnsSelffor 2d+, otherwise rejects_[...]returnsSelffor 0d+almost all possible combinations are also valid 😅