Skip to content

Commit 91c1f80

Browse files
Improved typing for builtins (#127)
* move typehints to stub * improved typing
1 parent 1e7d76a commit 91c1f80

File tree

3 files changed

+244
-277
lines changed

3 files changed

+244
-277
lines changed

asyncstdlib/builtins.py

Lines changed: 4 additions & 276 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
Optional,
1212
Dict,
1313
Any,
14-
overload,
1514
)
1615
import builtins as _sync_builtins
1716

18-
from ._typing import T, T1, T2, T3, T4, T5, R, HK, LT, ADD, AnyIterable
17+
from ._typing import T, R, HK, LT, AnyIterable
1918
from ._core import (
2019
aiter,
2120
ScopedIter,
@@ -27,14 +26,6 @@
2726
__ANEXT_DEFAULT = Sentinel("<no default>")
2827

2928

30-
@overload
31-
async def anext(iterator: AsyncIterator[T]) -> T: ...
32-
33-
34-
@overload
35-
async def anext(iterator: AsyncIterator[T], default: T) -> T: ...
36-
37-
3829
async def anext(
3930
iterator: AsyncIterator[T], default: Union[Sentinel, T] = __ANEXT_DEFAULT
4031
) -> T:
@@ -63,16 +54,6 @@ async def anext(
6354
__ITER_DEFAULT = Sentinel("<no default>")
6455

6556

66-
@overload
67-
def iter(subject: AnyIterable[T]) -> AsyncIterator[T]:
68-
pass
69-
70-
71-
@overload
72-
def iter(subject: Callable[[], Awaitable[T]], sentinel: T) -> AsyncIterator[T]:
73-
pass
74-
75-
7657
def iter(
7758
subject: Union[AnyIterable[T], Callable[[], Awaitable[T]]],
7859
sentinel: Union[Sentinel, T] = __ITER_DEFAULT,
@@ -116,7 +97,7 @@ async def acallable_iterator(
11697
value = await subject()
11798

11899

119-
async def all(iterable: AnyIterable[T]) -> bool:
100+
async def all(iterable: AnyIterable[Any]) -> bool:
120101
"""
121102
Return :py:data:`True` if none of the elements of the (async) ``iterable`` are false
122103
"""
@@ -127,7 +108,7 @@ async def all(iterable: AnyIterable[T]) -> bool:
127108
return True
128109

129110

130-
async def any(iterable: AnyIterable[T]) -> bool:
111+
async def any(iterable: AnyIterable[Any]) -> bool:
131112
"""
132113
Return :py:data:`False` if none of the elements of the (async) ``iterable`` are true
133114
"""
@@ -138,68 +119,6 @@ async def any(iterable: AnyIterable[T]) -> bool:
138119
return False
139120

140121

141-
@overload
142-
def zip(
143-
__it1: AnyIterable[T1],
144-
*,
145-
strict: bool = ...,
146-
) -> AsyncIterator[Tuple[T1]]: ...
147-
148-
149-
@overload
150-
def zip(
151-
__it1: AnyIterable[T1],
152-
__it2: AnyIterable[T2],
153-
*,
154-
strict: bool = ...,
155-
) -> AsyncIterator[Tuple[T1, T2]]: ...
156-
157-
158-
@overload
159-
def zip(
160-
__it1: AnyIterable[T1],
161-
__it2: AnyIterable[T2],
162-
__it3: AnyIterable[T3],
163-
*,
164-
strict: bool = ...,
165-
) -> AsyncIterator[Tuple[T1, T2, T3]]: ...
166-
167-
168-
@overload
169-
def zip(
170-
__it1: AnyIterable[T1],
171-
__it2: AnyIterable[T2],
172-
__it3: AnyIterable[T3],
173-
__it4: AnyIterable[T4],
174-
*,
175-
strict: bool = ...,
176-
) -> AsyncIterator[Tuple[T1, T2, T3, T4]]: ...
177-
178-
179-
@overload
180-
def zip(
181-
__it1: AnyIterable[T1],
182-
__it2: AnyIterable[T2],
183-
__it3: AnyIterable[T3],
184-
__it4: AnyIterable[T4],
185-
__it5: AnyIterable[T5],
186-
*,
187-
strict: bool = ...,
188-
) -> AsyncIterator[Tuple[T1, T2, T3, T4, T5]]: ...
189-
190-
191-
@overload
192-
def zip(
193-
__it1: AnyIterable[Any],
194-
__it2: AnyIterable[Any],
195-
__it3: AnyIterable[Any],
196-
__it4: AnyIterable[Any],
197-
__it5: AnyIterable[Any],
198-
*iterables: AnyIterable[Any],
199-
strict: bool = ...,
200-
) -> AsyncIterator[Tuple[Any, ...]]: ...
201-
202-
203122
async def zip(
204123
*iterables: AnyIterable[Any], strict: bool = False
205124
) -> AsyncIterator[Tuple[Any, ...]]:
@@ -285,118 +204,6 @@ async def _zip_inner_strict(
285204
return
286205

287206

288-
@overload
289-
def map(
290-
function: Callable[[T1], Awaitable[R]],
291-
__it1: AnyIterable[T1],
292-
) -> AsyncIterator[R]: ...
293-
294-
295-
@overload
296-
def map(
297-
function: Callable[[T1], R],
298-
__it1: AnyIterable[T1],
299-
) -> AsyncIterator[R]: ...
300-
301-
302-
@overload
303-
def map(
304-
function: Callable[[T1, T2], Awaitable[R]],
305-
__it1: AnyIterable[T1],
306-
__it2: AnyIterable[T2],
307-
) -> AsyncIterator[R]: ...
308-
309-
310-
@overload
311-
def map(
312-
function: Callable[[T1, T2], R], __it1: AnyIterable[T1], __it2: AnyIterable[T2]
313-
) -> AsyncIterator[R]: ...
314-
315-
316-
@overload
317-
def map(
318-
function: Callable[[T1, T2, T3], Awaitable[R]],
319-
__it1: AnyIterable[T1],
320-
__it2: AnyIterable[T2],
321-
__it3: AnyIterable[T3],
322-
) -> AsyncIterator[R]: ...
323-
324-
325-
@overload
326-
def map(
327-
function: Callable[[T1, T2, T3], R],
328-
__it1: AnyIterable[T1],
329-
__it2: AnyIterable[T2],
330-
__it3: AnyIterable[T3],
331-
) -> AsyncIterator[R]: ...
332-
333-
334-
@overload
335-
def map(
336-
function: Callable[[T1, T2, T3, T4], Awaitable[R]],
337-
__it1: AnyIterable[T1],
338-
__it2: AnyIterable[T2],
339-
__it3: AnyIterable[T3],
340-
__it4: AnyIterable[T4],
341-
) -> AsyncIterator[R]: ...
342-
343-
344-
@overload
345-
def map(
346-
function: Callable[[T1, T2, T3, T4], R],
347-
__it1: AnyIterable[T1],
348-
__it2: AnyIterable[T2],
349-
__it3: AnyIterable[T3],
350-
__it4: AnyIterable[T4],
351-
) -> AsyncIterator[R]: ...
352-
353-
354-
@overload
355-
def map(
356-
function: Callable[[T1, T2, T3, T4, T5], Awaitable[R]],
357-
__it1: AnyIterable[T1],
358-
__it2: AnyIterable[T2],
359-
__it3: AnyIterable[T3],
360-
__it4: AnyIterable[T4],
361-
__it5: AnyIterable[T5],
362-
) -> AsyncIterator[R]: ...
363-
364-
365-
@overload
366-
def map(
367-
function: Callable[[T1, T2, T3, T4, T5], R],
368-
__it1: AnyIterable[T1],
369-
__it2: AnyIterable[T2],
370-
__it3: AnyIterable[T3],
371-
__it4: AnyIterable[T4],
372-
__it5: AnyIterable[T5],
373-
) -> AsyncIterator[R]: ...
374-
375-
376-
@overload
377-
def map(
378-
function: Callable[..., Awaitable[R]],
379-
__it1: AnyIterable[Any],
380-
__it2: AnyIterable[Any],
381-
__it3: AnyIterable[Any],
382-
__it4: AnyIterable[Any],
383-
__it5: AnyIterable[Any],
384-
*iterable: AnyIterable[Any],
385-
) -> AsyncIterator[R]: ...
386-
387-
388-
@overload
389-
def map(
390-
function: Callable[..., R],
391-
__it1: AnyIterable[Any],
392-
__it2: AnyIterable[Any],
393-
__it3: AnyIterable[Any],
394-
__it4: AnyIterable[Any],
395-
__it5: AnyIterable[Any],
396-
*iterable: AnyIterable[Any],
397-
) -> AsyncIterator[R]: ...
398-
399-
400207
async def map(
401208
function: Union[Callable[..., R], Callable[..., Awaitable[R]]],
402209
*iterable: AnyIterable[Any],
@@ -428,26 +235,6 @@ async def map(
428235
__MIN_MAX_DEFAULT = Sentinel("<no default>")
429236

430237

431-
@overload
432-
async def max(iterable: AnyIterable[LT], *, key: None = ...) -> LT: ...
433-
434-
435-
@overload
436-
async def max(
437-
iterable: AnyIterable[LT], *, key: None = ..., default: T
438-
) -> Union[LT, T]: ...
439-
440-
441-
@overload
442-
async def max(iterable: AnyIterable[T1], *, key: Callable[[T1], LT] = ...) -> T1: ...
443-
444-
445-
@overload
446-
async def max(
447-
iterable: AnyIterable[T1], *, key: Callable[[T1], LT] = ..., default: T2
448-
) -> Union[T1, T2]: ...
449-
450-
451238
async def max(
452239
iterable: AnyIterable[Any],
453240
*,
@@ -474,26 +261,6 @@ async def max(
474261
return await _min_max(iterable, key, True, default)
475262

476263

477-
@overload
478-
async def min(iterable: AnyIterable[LT], *, key: None = ...) -> LT: ...
479-
480-
481-
@overload
482-
async def min(
483-
iterable: AnyIterable[LT], *, key: None = ..., default: T
484-
) -> Union[LT, T]: ...
485-
486-
487-
@overload
488-
async def min(iterable: AnyIterable[T1], *, key: Callable[[T1], LT] = ...) -> T1: ...
489-
490-
491-
@overload
492-
async def min(
493-
iterable: AnyIterable[T1], *, key: Callable[[T1], LT] = ..., default: T2
494-
) -> Union[T1, T2]: ...
495-
496-
497264
async def min(
498265
iterable: AnyIterable[Any],
499266
*,
@@ -594,18 +361,6 @@ async def enumerate(
594361
count += 1
595362

596363

597-
@overload
598-
async def sum(iterable: AnyIterable[int]) -> int: ...
599-
600-
601-
@overload
602-
async def sum(iterable: AnyIterable[float]) -> float: ...
603-
604-
605-
@overload
606-
async def sum(iterable: AnyIterable[ADD], start: ADD) -> ADD: ...
607-
608-
609364
async def sum(iterable: AnyIterable[Any], start: Any = 0) -> Any:
610365
"""
611366
Sum of ``start`` and all elements in the (async) iterable
@@ -632,21 +387,6 @@ async def tuple(iterable: Union[Iterable[T], AsyncIterable[T]] = ()) -> Tuple[T,
632387
return (*[element async for element in aiter(iterable)],)
633388

634389

635-
@overload
636-
async def dict( # noqa: F811
637-
iterable: Union[Iterable[Tuple[HK, T]], AsyncIterable[Tuple[HK, T]]] = (),
638-
) -> Dict[HK, T]:
639-
pass
640-
641-
642-
@overload # noqa: F811
643-
async def dict( # noqa: F811
644-
iterable: Union[Iterable[Tuple[HK, T]], AsyncIterable[Tuple[HK, T]]] = (),
645-
**kwargs: T,
646-
) -> Dict[Union[HK, str], T]:
647-
pass
648-
649-
650390
async def dict( # noqa: F811
651391
iterable: Union[Iterable[Tuple[HK, T]], AsyncIterable[Tuple[HK, T]]] = (),
652392
**kwargs: T,
@@ -674,18 +414,6 @@ async def set(iterable: Union[Iterable[T], AsyncIterable[T]] = ()) -> Set[T]:
674414
return {element async for element in aiter(iterable)}
675415

676416

677-
@overload
678-
async def sorted(
679-
iterable: AnyIterable[LT], *, key: None = ..., reverse: bool = ...
680-
) -> List[LT]: ...
681-
682-
683-
@overload
684-
async def sorted(
685-
iterable: AnyIterable[T], *, key: Callable[[T], LT], reverse: bool = ...
686-
) -> List[T]: ...
687-
688-
689417
async def sorted(
690418
iterable: AnyIterable[T],
691419
*,
@@ -716,7 +444,7 @@ async def sorted(
716444
try:
717445
return _sync_builtins.sorted(iterable, reverse=reverse) # type: ignore
718446
except TypeError:
719-
items = [item async for item in aiter(iterable)]
447+
items: "_sync_builtins.list[Any]" = [item async for item in aiter(iterable)]
720448
items.sort(reverse=reverse)
721449
return items
722450
else:

0 commit comments

Comments
 (0)