()
| 53 | |
| 54 | |
| 55 | def nested(): |
| 56 | from types import SimpleNamespace |
| 57 | from inspect import get_annotations |
| 58 | |
| 59 | Eggs = bytes |
| 60 | Spam = memoryview |
| 61 | |
| 62 | |
| 63 | class F[Eggs, **Spam]: |
| 64 | x: Eggs |
| 65 | y: Spam |
| 66 | |
| 67 | def generic_method[Eggs, **Spam](self, x: Eggs, y: Spam): pass |
| 68 | |
| 69 | |
| 70 | def generic_function[Eggs, **Spam](x: Eggs, y: Spam): pass |
| 71 | |
| 72 | |
| 73 | # Eggs is `int` in globals, `bytes` in the function scope, |
| 74 | # a TypeVar in the type_params, and `str` in locals: |
| 75 | class G[Eggs]: |
| 76 | Eggs = str |
| 77 | x: Eggs |
| 78 | |
| 79 | |
| 80 | return SimpleNamespace( |
| 81 | F=F, |
| 82 | F_annotations=get_annotations(F, eval_str=True), |
| 83 | F_meth_annotations=get_annotations(F.generic_method, eval_str=True), |
| 84 | G_annotations=get_annotations(G, eval_str=True), |
| 85 | generic_func=generic_function, |
| 86 | generic_func_annotations=get_annotations(generic_function, eval_str=True) |
| 87 | ) |
searching dependent graphs…