| import torch |
| import torch.utils.benchmark as benchmark |
| |
| MEMO = {} |
| |
| |
| def create_nested_dict_type(layers): |
| if layers == 0: |
| return torch._C.StringType.get() |
| if layers not in MEMO: |
| less_nested = create_nested_dict_type(layers - 1) |
| result = torch._C.DictType( |
| torch._C.StringType.get(), torch._C.TupleType([less_nested, less_nested]) |
| ) |
| MEMO[layers] = result |
| return MEMO[layers] |
| |
| |
| nesting_levels = (1, 3, 5, 10) |
| types = (reasonable, medium, big, huge) = [ |
| create_nested_dict_type(x) for x in nesting_levels |
| ] |
| |
| timers = [ |
| benchmark.Timer(stmt="x.annotation_str", globals={"x": nested_type}) |
| for nested_type in types |
| ] |
| |
| for nesting_level, typ, timer in zip(nesting_levels, types, timers): |
| print("Nesting level:", nesting_level) |
| print("output:", typ.annotation_str[:70]) |
| print(timer.blocked_autorange()) |