mirror of
https://github.com/saymrwulf/pytorch.git
synced 2026-05-14 20:57:59 +00:00
This PR changes the empty collection factory call to Python literals:
- `list()` -> `[]`
- `tuple()` -> `()`
- `dict()` -> `{}`
The Python literals are more performant and safer. For example, the bytecode for building an empty dictionary:
```bash
$ python3 -m dis - <<EOS
import collections
d1 = {}
d2 = dict()
dict = collections.OrderedDict
d3 = dict()
EOS
```
```text
0 0 RESUME 0
1 2 LOAD_CONST 0 (0)
4 LOAD_CONST 1 (None)
6 IMPORT_NAME 0 (collections)
8 STORE_NAME 0 (collections)
3 10 BUILD_MAP 0
12 STORE_NAME 1 (d1)
4 14 PUSH_NULL
16 LOAD_NAME 2 (dict)
18 CALL 0
26 STORE_NAME 3 (d2)
6 28 LOAD_NAME 0 (collections)
30 LOAD_ATTR 8 (OrderedDict)
50 STORE_NAME 2 (dict)
7 52 PUSH_NULL
54 LOAD_NAME 2 (dict)
56 CALL 0
64 STORE_NAME 5 (d3)
66 RETURN_CONST 1 (None)
```
The dict literal `{}` only has one bytecode `BUILD_MAP`, while the factory call `dict()` has three `PUSH_NULL + LOAD_NAME + CALL`. Also, the factory call is not safe if users override the `dict` name in `locals` or `globals` (see the example of replacing with `OrderedDict` above).
Pull Request resolved: https://github.com/pytorch/pytorch/pull/130199
Approved by: https://github.com/malfet
|
||
|---|---|---|
| .. | ||
| heuristics | ||
| gen_operators_yaml_test.py | ||
| gen_oplist_test.py | ||
| test_cmake.py | ||
| test_codegen.py | ||
| test_codegen_model.py | ||
| test_create_alerts.py | ||
| test_executorch_custom_ops.py | ||
| test_executorch_gen.py | ||
| test_executorch_signatures.py | ||
| test_executorch_types.py | ||
| test_executorch_unboxing.py | ||
| test_gen_backend_stubs.py | ||
| test_selective_build.py | ||
| test_test_run.py | ||
| test_test_selections.py | ||
| test_upload_stats_lib.py | ||
| test_upload_test_stats.py | ||
| test_utils.py | ||
| test_vulkan_codegen.py | ||