8
8
from typing_extensions import TypeAliasType , TypeVar
9
9
10
10
import numpy as np
11
- import numpy_typing_compat
11
+ import numpy_typing_compat as nptc
12
12
13
13
import optype .numpy .compat as npc
14
- from ._array import CanArray1D , CanArray2D , CanArray3D , CanArrayND
15
14
from ._sequence_nd import SequenceND as SeqND
16
15
from optype ._core ._just import JustComplex , JustFloat , JustInt
17
16
@@ -125,88 +124,98 @@ def __dir__() -> list[str]:
125
124
# (and aren't runtime checkable)
126
125
127
126
128
- class _CanArray0D (Protocol [SCT_co ]):
129
- def __array__ (self , / ) -> np .ndarray [tuple [()], np .dtype [SCT_co ]]: ...
127
+ _CanArrayStrict1D = TypeAliasType (
128
+ "_CanArrayStrict1D" ,
129
+ "nptc.CanArray[tuple[int], np.dtype[SCT]]" ,
130
+ type_params = (SCT ,),
131
+ )
132
+ _CanArrayStrict2D = TypeAliasType (
133
+ "_CanArrayStrict2D" ,
134
+ "nptc.CanArray[tuple[int, int], np.dtype[SCT]]" ,
135
+ type_params = (SCT ,),
136
+ )
137
+ _CanArrayStrict3D = TypeAliasType (
138
+ "_CanArrayStrict3D" ,
139
+ "nptc.CanArray[tuple[int, int, int], np.dtype[SCT]]" ,
140
+ type_params = (SCT ,),
141
+ )
130
142
131
143
132
144
class _CanArrayND (Protocol [SCT_co ]):
145
+ def __len__ (self , / ) -> int : ...
133
146
def __array__ (self , / ) -> np .ndarray [Any , np .dtype [SCT_co ]]: ...
134
147
135
148
136
- _To1D1 = TypeAliasType (
137
- "_To1D1" ,
138
- CanArrayND [SCT ] | Seq [_CanArray0D [SCT ]],
139
- type_params = (SCT ,),
140
- )
141
- _To1D2 = TypeAliasType (
142
- "_To1D2" ,
143
- CanArrayND [SCT ] | Seq [T | _CanArray0D [SCT ]],
144
- type_params = (T , SCT ),
145
- )
149
+ class _CanArray (Protocol [SCT_co ]):
150
+ def __array__ (self , / ) -> np .ndarray [Any , np .dtype [SCT_co ]]: ...
151
+
152
+
153
+ _To1D1 = TypeAliasType ("_To1D1" , _CanArrayND [SCT ] | Seq [SCT ], type_params = (SCT ,))
154
+ _To1D2 = TypeAliasType ("_To1D2" , _CanArrayND [SCT ] | Seq [T | SCT ], type_params = (T , SCT ))
146
155
147
156
_To2D1 = TypeAliasType (
148
157
"_To2D1" ,
149
- CanArrayND [SCT ] | Seq [_To1D1 [SCT ]],
158
+ _CanArrayND [SCT ] | Seq [_To1D1 [SCT ]],
150
159
type_params = (SCT ,),
151
160
)
152
161
_To2D2 = TypeAliasType (
153
162
"_To2D2" ,
154
- CanArrayND [SCT ] | Seq [_To1D2 [T , SCT ]],
163
+ _CanArrayND [SCT ] | Seq [_To1D2 [T , SCT ]],
155
164
type_params = (T , SCT ),
156
165
)
157
166
158
167
_To3D1 = TypeAliasType (
159
168
"_To3D1" ,
160
- CanArrayND [SCT ] | Seq [_To2D1 [SCT ]],
169
+ _CanArrayND [SCT ] | Seq [_To2D1 [SCT ]],
161
170
type_params = (SCT ,),
162
171
)
163
172
_To3D2 = TypeAliasType (
164
173
"_To3D2" ,
165
- CanArrayND [SCT ] | Seq [_To2D2 [T , SCT ]],
174
+ _CanArrayND [SCT ] | Seq [_To2D2 [T , SCT ]],
166
175
type_params = (T , SCT ),
167
176
)
168
177
169
178
_ToND1 = TypeAliasType (
170
179
"_ToND1" ,
171
- CanArrayND [SCT ] | SeqND [_CanArrayND [SCT ]],
180
+ _CanArrayND [SCT ] | SeqND [_CanArray [SCT ]],
172
181
type_params = (SCT ,),
173
182
)
174
183
_ToND2 = TypeAliasType (
175
184
"_ToND2" ,
176
- CanArrayND [SCT ] | SeqND [T | _CanArrayND [SCT ]],
185
+ _CanArrayND [SCT ] | SeqND [T | _CanArray [SCT ]],
177
186
type_params = (T , SCT ),
178
187
)
179
188
180
189
_ToStrict1D1 = TypeAliasType (
181
190
"_ToStrict1D1" ,
182
- CanArray1D [SCT ] | Seq [_CanArray0D [ SCT ] ],
191
+ _CanArrayStrict1D [SCT ] | Seq [SCT ],
183
192
type_params = (SCT ,),
184
193
)
185
194
_ToStrict1D2 = TypeAliasType (
186
195
"_ToStrict1D2" ,
187
- CanArray1D [SCT ] | Seq [T | _CanArray0D [ SCT ] ],
196
+ _CanArrayStrict1D [SCT ] | Seq [T | SCT ],
188
197
type_params = (T , SCT ),
189
198
)
190
199
191
200
_ToStrict2D1 = TypeAliasType (
192
201
"_ToStrict2D1" ,
193
- CanArray2D [SCT ] | Seq [_ToStrict1D1 [SCT ]],
202
+ _CanArrayStrict2D [SCT ] | Seq [_ToStrict1D1 [SCT ]],
194
203
type_params = (SCT ,),
195
204
)
196
205
_ToStrict2D2 = TypeAliasType (
197
206
"_ToStrict2D2" ,
198
- CanArray2D [SCT ] | Seq [_ToStrict1D2 [T , SCT ]],
207
+ _CanArrayStrict2D [SCT ] | Seq [_ToStrict1D2 [T , SCT ]],
199
208
type_params = (T , SCT ),
200
209
)
201
210
202
211
_ToStrict3D1 = TypeAliasType (
203
212
"_ToStrict3D1" ,
204
- CanArray3D [SCT ] | Seq [_ToStrict2D1 [SCT ]],
213
+ _CanArrayStrict3D [SCT ] | Seq [_ToStrict2D1 [SCT ]],
205
214
type_params = (SCT ,),
206
215
)
207
216
_ToStrict3D2 = TypeAliasType (
208
217
"_ToStrict3D2" ,
209
- CanArray3D [SCT ] | Seq [_ToStrict2D2 [T , SCT ]],
218
+ _CanArrayStrict3D [SCT ] | Seq [_ToStrict2D2 [T , SCT ]],
210
219
type_params = (T , SCT ),
211
220
)
212
221
@@ -218,7 +227,7 @@ def __array__(self, /) -> np.ndarray[Any, np.dtype[SCT_co]]: ...
218
227
# https://github.com/jorenham/optype/issues/373
219
228
220
229
integer_co = TypeAliasType ("integer_co" , npc .integer | np .bool_ )
221
- floating_co = TypeAliasType ("floating_co" , npc .floating | integer_co )
230
+ floating_co = TypeAliasType ("floating_co" , npc .floating | npc . integer | np . bool_ )
222
231
complexfloating_co = TypeAliasType ("complexfloating_co" , npc .number | np .bool_ )
223
232
224
233
# promotion rules with safe casting mode
@@ -236,11 +245,11 @@ def __array__(self, /) -> np.ndarray[Any, np.dtype[SCT_co]]: ...
236
245
)
237
246
f64_co = TypeAliasType (
238
247
"f64_co" ,
239
- npc .floating64 | npc .floating32 | npc .floating16 | integer_co ,
248
+ npc .floating64 | npc .floating32 | npc .floating16 | npc . integer | np . bool_ ,
240
249
)
241
250
c128_co = TypeAliasType (
242
251
"c128_co" ,
243
- npc .number64 | npc .number32 | npc .number16 | integer_co ,
252
+ npc .number64 | npc .number32 | npc .number16 | npc . integer | np . bool_ ,
244
253
)
245
254
246
255
@@ -255,11 +264,11 @@ def __array__(self, /) -> np.ndarray[Any, np.dtype[SCT_co]]: ...
255
264
ToArray3D : TypeAlias = _To3D2 [T , SCT ]
256
265
ToArrayND : TypeAlias = _ToND2 [T , SCT ]
257
266
258
- ToFalse = TypeAliasType ("ToFalse" , numpy_typing_compat .LiteralFalse | Literal [0 ])
259
- ToTrue = TypeAliasType ("ToTrue" , numpy_typing_compat .LiteralTrue | Literal [1 ])
267
+ ToFalse = TypeAliasType ("ToFalse" , nptc .LiteralFalse | Literal [0 ])
268
+ ToTrue = TypeAliasType ("ToTrue" , nptc .LiteralTrue | Literal [1 ])
260
269
261
- ToJustFalse = TypeAliasType ("ToJustFalse" , numpy_typing_compat .LiteralFalse )
262
- ToJustTrue = TypeAliasType ("ToJustTrue" , numpy_typing_compat .LiteralTrue )
270
+ ToJustFalse = TypeAliasType ("ToJustFalse" , nptc .LiteralFalse )
271
+ ToJustTrue = TypeAliasType ("ToJustTrue" , nptc .LiteralTrue )
263
272
264
273
ToBool : TypeAlias = _PyBool | np .bool_
265
274
ToBool1D : TypeAlias = _To1D2 [_PyBool , np .bool_ ]
0 commit comments