| 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()) |