|
1 | | -from typing import Any, TypeVar, Iterable |
| 1 | +from typing import TypeVar |
2 | 2 |
|
3 | 3 | from kirin import ir |
4 | 4 | from kirin.lowering import wraps |
5 | 5 |
|
6 | 6 | from . import stmts |
7 | 7 | from .runtime import IList |
8 | 8 |
|
9 | | -T_Elem = TypeVar("T_Elem") |
10 | | -T_Out = TypeVar("T_Out") |
11 | | -T_Result = TypeVar("T_Result") |
| 9 | +ElemT = TypeVar("ElemT") |
| 10 | +OutElemT = TypeVar("OutElemT") |
| 11 | +LenT = TypeVar("LenT") |
| 12 | +ResultT = TypeVar("ResultT") |
12 | 13 |
|
13 | 14 |
|
14 | 15 | @wraps(stmts.Map) |
15 | | -def map(fn: ir.Method[[T_Elem], T_Out], collection: Iterable) -> IList | list: ... |
| 16 | +def map( |
| 17 | + fn: ir.Method[[ElemT], OutElemT], collection: IList[ElemT, LenT] | list[ElemT] |
| 18 | +) -> IList[OutElemT, LenT]: ... |
16 | 19 |
|
17 | 20 |
|
18 | 21 | @wraps(stmts.Foldr) |
19 | 22 | def foldr( |
20 | | - fn: ir.Method[[T_Elem, T_Out], T_Out], collection: Iterable, init: T_Out |
21 | | -) -> T_Out: ... |
| 23 | + fn: ir.Method[[ElemT, OutElemT], OutElemT], |
| 24 | + collection: IList[ElemT, LenT] | list[ElemT], |
| 25 | + init: OutElemT, |
| 26 | +) -> OutElemT: ... |
22 | 27 |
|
23 | 28 |
|
24 | 29 | @wraps(stmts.Foldl) |
25 | 30 | def foldl( |
26 | | - fn: ir.Method[[T_Out, T_Elem], T_Out], collection: Iterable, init: T_Out |
27 | | -) -> T_Out: ... |
| 31 | + fn: ir.Method[[OutElemT, ElemT], OutElemT], |
| 32 | + collection: IList[ElemT, LenT] | list[ElemT], |
| 33 | + init: OutElemT, |
| 34 | +) -> OutElemT: ... |
28 | 35 |
|
29 | 36 |
|
30 | 37 | @wraps(stmts.Scan) |
31 | 38 | def scan( |
32 | | - fn: ir.Method[[T_Out, T_Elem], tuple[T_Out, T_Result]], |
33 | | - collection: Iterable, |
34 | | - init: T_Out, |
35 | | -) -> tuple[T_Out, IList[T_Result, Any]]: ... |
| 39 | + fn: ir.Method[[OutElemT, ElemT], tuple[OutElemT, ResultT]], |
| 40 | + collection: IList[ElemT, LenT] | list[ElemT], |
| 41 | + init: OutElemT, |
| 42 | +) -> tuple[OutElemT, IList[ResultT, LenT]]: ... |
36 | 43 |
|
37 | 44 |
|
38 | 45 | @wraps(stmts.ForEach) |
39 | | -def for_each(fn: ir.Method[[T_Elem], None], collection: Iterable) -> None: ... |
| 46 | +def for_each( |
| 47 | + fn: ir.Method[[ElemT], None], collection: IList[ElemT, LenT] | list[ElemT] |
| 48 | +) -> None: ... |
0 commit comments