@@ -141,6 +141,10 @@ class CanLenArray(Protocol[_ScalarT_co, _ShapeT_co]):
141
141
def __len__ (self , / ) -> int : ...
142
142
def __array__ (self , / ) -> np .ndarray [_ShapeT_co , np .dtype [_ScalarT_co ]]: ...
143
143
144
+ @type_check_only
145
+ class _CanStringArray (Protocol [_ShapeT_co ]):
146
+ def __array__ (self , / ) -> np .ndarray [_ShapeT_co , np .dtypes .StringDType ]: ...
147
+
144
148
###
145
149
# Shape aliases
146
150
@@ -158,6 +162,7 @@ Sequence2D: TypeAlias = Sequence[Sequence[_T]]
158
162
Sequence3D : TypeAlias = Sequence [Sequence [Sequence [_T ]]]
159
163
160
164
# nested sequences with at least k dims, e.g. `2nd` denotes a dimensionality in the interval [2, n]
165
+ SequenceND : TypeAlias = _T | _NestedSequence [_T ]
161
166
Sequence1ND : TypeAlias = _NestedSequence [_T ]
162
167
Sequence2ND : TypeAlias = Sequence [_NestedSequence [_T ]]
163
168
Sequence3ND : TypeAlias = Sequence [Sequence [_NestedSequence [_T ]]]
@@ -192,8 +197,8 @@ _PyObject: TypeAlias = decimal.Decimal | fractions.Fraction
192
197
_PyScalar : TypeAlias = complex | _PyCharacter | _PyObject
193
198
194
199
_ToArray2_0d : TypeAlias = CanArray0D [_ScalarT ] | _ToT
195
- _ToArray_nd : TypeAlias = CanArrayND [ _ScalarT ] | Sequence1ND [CanArrayND [_ScalarT ]]
196
- _ToArray2_nd : TypeAlias = CanArrayND [_ScalarT ] | _ToT | Sequence1ND [ _ToT | CanArrayND [ _ScalarT ] ]
200
+ _ToArray_nd : TypeAlias = SequenceND [CanArrayND [_ScalarT ]]
201
+ _ToArray2_nd : TypeAlias = SequenceND [ CanArrayND [_ScalarT ] | _ToT ]
197
202
198
203
# don't require matching shape-types by default
199
204
_ToArray_1d : TypeAlias = CanLenArrayND [_ScalarT ] | Sequence [CanArray0D [_ScalarT ]]
@@ -636,6 +641,15 @@ ToObject_1nd = TypeAliasType("ToObject_1nd", _ToArray2_1nd[np.object_, _PyObject
636
641
ToObject_2nd = TypeAliasType ("ToObject_2nd" , _ToArray2_2nd [np .object_ , _PyObject ])
637
642
ToObject_3nd = TypeAliasType ("ToObject_3nd" , _ToArray2_3nd [np .object_ , _PyObject ])
638
643
644
+ # StringDType
645
+ ToString_nd = TypeAliasType ("ToString_nd" , _CanStringArray [AtLeast0D ])
646
+ ToString_1ds = TypeAliasType ("ToString_1ds" , _CanStringArray [tuple [int ]])
647
+ ToString_2ds = TypeAliasType ("ToString_2ds" , _CanStringArray [tuple [int , int ]])
648
+ ToString_3ds = TypeAliasType ("ToString_3ds" , _CanStringArray [tuple [int , int , int ]])
649
+ ToString_1nd = TypeAliasType ("ToString_1nd" , _CanStringArray [AtLeast1D ])
650
+ ToString_2nd = TypeAliasType ("ToString_2nd" , _CanStringArray [AtLeast2D ])
651
+ ToString_3nd = TypeAliasType ("ToString_3nd" , _CanStringArray [AtLeast3D ])
652
+
639
653
# any scalar
640
654
ToGeneric_nd = TypeAliasType ("ToGeneric_nd" , _ToArray2_nd [np .generic , _PyScalar ])
641
655
ToGeneric_0d = TypeAliasType ("ToGeneric_0d" , _ToArray2_0d [np .generic , _PyScalar ])
0 commit comments