@@ -101,7 +101,7 @@ _IterFlag: TypeAlias = L[
101101 "reduce_ok" ,
102102 "zerosize_ok" ,
103103]
104- _IterFlagOp : TypeAlias = L [
104+ _OpFlag : TypeAlias = L [
105105 "readonly" , "writeonly" , "readwrite" ,
106106 "no_broadcast" ,
107107 "config" ,
@@ -114,6 +114,8 @@ _IterFlagOp: TypeAlias = L[
114114 "overlap_assume_elementwise" ,
115115 "virtual" , # undocumented
116116] # fmt: skip
117+ _OpFlags : TypeAlias = Sequence [_OpFlag ]
118+ _OpAxes : TypeAlias = Sequence [CanIndex ] | None
117119
118120_ShapeLike1D : TypeAlias = CanIndex | tuple [CanIndex ]
119121_ShapeLike2D : TypeAlias = tuple [CanIndex , CanIndex ]
@@ -308,7 +310,7 @@ class flagsobj:
308310@final
309311class broadcast :
310312 @property
311- def iters (self ) -> tuple [flatiter [Incomplete ], ...]: ...
313+ def iters (self ) -> tuple [flatiter [_nt . Array [ Incomplete ] ], ...]: ...
312314 @property
313315 def index (self ) -> int : ...
314316 @property
@@ -323,11 +325,11 @@ class broadcast:
323325 def shape (self ) -> _nt .Shape : ...
324326
325327 #
326- def __new__ (cls , * args : npt . ArrayLike ) -> Self : ...
328+ def __new__ (cls , * args : _nt . ToGeneric_nd ) -> Self : ...
327329
328330 #
329- def __next__ (self ) -> tuple [Incomplete , ...]: ...
330331 def __iter__ (self ) -> Self : ...
332+ def __next__ (self ) -> tuple [Incomplete , ...]: ...
331333
332334 #
333335 def reset (self ) -> None : ...
@@ -370,8 +372,38 @@ class flatiter(Generic[_ArrayT_co]):
370372
371373@final
372374class nditer :
375+ @overload
376+ def __init__ (
377+ self ,
378+ / ,
379+ op : _nt .ToGeneric_nd ,
380+ flags : Sequence [_IterFlag ] | None = None ,
381+ op_flags : _OpFlags | None = None ,
382+ op_dtypes : _nt .ToDType | None = None ,
383+ order : _OrderKACF = "K" ,
384+ casting : _CastingKind = "safe" ,
385+ op_axes : _OpAxes = None ,
386+ itershape : _ShapeLike | None = None ,
387+ buffersize : CanIndex = 0 ,
388+ ) -> None : ...
389+ @overload
390+ def __init__ (
391+ self ,
392+ / ,
393+ op : Sequence [_nt .ToGeneric_nd | None ],
394+ flags : Sequence [_IterFlag ] | None = None ,
395+ op_flags : Sequence [_OpFlags ] | None = None ,
396+ op_dtypes : Sequence [_nt .ToDType | None ] | None = None ,
397+ order : _OrderKACF = "K" ,
398+ casting : _CastingKind = "safe" ,
399+ op_axes : Sequence [_OpAxes ] | None = None ,
400+ itershape : _ShapeLike | None = None ,
401+ buffersize : CanIndex = 0 ,
402+ ) -> None : ...
403+
404+ #
373405 @property
374- def dtypes (self ) -> tuple [np .dtype , ... ]: ...
406+ def dtypes (self ) -> tuple [np .dtype [ Incomplete ], * tuple [ np . dtype [ Incomplete ], ...] ]: ...
375407 @property
376408 def shape (self ) -> _nt .Shape : ...
377409 @property
@@ -393,74 +425,73 @@ class nditer:
393425 @property
394426 def nop (self ) -> int : ...
395427 @property
396- def index (self ) -> int : ...
428+ def index (self ) -> int : ... # might raise ValueError
397429 @property
398- def multi_index (self ) -> tuple [ int , ...] : ...
430+ def multi_index (self ) -> _nt . Shape : ... # might raise ValueError
399431 @property
400432 def iterindex (self ) -> int : ...
401433 @property
402434 def itersize (self ) -> int : ...
403435 @property
404- def iterrange (self ) -> tuple [int , ... ]: ...
436+ def iterrange (self ) -> tuple [int , int ]: ...
405437 @property
406- def itviews (self ) -> tuple [_nt .Array [Incomplete ], ... ]: ...
438+ def itviews (self ) -> tuple [_nt .Array [Incomplete ], * tuple [ _nt . Array [ Incomplete ], ...] ]: ...
407439 @property
408- def operands (self ) -> tuple [_nt .Array [Incomplete ], ...]: ...
409- @property
410- def value (self ) -> tuple [_nt .Array [Incomplete ], ...]: ...
411-
412- #
413- def __init__ (
414- self ,
415- / ,
416- op : Sequence [npt .ArrayLike | None ] | npt .ArrayLike ,
417- flags : Sequence [_IterFlag ] | None = None ,
418- op_flags : Sequence [Sequence [_IterFlagOp ]] | None = None ,
419- op_dtypes : Sequence [npt .DTypeLike ] | npt .DTypeLike = None ,
420- order : _OrderKACF = "K" ,
421- casting : _CastingKind = "safe" ,
422- op_axes : Sequence [Sequence [CanIndex ]] | None = None ,
423- itershape : _ShapeLike | None = None ,
424- buffersize : CanIndex = 0 ,
425- ) -> None : ...
440+ def operands (self ) -> tuple [_nt .Array [Incomplete ], * tuple [_nt .Array [Incomplete ], ...]]: ...
426441
427442 #
428443 def __enter__ (self ) -> Self : ...
429444 def __exit__ (self , t : type [BaseException ] | None , e : BaseException | None , tb : TracebackType | None , / ) -> None : ...
430445 def close (self ) -> None : ...
431446 def reset (self ) -> None : ...
447+ def enable_external_loop (self ) -> None : ...
448+ def remove_axis (self , i : CanIndex , / ) -> None : ...
449+ def remove_multi_index (self ) -> None : ...
450+ def debug_print (self ) -> None : ...
451+ def iternext (self ) -> py_bool : ...
452+
453+ #
454+ def __copy__ (self ) -> Self : ...
455+ def copy (self ) -> Self : ...
432456
433457 #
434- def __len__ (self ) -> int : ...
435458 def __iter__ (self ) -> Self : ...
436- def __next__ (self ) -> tuple [_nt .Array [Incomplete ], ...]: ...
437- def iternext (self ) -> py_bool : ...
459+
460+ # returns either a single array or a tuple of multiple arrays
461+ def __next__ (self ) -> _nt .Array [Incomplete ] | Incomplete : ...
462+ @property
463+ def value (self ) -> _nt .Array [Incomplete ] | Incomplete : ...
438464
439465 #
466+ def __len__ (self ) -> int : ...
440467 @overload
441468 def __getitem__ (self , index : CanIndex , / ) -> _nt .Array [Incomplete ]: ...
442469 @overload
443470 def __getitem__ (self , index : slice , / ) -> tuple [_nt .Array [Incomplete ], ...]: ...
444- def __setitem__ (self , index : slice | CanIndex , value : npt .ArrayLike , / ) -> None : ...
445-
446- #
447- def __copy__ (self ) -> Self : ...
448- def copy (self ) -> nditer : ...
449-
450- # .
451- def debug_print (self ) -> None : ...
452- def enable_external_loop (self ) -> None : ...
453-
454- #
455- def remove_axis (self , i : CanIndex , / ) -> None : ...
456- def remove_multi_index (self ) -> None : ...
471+ @overload
472+ def __setitem__ (self , index : CanIndex , value : _nt .ToGeneric_nd , / ) -> None : ...
473+ @overload
474+ def __setitem__ (self , index : slice , value : Sequence [_nt .ToGeneric_nd ], / ) -> None : ...
457475
476+ #
477+ @overload
478+ def nested_iters (
479+ op : _nt .ToGeneric_nd ,
480+ axes : Sequence [Sequence [CanIndex ]],
481+ flags : Sequence [_IterFlag ] | None = None ,
482+ op_flags : _OpFlags | None = None ,
483+ op_dtypes : _nt .ToDType | None = None ,
484+ order : _OrderKACF = "K" ,
485+ casting : _CastingKind = "safe" ,
486+ buffersize : CanIndex = 0 ,
487+ ) -> tuple [nditer , ...]: ...
488+ @overload
458489def nested_iters (
459- op : Sequence [npt . ArrayLike ] | npt . ArrayLike ,
490+ op : Sequence [_nt . ToGeneric_nd | None ] ,
460491 axes : Sequence [Sequence [CanIndex ]],
461492 flags : Sequence [_IterFlag ] | None = None ,
462- op_flags : Sequence [Sequence [ _IterFlagOp ] ] | None = None ,
463- op_dtypes : Sequence [npt . DTypeLike ] | npt . DTypeLike = None ,
493+ op_flags : Sequence [_OpFlags ] | None = None ,
494+ op_dtypes : Sequence [_nt . ToDType | None ] | None = None ,
464495 order : _OrderKACF = "K" ,
465496 casting : _CastingKind = "safe" ,
466497 buffersize : CanIndex = 0 ,
0 commit comments