How to Get the New CPython JIT
Published June 9, 2024
TL;DR
To just build and run with the JIT:
|
|
To include some debug output, to show the JIT is running:
|
|
Trying CPython's JIT
If you haven't read Brandt Bucher's incredible rhyming Christmas Day PR, drop everything and go do it. Right now.
Welcome back! I see that big smile on your face - that poem is really something no? But what does it all mean?
Essentially, CPython now has a Just-In-Time compiler implementation, at least in distributions where that's possible. There are many flavors of JIT, but their common feature is emitting machine code very shortly before the time that code is actually run. In the case of CPython's new JIT, that's done by a method called copy-and-patch, where small snippets of code (one per Python micro-opcode) are pre-compiled to machine code, with 'holes' left for external symbols and constants that can be 'stencilled in' at runtime. Pretty neat!
I won't claim to be a JIT expert, or anything close. But I am a tinkerer, and I encourage you to be the same. After a few months of playing with the JIT and submitting a few small related PR's, I want to share the how you can get a copy of Python with the JIT enabled to play with as well. We'll also see some ways to get additional debug output, for those who really want to see the sausage get made.
Building CPython with a JIT
I don't know of any major platforms that are distributing pre-built binaries of CPython with the JIT built-in. (Please let me know if I'm wrong.) So, we'll have to build our own!
The CPython core puts a lot of effort into making Python straightforward to build. I won't rehash their setup and build instructions here, as they're fairly comprehensive.
This post is written assuming you're building in a POSIX/Linux environment - see the section at the end for information on building for Windows.
Suffice to say, we'll pick up assuming you have:
- Installed
git
andmake
- Cloned the CPython repo locally. All the examples on this page use specifically the
v3.13.0b3
beta branch - the JIT is evolving quickly, your experience may vary with another branch/tag. - Installed LLVM as described in the JIT-build README. At time-of-writing you should be using LLVM 18, but that may change any time.
Configuring the JIT
The key step that enables a JIT build is a specific flag passed to the ./configure
script that lives in the root of the CPython repo: --enable-experimental-jit
. Passing this flag will create a Makefile with the JIT build enabled! But there are actually multiple potential values for this flag:
--enable-experimental-jit=yes
--enable-experimental-jit=yes-off
--enable-experimental-jit=interpreter
--enable-experimental-jit=no
That's all the configuring you'll need to do! There are some additional configuration flags you can pass, but we'll touch on those more in the debugging and gathering statistics sections.
Building the JIT
Python's configure
script will drop a Makefile into the root of the CPython repo, which has all the configuration options baked in. Once that's finished building, you can simply run make
... or, if you want a little time back, make -jX
, where X
is the number of separate build threads to run in parallel. Staring with the number of processors on your computer (discoverable by running nproc
) is a decent place to start, but it's worth experimenting up or down to see how it affects build time.
If you're rebuilding often, or weird things start happening with the build, you may need to clean up after yourself and start fresh. This is what make clean
(and its more aggressive partner make distclean
) are for. clean
just removes generated files, while distclean
removes generated files too, including the Makefile!
So to summarize - once you've cloned the CPython repo, all you need to do to build the JIT is:
|
|
Running the JIT
When the makefile completes, you should have an executable called python
sitting in the root of the repo! Running code with it now will make use of the JIT!
|
|
At this point, running with JIT is, on average, about as fast as running without the JIT, so you're not likely to have seen a blazingly fast speedup. So, how can we demonstrate that the JIT is indeed running?
Turning the JIT On and Off for Different Runs
Even if you've built Python with the JIT, it can be useful to switch JIT execution on and off for different executions, or even within the same program. This can be achieved by configuring the Python build with with --enable-experimtanl-jit=yes-off
will disable the JIT when Python starts. Setting the environment variable PYTHON_JIT
to "1"
(for enabled) or "0"
(for disabled) prior to Python startup will then determine whether the JIT is active or not.
There's been some musing that having a Pythonic API to control the JIT - switch it on and off, controlling maximum member usage, possibly how fast cold traces get garbage collected, etc. However, there's hesitancy to introduce "official" API's while the JIT is still experimental. Which makes sense No is temporary, yes is forever.
Debugging and Displaying Output
With a debug build of Python, we'll have more options for displaying JIT output. Let's reconfigure and rebuild Python with:
|
|
We now have a debug build of Python! For our purposes, this will enable us to run with a couple of special environment variables that will print out what's going on with the JIT in realtime. Setting PYTHON_LLTRACE=X
will display increasing volumes of information about individual "traces", or sequences of opcodes/micro-opcodes, as X increases from 1 to 5. Similarly, PYTHON_OPT_DEBUG=X
prints information about how the optimizer is optimizing traces of micro-opcodes, as X ranges from 1 to 3.
Let's give ourself a short snippet of Python to run, so we can see how the output differs as we change these environment variables. If this code seems a bit contrived - it is!
|
|
PYTHON_LLTRACE=1
The lowest value of PYTHON_LLTRACE
will print minimal messages, indicating that traces were created and where but providing no real detail.
$ PYTHON_LLTRACE=1 ./python src.py
Created a proto-trace for
(/home/jglass/Documents/cpython/src.py:1) at byte offset 22 -- length 11 1999001
PYTHON_LLTRACE=2
Increasing PYTHON_LLTRACE
to two opens up many more details. We can see each UOp as it's added to a new trace, and which bytecodes they correspond to. Also included is information about the opcode, operand, and target of each UOp if any. (Since the operands are unique-per-run and machine-specific, I'm filtering them out here to make comparison easier.)
You can also see the result after the trace has been optimized, and some of the UOps removed. Additionally, any Bytecodes that are not currently supported by the optimizer are flagged here.
$ PYTHON_LLTRACE=2 ./python src.py
1999001 Optimizing
(/home/jglass/Documents/cpython/src.py:1) at byte offset 58 1 ADD_TO_TRACE: _START_EXECUTOR (0, target=29, operand=0xDEADBEEF) 29: JUMP_BACKWARD(20) 2 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=29, operand=0xDEADBEEF) 3 ADD_TO_TRACE: _TIER2_RESUME_CHECK (0, target=29, operand=0) 11: FOR_ITER_RANGE(28) 4 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=11, operand=0xDEADBEEF) 5 ADD_TO_TRACE: _ITER_CHECK_RANGE (28, target=11, operand=0) 6 ADD_TO_TRACE: _GUARD_NOT_EXHAUSTED_RANGE (28, target=11, operand=0) 7 ADD_TO_TRACE: _ITER_NEXT_RANGE (28, target=11, operand=0, error_target=0) 13: STORE_NAME(2) 8 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=13, operand=0xDEADBEEF) 9 ADD_TO_TRACE: _STORE_NAME (2, target=13, operand=0, error_target=0) 14: LOAD_NAME(0) 10 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=14, operand=0xDEADBEEF) Unsupported opcode LOAD_NAME 11 ADD_TO_TRACE: _EXIT_TRACE (0, target=14, operand=0) Created a proto-trace for (/home/jglass/Documents/cpython/src.py:1) at byte offset 22 -- length 11 Optimized trace (length 15): 0 OPTIMIZED: _START_EXECUTOR (0, jump_target=9, operand=0xDEADBEEF) 1 OPTIMIZED: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) 2 OPTIMIZED: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) 3 OPTIMIZED: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) 4 OPTIMIZED: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) 5 OPTIMIZED: _SET_IP (0, target=13, operand=0xDEADBEEF) 6 OPTIMIZED: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) 7 OPTIMIZED: _CHECK_VALIDITY (0, jump_target=14, operand=0xDEADBEEF) 8 OPTIMIZED: _EXIT_TRACE (0, exit_index=0, operand=0) 9 OPTIMIZED: _DEOPT (0, target=29, operand=0) 10 OPTIMIZED: _EXIT_TRACE (0, exit_index=1, operand=0) 11 OPTIMIZED: _EXIT_TRACE (0, exit_index=2, operand=0) 12 OPTIMIZED: _ERROR_POP_N (1, target=0, operand=0xb) 13 OPTIMIZED: _ERROR_POP_N (1, target=0, operand=0xd) 14 OPTIMIZED: _DEOPT (0, target=14, operand=0) Optimizing (/home/jglass/Documents/cpython/src.py:1) at byte offset 28 1 ADD_TO_TRACE: _START_EXECUTOR (0, target=14, operand=0xDEADBEEF) 14: LOAD_NAME(0) 2 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=14, operand=0xDEADBEEF) Unsupported opcode LOAD_NAME No trace for (/home/jglass/Documents/cpython/src.py:1) at byte offset 28 (too short) Optimizing (/home/jglass/Documents/cpython/src.py:1) at byte offset 28 1 ADD_TO_TRACE: _START_EXECUTOR (0, target=14, operand=0xDEADBEEF) 14: LOAD_NAME(0) 2 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=14, operand=0xDEADBEEF) Unsupported opcode LOAD_NAME No trace for (/home/jglass/Documents/cpython/src.py:1) at byte offset 28 (too short) Optimizing (/home/jglass/Documents/cpython/src.py:1) at byte offset 28 1 ADD_TO_TRACE: _START_EXECUTOR (0, target=14, operand=0xDEADBEEF) 14: LOAD_NAME(0) 2 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=14, operand=0xDEADBEEF) Unsupported opcode LOAD_NAME No trace for (/home/jglass/Documents/cpython/src.py:1) at byte offset 28 (too short) Optimizing (/home/jglass/Documents/cpython/src.py:1) at byte offset 28 1 ADD_TO_TRACE: _START_EXECUTOR (0, target=14, operand=0xDEADBEEF) 14: LOAD_NAME(0) 2 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=14, operand=0xDEADBEEF) Unsupported opcode LOAD_NAME No trace for (/home/jglass/Documents/cpython/src.py:1) at byte offset 28 (too short)
PYTHON_LLTRACE=3
In a normal JIT build, PYTHON_LLTRACE=2
and PYTHON_LLTRACE=3
are exactly the same! (At least as of the current build). But if you build with only the Tier 2 interpreter and not the JIT, you do get a few more messages about side exits and cold exits... or a lot more, depending on your code:
$ PYTHON_LLTRACE=3 ./python src.py # built with --enable-experimental-jit=interpreter
code>Optimizing <module> (/home/jglass/Documents/cpython/src.py:1) at byte offset 58
1 ADD_TO_TRACE: _START_EXECUTOR (0, target=29, operand=0xDEADBEEF)
29: JUMP_BACKWARD(20)
2 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=29, operand=0xDEADBEEF)
3 ADD_TO_TRACE: _TIER2_RESUME_CHECK (0, target=29, operand=0)
11: FOR_ITER_RANGE(28)
4 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=11, operand=0xDEADBEEF)
5 ADD_TO_TRACE: _ITER_CHECK_RANGE (28, target=11, operand=0)
6 ADD_TO_TRACE: _GUARD_NOT_EXHAUSTED_RANGE (28, target=11, operand=0)
7 ADD_TO_TRACE: _ITER_NEXT_RANGE (28, target=11, operand=0, error_target=0)
13: STORE_NAME(2)
8 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=13, operand=0xDEADBEEF)
9 ADD_TO_TRACE: _STORE_NAME (2, target=13, operand=0, error_target=0)
14: LOAD_NAME(0)
10 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=14, operand=0xDEADBEEF)
Unsupported opcode LOAD_NAME
11 ADD_TO_TRACE: _EXIT_TRACE (0, target=14, operand=0)
Created a proto-trace for <module> (/home/jglass/Documents/cpython/src.py:1) at byte offset 22 -- length 11
Optimized trace (length 15):
0 OPTIMIZED: _START_EXECUTOR (0, jump_target=9, operand=0xDEADBEEF)
1 OPTIMIZED: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0)
2 OPTIMIZED: _ITER_CHECK_RANGE (28, jump_target=10, operand=0)
3 OPTIMIZED: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0)
4 OPTIMIZED: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12)
5 OPTIMIZED: _SET_IP (0, target=13, operand=0xDEADBEEF)
6 OPTIMIZED: _STORE_NAME (2, jump_target=0, operand=0, error_target=13)
7 OPTIMIZED: _CHECK_VALIDITY (0, jump_target=14, operand=0xDEADBEEF)
8 OPTIMIZED: _EXIT_TRACE (0, exit_index=0, operand=0)
9 OPTIMIZED: _DEOPT (0, target=29, operand=0)
10 OPTIMIZED: _EXIT_TRACE (0, exit_index=1, operand=0)
11 OPTIMIZED: _EXIT_TRACE (0, exit_index=2, operand=0)
12 OPTIMIZED: _ERROR_POP_N (1, target=0, operand=0xb)
13 OPTIMIZED: _ERROR_POP_N (1, target=0, operand=0xd)
14 OPTIMIZED: _DEOPT (0, target=14, operand=0)
0 uop: _START_EXECUTOR (0, jump_target=9, operand=0xDEADBEEF) stack_level=1
1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1
2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1
3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1
4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1
5 uop: _SET_IP (0, target=13, operand=0xDEADBEEF) stack_level=2
6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2
7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0xDEADBEEF) stack_level=1
8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1
SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 1030, target 14 -> LOAD_NAME]
0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1
0 uop: _START_EXECUTOR (0, jump_target=9, operand=0xDEADBEEF) stack_level=1
1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1
2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1
3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1
4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1
5 uop: _SET_IP (0, target=13, operand=0xDEADBEEF) stack_level=2
6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2
7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0xDEADBEEF) stack_level=1
8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1
SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 1014, target 14 -> LOAD_NAME]
0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1
0 uop: _START_EXECUTOR (0, jump_target=9, operand=0xDEADBEEF) stack_level=1
1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1
2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1
3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1
4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1
5 uop: _SET_IP (0, target=13, operand=0xDEADBEEF) stack_level=2
6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2
7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0xDEADBEEF) stack_level=1
8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1
SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 998, target 14 -> LOAD_NAME]
0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1
0 uop: _START_EXECUTOR (0, jump_target=9, operand=0xDEADBEEF) stack_level=1
1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1
2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1
3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1
4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1
5 uop: _SET_IP (0, target=13, operand=0xDEADBEEF) stack_level=2
6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2
7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0xDEADBEEF) stack_level=1
8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1
SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 982, target 14 -> LOAD_NAME]
0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1
0 uop: _START_EXECUTOR (0, jump_target=9, operand=0xDEADBEEF) stack_level=1
1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1
2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1
3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1
4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1
5 uop: _SET_IP (0, target=13, operand=0xDEADBEEF) stack_level=2
6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2
7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0xDEADBEEF) stack_level=1
8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1
SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 966, target 14 -> LOAD_NAME]
0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1
0 uop: _START_EXECUTOR (0, jump_target=9, operand=0xDEADBEEF) stack_level=1
1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1
2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1
3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1
4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1
5 uop: _SET_IP (0, target=13, operand=0xDEADBEEF) stack_level=2
6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2
7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0xDEADBEEF) stack_level=1
8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1
# ... 20,000 more lines of this
PYTHON_LLTRACE=4
As of Python 3.13.0b3, PYTHON_LLTRACE=3
and PYTHON_LLTRACE=4
are always exactly the same. So let's move on to the big kahuna:
PYTHON_LLTRACE=5
You want debug info? Oh boy do we have debug info. And a lot of it isn't even related to the JIT. With PYTHON_LLTRACE=5
, any Python bytecodes that are executed in the interpreter are printed and the stack dumped at that point. You also get notes when stack frames are left or resumed.
Buried in the middle of this, you can see similar JIT/UOp/Trace information as at level 3/4.
$ PYTHON_LLTRACE=5 ./python src.py
Resuming frame for '<module>' in module '_frozen_importlib' stack=[] 0: RESUME 0 stack=[] 2: LOAD_CONST 0 stack=['Core implementation of import.\n\nThis module is NOT meant to be directly imported! It has been designed such\nthat it can be bootstrapped into Python as the implementation of import. As\nsuch it requires the injection of specific modules and attributes in order to\nwork. One should use importlib as the public-facing version of this module.\n\n'] 4: STORE_NAME 0 stack=[] 6: LOAD_CONST 1 stack=[<code at 0xDEADBEEF>] 8: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 10: STORE_NAME 1 stack=[] 12: LOAD_CONST 2 stack=[None] 14: STORE_NAME 2 stack=[] 16: LOAD_CONST 2 stack=[None] 18: STORE_NAME 3 stack=[] 20: LOAD_CONST 2 stack=[None] 22: STORE_NAME 4 stack=[] 24: LOAD_CONST 2 stack=[None] 26: STORE_GLOBAL 5 stack=[] 28: LOAD_CONST 3 stack=[<code at 0xDEADBEEF>] 30: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 32: STORE_NAME 6 stack=[] 34: LOAD_CONST 4 stack=[<code at 0xDEADBEEF>] 36: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 38: STORE_NAME 7 stack=[] 40: LOAD_BUILD_CLASS stack=[<builtin_function_or_method at 0xDEADBEEF>] 42: PUSH_NULL stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>] 44: LOAD_CONST 5 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <code at 0xDEADBEEF>] 46: MAKE_FUNCTION stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>] 48: LOAD_CONST 6 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>, '_List'] 50: LOAD_NAME 8 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>, '_List', <type at 0xDEADBEEF>] 52: CALL 3 Resuming frame for '_List' in module '_frozen_importlib' stack=[] 0: RESUME 0 stack=[] 2: LOAD_NAME 0 stack=['_frozen_importlib'] 4: STORE_NAME 1 stack=[] 6: LOAD_CONST 0 stack=['_List'] 8: STORE_NAME 2 stack=[] 10: LOAD_CONST 1 stack=[55] 12: STORE_NAME 3 stack=[] 14: LOAD_CONST 2 stack=[<tuple at 0xDEADBEEF>] 16: STORE_NAME 4 stack=[] 18: LOAD_CONST 3 stack=[<tuple at 0xDEADBEEF>] 20: STORE_NAME 5 stack=[] 22: RETURN_CONST 4 stack=[<type at 0xDEADBEEF>] 60: STORE_NAME 9 stack=[] 62: LOAD_BUILD_CLASS stack=[<builtin_function_or_method at 0xDEADBEEF>] 64: PUSH_NULL stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>] 66: LOAD_CONST 7 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <code at 0xDEADBEEF>] 68: MAKE_FUNCTION stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>] 70: LOAD_CONST 8 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>, '_WeakValueDictionary'] 72: CALL 2 Resuming frame for '_WeakValueDictionary' in module '_frozen_importlib' stack=[] 0: RESUME 0 stack=[] 2: LOAD_NAME 0 stack=['_frozen_importlib'] 4: STORE_NAME 1 stack=[] 6: LOAD_CONST 0 stack=['_WeakValueDictionary'] 8: STORE_NAME 2 stack=[] 10: LOAD_CONST 1 stack=[62] 12: STORE_NAME 3 stack=[] 14: LOAD_CONST 2 stack=[<code at 0xDEADBEEF>] 16: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 18: STORE_NAME 4 stack=[] 20: LOAD_CONST 3 stack=[<code at 0xDEADBEEF>] 22: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 24: STORE_NAME 5 stack=[] 26: LOAD_CONST 4 stack=[<code at 0xDEADBEEF>] 28: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 30: STORE_NAME 6 stack=[] 32: LOAD_CONST 9 stack=[<tuple at 0xDEADBEEF>] 34: LOAD_CONST 6 stack=[<tuple at 0xDEADBEEF>, <code at 0xDEADBEEF>] 36: MAKE_FUNCTION stack=[<tuple at 0xDEADBEEF>, <function at 0xDEADBEEF>] 38: SET_FUNCTION_ATTRIBUTE 1 stack=[<function at 0xDEADBEEF>] 40: STORE_NAME 7 stack=[] 42: LOAD_CONST 9 stack=[<tuple at 0xDEADBEEF>] 44: LOAD_CONST 7 stack=[<tuple at 0xDEADBEEF>, <code at 0xDEADBEEF>] 46: MAKE_FUNCTION stack=[<tuple at 0xDEADBEEF>, <function at 0xDEADBEEF>] 48: SET_FUNCTION_ATTRIBUTE 1 stack=[<function at 0xDEADBEEF>] 50: STORE_NAME 8 stack=[] 52: LOAD_CONST 8 stack=[<tuple at 0xDEADBEEF>] 54: STORE_NAME 9 stack=[] 56: RETURN_CONST 5 stack=[<type at 0xDEADBEEF>] 80: STORE_NAME 10 stack=[] 82: BUILD_MAP 0 stack=[<dict at 0xDEADBEEF>] 84: STORE_NAME 11 stack=[] 86: LOAD_CONST 2 stack=[None] 88: STORE_GLOBAL 12 stack=[] 90: LOAD_BUILD_CLASS stack=[<builtin_function_or_method at 0xDEADBEEF>] 92: PUSH_NULL stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>] 94: LOAD_CONST 9 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <code at 0xDEADBEEF>] 96: MAKE_FUNCTION stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>] 98: LOAD_CONST 10 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>, '_BlockingOnManager'] 100: CALL 2 Resuming frame for '_BlockingOnManager' in module '_frozen_importlib' stack=[] 0: RESUME 0 stack=[] 2: LOAD_NAME 0 stack=['_frozen_importlib'] 4: STORE_NAME 1 stack=[] 6: LOAD_CONST 0 stack=['_BlockingOnManager'] 8: STORE_NAME 2 stack=[] 10: LOAD_CONST 1 stack=[156] 12: STORE_NAME 3 stack=[] 14: LOAD_CONST 2 stack=['A context manager responsible to updating ``_blocking_on``.'] 16: STORE_NAME 4 stack=[] 18: LOAD_CONST 3 stack=[<code at 0xDEADBEEF>] 20: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 22: STORE_NAME 5 stack=[] 24: LOAD_CONST 4 stack=[<code at 0xDEADBEEF>] 26: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 28: STORE_NAME 6 stack=[] 30: LOAD_CONST 5 stack=[<code at 0xDEADBEEF>] 32: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 34: STORE_NAME 7 stack=[] 36: LOAD_CONST 6 stack=[<tuple at 0xDEADBEEF>] 38: STORE_NAME 8 stack=[] 40: RETURN_CONST 7 stack=[<type at 0xDEADBEEF>] 108: STORE_NAME 13 stack=[] 110: LOAD_BUILD_CLASS stack=[<builtin_function_or_method at 0xDEADBEEF>] 112: PUSH_NULL stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>] 114: LOAD_CONST 11 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <code at 0xDEADBEEF>] 116: MAKE_FUNCTION stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>] 118: LOAD_CONST 12 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>, '_DeadlockError'] 120: LOAD_NAME 14 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>, '_DeadlockError', <type at 0xDEADBEEF>] 122: CALL 3 Resuming frame for '_DeadlockError' in module '_frozen_importlib' stack=[] 0: RESUME 0 stack=[] 2: LOAD_NAME 0 stack=['_frozen_importlib'] 4: STORE_NAME 1 stack=[] 6: LOAD_CONST 0 stack=['_DeadlockError'] 8: STORE_NAME 2 stack=[] 10: LOAD_CONST 1 stack=[178] 12: STORE_NAME 3 stack=[] 14: LOAD_CONST 2 stack=[<tuple at 0xDEADBEEF>] 16: STORE_NAME 4 stack=[] 18: RETURN_CONST 3 stack=[<type at 0xDEADBEEF>] 130: STORE_NAME 15 stack=[] 132: LOAD_CONST 13 stack=[<code at 0xDEADBEEF>] 134: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 136: STORE_NAME 16 stack=[] 138: LOAD_BUILD_CLASS stack=[<builtin_function_or_method at 0xDEADBEEF>] 140: PUSH_NULL stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>] 142: LOAD_CONST 14 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <code at 0xDEADBEEF>] 144: MAKE_FUNCTION stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>] 146: LOAD_CONST 15 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>, '_ModuleLock'] 148: CALL 2 Resuming frame for '_ModuleLock' in module '_frozen_importlib' stack=[] 0: RESUME 0 stack=[] 2: LOAD_NAME 0 stack=['_frozen_importlib'] 4: STORE_NAME 1 stack=[] 6: LOAD_CONST 0 stack=['_ModuleLock'] 8: STORE_NAME 2 stack=[] 10: LOAD_CONST 1 stack=[226] 12: STORE_NAME 3 stack=[] 14: LOAD_CONST 2 stack=['A recursive lock implementation which is able to detect deadlocks\n(e.g. thread 1 trying to take locks A then B, and thread 2 trying to\ntake locks B then A).\n'] 16: STORE_NAME 4 stack=[] 18: LOAD_CONST 3 stack=[<code at 0xDEADBEEF>] 20: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 22: STORE_NAME 5 stack=[] 24: LOAD_CONST 4 stack=[<code at 0xDEADBEEF>] 26: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 28: STORE_NAME 6 stack=[] 30: LOAD_CONST 5 stack=[<code at 0xDEADBEEF>] 32: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 34: STORE_NAME 7 stack=[] 36: LOAD_CONST 6 stack=[<code at 0xDEADBEEF>] 38: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 40: STORE_NAME 8 stack=[] 42: LOAD_CONST 7 stack=[<code at 0xDEADBEEF>] 44: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 46: STORE_NAME 9 stack=[] 48: LOAD_CONST 8 stack=[<tuple at 0xDEADBEEF>] 50: STORE_NAME 10 stack=[] 52: RETURN_CONST 9 stack=[<type at 0xDEADBEEF>] 156: STORE_NAME 17 stack=[] 158: LOAD_BUILD_CLASS stack=[<builtin_function_or_method at 0xDEADBEEF>] 160: PUSH_NULL stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>] 162: LOAD_CONST 16 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <code at 0xDEADBEEF>] 164: MAKE_FUNCTION stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>] 166: LOAD_CONST 17 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>, '_DummyModuleLock'] 168: CALL 2 Resuming frame for '_DummyModuleLock' in module '_frozen_importlib' stack=[] 0: RESUME 0 stack=[] 2: LOAD_NAME 0 stack=['_frozen_importlib'] 4: STORE_NAME 1 stack=[] 6: LOAD_CONST 0 stack=['_DummyModuleLock'] 8: STORE_NAME 2 stack=[] 10: LOAD_CONST 1 stack=[389] 12: STORE_NAME 3 stack=[] 14: LOAD_CONST 2 stack=['A simple _ModuleLock equivalent for Python builds without\nmulti-threading support.'] 16: STORE_NAME 4 stack=[] 18: LOAD_CONST 3 stack=[<code at 0xDEADBEEF>] 20: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 22: STORE_NAME 5 stack=[] 24: LOAD_CONST 4 stack=[<code at 0xDEADBEEF>] 26: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 28: STORE_NAME 6 stack=[] 30: LOAD_CONST 5 stack=[<code at 0xDEADBEEF>] 32: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 34: STORE_NAME 7 stack=[] 36: LOAD_CONST 6 stack=[<code at 0xDEADBEEF>] 38: MAKE_FUNCTION stack=[<function at 0xDEADBEEF>] 40: STORE_NAME 8 stack=[] 42: LOAD_CONST 7 stack=[<tuple at 0xDEADBEEF>] 44: STORE_NAME 9 stack=[] 46: RETURN_CONST 8 stack=[<type at 0xDEADBEEF>] 176: STORE_NAME 18 stack=[] 178: LOAD_BUILD_CLASS stack=[<builtin_function_or_method at 0xDEADBEEF>] 180: PUSH_NULL stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>] 182: LOAD_CONST 18 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <code at 0xDEADBEEF>] 184: MAKE_FUNCTION stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>] 186: LOAD_CONST 19 stack=[<builtin_function_or_method at 0xDEADBEEF>, <nil>, <function at 0xDEADBEEF>, '_ModuleLockManager'] 188: CALL 2 # ... 100,000 lines later Optimizing <module> (/home/jglass/Documents/cpython/src.py:1) at byte offset 58 1 ADD_TO_TRACE: _START_EXECUTOR (0, target=29, operand=0xDEADBEEF) 29: JUMP_BACKWARD(20) 2 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=29, operand=0xDEADBEEF) 3 ADD_TO_TRACE: _TIER2_RESUME_CHECK (0, target=29, operand=0) 11: FOR_ITER_RANGE(28) 4 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=11, operand=0xDEADBEEF) 5 ADD_TO_TRACE: _ITER_CHECK_RANGE (28, target=11, operand=0) 6 ADD_TO_TRACE: _GUARD_NOT_EXHAUSTED_RANGE (28, target=11, operand=0) 7 ADD_TO_TRACE: _ITER_NEXT_RANGE (28, target=11, operand=0, error_target=0) 13: STORE_NAME(2) 8 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=13, operand=0xDEADBEEF) 9 ADD_TO_TRACE: _STORE_NAME (2, target=13, operand=0, error_target=0) 14: LOAD_NAME(0) 10 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=14, operand=0xDEADBEEF) Unsupported opcode LOAD_NAME 11 ADD_TO_TRACE: _EXIT_TRACE (0, target=14, operand=0) Created a proto-trace for <module> (/home/jglass/Documents/cpython/src.py:1) at byte offset 22 -- length 11 Optimized trace (length 15): 0 OPTIMIZED: _START_EXECUTOR (0, jump_target=9, operand=0xDEADBEEF) 1 OPTIMIZED: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) 2 OPTIMIZED: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) 3 OPTIMIZED: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) 4 OPTIMIZED: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) 5 OPTIMIZED: _SET_IP (0, target=13, operand=0xDEADBEEF) 6 OPTIMIZED: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) 7 OPTIMIZED: _CHECK_VALIDITY (0, jump_target=14, operand=0xDEADBEEF) 8 OPTIMIZED: _EXIT_TRACE (0, exit_index=0, operand=0) 9 OPTIMIZED: _DEOPT (0, target=29, operand=0) 10 OPTIMIZED: _EXIT_TRACE (0, exit_index=1, operand=0) 11 OPTIMIZED: _EXIT_TRACE (0, exit_index=2, operand=0) 12 OPTIMIZED: _ERROR_POP_N (1, target=0, operand=0xb) 13 OPTIMIZED: _ERROR_POP_N (1, target=0, operand=0xd) 14 OPTIMIZED: _DEOPT (0, target=14, operand=0) stack=[<range_iterator at 0xDEADBEEF>] 28: LOAD_NAME 0 stack=[<range_iterator at 0xDEADBEEF>, 172] 30: LOAD_CONST 2 stack=[<range_iterator at 0xDEADBEEF>, 172, 10] 32: BINARY_OP 6 stack=[<range_iterator at 0xDEADBEEF>, 2] 36: TO_BOOL_INT stack=[<range_iterator at 0xDEADBEEF>, True] 44: POP_JUMP_IF_FALSE 7 stack=[<range_iterator at 0xDEADBEEF>] 48: LOAD_NAME 0 stack=[<range_iterator at 0xDEADBEEF>, 172] 50: LOAD_NAME 2 stack=[<range_iterator at 0xDEADBEEF>, 172, 19] 52: BINARY_OP_ADD_INT 13 stack=[<range_iterator at 0xDEADBEEF>, 191] 56: STORE_NAME 0 stack=[<range_iterator at 0xDEADBEEF>] 58: ENTER_EXECUTOR 0 stack=[<range_iterator at 0xDEADBEEF>] 28: LOAD_NAME 0 stack=[<range_iterator at 0xDEADBEEF>, 191] 30: LOAD_CONST 2 stack=[<range_iterator at 0xDEADBEEF>, 191, 10] 32: BINARY_OP 6 stack=[<range_iterator at 0xDEADBEEF>, 1] 36: TO_BOOL_INT stack=[<range_iterator at 0xDEADBEEF>, True] 44: POP_JUMP_IF_FALSE 7 stack=[<range_iterator at 0xDEADBEEF>] 48: LOAD_NAME 0 stack=[<range_iterator at 0xDEADBEEF>, 191] 50: LOAD_NAME 2 stack=[<range_iterator at 0xDEADBEEF>, 191, 20] 52: BINARY_OP_ADD_INT 13 stack=[<range_iterator at 0xDEADBEEF>, 211] 56: STORE_NAME 0 stack=[<range_iterator at 0xDEADBEEF>] 58: ENTER_EXECUTOR 0 stack=[<range_iterator at 0xDEADBEEF>] 28: LOAD_NAME 0 stack=[<range_iterator at 0xDEADBEEF>, 211] 30: LOAD_CONST 2 stack=[<range_iterator at 0xDEADBEEF>, 211, 10] 32: BINARY_OP 6 stack=[<range_iterator at 0xDEADBEEF>, 1] 36: TO_BOOL_INT stack=[<range_iterator at 0xDEADBEEF>, True] 44: POP_JUMP_IF_FALSE 7 stack=[<range_iterator at 0xDEADBEEF>] 48: LOAD_NAME 0 stack=[<range_iterator at 0xDEADBEEF>, 211] 50: LOAD_NAME 2 stack=[<range_iterator at 0xDEADBEEF>, 211, 21] 52: BINARY_OP_ADD_INT 13 stack=[<range_iterator at 0xDEADBEEF>, 232] 56: STORE_NAME 0 stack=[<range_iterator at 0xDEADBEEF>] 58: ENTER_EXECUTOR 0 stack=[<range_iterator at 0xDEADBEEF>] 28: LOAD_NAME 0 stack=[<range_iterator at 0xDEADBEEF>, 232] 30: LOAD_CONST 2 stack=[<range_iterator at 0xDEADBEEF>, 232, 10] 32: BINARY_OP 6 stack=[<range_iterator at 0xDEADBEEF>, 2] 36: TO_BOOL_INT stack=[<range_iterator at 0xDEADBEEF>, True] 44: POP_JUMP_IF_FALSE 7 stack=[<range_iterator at 0xDEADBEEF>] 48: LOAD_NAME 0 stack=[<range_iterator at 0xDEADBEEF>, 232] 50: LOAD_NAME 2 stack=[<range_iterator at 0xDEADBEEF>, 232, 22] 52: BINARY_OP_ADD_INT 13 stack=[<range_iterator at 0xDEADBEEF>, 254] 56: STORE_NAME 0 stack=[<range_iterator at 0xDEADBEEF>] 58: ENTER_EXECUTOR 0 stack=[<range_iterator at 0xDEADBEEF>] 22: FOR_ITER_RANGE 28 stack=[
, 17] 26: STORE_NAME 2 stack=[ ] 28: LOAD_NAME 0 stack=[ , 137] 30: LOAD_CONST 2 stack=[ , 137, 10] 32: BINARY_OP 6 stack=[ , 7] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 137] 50: LOAD_NAME 2 stack=[ , 137, 17] 52: BINARY_OP_ADD_INT 13 stack=[ , 154] 56: STORE_NAME 0 stack=[ ] 58: JUMP_BACKWARD 20 stack=[ ] 22: FOR_ITER_RANGE 28 stack=[ , 18] 26: STORE_NAME 2 stack=[ ] 28: LOAD_NAME 0 stack=[ , 154] 30: LOAD_CONST 2 stack=[ , 154, 10] 32: BINARY_OP 6 stack=[ , 4] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 154] 50: LOAD_NAME 2 stack=[ , 154, 18] 52: BINARY_OP_ADD_INT 13 stack=[ , 172] 56: STORE_NAME 0 stack=[ ] 58: JUMP_BACKWARD 20 Optimizing (/home/jglass/Documents/cpython/src.py:1) at byte offset 58 1 ADD_TO_TRACE: _START_EXECUTOR (0, target=29, operand=0x773ee07d83e2) 29: JUMP_BACKWARD(20) 2 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=29, operand=0x773ee07d83e2) 3 ADD_TO_TRACE: _TIER2_RESUME_CHECK (0, target=29, operand=0) 11: FOR_ITER_RANGE(28) 4 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=11, operand=0x773ee07d83be) 5 ADD_TO_TRACE: _ITER_CHECK_RANGE (28, target=11, operand=0) 6 ADD_TO_TRACE: _GUARD_NOT_EXHAUSTED_RANGE (28, target=11, operand=0) 7 ADD_TO_TRACE: _ITER_NEXT_RANGE (28, target=11, operand=0, error_target=0) 13: STORE_NAME(2) 8 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=13, operand=0x773ee07d83c2) 9 ADD_TO_TRACE: _STORE_NAME (2, target=13, operand=0, error_target=0) 14: LOAD_NAME(0) 10 ADD_TO_TRACE: _CHECK_VALIDITY_AND_SET_IP (0, target=14, operand=0x773ee07d83c4) Unsupported opcode LOAD_NAME 11 ADD_TO_TRACE: _EXIT_TRACE (0, target=14, operand=0) Created a proto-trace for (/home/jglass/Documents/cpython/src.py:1) at byte offset 22 -- length 11 Optimized trace (length 15): 0 OPTIMIZED: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) 1 OPTIMIZED: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) 2 OPTIMIZED: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) 3 OPTIMIZED: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) 4 OPTIMIZED: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) 5 OPTIMIZED: _SET_IP (0, target=13, operand=0x773ee07d83c2) 6 OPTIMIZED: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) 7 OPTIMIZED: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) 8 OPTIMIZED: _EXIT_TRACE (0, exit_index=0, operand=0) 9 OPTIMIZED: _DEOPT (0, target=29, operand=0) 10 OPTIMIZED: _EXIT_TRACE (0, exit_index=1, operand=0) 11 OPTIMIZED: _EXIT_TRACE (0, exit_index=2, operand=0) 12 OPTIMIZED: _ERROR_POP_N (1, target=0, operand=0xb) 13 OPTIMIZED: _ERROR_POP_N (1, target=0, operand=0xd) 14 OPTIMIZED: _DEOPT (0, target=14, operand=0) 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 1030, target 14 -> LOAD_NAME] 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 172] 30: LOAD_CONST 2 stack=[ , 172, 10] 32: BINARY_OP 6 stack=[ , 2] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 172] 50: LOAD_NAME 2 stack=[ , 172, 19] 52: BINARY_OP_ADD_INT 13 stack=[ , 191] 56: STORE_NAME 0 stack=[ ] 58: ENTER_EXECUTOR 0 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 1014, target 14 -> LOAD_NAME] 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 191] 30: LOAD_CONST 2 stack=[ , 191, 10] 32: BINARY_OP 6 stack=[ , 1] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 191] 50: LOAD_NAME 2 stack=[ , 191, 20] 52: BINARY_OP_ADD_INT 13 stack=[ , 211] 56: STORE_NAME 0 stack=[ ] 58: ENTER_EXECUTOR 0 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 998, target 14 -> LOAD_NAME] 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 211] 30: LOAD_CONST 2 stack=[ , 211, 10] 32: BINARY_OP 6 stack=[ , 1] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 211] 50: LOAD_NAME 2 stack=[ , 211, 21] 52: BINARY_OP_ADD_INT 13 stack=[ , 232] 56: STORE_NAME 0 stack=[ ] 58: ENTER_EXECUTOR 0 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 982, target 14 -> LOAD_NAME] 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 232] 30: LOAD_CONST 2 stack=[ , 232, 10] 32: BINARY_OP 6 stack=[ , 2] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 232] 50: LOAD_NAME 2 stack=[ , 232, 22] 52: BINARY_OP_ADD_INT 13 stack=[ , 254] 56: STORE_NAME 0 stack=[ ] 58: ENTER_EXECUTOR 0 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 966, target 14 -> LOAD_NAME] 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 254] 30: LOAD_CONST 2 stack=[ , 254, 10] 32: BINARY_OP 6 stack=[ , 4] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 254] 50: LOAD_NAME 2 stack=[ , 254, 23] 52: BINARY_OP_ADD_INT 13 stack=[ , 277] 56: STORE_NAME 0 stack=[ ] 58: ENTER_EXECUTOR 0 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 950, target 14 -> LOAD_NAME] 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 277] 30: LOAD_CONST 2 stack=[ , 277, 10] 32: BINARY_OP 6 stack=[ , 7] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 277] 50: LOAD_NAME 2 stack=[ , 277, 24] 52: BINARY_OP_ADD_INT 13 stack=[ , 301] 56: STORE_NAME 0 stack=[ ] 58: ENTER_EXECUTOR 0 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 934, target 14 -> LOAD_NAME] 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 301] 30: LOAD_CONST 2 stack=[ , 301, 10] 32: BINARY_OP 6 stack=[ , 1] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 301] 50: LOAD_NAME 2 stack=[ , 301, 25] 52: BINARY_OP_ADD_INT 13 stack=[ , 326] 56: STORE_NAME 0 stack=[ ] 58: ENTER_EXECUTOR 0 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 918, target 14 -> LOAD_NAME] 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 326] 30: LOAD_CONST 2 stack=[ , 326, 10] 32: BINARY_OP 6 stack=[ , 326, 10] 32: BINARY_OP 6 stack=[ , 6] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 326] 50: LOAD_NAME 2 stack=[ , 326, 26] 52: BINARY_OP_ADD_INT 13 stack=[ , 352] 56: STORE_NAME 0 stack=[ ] 58: ENTER_EXECUTOR 0 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 902, target 14 -> LOAD_NAME] 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 352] 30: LOAD_CONST 2 stack=[ , 352, 10] 32: BINARY_OP 6 stack=[ , 2] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 352] 50: LOAD_NAME 2 stack=[ , 352, 27] 52: BINARY_OP_ADD_INT 13 stack=[ , 379] 56: STORE_NAME 0 stack=[ ] 58: ENTER_EXECUTOR 0 0 uop: _START_EXECUTOR (0, jump_target=9, operand=0x773ee1169610) stack_level=1 1 uop: _TIER2_RESUME_CHECK (0, jump_target=9, operand=0) stack_level=1 2 uop: _ITER_CHECK_RANGE (28, jump_target=10, operand=0) stack_level=1 3 uop: _GUARD_NOT_EXHAUSTED_RANGE (28, jump_target=11, operand=0) stack_level=1 4 uop: _ITER_NEXT_RANGE (28, jump_target=0, operand=0, error_target=12) stack_level=1 5 uop: _SET_IP (0, target=13, operand=0x773ee07d83c2) stack_level=2 6 uop: _STORE_NAME (2, jump_target=0, operand=0, error_target=13) stack_level=2 7 uop: _CHECK_VALIDITY (0, jump_target=14, operand=0x773ee07d83c4) stack_level=1 8 uop: _EXIT_TRACE (0, exit_index=0, operand=0) stack_level=1 SIDE EXIT: [UOp _EXIT_TRACE (0, exit_index=0, operand=0), exit 0, temp 886, target 14 -> LOAD_NAME]Gathering 0 uop: _COLD_EXIT (0, target=0, operand=0) stack_level=1 stack=[ ] 28: LOAD_NAME 0 stack=[ , 379] 30: LOAD_CONST 2 stack=[ , 379, 10] 32: BINARY_OP 6 stack=[ , 9] 36: TO_BOOL_INT stack=[ , True] 44: POP_JUMP_IF_FALSE 7 stack=[ ] 48: LOAD_NAME 0 stack=[ , 379] 50: LOAD_NAME 2 stack=[ , 379, 28] 52: BINARY_OP_ADD_INT 13 stack=[ , 407] 56: STORE_NAME 0 stack=[ ] # 40,00 more lines 1999001
PYTHON_OPT_DEBUG=1
Once a hot trace has been identified and Python's bytecodes have been broken down into micro-opcodes, the optimizer takes over. It's job is to eliminent unnecessary micro-ops, to make the hot loop of code even shorter.
PYTHON_OPT_DEBUG=1
mostly enables printing error messages, like unknown opcodes or running out of space to store traces. Our little snippet from above isn't showing any error messages, but if we run a short benchmark, we can see the _INIT_CALL_PY_EXACT_ARGS
uop complaining about not being able to find the function its operand references:
$ ./python -m venv venv $ ./venv/bin/python -m pip install pyperformnace $ PYTHON_OPT_DEBUG=1 ./venv/bin/python -m pyperformance run -b meteor_contest
Missing function Missing function Missing function Missing function Missing function Missing function Missing function Missing function Missing function
PYTHON_OPT_DEBUG=2
As of Python 3.13.3, PYTHON_OPT_DEBUG=1
and PYTHON_OPT_DEBUG=2
are always exactly the same.
PYTHON_OPT_DEBUG=3
With value 3, PYTHON_OPT_DEBUG
will spt out additional information about the UOps being processed, as well as function and code object associated with the UOp _INIT_CALL_PY_EXACT_ARGS
. (This is one of those little details that is likely to change... or perhaps already has by the time you read this).
$ PYTHON_OPT_DEBUG=3 ./python src.py
0 abs: _START_EXECUTOR (0, target=32, operand=0x7cd640a50da8) stack_level 1 1 abs: _CHECK_VALIDITY_AND_SET_IP (0, target=32, operand=0x7cd640a50da8) stack_level 1 2 abs: _TIER2_RESUME_CHECK (0, target=32, operand=0) stack_level 1 3 abs: _CHECK_VALIDITY_AND_SET_IP (0, target=14, operand=0x7cd640a50d84) stack_level 1 4 abs: _ITER_CHECK_RANGE (34, target=14, operand=0) stack_level 1 5 abs: _GUARD_NOT_EXHAUSTED_RANGE (34, target=14, operand=0) stack_level 1 6 abs: _ITER_NEXT_RANGE (34, target=14, operand=0, error_target=0) stack_level 2 7 abs: _CHECK_VALIDITY_AND_SET_IP (0, target=16, operand=0x7cd640a50d88) stack_level 2 8 abs: _STORE_NAME (3, target=16, operand=0, error_target=0) stack_level 1 9 abs: _CHECK_VALIDITY_AND_SET_IP (0, target=17, operand=0x7cd640a50d8a) stack_level 1
Gathering Statistics
Seeing the raw debug output as traces are created, optimized, and exited is useful for debugging the JIT, or perhaps short programs. But once your program grows to any appreciable size, these debug files become simply enormous. (The PYTHON_LLTRACE=3
output for the simple snippet above is over 20,00 lines long). In such a case, a collection of collated stats would be more helpful.
Python will generate stats about the Tier 2 interpreter and JIT (and many other things) if configured with yet another configure flag: --enable-pystats
. Any code run with the -X pystats
command line option will dump a statistics files to /tmp/py_stats
. Note that this directory must exist before the code is run, as it will not be created for you.
|
|
The stats files themselves are fairly readable - and contain statistics about all kinds of things the interpreter did as it ran your code. Here's the actual stats output from running the above snippet - the Tier 2 stats are at the very end, if you care to scroll down:
opcode[BINARY_SLICE].specializable : 1
opcode[STORE_SLICE].specializable : 1
opcode[CACHE].pair_count[POP_TOP] : 22
opcode[CACHE].pair_count[COPY_FREE_VARS] : 122
opcode[CACHE].pair_count[MAKE_CELL] : 12
opcode[CACHE].pair_count[RESUME] : 136
opcode[CACHE].pair_count[RESUME_CHECK] : 387
opcode[BEFORE_WITH].execution_count : 163
opcode[BEFORE_WITH].pair_count[POP_TOP] : 160
opcode[BEFORE_WITH].pair_count[STORE_FAST] : 3
opcode[BINARY_OP_INPLACE_ADD_UNICODE].execution_count : 12
opcode[BINARY_OP_INPLACE_ADD_UNICODE].pair_count[JUMP_BACKWARD] : 12
opcode[BINARY_SLICE].execution_count : 34
opcode[BINARY_SLICE].pair_count[BINARY_OP] : 1
opcode[BINARY_SLICE].pair_count[BUILD_TUPLE] : 7
opcode[BINARY_SLICE].pair_count[CALL] : 6
opcode[BINARY_SLICE].pair_count[LOAD_DEREF] : 7
opcode[BINARY_SLICE].pair_count[STORE_FAST] : 9
opcode[BINARY_SLICE].pair_count[STORE_NAME] : 1
opcode[BINARY_SLICE].pair_count[CALL_PY_EXACT_ARGS] : 3
opcode[BINARY_SUBSCR].specializable : 1
opcode[BINARY_SUBSCR].specialization.success : 15
opcode[BINARY_SUBSCR].specialization.failure : 4
opcode[BINARY_SUBSCR].specialization.hit : 528
opcode[BINARY_SUBSCR].specialization.deferred : 70
opcode[BINARY_SUBSCR].execution_count : 89
opcode[BINARY_SUBSCR].specialization.failure_kinds[0] : 4
opcode[BINARY_SUBSCR].pair_count[BINARY_SUBSCR] : 4
opcode[BINARY_SUBSCR].pair_count[FORMAT_SIMPLE] : 4
opcode[BINARY_SUBSCR].pair_count[POP_TOP] : 1
opcode[BINARY_SUBSCR].pair_count[PUSH_EXC_INFO] : 5
opcode[BINARY_SUBSCR].pair_count[RETURN_VALUE] : 1
opcode[BINARY_SUBSCR].pair_count[BINARY_OP] : 1
opcode[BINARY_SUBSCR].pair_count[CALL] : 6
opcode[BINARY_SUBSCR].pair_count[LOAD_CONST] : 1
opcode[BINARY_SUBSCR].pair_count[LOAD_FAST] : 1
opcode[BINARY_SUBSCR].pair_count[POP_JUMP_IF_NOT_NONE] : 40
opcode[BINARY_SUBSCR].pair_count[STORE_FAST] : 7
opcode[BINARY_SUBSCR].pair_count[STORE_NAME] : 3
opcode[BINARY_SUBSCR].pair_count[BINARY_SUBSCR_DICT] : 9
opcode[BINARY_SUBSCR].pair_count[BINARY_SUBSCR_LIST_INT] : 1
opcode[BINARY_SUBSCR].pair_count[BINARY_SUBSCR_STR_INT] : 1
opcode[BINARY_SUBSCR].pair_count[BINARY_SUBSCR_TUPLE_INT] : 4
opcode[CHECK_EXC_MATCH].execution_count : 97
opcode[CHECK_EXC_MATCH].pair_count[POP_JUMP_IF_FALSE] : 97
opcode[DELETE_SUBSCR].execution_count : 25
opcode[DELETE_SUBSCR].pair_count[LOAD_GLOBAL] : 2
opcode[DELETE_SUBSCR].pair_count[LOAD_GLOBAL_MODULE] : 23
opcode[EXIT_INIT_CHECK].execution_count : 78
opcode[EXIT_INIT_CHECK].pair_count[RETURN_VALUE] : 78
opcode[FORMAT_SIMPLE].execution_count : 63
opcode[FORMAT_SIMPLE].pair_count[BUILD_STRING] : 9
opcode[FORMAT_SIMPLE].pair_count[LOAD_CONST] : 26
opcode[FORMAT_SIMPLE].pair_count[LOAD_FAST] : 27
opcode[FORMAT_SIMPLE].pair_count[LOAD_NAME] : 1
opcode[GET_ITER].execution_count : 224
opcode[GET_ITER].pair_count[CALL] : 7
opcode[GET_ITER].pair_count[EXTENDED_ARG] : 1
opcode[GET_ITER].pair_count[FOR_ITER] : 28
opcode[GET_ITER].pair_count[LOAD_FAST_AND_CLEAR] : 55
opcode[GET_ITER].pair_count[CALL_PY_EXACT_ARGS] : 15
opcode[GET_ITER].pair_count[FOR_ITER_LIST] : 41
opcode[GET_ITER].pair_count[FOR_ITER_TUPLE] : 77
opcode[INTERPRETER_EXIT].execution_count : 669
opcode[LOAD_BUILD_CLASS].execution_count : 84
opcode[LOAD_BUILD_CLASS].pair_count[PUSH_NULL] : 84
opcode[MAKE_FUNCTION].execution_count : 719
opcode[MAKE_FUNCTION].pair_count[PUSH_NULL] : 1
opcode[MAKE_FUNCTION].pair_count[CALL] : 69
opcode[MAKE_FUNCTION].pair_count[LOAD_CONST] : 83
opcode[MAKE_FUNCTION].pair_count[LOAD_GLOBAL] : 1
opcode[MAKE_FUNCTION].pair_count[LOAD_NAME] : 1
opcode[MAKE_FUNCTION].pair_count[SET_FUNCTION_ATTRIBUTE] : 168
opcode[MAKE_FUNCTION].pair_count[STORE_FAST] : 6
opcode[MAKE_FUNCTION].pair_count[STORE_NAME] : 390
opcode[NOP].execution_count : 703
opcode[NOP].pair_count[NOP] : 39
opcode[NOP].pair_count[LOAD_CONST] : 88
opcode[NOP].pair_count[LOAD_FAST] : 290
opcode[NOP].pair_count[LOAD_FAST_LOAD_FAST] : 62
opcode[NOP].pair_count[LOAD_GLOBAL] : 43
opcode[NOP].pair_count[LOAD_NAME] : 8
opcode[NOP].pair_count[LOAD_GLOBAL_BUILTIN] : 2
opcode[NOP].pair_count[LOAD_GLOBAL_MODULE] : 171
opcode[POP_EXCEPT].execution_count : 101
opcode[POP_EXCEPT].pair_count[RETURN_VALUE] : 2
opcode[POP_EXCEPT].pair_count[EXTENDED_ARG] : 3
opcode[POP_EXCEPT].pair_count[JUMP_BACKWARD] : 6
opcode[POP_EXCEPT].pair_count[JUMP_BACKWARD_NO_INTERRUPT] : 67
opcode[POP_EXCEPT].pair_count[JUMP_FORWARD] : 1
opcode[POP_EXCEPT].pair_count[LOAD_CONST] : 2
opcode[POP_EXCEPT].pair_count[LOAD_FAST] : 6
opcode[POP_EXCEPT].pair_count[RERAISE] : 6
opcode[POP_EXCEPT].pair_count[RETURN_CONST] : 8
opcode[POP_TOP].execution_count : 1394
opcode[POP_TOP].pair_count[LOAD_BUILD_CLASS] : 15
opcode[POP_TOP].pair_count[NOP] : 160
opcode[POP_TOP].pair_count[POP_EXCEPT] : 18
opcode[POP_TOP].pair_count[RETURN_VALUE] : 59
opcode[POP_TOP].pair_count[BUILD_LIST] : 2
opcode[POP_TOP].pair_count[BUILD_MAP] : 1
opcode[POP_TOP].pair_count[DELETE_NAME] : 3
opcode[POP_TOP].pair_count[JUMP_BACKWARD] : 136
opcode[POP_TOP].pair_count[JUMP_FORWARD] : 2
opcode[POP_TOP].pair_count[LOAD_CONST] : 137
opcode[POP_TOP].pair_count[LOAD_FAST] : 189
opcode[POP_TOP].pair_count[LOAD_FAST_CHECK] : 47
opcode[POP_TOP].pair_count[LOAD_FAST_LOAD_FAST] : 42
opcode[POP_TOP].pair_count[LOAD_GLOBAL] : 27
opcode[POP_TOP].pair_count[LOAD_NAME] : 80
opcode[POP_TOP].pair_count[RERAISE] : 1
opcode[POP_TOP].pair_count[RETURN_CONST] : 401
opcode[POP_TOP].pair_count[RESUME] : 5
opcode[POP_TOP].pair_count[LOAD_GLOBAL_BUILTIN] : 27
opcode[POP_TOP].pair_count[LOAD_GLOBAL_MODULE] : 25
opcode[POP_TOP].pair_count[RESUME_CHECK] : 17
opcode[PUSH_EXC_INFO].execution_count : 101
opcode[PUSH_EXC_INFO].pair_count[WITH_EXCEPT_START] : 3
opcode[PUSH_EXC_INFO].pair_count[LOAD_FAST] : 1
opcode[PUSH_EXC_INFO].pair_count[LOAD_GLOBAL] : 27
opcode[PUSH_EXC_INFO].pair_count[LOAD_NAME] : 5
opcode[PUSH_EXC_INFO].pair_count[LOAD_GLOBAL_BUILTIN] : 65
opcode[PUSH_NULL].execution_count : 605
opcode[PUSH_NULL].pair_count[BUILD_LIST] : 2
opcode[PUSH_NULL].pair_count[BUILD_MAP] : 6
opcode[PUSH_NULL].pair_count[CALL] : 35
opcode[PUSH_NULL].pair_count[LOAD_CONST] : 158
opcode[PUSH_NULL].pair_count[LOAD_FAST] : 210
opcode[PUSH_NULL].pair_count[LOAD_FAST_LOAD_FAST] : 101
opcode[PUSH_NULL].pair_count[LOAD_GLOBAL] : 3
opcode[PUSH_NULL].pair_count[LOAD_NAME] : 60
opcode[PUSH_NULL].pair_count[CALL_NON_PY_GENERAL] : 29
opcode[PUSH_NULL].pair_count[LOAD_GLOBAL_BUILTIN] : 1
opcode[RETURN_GENERATOR].execution_count : 25
opcode[RETURN_GENERATOR].pair_count[CALL] : 7
opcode[RETURN_GENERATOR].pair_count[LOAD_CONST] : 1
opcode[RETURN_GENERATOR].pair_count[STORE_NAME] : 2
opcode[RETURN_GENERATOR].pair_count[CALL_BUILTIN_FAST_WITH_KEYWORDS] : 5
opcode[RETURN_GENERATOR].pair_count[CALL_METHOD_DESCRIPTOR_O] : 10
opcode[RETURN_VALUE].execution_count : 1008
opcode[RETURN_VALUE].pair_count[BEFORE_WITH] : 52
opcode[RETURN_VALUE].pair_count[BINARY_SUBSCR] : 2
opcode[RETURN_VALUE].pair_count[GET_ITER] : 1
opcode[RETURN_VALUE].pair_count[INTERPRETER_EXIT] : 176
opcode[RETURN_VALUE].pair_count[POP_TOP] : 85
opcode[RETURN_VALUE].pair_count[RETURN_VALUE] : 56
opcode[RETURN_VALUE].pair_count[TO_BOOL] : 21
opcode[RETURN_VALUE].pair_count[BUILD_TUPLE] : 5
opcode[RETURN_VALUE].pair_count[CALL] : 9
opcode[RETURN_VALUE].pair_count[LIST_APPEND] : 6
opcode[RETURN_VALUE].pair_count[LOAD_ATTR] : 2
opcode[RETURN_VALUE].pair_count[LOAD_FAST] : 99
opcode[RETURN_VALUE].pair_count[LOAD_GLOBAL] : 1
opcode[RETURN_VALUE].pair_count[POP_JUMP_IF_NONE] : 2
opcode[RETURN_VALUE].pair_count[STORE_FAST] : 354
opcode[RETURN_VALUE].pair_count[STORE_GLOBAL] : 2
opcode[RETURN_VALUE].pair_count[STORE_NAME] : 34
opcode[RETURN_VALUE].pair_count[SWAP] : 30
opcode[RETURN_VALUE].pair_count[UNPACK_SEQUENCE] : 9
opcode[RETURN_VALUE].pair_count[BINARY_SUBSCR_DICT] : 1
opcode[RETURN_VALUE].pair_count[LOAD_ATTR_SLOT] : 7
opcode[RETURN_VALUE].pair_count[TO_BOOL_BOOL] : 39
opcode[RETURN_VALUE].pair_count[UNPACK_SEQUENCE_TWO_TUPLE] : 15
opcode[STORE_SLICE].execution_count : 1
opcode[STORE_SLICE].pair_count[LOAD_FAST] : 1
opcode[STORE_SUBSCR].specializable : 1
opcode[STORE_SUBSCR].specialization.success : 5
opcode[STORE_SUBSCR].specialization.hit : 106
opcode[STORE_SUBSCR].specialization.deferred : 21
opcode[STORE_SUBSCR].execution_count : 26
opcode[STORE_SUBSCR].pair_count[NOP] : 2
opcode[STORE_SUBSCR].pair_count[POP_EXCEPT] : 1
opcode[STORE_SUBSCR].pair_count[LOAD_CONST] : 2
opcode[STORE_SUBSCR].pair_count[LOAD_FAST] : 1
opcode[STORE_SUBSCR].pair_count[LOAD_GLOBAL] : 2
opcode[STORE_SUBSCR].pair_count[LOAD_NAME] : 12
opcode[STORE_SUBSCR].pair_count[RETURN_CONST] : 1
opcode[STORE_SUBSCR].pair_count[STORE_SUBSCR_DICT] : 5
opcode[TO_BOOL].specializable : 1
opcode[TO_BOOL].specialization.success : 74
opcode[TO_BOOL].specialization.failure : 4
opcode[TO_BOOL].specialization.hit : 2864
opcode[TO_BOOL].specialization.deferred : 262
opcode[TO_BOOL].specialization.miss : 27
opcode[TO_BOOL].execution_count : 313
opcode[TO_BOOL].specialization.failure_kinds[17] : 4
opcode[TO_BOOL].pair_count[TO_BOOL] : 4
opcode[TO_BOOL].pair_count[EXTENDED_ARG] : 6
opcode[TO_BOOL].pair_count[POP_JUMP_IF_FALSE] : 141
opcode[TO_BOOL].pair_count[POP_JUMP_IF_TRUE] : 88
opcode[TO_BOOL].pair_count[TO_BOOL_BOOL] : 41
opcode[TO_BOOL].pair_count[TO_BOOL_INT] : 5
opcode[TO_BOOL].pair_count[TO_BOOL_LIST] : 4
opcode[TO_BOOL].pair_count[TO_BOOL_NONE] : 5
opcode[TO_BOOL].pair_count[TO_BOOL_STR] : 19
opcode[WITH_EXCEPT_START].execution_count : 3
opcode[WITH_EXCEPT_START].pair_count[TO_BOOL] : 3
opcode[BINARY_OP].specializable : 1
opcode[BINARY_OP].specialization.success : 12
opcode[BINARY_OP].specialization.failure : 18
opcode[BINARY_OP].specialization.hit : 2113
opcode[BINARY_OP].specialization.deferred : 2056
opcode[BINARY_OP].execution_count : 2086
opcode[BINARY_OP].specialization.failure_kinds[12] : 8
opcode[BINARY_OP].specialization.failure_kinds[17] : 1
opcode[BINARY_OP].specialization.failure_kinds[21] : 9
opcode[BINARY_OP].pair_count[BINARY_OP_INPLACE_ADD_UNICODE] : 1
opcode[BINARY_OP].pair_count[RETURN_VALUE] : 1
opcode[BINARY_OP].pair_count[TO_BOOL] : 4
opcode[BINARY_OP].pair_count[BINARY_OP] : 20
opcode[BINARY_OP].pair_count[CALL] : 2
opcode[BINARY_OP].pair_count[COMPARE_OP] : 7
opcode[BINARY_OP].pair_count[COPY] : 1
opcode[BINARY_OP].pair_count[LOAD_CONST] : 16
opcode[BINARY_OP].pair_count[LOAD_FAST] : 9
opcode[BINARY_OP].pair_count[LOAD_GLOBAL] : 3
opcode[BINARY_OP].pair_count[STORE_FAST] : 5
opcode[BINARY_OP].pair_count[STORE_NAME] : 6
opcode[BINARY_OP].pair_count[BINARY_OP_ADD_INT] : 4
opcode[BINARY_OP].pair_count[BINARY_OP_ADD_UNICODE] : 6
opcode[BINARY_OP].pair_count[BINARY_OP_MULTIPLY_INT] : 1
opcode[BINARY_OP].pair_count[COMPARE_OP_INT] : 1
opcode[BINARY_OP].pair_count[TO_BOOL_INT] : 1999
opcode[BUILD_CONST_KEY_MAP].execution_count : 20
opcode[BUILD_CONST_KEY_MAP].pair_count[RETURN_VALUE] : 3
opcode[BUILD_CONST_KEY_MAP].pair_count[DICT_UPDATE] : 1
opcode[BUILD_CONST_KEY_MAP].pair_count[LOAD_CONST] : 13
opcode[BUILD_CONST_KEY_MAP].pair_count[STORE_FAST] : 3
opcode[BUILD_LIST].execution_count : 236
opcode[BUILD_LIST].pair_count[BINARY_OP] : 1
opcode[BUILD_LIST].pair_count[BUILD_LIST] : 1
opcode[BUILD_LIST].pair_count[CALL] : 10
opcode[BUILD_LIST].pair_count[COMPARE_OP] : 32
opcode[BUILD_LIST].pair_count[LOAD_CONST] : 10
opcode[BUILD_LIST].pair_count[LOAD_DEREF] : 4
opcode[BUILD_LIST].pair_count[LOAD_FAST] : 87
opcode[BUILD_LIST].pair_count[LOAD_NAME] : 1
opcode[BUILD_LIST].pair_count[STORE_FAST] : 21
opcode[BUILD_LIST].pair_count[STORE_FAST_STORE_FAST] : 1
opcode[BUILD_LIST].pair_count[STORE_GLOBAL] : 1
opcode[BUILD_LIST].pair_count[STORE_NAME] : 9
opcode[BUILD_LIST].pair_count[SWAP] : 54
opcode[BUILD_LIST].pair_count[CALL_METHOD_DESCRIPTOR_O] : 4
opcode[BUILD_MAP].execution_count : 121
opcode[BUILD_MAP].pair_count[EXTENDED_ARG] : 7
opcode[BUILD_MAP].pair_count[LOAD_ATTR] : 6
opcode[BUILD_MAP].pair_count[LOAD_CONST] : 12
opcode[BUILD_MAP].pair_count[LOAD_FAST] : 93
opcode[BUILD_MAP].pair_count[STORE_NAME] : 3
opcode[BUILD_SET].execution_count : 3
opcode[BUILD_SET].pair_count[LOAD_NAME] : 2
opcode[BUILD_SET].pair_count[SWAP] : 1
opcode[BUILD_STRING].execution_count : 26
opcode[BUILD_STRING].pair_count[RETURN_VALUE] : 1
opcode[BUILD_STRING].pair_count[BUILD_LIST] : 1
opcode[BUILD_STRING].pair_count[CALL] : 1
opcode[BUILD_STRING].pair_count[LOAD_CONST] : 1
opcode[BUILD_STRING].pair_count[LOAD_FAST] : 3
opcode[BUILD_STRING].pair_count[LOAD_NAME] : 1
opcode[BUILD_STRING].pair_count[SET_ADD] : 1
opcode[BUILD_STRING].pair_count[STORE_FAST] : 13
opcode[BUILD_STRING].pair_count[STORE_NAME] : 4
opcode[BUILD_TUPLE].execution_count : 210
opcode[BUILD_TUPLE].pair_count[CHECK_EXC_MATCH] : 6
opcode[BUILD_TUPLE].pair_count[GET_ITER] : 4
opcode[BUILD_TUPLE].pair_count[RETURN_VALUE] : 24
opcode[BUILD_TUPLE].pair_count[BUILD_MAP] : 34
opcode[BUILD_TUPLE].pair_count[BUILD_TUPLE] : 11
opcode[BUILD_TUPLE].pair_count[CALL] : 4
opcode[BUILD_TUPLE].pair_count[LOAD_CONST] : 80
opcode[BUILD_TUPLE].pair_count[LOAD_NAME] : 22
opcode[BUILD_TUPLE].pair_count[STORE_FAST] : 2
opcode[BUILD_TUPLE].pair_count[STORE_NAME] : 2
opcode[BUILD_TUPLE].pair_count[YIELD_VALUE] : 20
opcode[BUILD_TUPLE].pair_count[CALL_ISINSTANCE] : 1
opcode[CALL].specializable : 1
opcode[CALL].specialization.success : 222
opcode[CALL].specialization.failure : 10
opcode[CALL].specialization.hit : 1925
opcode[CALL].specialization.deferred : 1018
opcode[CALL].specialization.miss : 195
opcode[CALL].execution_count : 1055
opcode[CALL].specialization.failure_kinds[21] : 1
opcode[CALL].specialization.failure_kinds[25] : 10
opcode[CALL].specialization.failure_kinds[30] : 1
opcode[CALL].pair_count[BEFORE_WITH] : 4
opcode[CALL].pair_count[GET_ITER] : 4
opcode[CALL].pair_count[POP_TOP] : 70
opcode[CALL].pair_count[PUSH_EXC_INFO] : 5
opcode[CALL].pair_count[PUSH_NULL] : 3
opcode[CALL].pair_count[RETURN_GENERATOR] : 5
opcode[CALL].pair_count[RETURN_VALUE] : 27
opcode[CALL].pair_count[TO_BOOL] : 42
opcode[CALL].pair_count[BINARY_OP] : 1
opcode[CALL].pair_count[BUILD_TUPLE] : 1
opcode[CALL].pair_count[CALL] : 46
opcode[CALL].pair_count[COMPARE_OP] : 2
opcode[CALL].pair_count[CONTAINS_OP] : 1
opcode[CALL].pair_count[COPY] : 6
opcode[CALL].pair_count[COPY_FREE_VARS] : 7
opcode[CALL].pair_count[LIST_APPEND] : 1
opcode[CALL].pair_count[LOAD_ATTR] : 1
opcode[CALL].pair_count[LOAD_CONST] : 18
opcode[CALL].pair_count[LOAD_FAST] : 33
opcode[CALL].pair_count[LOAD_GLOBAL] : 10
opcode[CALL].pair_count[MAKE_CELL] : 15
opcode[CALL].pair_count[POP_JUMP_IF_NOT_NONE] : 6
opcode[CALL].pair_count[STORE_DEREF] : 4
opcode[CALL].pair_count[STORE_FAST] : 51
opcode[CALL].pair_count[STORE_GLOBAL] : 1
opcode[CALL].pair_count[STORE_NAME] : 197
opcode[CALL].pair_count[SWAP] : 1
opcode[CALL].pair_count[UNPACK_SEQUENCE] : 1
opcode[CALL].pair_count[YIELD_VALUE] : 2
opcode[CALL].pair_count[RESUME] : 89
opcode[CALL].pair_count[CALL_ALLOC_AND_ENTER_INIT] : 4
opcode[CALL].pair_count[CALL_BOUND_METHOD_EXACT_ARGS] : 8
opcode[CALL].pair_count[CALL_BOUND_METHOD_GENERAL] : 3
opcode[CALL].pair_count[CALL_BUILTIN_CLASS] : 4
opcode[CALL].pair_count[CALL_BUILTIN_FAST] : 23
opcode[CALL].pair_count[CALL_BUILTIN_FAST_WITH_KEYWORDS] : 17
opcode[CALL].pair_count[CALL_BUILTIN_O] : 2
opcode[CALL].pair_count[CALL_ISINSTANCE] : 8
opcode[CALL].pair_count[CALL_LEN] : 6
opcode[CALL].pair_count[CALL_LIST_APPEND] : 5
opcode[CALL].pair_count[CALL_METHOD_DESCRIPTOR_FAST] : 19
opcode[CALL].pair_count[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] : 3
opcode[CALL].pair_count[CALL_METHOD_DESCRIPTOR_NOARGS] : 2
opcode[CALL].pair_count[CALL_METHOD_DESCRIPTOR_O] : 11
opcode[CALL].pair_count[CALL_NON_PY_GENERAL] : 24
opcode[CALL].pair_count[CALL_PY_EXACT_ARGS] : 57
opcode[CALL].pair_count[CALL_PY_GENERAL] : 21
opcode[CALL].pair_count[CALL_STR_1] : 2
opcode[CALL].pair_count[CALL_TUPLE_1] : 1
opcode[CALL].pair_count[CALL_TYPE_1] : 2
opcode[CALL].pair_count[LOAD_GLOBAL_MODULE] : 23
opcode[CALL].pair_count[RESUME_CHECK] : 156
opcode[CALL_FUNCTION_EX].execution_count : 103
opcode[CALL_FUNCTION_EX].pair_count[RETURN_VALUE] : 59
opcode[CALL_FUNCTION_EX].pair_count[BUILD_LIST] : 1
opcode[CALL_FUNCTION_EX].pair_count[COPY_FREE_VARS] : 1
opcode[CALL_FUNCTION_EX].pair_count[MAKE_CELL] : 1
opcode[CALL_FUNCTION_EX].pair_count[STORE_FAST] : 33
opcode[CALL_FUNCTION_EX].pair_count[RESUME] : 2
opcode[CALL_FUNCTION_EX].pair_count[RESUME_CHECK] : 6
opcode[CALL_INTRINSIC_1].execution_count : 12
opcode[CALL_INTRINSIC_1].pair_count[POP_TOP] : 4
opcode[CALL_INTRINSIC_1].pair_count[BUILD_MAP] : 3
opcode[CALL_INTRINSIC_1].pair_count[CALL_FUNCTION_EX] : 5
opcode[CALL_KW].execution_count : 133
opcode[CALL_KW].pair_count[RETURN_VALUE] : 24
opcode[CALL_KW].pair_count[LOAD_FAST] : 13
opcode[CALL_KW].pair_count[RAISE_VARARGS] : 10
opcode[CALL_KW].pair_count[STORE_FAST] : 8
opcode[CALL_KW].pair_count[STORE_NAME] : 11
opcode[CALL_KW].pair_count[RESUME] : 3
opcode[CALL_KW].pair_count[RESUME_CHECK] : 64
opcode[COMPARE_OP].specializable : 1
opcode[COMPARE_OP].specialization.success : 19
opcode[COMPARE_OP].specialization.failure : 14
opcode[COMPARE_OP].specialization.hit : 543
opcode[COMPARE_OP].specialization.deferred : 143
opcode[COMPARE_OP].execution_count : 176
opcode[COMPARE_OP].specialization.failure_kinds[12] : 1
opcode[COMPARE_OP].specialization.failure_kinds[14] : 6
opcode[COMPARE_OP].specialization.failure_kinds[15] : 1
opcode[COMPARE_OP].specialization.failure_kinds[17] : 4
opcode[COMPARE_OP].specialization.failure_kinds[21] : 2
opcode[COMPARE_OP].pair_count[RETURN_VALUE] : 1
opcode[COMPARE_OP].pair_count[COMPARE_OP] : 14
opcode[COMPARE_OP].pair_count[POP_JUMP_IF_FALSE] : 103
opcode[COMPARE_OP].pair_count[POP_JUMP_IF_TRUE] : 34
opcode[COMPARE_OP].pair_count[STORE_FAST] : 1
opcode[COMPARE_OP].pair_count[STORE_NAME] : 3
opcode[COMPARE_OP].pair_count[YIELD_VALUE] : 1
opcode[COMPARE_OP].pair_count[COMPARE_OP_INT] : 11
opcode[COMPARE_OP].pair_count[COMPARE_OP_STR] : 8
opcode[CONTAINS_OP].specializable : 1
opcode[CONTAINS_OP].specialization.success : 11
opcode[CONTAINS_OP].specialization.failure : 13
opcode[CONTAINS_OP].specialization.hit : 149
opcode[CONTAINS_OP].specialization.deferred : 126
opcode[CONTAINS_OP].execution_count : 150
opcode[CONTAINS_OP].specialization.failure_kinds[0] : 4
opcode[CONTAINS_OP].specialization.failure_kinds[10] : 5
opcode[CONTAINS_OP].specialization.failure_kinds[11] : 4
opcode[CONTAINS_OP].pair_count[RETURN_VALUE] : 1
opcode[CONTAINS_OP].pair_count[CONTAINS_OP] : 13
opcode[CONTAINS_OP].pair_count[POP_JUMP_IF_FALSE] : 82
opcode[CONTAINS_OP].pair_count[POP_JUMP_IF_TRUE] : 42
opcode[CONTAINS_OP].pair_count[STORE_FAST] : 1
opcode[CONTAINS_OP].pair_count[CONTAINS_OP_DICT] : 7
opcode[CONTAINS_OP].pair_count[CONTAINS_OP_SET] : 4
opcode[CONVERT_VALUE].execution_count : 4
opcode[CONVERT_VALUE].pair_count[FORMAT_SIMPLE] : 4
opcode[COPY].execution_count : 46
opcode[COPY].pair_count[POP_EXCEPT] : 6
opcode[COPY].pair_count[TO_BOOL] : 17
opcode[COPY].pair_count[STORE_FAST_LOAD_FAST] : 1
opcode[COPY].pair_count[STORE_NAME] : 13
opcode[COPY].pair_count[TO_BOOL_STR] : 9
opcode[COPY_FREE_VARS].execution_count : 167
opcode[COPY_FREE_VARS].pair_count[RETURN_GENERATOR] : 20
opcode[COPY_FREE_VARS].pair_count[MAKE_CELL] : 1
opcode[COPY_FREE_VARS].pair_count[RESUME] : 10
opcode[COPY_FREE_VARS].pair_count[RESUME_CHECK] : 136
opcode[DELETE_FAST].execution_count : 2
opcode[DELETE_FAST].pair_count[RETURN_CONST] : 2
opcode[DELETE_NAME].execution_count : 13
opcode[DELETE_NAME].pair_count[NOP] : 1
opcode[DELETE_NAME].pair_count[BUILD_LIST] : 1
opcode[DELETE_NAME].pair_count[DELETE_NAME] : 3
opcode[DELETE_NAME].pair_count[JUMP_FORWARD] : 1
opcode[DELETE_NAME].pair_count[LOAD_CONST] : 5
opcode[DELETE_NAME].pair_count[LOAD_NAME] : 2
opcode[DICT_MERGE].execution_count : 92
opcode[DICT_MERGE].pair_count[CALL_FUNCTION_EX] : 92
opcode[DICT_UPDATE].execution_count : 19
opcode[DICT_UPDATE].pair_count[BUILD_MAP] : 17
opcode[DICT_UPDATE].pair_count[EXTENDED_ARG] : 1
opcode[DICT_UPDATE].pair_count[STORE_NAME] : 1
opcode[ENTER_EXECUTOR].execution_count : 1981
opcode[ENTER_EXECUTOR].pair_count[POP_TOP] : 1
opcode[ENTER_EXECUTOR].pair_count[LOAD_NAME] : 1980
opcode[EXTENDED_ARG].execution_count : 274
opcode[EXTENDED_ARG].pair_count[FOR_ITER] : 2
opcode[EXTENDED_ARG].pair_count[JUMP_BACKWARD] : 2
opcode[EXTENDED_ARG].pair_count[JUMP_BACKWARD_NO_INTERRUPT] : 1
opcode[EXTENDED_ARG].pair_count[JUMP_FORWARD] : 1
opcode[EXTENDED_ARG].pair_count[LOAD_CONST] : 259
opcode[EXTENDED_ARG].pair_count[POP_JUMP_IF_FALSE] : 2
opcode[EXTENDED_ARG].pair_count[POP_JUMP_IF_NOT_NONE] : 1
opcode[EXTENDED_ARG].pair_count[POP_JUMP_IF_TRUE] : 4
opcode[EXTENDED_ARG].pair_count[RETURN_CONST] : 1
opcode[EXTENDED_ARG].pair_count[FOR_ITER_LIST] : 1
opcode[FOR_ITER].specializable : 1
opcode[FOR_ITER].specialization.success : 29
opcode[FOR_ITER].specialization.failure : 8
opcode[FOR_ITER].specialization.hit : 913
opcode[FOR_ITER].specialization.deferred : 64
opcode[FOR_ITER].specialization.miss : 4
opcode[FOR_ITER].execution_count : 97
opcode[FOR_ITER].specialization.failure_kinds[21] : 2
opcode[FOR_ITER].specialization.failure_kinds[29] : 6
opcode[FOR_ITER].pair_count[FOR_ITER] : 8
opcode[FOR_ITER].pair_count[LOAD_CONST] : 2
opcode[FOR_ITER].pair_count[LOAD_FAST] : 2
opcode[FOR_ITER].pair_count[LOAD_GLOBAL] : 1
opcode[FOR_ITER].pair_count[RETURN_CONST] : 7
opcode[FOR_ITER].pair_count[STORE_FAST] : 32
opcode[FOR_ITER].pair_count[STORE_FAST_LOAD_FAST] : 3
opcode[FOR_ITER].pair_count[STORE_NAME] : 4
opcode[FOR_ITER].pair_count[SWAP] : 2
opcode[FOR_ITER].pair_count[UNPACK_SEQUENCE] : 5
opcode[FOR_ITER].pair_count[FOR_ITER_LIST] : 14
opcode[FOR_ITER].pair_count[FOR_ITER_RANGE] : 1
opcode[FOR_ITER].pair_count[FOR_ITER_TUPLE] : 14
opcode[FOR_ITER].pair_count[UNPACK_SEQUENCE_TWO_TUPLE] : 2
opcode[IMPORT_FROM].execution_count : 45
opcode[IMPORT_FROM].pair_count[PUSH_EXC_INFO] : 1
opcode[IMPORT_FROM].pair_count[STORE_NAME] : 44
opcode[IMPORT_NAME].execution_count : 64
opcode[IMPORT_NAME].pair_count[PUSH_EXC_INFO] : 2
opcode[IMPORT_NAME].pair_count[CALL_INTRINSIC_1] : 4
opcode[IMPORT_NAME].pair_count[IMPORT_FROM] : 13
opcode[IMPORT_NAME].pair_count[STORE_FAST] : 4
opcode[IMPORT_NAME].pair_count[STORE_NAME] : 41
opcode[IS_OP].execution_count : 114
opcode[IS_OP].pair_count[POP_JUMP_IF_FALSE] : 85
opcode[IS_OP].pair_count[POP_JUMP_IF_TRUE] : 29
opcode[JUMP_BACKWARD].execution_count : 755
opcode[JUMP_BACKWARD].pair_count[NOP] : 1
opcode[JUMP_BACKWARD].pair_count[EXTENDED_ARG] : 2
opcode[JUMP_BACKWARD].pair_count[FOR_ITER] : 42
opcode[JUMP_BACKWARD].pair_count[LOAD_NAME] : 1
opcode[JUMP_BACKWARD].pair_count[FOR_ITER_LIST] : 475
opcode[JUMP_BACKWARD].pair_count[FOR_ITER_RANGE] : 17
opcode[JUMP_BACKWARD].pair_count[FOR_ITER_TUPLE] : 217
opcode[JUMP_BACKWARD_NO_INTERRUPT].execution_count : 68
opcode[JUMP_BACKWARD_NO_INTERRUPT].pair_count[NOP] : 4
opcode[JUMP_BACKWARD_NO_INTERRUPT].pair_count[LOAD_FAST] : 58
opcode[JUMP_BACKWARD_NO_INTERRUPT].pair_count[LOAD_FAST_LOAD_FAST] : 1
opcode[JUMP_BACKWARD_NO_INTERRUPT].pair_count[LOAD_GLOBAL] : 2
opcode[JUMP_BACKWARD_NO_INTERRUPT].pair_count[LOAD_NAME] : 1
opcode[JUMP_BACKWARD_NO_INTERRUPT].pair_count[LOAD_GLOBAL_MODULE] : 2
opcode[JUMP_FORWARD].execution_count : 74
opcode[JUMP_FORWARD].pair_count[NOP] : 1
opcode[JUMP_FORWARD].pair_count[JUMP_BACKWARD] : 1
opcode[JUMP_FORWARD].pair_count[LOAD_FAST] : 32
opcode[JUMP_FORWARD].pair_count[LOAD_FAST_LOAD_FAST] : 6
opcode[JUMP_FORWARD].pair_count[LOAD_GLOBAL] : 10
opcode[JUMP_FORWARD].pair_count[LOAD_NAME] : 5
opcode[JUMP_FORWARD].pair_count[SWAP] : 1
opcode[JUMP_FORWARD].pair_count[LOAD_GLOBAL_BUILTIN] : 5
opcode[JUMP_FORWARD].pair_count[LOAD_GLOBAL_MODULE] : 13
opcode[LIST_APPEND].execution_count : 451
opcode[LIST_APPEND].pair_count[JUMP_BACKWARD] : 451
opcode[LIST_EXTEND].execution_count : 18
opcode[LIST_EXTEND].pair_count[CALL] : 4
opcode[LIST_EXTEND].pair_count[CALL_INTRINSIC_1] : 8
opcode[LIST_EXTEND].pair_count[STORE_NAME] : 6
opcode[LOAD_ATTR].specializable : 1
opcode[LOAD_ATTR].specialization.success : 226
opcode[LOAD_ATTR].specialization.failure : 65
opcode[LOAD_ATTR].specialization.hit : 2870
opcode[LOAD_ATTR].specialization.deferred : 1112
opcode[LOAD_ATTR].specialization.miss : 235
opcode[LOAD_ATTR].specialization.deopt : 7
opcode[LOAD_ATTR].execution_count : 1168
opcode[LOAD_ATTR].specialization.failure_kinds[10] : 12
opcode[LOAD_ATTR].specialization.failure_kinds[18] : 15
opcode[LOAD_ATTR].specialization.failure_kinds[20] : 7
opcode[LOAD_ATTR].specialization.failure_kinds[22] : 2
opcode[LOAD_ATTR].specialization.failure_kinds[23] : 15
opcode[LOAD_ATTR].specialization.failure_kinds[27] : 14
opcode[LOAD_ATTR].pair_count[BEFORE_WITH] : 2
opcode[LOAD_ATTR].pair_count[FORMAT_SIMPLE] : 2
opcode[LOAD_ATTR].pair_count[GET_ITER] : 4
opcode[LOAD_ATTR].pair_count[PUSH_EXC_INFO] : 15
opcode[LOAD_ATTR].pair_count[PUSH_NULL] : 41
opcode[LOAD_ATTR].pair_count[RETURN_VALUE] : 4
opcode[LOAD_ATTR].pair_count[STORE_SUBSCR] : 2
opcode[LOAD_ATTR].pair_count[TO_BOOL] : 10
opcode[LOAD_ATTR].pair_count[BUILD_LIST] : 9
opcode[LOAD_ATTR].pair_count[CALL] : 75
opcode[LOAD_ATTR].pair_count[COMPARE_OP] : 2
opcode[LOAD_ATTR].pair_count[CONTAINS_OP] : 49
opcode[LOAD_ATTR].pair_count[COPY] : 1
opcode[LOAD_ATTR].pair_count[LOAD_ATTR] : 122
opcode[LOAD_ATTR].pair_count[LOAD_CONST] : 79
opcode[LOAD_ATTR].pair_count[LOAD_DEREF] : 2
opcode[LOAD_ATTR].pair_count[LOAD_FAST] : 216
opcode[LOAD_ATTR].pair_count[LOAD_FAST_CHECK] : 1
opcode[LOAD_ATTR].pair_count[LOAD_FAST_LOAD_FAST] : 31
opcode[LOAD_ATTR].pair_count[LOAD_GLOBAL] : 22
opcode[LOAD_ATTR].pair_count[LOAD_NAME] : 53
opcode[LOAD_ATTR].pair_count[POP_JUMP_IF_NONE] : 7
opcode[LOAD_ATTR].pair_count[POP_JUMP_IF_NOT_NONE] : 4
opcode[LOAD_ATTR].pair_count[STORE_FAST] : 102
opcode[LOAD_ATTR].pair_count[STORE_NAME] : 11
opcode[LOAD_ATTR].pair_count[CALL_BUILTIN_FAST_WITH_KEYWORDS] : 10
opcode[LOAD_ATTR].pair_count[CALL_NON_PY_GENERAL] : 60
opcode[LOAD_ATTR].pair_count[CALL_PY_GENERAL] : 1
opcode[LOAD_ATTR].pair_count[LOAD_ATTR_CLASS] : 3
opcode[LOAD_ATTR].pair_count[LOAD_ATTR_INSTANCE_VALUE] : 69
opcode[LOAD_ATTR].pair_count[LOAD_ATTR_METHOD_LAZY_DICT] : 1
opcode[LOAD_ATTR].pair_count[LOAD_ATTR_METHOD_NO_DICT] : 47
opcode[LOAD_ATTR].pair_count[LOAD_ATTR_METHOD_WITH_VALUES] : 12
opcode[LOAD_ATTR].pair_count[LOAD_ATTR_MODULE] : 86
opcode[LOAD_ATTR].pair_count[LOAD_ATTR_PROPERTY] : 4
opcode[LOAD_ATTR].pair_count[LOAD_ATTR_SLOT] : 9
opcode[LOAD_CONST].execution_count : 7302
opcode[LOAD_CONST].pair_count[BINARY_SLICE] : 25
opcode[LOAD_CONST].pair_count[BINARY_SUBSCR] : 25
opcode[LOAD_CONST].pair_count[GET_ITER] : 11
opcode[LOAD_CONST].pair_count[MAKE_FUNCTION] : 719
opcode[LOAD_CONST].pair_count[STORE_SLICE] : 1
opcode[LOAD_CONST].pair_count[STORE_SUBSCR] : 15
opcode[LOAD_CONST].pair_count[BINARY_OP] : 2039
opcode[LOAD_CONST].pair_count[BUILD_CONST_KEY_MAP] : 20
opcode[LOAD_CONST].pair_count[BUILD_LIST] : 10
opcode[LOAD_CONST].pair_count[BUILD_STRING] : 17
opcode[LOAD_CONST].pair_count[BUILD_TUPLE] : 25
opcode[LOAD_CONST].pair_count[CALL] : 199
opcode[LOAD_CONST].pair_count[CALL_KW] : 133
opcode[LOAD_CONST].pair_count[COMPARE_OP] : 63
opcode[LOAD_CONST].pair_count[CONTAINS_OP] : 2
opcode[LOAD_CONST].pair_count[COPY] : 4
opcode[LOAD_CONST].pair_count[EXTENDED_ARG] : 129
opcode[LOAD_CONST].pair_count[IMPORT_NAME] : 64
opcode[LOAD_CONST].pair_count[JUMP_FORWARD] : 4
opcode[LOAD_CONST].pair_count[LIST_EXTEND] : 10
opcode[LOAD_CONST].pair_count[LOAD_ATTR] : 5
opcode[LOAD_CONST].pair_count[LOAD_CONST] : 961
opcode[LOAD_CONST].pair_count[LOAD_FAST] : 382
opcode[LOAD_CONST].pair_count[LOAD_FAST_LOAD_FAST] : 1
opcode[LOAD_CONST].pair_count[LOAD_GLOBAL] : 5
opcode[LOAD_CONST].pair_count[LOAD_NAME] : 76
opcode[LOAD_CONST].pair_count[MAP_ADD] : 323
opcode[LOAD_CONST].pair_count[RAISE_VARARGS] : 1
opcode[LOAD_CONST].pair_count[STORE_FAST] : 197
opcode[LOAD_CONST].pair_count[STORE_GLOBAL] : 9
opcode[LOAD_CONST].pair_count[STORE_NAME] : 491
opcode[LOAD_CONST].pair_count[BINARY_OP_ADD_INT] : 5
opcode[LOAD_CONST].pair_count[BINARY_SUBSCR_DICT] : 2
opcode[LOAD_CONST].pair_count[BINARY_SUBSCR_LIST_INT] : 4
opcode[LOAD_CONST].pair_count[BINARY_SUBSCR_STR_INT] : 350
opcode[LOAD_CONST].pair_count[BINARY_SUBSCR_TUPLE_INT] : 57
opcode[LOAD_CONST].pair_count[CALL_BOUND_METHOD_EXACT_ARGS] : 45
opcode[LOAD_CONST].pair_count[CALL_BOUND_METHOD_GENERAL] : 48
opcode[LOAD_CONST].pair_count[CALL_BUILTIN_FAST] : 184
opcode[LOAD_CONST].pair_count[CALL_BUILTIN_FAST_WITH_KEYWORDS] : 7
opcode[LOAD_CONST].pair_count[CALL_LIST_APPEND] : 27
opcode[LOAD_CONST].pair_count[CALL_METHOD_DESCRIPTOR_FAST] : 29
opcode[LOAD_CONST].pair_count[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] : 1
opcode[LOAD_CONST].pair_count[CALL_METHOD_DESCRIPTOR_O] : 61
opcode[LOAD_CONST].pair_count[CALL_NON_PY_GENERAL] : 55
opcode[LOAD_CONST].pair_count[CALL_PY_EXACT_ARGS] : 8
opcode[LOAD_CONST].pair_count[CALL_PY_GENERAL] : 11
opcode[LOAD_CONST].pair_count[COMPARE_OP_INT] : 72
opcode[LOAD_CONST].pair_count[COMPARE_OP_STR] : 366
opcode[LOAD_CONST].pair_count[LOAD_ATTR_METHOD_NO_DICT] : 4
opcode[LOAD_DEREF].execution_count : 205
opcode[LOAD_DEREF].pair_count[PUSH_NULL] : 48
opcode[LOAD_DEREF].pair_count[RETURN_VALUE] : 1
opcode[LOAD_DEREF].pair_count[TO_BOOL] : 1
opcode[LOAD_DEREF].pair_count[BUILD_TUPLE] : 20
opcode[LOAD_DEREF].pair_count[CALL] : 6
opcode[LOAD_DEREF].pair_count[LIST_EXTEND] : 4
opcode[LOAD_DEREF].pair_count[LOAD_ATTR] : 2
opcode[LOAD_DEREF].pair_count[LOAD_CONST] : 12
opcode[LOAD_DEREF].pair_count[LOAD_FAST] : 101
opcode[LOAD_DEREF].pair_count[STORE_FAST] : 1
opcode[LOAD_DEREF].pair_count[CALL_PY_EXACT_ARGS] : 4
opcode[LOAD_DEREF].pair_count[LOAD_ATTR_METHOD_NO_DICT] : 5
opcode[LOAD_FAST].execution_count : 6849
opcode[LOAD_FAST].pair_count[BEFORE_WITH] : 1
opcode[LOAD_FAST].pair_count[BINARY_SLICE] : 9
opcode[LOAD_FAST].pair_count[BINARY_SUBSCR] : 52
opcode[LOAD_FAST].pair_count[DELETE_SUBSCR] : 25
opcode[LOAD_FAST].pair_count[FORMAT_SIMPLE] : 28
opcode[LOAD_FAST].pair_count[GET_ITER] : 179
opcode[LOAD_FAST].pair_count[PUSH_NULL] : 120
opcode[LOAD_FAST].pair_count[RETURN_VALUE] : 351
opcode[LOAD_FAST].pair_count[STORE_SUBSCR] : 7
opcode[LOAD_FAST].pair_count[TO_BOOL] : 71
opcode[LOAD_FAST].pair_count[BINARY_OP] : 5
opcode[LOAD_FAST].pair_count[BUILD_LIST] : 6
opcode[LOAD_FAST].pair_count[BUILD_MAP] : 55
opcode[LOAD_FAST].pair_count[BUILD_TUPLE] : 74
opcode[LOAD_FAST].pair_count[CALL] : 227
opcode[LOAD_FAST].pair_count[CALL_FUNCTION_EX] : 6
opcode[LOAD_FAST].pair_count[COMPARE_OP] : 40
opcode[LOAD_FAST].pair_count[CONTAINS_OP] : 3
opcode[LOAD_FAST].pair_count[CONVERT_VALUE] : 4
opcode[LOAD_FAST].pair_count[COPY] : 11
opcode[LOAD_FAST].pair_count[DICT_MERGE] : 92
opcode[LOAD_FAST].pair_count[EXTENDED_ARG] : 1
opcode[LOAD_FAST].pair_count[FOR_ITER] : 11
opcode[LOAD_FAST].pair_count[IS_OP] : 25
opcode[LOAD_FAST].pair_count[JUMP_FORWARD] : 6
opcode[LOAD_FAST].pair_count[LIST_APPEND] : 341
opcode[LOAD_FAST].pair_count[LIST_EXTEND] : 3
opcode[LOAD_FAST].pair_count[LOAD_ATTR] : 489
opcode[LOAD_FAST].pair_count[LOAD_CONST] : 354
opcode[LOAD_FAST].pair_count[LOAD_DEREF] : 10
opcode[LOAD_FAST].pair_count[LOAD_FAST] : 38
opcode[LOAD_FAST].pair_count[LOAD_FAST_CHECK] : 2
opcode[LOAD_FAST].pair_count[LOAD_FAST_LOAD_FAST] : 1
opcode[LOAD_FAST].pair_count[LOAD_GLOBAL] : 82
opcode[LOAD_FAST].pair_count[LOAD_SUPER_ATTR] : 7
opcode[LOAD_FAST].pair_count[POP_JUMP_IF_NONE] : 52
opcode[LOAD_FAST].pair_count[POP_JUMP_IF_NOT_NONE] : 302
opcode[LOAD_FAST].pair_count[STORE_ATTR] : 123
opcode[LOAD_FAST].pair_count[STORE_FAST] : 25
opcode[LOAD_FAST].pair_count[STORE_GLOBAL] : 4
opcode[LOAD_FAST].pair_count[SWAP] : 27
opcode[LOAD_FAST].pair_count[UNPACK_SEQUENCE] : 2
opcode[LOAD_FAST].pair_count[BINARY_OP_ADD_UNICODE] : 13
opcode[LOAD_FAST].pair_count[BINARY_SUBSCR_DICT] : 99
opcode[LOAD_FAST].pair_count[CALL_ALLOC_AND_ENTER_INIT] : 46
opcode[LOAD_FAST].pair_count[CALL_BOUND_METHOD_EXACT_ARGS] : 77
opcode[LOAD_FAST].pair_count[CALL_BOUND_METHOD_GENERAL] : 1
opcode[LOAD_FAST].pair_count[CALL_BUILTIN_CLASS] : 2
opcode[LOAD_FAST].pair_count[CALL_BUILTIN_FAST] : 1
opcode[LOAD_FAST].pair_count[CALL_BUILTIN_FAST_WITH_KEYWORDS] : 67
opcode[LOAD_FAST].pair_count[CALL_BUILTIN_O] : 57
opcode[LOAD_FAST].pair_count[CALL_LEN] : 8
opcode[LOAD_FAST].pair_count[CALL_LIST_APPEND] : 3
opcode[LOAD_FAST].pair_count[CALL_METHOD_DESCRIPTOR_FAST] : 50
opcode[LOAD_FAST].pair_count[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] : 10
opcode[LOAD_FAST].pair_count[CALL_METHOD_DESCRIPTOR_O] : 1
opcode[LOAD_FAST].pair_count[CALL_PY_EXACT_ARGS] : 164
opcode[LOAD_FAST].pair_count[CALL_PY_GENERAL] : 53
opcode[LOAD_FAST].pair_count[CALL_STR_1] : 5
opcode[LOAD_FAST].pair_count[COMPARE_OP_INT] : 74
opcode[LOAD_FAST].pair_count[COMPARE_OP_STR] : 1
opcode[LOAD_FAST].pair_count[CONTAINS_OP_SET] : 36
opcode[LOAD_FAST].pair_count[FOR_ITER_LIST] : 11
opcode[LOAD_FAST].pair_count[LOAD_ATTR_CLASS] : 29
opcode[LOAD_FAST].pair_count[LOAD_ATTR_INSTANCE_VALUE] : 1133
opcode[LOAD_FAST].pair_count[LOAD_ATTR_METHOD_LAZY_DICT] : 1
opcode[LOAD_FAST].pair_count[LOAD_ATTR_METHOD_NO_DICT] : 221
opcode[LOAD_FAST].pair_count[LOAD_ATTR_METHOD_WITH_VALUES] : 17
opcode[LOAD_FAST].pair_count[LOAD_ATTR_MODULE] : 19
opcode[LOAD_FAST].pair_count[LOAD_ATTR_PROPERTY] : 58
opcode[LOAD_FAST].pair_count[LOAD_ATTR_SLOT] : 39
opcode[LOAD_FAST].pair_count[LOAD_GLOBAL_BUILTIN] : 43
opcode[LOAD_FAST].pair_count[LOAD_GLOBAL_MODULE] : 316
opcode[LOAD_FAST].pair_count[LOAD_SUPER_ATTR_ATTR] : 31
opcode[LOAD_FAST].pair_count[LOAD_SUPER_ATTR_METHOD] : 54
opcode[LOAD_FAST].pair_count[STORE_ATTR_INSTANCE_VALUE] : 405
opcode[LOAD_FAST].pair_count[STORE_SUBSCR_DICT] : 53
opcode[LOAD_FAST].pair_count[TO_BOOL_BOOL] : 152
opcode[LOAD_FAST].pair_count[TO_BOOL_LIST] : 23
opcode[LOAD_FAST].pair_count[TO_BOOL_NONE] : 82
opcode[LOAD_FAST].pair_count[TO_BOOL_STR] : 113
opcode[LOAD_FAST].pair_count[UNPACK_SEQUENCE_TUPLE] : 10
opcode[LOAD_FAST_AND_CLEAR].execution_count : 58
opcode[LOAD_FAST_AND_CLEAR].pair_count[LOAD_FAST_AND_CLEAR] : 3
opcode[LOAD_FAST_AND_CLEAR].pair_count[SWAP] : 55
opcode[LOAD_FAST_CHECK].execution_count : 52
opcode[LOAD_FAST_CHECK].pair_count[PUSH_NULL] : 1
opcode[LOAD_FAST_CHECK].pair_count[CALL] : 2
opcode[LOAD_FAST_CHECK].pair_count[LOAD_FAST] : 2
opcode[LOAD_FAST_CHECK].pair_count[POP_JUMP_IF_NOT_NONE] : 47
opcode[LOAD_FAST_LOAD_FAST].execution_count : 1340
opcode[LOAD_FAST_LOAD_FAST].pair_count[BINARY_SUBSCR] : 2
opcode[LOAD_FAST_LOAD_FAST].pair_count[BINARY_OP] : 5
opcode[LOAD_FAST_LOAD_FAST].pair_count[BUILD_LIST] : 10
opcode[LOAD_FAST_LOAD_FAST].pair_count[BUILD_TUPLE] : 47
opcode[LOAD_FAST_LOAD_FAST].pair_count[CALL] : 73
opcode[LOAD_FAST_LOAD_FAST].pair_count[COMPARE_OP] : 3
opcode[LOAD_FAST_LOAD_FAST].pair_count[CONTAINS_OP] : 7
opcode[LOAD_FAST_LOAD_FAST].pair_count[LOAD_ATTR] : 87
opcode[LOAD_FAST_LOAD_FAST].pair_count[LOAD_CONST] : 23
opcode[LOAD_FAST_LOAD_FAST].pair_count[LOAD_DEREF] : 1
opcode[LOAD_FAST_LOAD_FAST].pair_count[LOAD_FAST] : 154
opcode[LOAD_FAST_LOAD_FAST].pair_count[LOAD_FAST_LOAD_FAST] : 59
opcode[LOAD_FAST_LOAD_FAST].pair_count[LOAD_GLOBAL] : 6
opcode[LOAD_FAST_LOAD_FAST].pair_count[STORE_ATTR] : 141
opcode[LOAD_FAST_LOAD_FAST].pair_count[BINARY_OP_ADD_UNICODE] : 72
opcode[LOAD_FAST_LOAD_FAST].pair_count[CALL_ALLOC_AND_ENTER_INIT] : 28
opcode[LOAD_FAST_LOAD_FAST].pair_count[CALL_BUILTIN_FAST] : 147
opcode[LOAD_FAST_LOAD_FAST].pair_count[CALL_ISINSTANCE] : 2
opcode[LOAD_FAST_LOAD_FAST].pair_count[CALL_NON_PY_GENERAL] : 27
opcode[LOAD_FAST_LOAD_FAST].pair_count[CALL_PY_EXACT_ARGS] : 39
opcode[LOAD_FAST_LOAD_FAST].pair_count[CALL_PY_GENERAL] : 57
opcode[LOAD_FAST_LOAD_FAST].pair_count[COMPARE_OP_STR] : 10
opcode[LOAD_FAST_LOAD_FAST].pair_count[CONTAINS_OP_SET] : 8
opcode[LOAD_FAST_LOAD_FAST].pair_count[LOAD_ATTR_INSTANCE_VALUE] : 7
opcode[LOAD_FAST_LOAD_FAST].pair_count[LOAD_GLOBAL_BUILTIN] : 36
opcode[LOAD_FAST_LOAD_FAST].pair_count[STORE_ATTR_INSTANCE_VALUE] : 262
opcode[LOAD_FAST_LOAD_FAST].pair_count[STORE_ATTR_SLOT] : 27
opcode[LOAD_GLOBAL].specializable : 1
opcode[LOAD_GLOBAL].specialization.success : 247
opcode[LOAD_GLOBAL].specialization.hit : 2575
opcode[LOAD_GLOBAL].specialization.deferred : 953
opcode[LOAD_GLOBAL].specialization.miss : 487
opcode[LOAD_GLOBAL].specialization.deopt : 29
opcode[LOAD_GLOBAL].execution_count : 713
opcode[LOAD_GLOBAL].pair_count[BINARY_SUBSCR] : 2
opcode[LOAD_GLOBAL].pair_count[CHECK_EXC_MATCH] : 15
opcode[LOAD_GLOBAL].pair_count[FORMAT_SIMPLE] : 1
opcode[LOAD_GLOBAL].pair_count[GET_ITER] : 1
opcode[LOAD_GLOBAL].pair_count[RETURN_VALUE] : 4
opcode[LOAD_GLOBAL].pair_count[TO_BOOL] : 3
opcode[LOAD_GLOBAL].pair_count[BINARY_OP] : 3
opcode[LOAD_GLOBAL].pair_count[BUILD_TUPLE] : 6
opcode[LOAD_GLOBAL].pair_count[CALL] : 49
opcode[LOAD_GLOBAL].pair_count[COMPARE_OP] : 1
opcode[LOAD_GLOBAL].pair_count[CONTAINS_OP] : 3
opcode[LOAD_GLOBAL].pair_count[IS_OP] : 11
opcode[LOAD_GLOBAL].pair_count[LOAD_ATTR] : 160
opcode[LOAD_GLOBAL].pair_count[LOAD_CONST] : 19
opcode[LOAD_GLOBAL].pair_count[LOAD_DEREF] : 5
opcode[LOAD_GLOBAL].pair_count[LOAD_FAST] : 104
opcode[LOAD_GLOBAL].pair_count[LOAD_FAST_LOAD_FAST] : 31
opcode[LOAD_GLOBAL].pair_count[LOAD_GLOBAL] : 30
opcode[LOAD_GLOBAL].pair_count[POP_JUMP_IF_NONE] : 1
opcode[LOAD_GLOBAL].pair_count[POP_JUMP_IF_NOT_NONE] : 5
opcode[LOAD_GLOBAL].pair_count[STORE_ATTR] : 8
opcode[LOAD_GLOBAL].pair_count[STORE_FAST] : 4
opcode[LOAD_GLOBAL].pair_count[LOAD_GLOBAL_BUILTIN] : 71
opcode[LOAD_GLOBAL].pair_count[LOAD_GLOBAL_MODULE] : 176
opcode[LOAD_NAME].execution_count : 6822
opcode[LOAD_NAME].pair_count[BINARY_SUBSCR] : 2
opcode[LOAD_NAME].pair_count[CHECK_EXC_MATCH] : 3
opcode[LOAD_NAME].pair_count[FORMAT_SIMPLE] : 12
opcode[LOAD_NAME].pair_count[GET_ITER] : 3
opcode[LOAD_NAME].pair_count[PUSH_NULL] : 153
opcode[LOAD_NAME].pair_count[TO_BOOL] : 72
opcode[LOAD_NAME].pair_count[BINARY_OP] : 6
opcode[LOAD_NAME].pair_count[BUILD_LIST] : 1
opcode[LOAD_NAME].pair_count[BUILD_SET] : 2
opcode[LOAD_NAME].pair_count[BUILD_TUPLE] : 11
opcode[LOAD_NAME].pair_count[CALL] : 116
opcode[LOAD_NAME].pair_count[COMPARE_OP] : 2
opcode[LOAD_NAME].pair_count[CONTAINS_OP] : 2
opcode[LOAD_NAME].pair_count[COPY] : 10
opcode[LOAD_NAME].pair_count[LIST_EXTEND] : 1
opcode[LOAD_NAME].pair_count[LOAD_ATTR] : 117
opcode[LOAD_NAME].pair_count[LOAD_CONST] : 2146
opcode[LOAD_NAME].pair_count[LOAD_FAST] : 2
opcode[LOAD_NAME].pair_count[LOAD_NAME] : 2055
opcode[LOAD_NAME].pair_count[STORE_ATTR] : 2
opcode[LOAD_NAME].pair_count[STORE_NAME] : 104
opcode[LOAD_NAME].pair_count[BINARY_OP_ADD_INT] : 1996
opcode[LOAD_NAME].pair_count[CALL_BOUND_METHOD_EXACT_ARGS] : 3
opcode[LOAD_NAME].pair_count[TO_BOOL_STR] : 1
opcode[LOAD_SUPER_ATTR].specializable : 1
opcode[LOAD_SUPER_ATTR].specialization.success : 3
opcode[LOAD_SUPER_ATTR].specialization.hit : 88
opcode[LOAD_SUPER_ATTR].specialization.deferred : 4
opcode[LOAD_SUPER_ATTR].execution_count : 7
opcode[LOAD_SUPER_ATTR].pair_count[PUSH_NULL] : 2
opcode[LOAD_SUPER_ATTR].pair_count[LOAD_FAST_LOAD_FAST] : 2
opcode[LOAD_SUPER_ATTR].pair_count[LOAD_SUPER_ATTR_ATTR] : 1
opcode[LOAD_SUPER_ATTR].pair_count[LOAD_SUPER_ATTR_METHOD] : 2
opcode[MAKE_CELL].execution_count : 38
opcode[MAKE_CELL].pair_count[MAKE_CELL] : 4
opcode[MAKE_CELL].pair_count[RESUME] : 18
opcode[MAKE_CELL].pair_count[RESUME_CHECK] : 16
opcode[MAP_ADD].execution_count : 323
opcode[MAP_ADD].pair_count[BUILD_MAP] : 1
opcode[MAP_ADD].pair_count[DICT_UPDATE] : 18
opcode[MAP_ADD].pair_count[EXTENDED_ARG] : 122
opcode[MAP_ADD].pair_count[LOAD_CONST] : 182
opcode[POP_JUMP_IF_FALSE].specializable : 1
opcode[POP_JUMP_IF_FALSE].execution_count : 3102
opcode[POP_JUMP_IF_FALSE].pair_count[NOP] : 51
opcode[POP_JUMP_IF_FALSE].pair_count[POP_EXCEPT] : 2
opcode[POP_JUMP_IF_FALSE].pair_count[POP_TOP] : 95
opcode[POP_JUMP_IF_FALSE].pair_count[BUILD_LIST] : 8
opcode[POP_JUMP_IF_FALSE].pair_count[EXTENDED_ARG] : 1
opcode[POP_JUMP_IF_FALSE].pair_count[JUMP_BACKWARD] : 1
opcode[POP_JUMP_IF_FALSE].pair_count[LOAD_CONST] : 99
opcode[POP_JUMP_IF_FALSE].pair_count[LOAD_DEREF] : 22
opcode[POP_JUMP_IF_FALSE].pair_count[LOAD_FAST] : 300
opcode[POP_JUMP_IF_FALSE].pair_count[LOAD_FAST_LOAD_FAST] : 36
opcode[POP_JUMP_IF_FALSE].pair_count[LOAD_GLOBAL] : 78
opcode[POP_JUMP_IF_FALSE].pair_count[LOAD_NAME] : 2048
opcode[POP_JUMP_IF_FALSE].pair_count[RETURN_CONST] : 133
opcode[POP_JUMP_IF_FALSE].pair_count[STORE_FAST] : 2
opcode[POP_JUMP_IF_FALSE].pair_count[STORE_NAME] : 1
opcode[POP_JUMP_IF_FALSE].pair_count[LOAD_GLOBAL_BUILTIN] : 50
opcode[POP_JUMP_IF_FALSE].pair_count[LOAD_GLOBAL_MODULE] : 175
opcode[POP_JUMP_IF_NONE].specializable : 1
opcode[POP_JUMP_IF_NONE].execution_count : 132
opcode[POP_JUMP_IF_NONE].pair_count[NOP] : 8
opcode[POP_JUMP_IF_NONE].pair_count[LOAD_CONST] : 4
opcode[POP_JUMP_IF_NONE].pair_count[LOAD_FAST] : 66
opcode[POP_JUMP_IF_NONE].pair_count[LOAD_GLOBAL] : 15
opcode[POP_JUMP_IF_NONE].pair_count[LOAD_GLOBAL_BUILTIN] : 26
opcode[POP_JUMP_IF_NONE].pair_count[LOAD_GLOBAL_MODULE] : 13
opcode[POP_JUMP_IF_NOT_NONE].specializable : 1
opcode[POP_JUMP_IF_NOT_NONE].execution_count : 615
opcode[POP_JUMP_IF_NOT_NONE].pair_count[NOP] : 67
opcode[POP_JUMP_IF_NOT_NONE].pair_count[POP_TOP] : 40
opcode[POP_JUMP_IF_NOT_NONE].pair_count[JUMP_BACKWARD] : 33
opcode[POP_JUMP_IF_NOT_NONE].pair_count[LOAD_CONST] : 11
opcode[POP_JUMP_IF_NOT_NONE].pair_count[LOAD_FAST] : 326
opcode[POP_JUMP_IF_NOT_NONE].pair_count[LOAD_FAST_CHECK] : 1
opcode[POP_JUMP_IF_NOT_NONE].pair_count[LOAD_GLOBAL] : 30
opcode[POP_JUMP_IF_NOT_NONE].pair_count[RETURN_CONST] : 5
opcode[POP_JUMP_IF_NOT_NONE].pair_count[LOAD_GLOBAL_BUILTIN] : 9
opcode[POP_JUMP_IF_NOT_NONE].pair_count[LOAD_GLOBAL_MODULE] : 93
opcode[POP_JUMP_IF_TRUE].specializable : 1
opcode[POP_JUMP_IF_TRUE].execution_count : 1145
opcode[POP_JUMP_IF_TRUE].pair_count[LOAD_BUILD_CLASS] : 1
opcode[POP_JUMP_IF_TRUE].pair_count[NOP] : 18
opcode[POP_JUMP_IF_TRUE].pair_count[POP_TOP] : 7
opcode[POP_JUMP_IF_TRUE].pair_count[RETURN_VALUE] : 1
opcode[POP_JUMP_IF_TRUE].pair_count[BUILD_LIST] : 1
opcode[POP_JUMP_IF_TRUE].pair_count[CALL] : 4
opcode[POP_JUMP_IF_TRUE].pair_count[JUMP_BACKWARD] : 83
opcode[POP_JUMP_IF_TRUE].pair_count[LOAD_CONST] : 31
opcode[POP_JUMP_IF_TRUE].pair_count[LOAD_DEREF] : 4
opcode[POP_JUMP_IF_TRUE].pair_count[LOAD_FAST] : 663
opcode[POP_JUMP_IF_TRUE].pair_count[LOAD_FAST_LOAD_FAST] : 25
opcode[POP_JUMP_IF_TRUE].pair_count[LOAD_GLOBAL] : 39
opcode[POP_JUMP_IF_TRUE].pair_count[LOAD_NAME] : 33
opcode[POP_JUMP_IF_TRUE].pair_count[RERAISE] : 3
opcode[POP_JUMP_IF_TRUE].pair_count[RETURN_CONST] : 1
opcode[POP_JUMP_IF_TRUE].pair_count[STORE_NAME] : 2
opcode[POP_JUMP_IF_TRUE].pair_count[CALL_BUILTIN_FAST_WITH_KEYWORDS] : 2
opcode[POP_JUMP_IF_TRUE].pair_count[CALL_PY_EXACT_ARGS] : 7
opcode[POP_JUMP_IF_TRUE].pair_count[LOAD_GLOBAL_BUILTIN] : 159
opcode[POP_JUMP_IF_TRUE].pair_count[LOAD_GLOBAL_MODULE] : 61
opcode[RAISE_VARARGS].execution_count : 11
opcode[RAISE_VARARGS].pair_count[PUSH_EXC_INFO] : 4
opcode[RAISE_VARARGS].pair_count[COPY] : 1
opcode[RERAISE].execution_count : 10
opcode[RERAISE].pair_count[PUSH_EXC_INFO] : 2
opcode[RERAISE].pair_count[COPY] : 4
opcode[RETURN_CONST].execution_count : 872
opcode[RETURN_CONST].pair_count[EXIT_INIT_CHECK] : 78
opcode[RETURN_CONST].pair_count[INTERPRETER_EXIT] : 464
opcode[RETURN_CONST].pair_count[POP_TOP] : 229
opcode[RETURN_CONST].pair_count[RETURN_VALUE] : 31
opcode[RETURN_CONST].pair_count[TO_BOOL] : 5
opcode[RETURN_CONST].pair_count[LOAD_ATTR] : 1
opcode[RETURN_CONST].pair_count[STORE_FAST] : 55
opcode[RETURN_CONST].pair_count[STORE_GLOBAL] : 1
opcode[RETURN_CONST].pair_count[UNPACK_SEQUENCE] : 1
opcode[RETURN_CONST].pair_count[TO_BOOL_BOOL] : 7
opcode[SEND].specializable : 1
opcode[SET_ADD].execution_count : 1
opcode[SET_ADD].pair_count[JUMP_BACKWARD] : 1
opcode[SET_FUNCTION_ATTRIBUTE].execution_count : 176
opcode[SET_FUNCTION_ATTRIBUTE].pair_count[CALL] : 12
opcode[SET_FUNCTION_ATTRIBUTE].pair_count[LOAD_CONST] : 1
opcode[SET_FUNCTION_ATTRIBUTE].pair_count[LOAD_FAST] : 13
opcode[SET_FUNCTION_ATTRIBUTE].pair_count[LOAD_GLOBAL] : 2
opcode[SET_FUNCTION_ATTRIBUTE].pair_count[SET_FUNCTION_ATTRIBUTE] : 8
opcode[SET_FUNCTION_ATTRIBUTE].pair_count[STORE_DEREF] : 1
opcode[SET_FUNCTION_ATTRIBUTE].pair_count[STORE_FAST] : 39
opcode[SET_FUNCTION_ATTRIBUTE].pair_count[STORE_NAME] : 95
opcode[SET_FUNCTION_ATTRIBUTE].pair_count[LOAD_GLOBAL_MODULE] : 5
opcode[STORE_ATTR].specializable : 1
opcode[STORE_ATTR].specialization.success : 55
opcode[STORE_ATTR].specialization.failure : 22
opcode[STORE_ATTR].specialization.hit : 749
opcode[STORE_ATTR].specialization.deferred : 220
opcode[STORE_ATTR].execution_count : 297
opcode[STORE_ATTR].specialization.failure_kinds[2] : 17
opcode[STORE_ATTR].specialization.failure_kinds[14] : 1
opcode[STORE_ATTR].specialization.failure_kinds[18] : 4
opcode[STORE_ATTR].pair_count[NOP] : 31
opcode[STORE_ATTR].pair_count[POP_EXCEPT] : 1
opcode[STORE_ATTR].pair_count[BUILD_LIST] : 4
opcode[STORE_ATTR].pair_count[BUILD_MAP] : 1
opcode[STORE_ATTR].pair_count[JUMP_FORWARD] : 1
opcode[STORE_ATTR].pair_count[LOAD_CONST] : 10
opcode[STORE_ATTR].pair_count[LOAD_FAST] : 123
opcode[STORE_ATTR].pair_count[LOAD_FAST_LOAD_FAST] : 23
opcode[STORE_ATTR].pair_count[LOAD_GLOBAL] : 8
opcode[STORE_ATTR].pair_count[RETURN_CONST] : 18
opcode[STORE_ATTR].pair_count[STORE_ATTR] : 22
opcode[STORE_ATTR].pair_count[STORE_ATTR_INSTANCE_VALUE] : 54
opcode[STORE_ATTR].pair_count[STORE_ATTR_SLOT] : 1
opcode[STORE_DEREF].execution_count : 17
opcode[STORE_DEREF].pair_count[LOAD_BUILD_CLASS] : 1
opcode[STORE_DEREF].pair_count[LOAD_FAST] : 3
opcode[STORE_DEREF].pair_count[LOAD_GLOBAL] : 1
opcode[STORE_DEREF].pair_count[STORE_FAST] : 12
opcode[STORE_FAST].execution_count : 1763
opcode[STORE_FAST].pair_count[NOP] : 133
opcode[STORE_FAST].pair_count[POP_EXCEPT] : 66
opcode[STORE_FAST].pair_count[POP_TOP] : 1
opcode[STORE_FAST].pair_count[CALL] : 2
opcode[STORE_FAST].pair_count[DELETE_FAST] : 2
opcode[STORE_FAST].pair_count[JUMP_BACKWARD] : 6
opcode[STORE_FAST].pair_count[JUMP_FORWARD] : 51
opcode[STORE_FAST].pair_count[LOAD_CONST] : 73
opcode[STORE_FAST].pair_count[LOAD_DEREF] : 9
opcode[STORE_FAST].pair_count[LOAD_FAST] : 807
opcode[STORE_FAST].pair_count[LOAD_FAST_LOAD_FAST] : 120
opcode[STORE_FAST].pair_count[LOAD_GLOBAL] : 106
opcode[STORE_FAST].pair_count[STORE_FAST] : 4
opcode[STORE_FAST].pair_count[STORE_NAME] : 1
opcode[STORE_FAST].pair_count[SWAP] : 1
opcode[STORE_FAST].pair_count[CALL_METHOD_DESCRIPTOR_O] : 47
opcode[STORE_FAST].pair_count[LOAD_GLOBAL_BUILTIN] : 86
opcode[STORE_FAST].pair_count[LOAD_GLOBAL_MODULE] : 248
opcode[STORE_FAST_LOAD_FAST].execution_count : 477
opcode[STORE_FAST_LOAD_FAST].pair_count[TO_BOOL] : 2
opcode[STORE_FAST_LOAD_FAST].pair_count[LOAD_CONST] : 352
opcode[STORE_FAST_LOAD_FAST].pair_count[LOAD_DEREF] : 20
opcode[STORE_FAST_LOAD_FAST].pair_count[STORE_ATTR] : 1
opcode[STORE_FAST_LOAD_FAST].pair_count[TO_BOOL_STR] : 102
opcode[STORE_FAST_STORE_FAST].execution_count : 89
opcode[STORE_FAST_STORE_FAST].pair_count[NOP] : 38
opcode[STORE_FAST_STORE_FAST].pair_count[LOAD_CONST] : 4
opcode[STORE_FAST_STORE_FAST].pair_count[LOAD_FAST] : 6
opcode[STORE_FAST_STORE_FAST].pair_count[LOAD_FAST_LOAD_FAST] : 5
opcode[STORE_FAST_STORE_FAST].pair_count[LOAD_GLOBAL] : 6
opcode[STORE_FAST_STORE_FAST].pair_count[STORE_FAST] : 18
opcode[STORE_FAST_STORE_FAST].pair_count[LOAD_GLOBAL_BUILTIN] : 12
opcode[STORE_GLOBAL].execution_count : 18
opcode[STORE_GLOBAL].pair_count[LOAD_BUILD_CLASS] : 1
opcode[STORE_GLOBAL].pair_count[LOAD_CONST] : 9
opcode[STORE_GLOBAL].pair_count[LOAD_FAST] : 2
opcode[STORE_GLOBAL].pair_count[LOAD_GLOBAL] : 4
opcode[STORE_GLOBAL].pair_count[RETURN_CONST] : 2
opcode[STORE_NAME].execution_count : 3511
opcode[STORE_NAME].pair_count[LOAD_BUILD_CLASS] : 66
opcode[STORE_NAME].pair_count[NOP] : 12
opcode[STORE_NAME].pair_count[POP_EXCEPT] : 1
opcode[STORE_NAME].pair_count[POP_TOP] : 12
opcode[STORE_NAME].pair_count[RETURN_VALUE] : 7
opcode[STORE_NAME].pair_count[BUILD_LIST] : 4
opcode[STORE_NAME].pair_count[BUILD_MAP] : 3
opcode[STORE_NAME].pair_count[DELETE_NAME] : 6
opcode[STORE_NAME].pair_count[ENTER_EXECUTOR] : 1981
opcode[STORE_NAME].pair_count[EXTENDED_ARG] : 1
opcode[STORE_NAME].pair_count[IMPORT_FROM] : 32
opcode[STORE_NAME].pair_count[JUMP_BACKWARD] : 19
opcode[STORE_NAME].pair_count[JUMP_FORWARD] : 3
opcode[STORE_NAME].pair_count[LOAD_CONST] : 966
opcode[STORE_NAME].pair_count[LOAD_FAST] : 17
opcode[STORE_NAME].pair_count[LOAD_NAME] : 288
opcode[STORE_NAME].pair_count[RETURN_CONST] : 86
opcode[STORE_NAME].pair_count[STORE_NAME] : 7
opcode[SWAP].execution_count : 225
opcode[SWAP].pair_count[POP_EXCEPT] : 2
opcode[SWAP].pair_count[POP_TOP] : 33
opcode[SWAP].pair_count[BUILD_LIST] : 54
opcode[SWAP].pair_count[BUILD_SET] : 1
opcode[SWAP].pair_count[FOR_ITER] : 6
opcode[SWAP].pair_count[LOAD_CONST] : 26
opcode[SWAP].pair_count[STORE_FAST] : 54
opcode[SWAP].pair_count[FOR_ITER_TUPLE] : 49
opcode[UNPACK_SEQUENCE].specializable : 1
opcode[UNPACK_SEQUENCE].specialization.success : 9
opcode[UNPACK_SEQUENCE].specialization.hit : 88
opcode[UNPACK_SEQUENCE].specialization.deferred : 13
opcode[UNPACK_SEQUENCE].execution_count : 22
opcode[UNPACK_SEQUENCE].pair_count[STORE_DEREF] : 1
opcode[UNPACK_SEQUENCE].pair_count[STORE_FAST_STORE_FAST] : 11
opcode[UNPACK_SEQUENCE].pair_count[STORE_NAME] : 1
opcode[UNPACK_SEQUENCE].pair_count[UNPACK_SEQUENCE_TUPLE] : 2
opcode[UNPACK_SEQUENCE].pair_count[UNPACK_SEQUENCE_TWO_TUPLE] : 7
opcode[YIELD_VALUE].execution_count : 29
opcode[YIELD_VALUE].pair_count[INTERPRETER_EXIT] : 29
opcode[RESUME].execution_count : 269
opcode[RESUME].pair_count[NOP] : 12
opcode[RESUME].pair_count[POP_TOP] : 3
opcode[RESUME].pair_count[BUILD_LIST] : 5
opcode[RESUME].pair_count[LOAD_CONST] : 26
opcode[RESUME].pair_count[LOAD_DEREF] : 2
opcode[RESUME].pair_count[LOAD_FAST] : 50
opcode[RESUME].pair_count[LOAD_FAST_LOAD_FAST] : 9
opcode[RESUME].pair_count[LOAD_GLOBAL] : 73
opcode[RESUME].pair_count[LOAD_NAME] : 85
opcode[RESUME].pair_count[RETURN_CONST] : 4
opcode[BINARY_OP_ADD_INT].execution_count : 2005
opcode[BINARY_OP_ADD_INT].pair_count[LOAD_CONST] : 6
opcode[BINARY_OP_ADD_INT].pair_count[STORE_FAST] : 1
opcode[BINARY_OP_ADD_INT].pair_count[STORE_NAME] : 1998
opcode[BINARY_OP_ADD_UNICODE].execution_count : 95
opcode[BINARY_OP_ADD_UNICODE].pair_count[BINARY_OP_INPLACE_ADD_UNICODE] : 11
opcode[BINARY_OP_ADD_UNICODE].pair_count[BINARY_OP] : 1
opcode[BINARY_OP_ADD_UNICODE].pair_count[CALL] : 1
opcode[BINARY_OP_ADD_UNICODE].pair_count[LOAD_FAST] : 37
opcode[BINARY_OP_ADD_UNICODE].pair_count[STORE_FAST] : 8
opcode[BINARY_OP_ADD_UNICODE].pair_count[STORE_NAME] : 1
opcode[BINARY_OP_ADD_UNICODE].pair_count[CALL_PY_GENERAL] : 36
opcode[BINARY_OP_MULTIPLY_INT].execution_count : 1
opcode[BINARY_OP_MULTIPLY_INT].pair_count[BINARY_OP] : 1
opcode[BINARY_SUBSCR_DICT].execution_count : 111
opcode[BINARY_SUBSCR_DICT].pair_count[PUSH_EXC_INFO] : 56
opcode[BINARY_SUBSCR_DICT].pair_count[PUSH_NULL] : 4
opcode[BINARY_SUBSCR_DICT].pair_count[CALL] : 2
opcode[BINARY_SUBSCR_DICT].pair_count[LOAD_FAST] : 2
opcode[BINARY_SUBSCR_DICT].pair_count[STORE_FAST] : 11
opcode[BINARY_SUBSCR_DICT].pair_count[CALL_BUILTIN_CLASS] : 1
opcode[BINARY_SUBSCR_DICT].pair_count[CALL_METHOD_DESCRIPTOR_O] : 35
opcode[BINARY_SUBSCR_LIST_INT].execution_count : 5
opcode[BINARY_SUBSCR_LIST_INT].pair_count[BINARY_OP] : 1
opcode[BINARY_SUBSCR_LIST_INT].pair_count[BINARY_OP_ADD_UNICODE] : 4
opcode[BINARY_SUBSCR_STR_INT].execution_count : 351
opcode[BINARY_SUBSCR_STR_INT].pair_count[LOAD_CONST] : 351
opcode[BINARY_SUBSCR_TUPLE_INT].execution_count : 61
opcode[BINARY_SUBSCR_TUPLE_INT].pair_count[RETURN_VALUE] : 28
opcode[BINARY_SUBSCR_TUPLE_INT].pair_count[STORE_FAST] : 33
opcode[CALL_ALLOC_AND_ENTER_INIT].execution_count : 78
opcode[CALL_ALLOC_AND_ENTER_INIT].pair_count[RESUME_CHECK] : 78
opcode[CALL_BOUND_METHOD_EXACT_ARGS].specialization.miss : 75
opcode[CALL_BOUND_METHOD_EXACT_ARGS].execution_count : 133
opcode[CALL_BOUND_METHOD_EXACT_ARGS].pair_count[POP_TOP] : 46
opcode[CALL_BOUND_METHOD_EXACT_ARGS].pair_count[COPY_FREE_VARS] : 10
opcode[CALL_BOUND_METHOD_EXACT_ARGS].pair_count[RESUME] : 2
opcode[CALL_BOUND_METHOD_EXACT_ARGS].pair_count[RESUME_CHECK] : 75
opcode[CALL_BOUND_METHOD_GENERAL].specialization.miss : 50
opcode[CALL_BOUND_METHOD_GENERAL].execution_count : 52
opcode[CALL_BOUND_METHOD_GENERAL].pair_count[POP_TOP] : 50
opcode[CALL_BOUND_METHOD_GENERAL].pair_count[RESUME_CHECK] : 2
opcode[CALL_BUILTIN_CLASS].execution_count : 11
opcode[CALL_BUILTIN_CLASS].pair_count[LOAD_FAST] : 9
opcode[CALL_BUILTIN_CLASS].pair_count[STORE_FAST] : 2
opcode[CALL_BUILTIN_FAST].execution_count : 418
opcode[CALL_BUILTIN_FAST].pair_count[POP_TOP] : 71
opcode[CALL_BUILTIN_FAST].pair_count[RETURN_VALUE] : 76
opcode[CALL_BUILTIN_FAST].pair_count[TO_BOOL] : 6
opcode[CALL_BUILTIN_FAST].pair_count[CALL] : 2
opcode[CALL_BUILTIN_FAST].pair_count[POP_JUMP_IF_NOT_NONE] : 120
opcode[CALL_BUILTIN_FAST].pair_count[STORE_FAST] : 3
opcode[CALL_BUILTIN_FAST].pair_count[CALL_BUILTIN_FAST] : 36
opcode[CALL_BUILTIN_FAST].pair_count[TO_BOOL_BOOL] : 93
opcode[CALL_BUILTIN_FAST].pair_count[TO_BOOL_STR] : 11
opcode[CALL_BUILTIN_FAST_WITH_KEYWORDS].specialization.miss : 8
opcode[CALL_BUILTIN_FAST_WITH_KEYWORDS].execution_count : 109
opcode[CALL_BUILTIN_FAST_WITH_KEYWORDS].pair_count[BEFORE_WITH] : 2
opcode[CALL_BUILTIN_FAST_WITH_KEYWORDS].pair_count[POP_TOP] : 11
opcode[CALL_BUILTIN_FAST_WITH_KEYWORDS].pair_count[PUSH_EXC_INFO] : 6
opcode[CALL_BUILTIN_FAST_WITH_KEYWORDS].pair_count[RETURN_VALUE] : 41
opcode[CALL_BUILTIN_FAST_WITH_KEYWORDS].pair_count[STORE_FAST] : 49
opcode[CALL_BUILTIN_O].execution_count : 59
opcode[CALL_BUILTIN_O].pair_count[POP_TOP] : 32
opcode[CALL_BUILTIN_O].pair_count[TO_BOOL] : 1
opcode[CALL_BUILTIN_O].pair_count[TO_BOOL_INT] : 26
opcode[CALL_ISINSTANCE].execution_count : 46
opcode[CALL_ISINSTANCE].pair_count[TO_BOOL] : 8
opcode[CALL_ISINSTANCE].pair_count[TO_BOOL_BOOL] : 38
opcode[CALL_LEN].execution_count : 91
opcode[CALL_LEN].pair_count[TO_BOOL] : 1
opcode[CALL_LEN].pair_count[BINARY_OP] : 1
opcode[CALL_LEN].pair_count[LOAD_CONST] : 62
opcode[CALL_LEN].pair_count[TO_BOOL_INT] : 27
opcode[CALL_LIST_APPEND].execution_count : 62
opcode[CALL_LIST_APPEND].pair_count[NOP] : 29
opcode[CALL_LIST_APPEND].pair_count[LOAD_CONST] : 3
opcode[CALL_LIST_APPEND].pair_count[LOAD_FAST] : 2
opcode[CALL_LIST_APPEND].pair_count[RETURN_CONST] : 28
opcode[CALL_METHOD_DESCRIPTOR_FAST].execution_count : 306
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[POP_TOP] : 29
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[RETURN_VALUE] : 6
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[TO_BOOL] : 7
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[LIST_APPEND] : 103
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[LOAD_CONST] : 1
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[LOAD_FAST] : 24
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[STORE_FAST] : 74
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[SWAP] : 2
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[YIELD_VALUE] : 6
opcode[CALL_METHOD_DESCRIPTOR_FAST].pair_count[TO_BOOL_BOOL] : 54
opcode[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS].execution_count : 14
opcode[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS].pair_count[RETURN_VALUE] : 3
opcode[CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS].pair_count[STORE_FAST] : 11
opcode[CALL_METHOD_DESCRIPTOR_NOARGS].execution_count : 7
opcode[CALL_METHOD_DESCRIPTOR_NOARGS].pair_count[TO_BOOL] : 2
opcode[CALL_METHOD_DESCRIPTOR_NOARGS].pair_count[TO_BOOL_BOOL] : 5
opcode[CALL_METHOD_DESCRIPTOR_O].specialization.miss : 28
opcode[CALL_METHOD_DESCRIPTOR_O].execution_count : 196
opcode[CALL_METHOD_DESCRIPTOR_O].pair_count[POP_TOP] : 77
opcode[CALL_METHOD_DESCRIPTOR_O].pair_count[RETURN_VALUE] : 48
opcode[CALL_METHOD_DESCRIPTOR_O].pair_count[LOAD_CONST] : 61
opcode[CALL_METHOD_DESCRIPTOR_O].pair_count[STORE_FAST] : 5
opcode[CALL_METHOD_DESCRIPTOR_O].pair_count[UNPACK_SEQUENCE] : 1
opcode[CALL_METHOD_DESCRIPTOR_O].pair_count[UNPACK_SEQUENCE_TUPLE] : 4
opcode[CALL_NON_PY_GENERAL].execution_count : 543
opcode[CALL_NON_PY_GENERAL].pair_count[BEFORE_WITH] : 46
opcode[CALL_NON_PY_GENERAL].pair_count[POP_TOP] : 290
opcode[CALL_NON_PY_GENERAL].pair_count[PUSH_EXC_INFO] : 1
opcode[CALL_NON_PY_GENERAL].pair_count[CALL] : 1
opcode[CALL_NON_PY_GENERAL].pair_count[CONTAINS_OP] : 1
opcode[CALL_NON_PY_GENERAL].pair_count[LOAD_FAST] : 52
opcode[CALL_NON_PY_GENERAL].pair_count[STORE_FAST] : 116
opcode[CALL_NON_PY_GENERAL].pair_count[CALL_PY_EXACT_ARGS] : 27
opcode[CALL_NON_PY_GENERAL].pair_count[CONTAINS_OP_DICT] : 9
opcode[CALL_PY_EXACT_ARGS].specialization.miss : 34
opcode[CALL_PY_EXACT_ARGS].execution_count : 419
opcode[CALL_PY_EXACT_ARGS].pair_count[PUSH_EXC_INFO] : 4
opcode[CALL_PY_EXACT_ARGS].pair_count[COPY_FREE_VARS] : 25
opcode[CALL_PY_EXACT_ARGS].pair_count[MAKE_CELL] : 5
opcode[CALL_PY_EXACT_ARGS].pair_count[RESUME] : 4
opcode[CALL_PY_EXACT_ARGS].pair_count[RESUME_CHECK] : 381
opcode[CALL_PY_GENERAL].execution_count : 203
opcode[CALL_PY_GENERAL].pair_count[COPY_FREE_VARS] : 2
opcode[CALL_PY_GENERAL].pair_count[RESUME_CHECK] : 201
opcode[CALL_STR_1].execution_count : 7
opcode[CALL_STR_1].pair_count[CALL] : 1
opcode[CALL_STR_1].pair_count[STORE_FAST] : 5
opcode[CALL_STR_1].pair_count[CALL_BUILTIN_FAST_WITH_KEYWORDS] : 1
opcode[CALL_TUPLE_1].execution_count : 2
opcode[CALL_TUPLE_1].pair_count[CALL] : 1
opcode[CALL_TUPLE_1].pair_count[CALL_METHOD_DESCRIPTOR_FAST] : 1
opcode[CALL_TYPE_1].execution_count : 25
opcode[CALL_TYPE_1].pair_count[PUSH_NULL] : 25
opcode[COMPARE_OP_INT].execution_count : 158
opcode[COMPARE_OP_INT].pair_count[RETURN_VALUE] : 7
opcode[COMPARE_OP_INT].pair_count[POP_JUMP_IF_FALSE] : 113
opcode[COMPARE_OP_INT].pair_count[POP_JUMP_IF_TRUE] : 36
opcode[COMPARE_OP_INT].pair_count[STORE_FAST] : 2
opcode[COMPARE_OP_STR].execution_count : 385
opcode[COMPARE_OP_STR].pair_count[POP_JUMP_IF_FALSE] : 34
opcode[COMPARE_OP_STR].pair_count[POP_JUMP_IF_TRUE] : 351
opcode[CONTAINS_OP_DICT].execution_count : 101
opcode[CONTAINS_OP_DICT].pair_count[RETURN_VALUE] : 10
opcode[CONTAINS_OP_DICT].pair_count[POP_JUMP_IF_FALSE] : 67
opcode[CONTAINS_OP_DICT].pair_count[STORE_FAST] : 24
opcode[CONTAINS_OP_SET].execution_count : 48
opcode[CONTAINS_OP_SET].pair_count[POP_JUMP_IF_FALSE] : 9
opcode[CONTAINS_OP_SET].pair_count[POP_JUMP_IF_TRUE] : 39
opcode[FOR_ITER_LIST].execution_count : 542
opcode[FOR_ITER_LIST].pair_count[JUMP_BACKWARD] : 4
opcode[FOR_ITER_LIST].pair_count[JUMP_FORWARD] : 1
opcode[FOR_ITER_LIST].pair_count[LOAD_FAST] : 9
opcode[FOR_ITER_LIST].pair_count[LOAD_GLOBAL] : 2
opcode[FOR_ITER_LIST].pair_count[RETURN_CONST] : 16
opcode[FOR_ITER_LIST].pair_count[STORE_FAST] : 100
opcode[FOR_ITER_LIST].pair_count[STORE_FAST_LOAD_FAST] : 370
opcode[FOR_ITER_LIST].pair_count[UNPACK_SEQUENCE] : 2
opcode[FOR_ITER_LIST].pair_count[UNPACK_SEQUENCE_TWO_TUPLE] : 38
opcode[FOR_ITER_RANGE].execution_count : 18
opcode[FOR_ITER_RANGE].pair_count[STORE_NAME] : 18
opcode[FOR_ITER_TUPLE].specialization.miss : 4
opcode[FOR_ITER_TUPLE].execution_count : 357
opcode[FOR_ITER_TUPLE].pair_count[DELETE_NAME] : 1
opcode[FOR_ITER_TUPLE].pair_count[LOAD_FAST] : 25
opcode[FOR_ITER_TUPLE].pair_count[LOAD_FAST_LOAD_FAST] : 4
opcode[FOR_ITER_TUPLE].pair_count[LOAD_GLOBAL] : 1
opcode[FOR_ITER_TUPLE].pair_count[LOAD_NAME] : 2
opcode[FOR_ITER_TUPLE].pair_count[RETURN_CONST] : 17
opcode[FOR_ITER_TUPLE].pair_count[STORE_FAST] : 135
opcode[FOR_ITER_TUPLE].pair_count[STORE_FAST_LOAD_FAST] : 103
opcode[FOR_ITER_TUPLE].pair_count[STORE_NAME] : 7
opcode[FOR_ITER_TUPLE].pair_count[SWAP] : 51
opcode[FOR_ITER_TUPLE].pair_count[UNPACK_SEQUENCE] : 1
opcode[FOR_ITER_TUPLE].pair_count[UNPACK_SEQUENCE_TWO_TUPLE] : 10
opcode[LOAD_ATTR_CLASS].execution_count : 32
opcode[LOAD_ATTR_CLASS].pair_count[LOAD_CONST] : 10
opcode[LOAD_ATTR_CLASS].pair_count[LOAD_FAST] : 11
opcode[LOAD_ATTR_CLASS].pair_count[STORE_FAST] : 11
opcode[LOAD_ATTR_INSTANCE_VALUE].execution_count : 1209
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[BEFORE_WITH] : 56
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[GET_ITER] : 7
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[RETURN_VALUE] : 40
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[STORE_SUBSCR] : 2
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[TO_BOOL] : 30
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[BUILD_LIST] : 30
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[CALL] : 11
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[COMPARE_OP] : 8
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[COPY] : 8
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[LOAD_ATTR] : 70
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[LOAD_CONST] : 50
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[LOAD_FAST] : 149
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[LOAD_FAST_LOAD_FAST] : 65
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[LOAD_GLOBAL] : 2
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[POP_JUMP_IF_NONE] : 58
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[POP_JUMP_IF_NOT_NONE] : 64
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[STORE_FAST] : 52
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[CALL_LEN] : 77
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[CALL_LIST_APPEND] : 27
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[CALL_METHOD_DESCRIPTOR_FAST] : 24
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[CALL_METHOD_DESCRIPTOR_O] : 27
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[CALL_PY_EXACT_ARGS] : 35
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[CALL_PY_GENERAL] : 24
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[LOAD_ATTR_METHOD_NO_DICT] : 135
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[LOAD_ATTR_METHOD_WITH_VALUES] : 46
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[LOAD_GLOBAL_MODULE] : 36
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[STORE_SUBSCR_DICT] : 48
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[TO_BOOL_BOOL] : 1
opcode[LOAD_ATTR_INSTANCE_VALUE].pair_count[TO_BOOL_LIST] : 27
opcode[LOAD_ATTR_METHOD_LAZY_DICT].execution_count : 2
opcode[LOAD_ATTR_METHOD_LAZY_DICT].pair_count[CALL] : 1
opcode[LOAD_ATTR_METHOD_LAZY_DICT].pair_count[CALL_METHOD_DESCRIPTOR_FAST] : 1
opcode[LOAD_ATTR_METHOD_NO_DICT].execution_count : 591
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[CALL] : 4
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[LOAD_CONST] : 137
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[LOAD_DEREF] : 3
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[LOAD_FAST] : 264
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[LOAD_FAST_CHECK] : 1
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[LOAD_GLOBAL] : 5
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[CALL_METHOD_DESCRIPTOR_FAST] : 27
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[CALL_METHOD_DESCRIPTOR_NOARGS] : 5
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[LOAD_GLOBAL_BUILTIN] : 1
opcode[LOAD_ATTR_METHOD_NO_DICT].pair_count[LOAD_GLOBAL_MODULE] : 144
opcode[LOAD_ATTR_METHOD_WITH_VALUES].execution_count : 102
opcode[LOAD_ATTR_METHOD_WITH_VALUES].pair_count[CALL] : 5
opcode[LOAD_ATTR_METHOD_WITH_VALUES].pair_count[LOAD_FAST] : 36
opcode[LOAD_ATTR_METHOD_WITH_VALUES].pair_count[LOAD_FAST_LOAD_FAST] : 9
opcode[LOAD_ATTR_METHOD_WITH_VALUES].pair_count[CALL_PY_EXACT_ARGS] : 52
opcode[LOAD_ATTR_MODULE].specialization.miss : 235
opcode[LOAD_ATTR_MODULE].execution_count : 979
opcode[LOAD_ATTR_MODULE].pair_count[FORMAT_SIMPLE] : 11
opcode[LOAD_ATTR_MODULE].pair_count[GET_ITER] : 4
opcode[LOAD_ATTR_MODULE].pair_count[PUSH_NULL] : 91
opcode[LOAD_ATTR_MODULE].pair_count[TO_BOOL] : 1
opcode[LOAD_ATTR_MODULE].pair_count[CALL] : 35
opcode[LOAD_ATTR_MODULE].pair_count[CONTAINS_OP] : 28
opcode[LOAD_ATTR_MODULE].pair_count[LOAD_ATTR] : 18
opcode[LOAD_ATTR_MODULE].pair_count[LOAD_CONST] : 41
opcode[LOAD_ATTR_MODULE].pair_count[LOAD_FAST] : 179
opcode[LOAD_ATTR_MODULE].pair_count[LOAD_FAST_LOAD_FAST] : 31
opcode[LOAD_ATTR_MODULE].pair_count[LOAD_GLOBAL] : 1
opcode[LOAD_ATTR_MODULE].pair_count[POP_JUMP_IF_NONE] : 9
opcode[LOAD_ATTR_MODULE].pair_count[STORE_FAST] : 45
opcode[LOAD_ATTR_MODULE].pair_count[CALL_NON_PY_GENERAL] : 267
opcode[LOAD_ATTR_MODULE].pair_count[CALL_PY_EXACT_ARGS] : 1
opcode[LOAD_ATTR_MODULE].pair_count[CALL_TYPE_1] : 10
opcode[LOAD_ATTR_MODULE].pair_count[CONTAINS_OP_DICT] : 45
opcode[LOAD_ATTR_MODULE].pair_count[LOAD_ATTR_METHOD_NO_DICT] : 74
opcode[LOAD_ATTR_MODULE].pair_count[LOAD_ATTR_MODULE] : 11
opcode[LOAD_ATTR_MODULE].pair_count[LOAD_ATTR_SLOT] : 73
opcode[LOAD_ATTR_MODULE].pair_count[LOAD_GLOBAL_BUILTIN] : 1
opcode[LOAD_ATTR_MODULE].pair_count[TO_BOOL_LIST] : 3
opcode[LOAD_ATTR_PROPERTY].execution_count : 62
opcode[LOAD_ATTR_PROPERTY].pair_count[RESUME_CHECK] : 62
opcode[LOAD_ATTR_SLOT].execution_count : 128
opcode[LOAD_ATTR_SLOT].pair_count[TO_BOOL] : 1
opcode[LOAD_ATTR_SLOT].pair_count[CALL] : 1
opcode[LOAD_ATTR_SLOT].pair_count[LOAD_CONST] : 19
opcode[LOAD_ATTR_SLOT].pair_count[LOAD_FAST] : 71
opcode[LOAD_ATTR_SLOT].pair_count[STORE_FAST] : 8
opcode[LOAD_ATTR_SLOT].pair_count[CALL_BUILTIN_FAST] : 27
opcode[LOAD_ATTR_SLOT].pair_count[TO_BOOL_INT] : 1
opcode[LOAD_GLOBAL_BUILTIN].specialization.miss : 378
opcode[LOAD_GLOBAL_BUILTIN].execution_count : 753
opcode[LOAD_GLOBAL_BUILTIN].pair_count[CHECK_EXC_MATCH] : 73
opcode[LOAD_GLOBAL_BUILTIN].pair_count[RETURN_VALUE] : 13
opcode[LOAD_GLOBAL_BUILTIN].pair_count[BUILD_TUPLE] : 1
opcode[LOAD_GLOBAL_BUILTIN].pair_count[CALL] : 8
opcode[LOAD_GLOBAL_BUILTIN].pair_count[LOAD_ATTR] : 8
opcode[LOAD_GLOBAL_BUILTIN].pair_count[LOAD_CONST] : 1
opcode[LOAD_GLOBAL_BUILTIN].pair_count[LOAD_DEREF] : 88
opcode[LOAD_GLOBAL_BUILTIN].pair_count[LOAD_FAST] : 341
opcode[LOAD_GLOBAL_BUILTIN].pair_count[LOAD_FAST_LOAD_FAST] : 132
opcode[LOAD_GLOBAL_BUILTIN].pair_count[LOAD_GLOBAL] : 6
opcode[LOAD_GLOBAL_BUILTIN].pair_count[CALL_BUILTIN_CLASS] : 4
opcode[LOAD_GLOBAL_BUILTIN].pair_count[CALL_ISINSTANCE] : 34
opcode[LOAD_GLOBAL_BUILTIN].pair_count[CALL_NON_PY_GENERAL] : 9
opcode[LOAD_GLOBAL_BUILTIN].pair_count[LOAD_GLOBAL_MODULE] : 35
opcode[LOAD_GLOBAL_MODULE].specialization.miss : 109
opcode[LOAD_GLOBAL_MODULE].execution_count : 2309
opcode[LOAD_GLOBAL_MODULE].pair_count[FORMAT_SIMPLE] : 1
opcode[LOAD_GLOBAL_MODULE].pair_count[GET_ITER] : 6
opcode[LOAD_GLOBAL_MODULE].pair_count[TO_BOOL] : 1
opcode[LOAD_GLOBAL_MODULE].pair_count[BUILD_TUPLE] : 2
opcode[LOAD_GLOBAL_MODULE].pair_count[CALL] : 11
opcode[LOAD_GLOBAL_MODULE].pair_count[COMPARE_OP] : 2
opcode[LOAD_GLOBAL_MODULE].pair_count[CONTAINS_OP] : 41
opcode[LOAD_GLOBAL_MODULE].pair_count[IS_OP] : 78
opcode[LOAD_GLOBAL_MODULE].pair_count[LOAD_ATTR] : 80
opcode[LOAD_GLOBAL_MODULE].pair_count[LOAD_CONST] : 46
opcode[LOAD_GLOBAL_MODULE].pair_count[LOAD_FAST] : 435
opcode[LOAD_GLOBAL_MODULE].pair_count[LOAD_FAST_LOAD_FAST] : 238
opcode[LOAD_GLOBAL_MODULE].pair_count[LOAD_GLOBAL] : 5
opcode[LOAD_GLOBAL_MODULE].pair_count[POP_JUMP_IF_NONE] : 3
opcode[LOAD_GLOBAL_MODULE].pair_count[POP_JUMP_IF_NOT_NONE] : 26
opcode[LOAD_GLOBAL_MODULE].pair_count[STORE_FAST] : 2
opcode[LOAD_GLOBAL_MODULE].pair_count[CALL_ISINSTANCE] : 1
opcode[LOAD_GLOBAL_MODULE].pair_count[CALL_METHOD_DESCRIPTOR_FAST] : 155
opcode[LOAD_GLOBAL_MODULE].pair_count[CALL_NON_PY_GENERAL] : 72
opcode[LOAD_GLOBAL_MODULE].pair_count[CALL_PY_EXACT_ARGS] : 7
opcode[LOAD_GLOBAL_MODULE].pair_count[CALL_TUPLE_1] : 1
opcode[LOAD_GLOBAL_MODULE].pair_count[CALL_TYPE_1] : 13
opcode[LOAD_GLOBAL_MODULE].pair_count[CONTAINS_OP_DICT] : 40
opcode[LOAD_GLOBAL_MODULE].pair_count[LOAD_ATTR_METHOD_NO_DICT] : 105
opcode[LOAD_GLOBAL_MODULE].pair_count[LOAD_ATTR_METHOD_WITH_VALUES] : 27
opcode[LOAD_GLOBAL_MODULE].pair_count[LOAD_ATTR_MODULE] : 863
opcode[LOAD_GLOBAL_MODULE].pair_count[LOAD_GLOBAL_MODULE] : 44
opcode[LOAD_GLOBAL_MODULE].pair_count[TO_BOOL_STR] : 4
opcode[LOAD_SUPER_ATTR_ATTR].execution_count : 32
opcode[LOAD_SUPER_ATTR_ATTR].pair_count[PUSH_NULL] : 32
opcode[LOAD_SUPER_ATTR_METHOD].execution_count : 56
opcode[LOAD_SUPER_ATTR_METHOD].pair_count[LOAD_FAST_LOAD_FAST] : 56
opcode[RESUME_CHECK].execution_count : 1581
opcode[RESUME_CHECK].pair_count[NOP] : 46
opcode[RESUME_CHECK].pair_count[POP_TOP] : 25
opcode[RESUME_CHECK].pair_count[BUILD_LIST] : 7
opcode[RESUME_CHECK].pair_count[LOAD_CONST] : 96
opcode[RESUME_CHECK].pair_count[LOAD_DEREF] : 28
opcode[RESUME_CHECK].pair_count[LOAD_FAST] : 455
opcode[RESUME_CHECK].pair_count[LOAD_FAST_LOAD_FAST] : 92
opcode[RESUME_CHECK].pair_count[LOAD_GLOBAL] : 45
opcode[RESUME_CHECK].pair_count[RETURN_CONST] : 21
opcode[RESUME_CHECK].pair_count[LOAD_GLOBAL_BUILTIN] : 132
opcode[RESUME_CHECK].pair_count[LOAD_GLOBAL_MODULE] : 634
opcode[STORE_ATTR_INSTANCE_VALUE].execution_count : 721
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[NOP] : 25
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[BUILD_LIST] : 79
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[JUMP_FORWARD] : 3
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[LOAD_CONST] : 116
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[LOAD_FAST] : 162
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[LOAD_FAST_LOAD_FAST] : 158
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[LOAD_GLOBAL] : 5
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[RETURN_CONST] : 121
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[LOAD_GLOBAL_BUILTIN] : 27
opcode[STORE_ATTR_INSTANCE_VALUE].pair_count[LOAD_GLOBAL_MODULE] : 25
opcode[STORE_ATTR_SLOT].execution_count : 28
opcode[STORE_ATTR_SLOT].pair_count[LOAD_FAST] : 28
opcode[STORE_SUBSCR_DICT].execution_count : 106
opcode[STORE_SUBSCR_DICT].pair_count[NOP] : 25
opcode[STORE_SUBSCR_DICT].pair_count[POP_EXCEPT] : 4
opcode[STORE_SUBSCR_DICT].pair_count[LOAD_FAST] : 28
opcode[STORE_SUBSCR_DICT].pair_count[LOAD_GLOBAL] : 2
opcode[STORE_SUBSCR_DICT].pair_count[LOAD_GLOBAL_MODULE] : 47
opcode[TO_BOOL_BOOL].execution_count : 430
opcode[TO_BOOL_BOOL].pair_count[POP_JUMP_IF_FALSE] : 140
opcode[TO_BOOL_BOOL].pair_count[POP_JUMP_IF_TRUE] : 290
opcode[TO_BOOL_INT].execution_count : 2058
opcode[TO_BOOL_INT].pair_count[POP_JUMP_IF_FALSE] : 2030
opcode[TO_BOOL_INT].pair_count[POP_JUMP_IF_TRUE] : 28
opcode[TO_BOOL_LIST].execution_count : 57
opcode[TO_BOOL_LIST].pair_count[POP_JUMP_IF_FALSE] : 29
opcode[TO_BOOL_LIST].pair_count[POP_JUMP_IF_TRUE] : 28
opcode[TO_BOOL_NONE].specialization.miss : 27
opcode[TO_BOOL_NONE].execution_count : 87
opcode[TO_BOOL_NONE].pair_count[POP_JUMP_IF_FALSE] : 86
opcode[TO_BOOL_NONE].pair_count[POP_JUMP_IF_TRUE] : 1
opcode[TO_BOOL_STR].execution_count : 259
opcode[TO_BOOL_STR].pair_count[POP_JUMP_IF_FALSE] : 84
opcode[TO_BOOL_STR].pair_count[POP_JUMP_IF_TRUE] : 175
opcode[UNPACK_SEQUENCE_TUPLE].execution_count : 16
opcode[UNPACK_SEQUENCE_TUPLE].pair_count[STORE_FAST_STORE_FAST] : 16
opcode[UNPACK_SEQUENCE_TWO_TUPLE].execution_count : 72
opcode[UNPACK_SEQUENCE_TWO_TUPLE].pair_count[STORE_DEREF] : 11
opcode[UNPACK_SEQUENCE_TWO_TUPLE].pair_count[STORE_FAST_STORE_FAST] : 61
Calls to PyEval_EvalDefault: 679
Calls to Python functions inlined: 1196
Frames pushed: 1903
Frame objects created: 102
Calls via PyEval_EvalFrame[0] : 679
Calls via PyEval_EvalFrame[1] : 629
Calls via PyEval_EvalFrame[2] : 50
Calls via PyEval_EvalFrame[3] : 18
Calls via PyEval_EvalFrame[4] : 527
Calls via PyEval_EvalFrame[5] : 84
Calls via PyEval_EvalFrame[6] : 4
Calls via PyEval_EvalFrame[7] : 10
Calls via PyEval_EvalFrame[8] : 95
Calls via PyEval_EvalFrame[9] : 4
Object allocations from freelist: 3191
Object frees to freelist: 5085
Object allocations: 29444
Object allocations to 512 bytes: 28835
Object allocations to 4 kbytes: 578
Object allocations over 4 kbytes: 31
Object frees: 21940
Object inline values: 184
Object interpreter increfs: 20080
Object interpreter decrefs: 33480
Object increfs: 67249
Object decrefs: 69485
Object materialize dict (on request): 0
Object materialize dict (new key): 0
Object materialize dict (too big): 0
Object materialize dict (str subclass): 0
Object method cache hits: 2287
Object method cache misses: 1228
Object method cache collisions: 447
Object method cache dunder hits: 3331
Object method cache dunder misses: 293
GC[0] collections: 0
GC[0] object visits: 0
GC[0] objects collected: 0
GC[1] collections: 0
GC[1] object visits: 31346
GC[1] objects collected: 24
GC[2] collections: 0
GC[2] object visits: 96004
GC[2] objects collected: 1742
Optimization attempts: 5
Optimization traces created: 1
Optimization traces executed: 3964
Optimization uops executed: 19816
Optimization trace stack overflow: 0
Optimization trace stack underflow: 0
Optimization trace too long: 0
Optimization trace too short: 4
Optimization inner loop: 0
Optimization recursive call: 0
Optimization low confidence: 0
Executors invalidated: 0
Trace length[1]: 0
Trace length[2]: 0
Trace length[4]: 0
Trace length[8]: 0
Trace length[16]: 1
Trace length[32]: 0
Trace length[64]: 0
Trace length[128]: 0
Trace length[256]: 0
Trace length[512]: 0
Trace length[1024]: 0
Trace length[2048]: 0
Trace length[4096]: 0
Trace length[8192]: 0
Trace length[16384]: 0
Trace length[32768]: 0
Trace length[65536]: 0
Trace length[131072]: 0
Trace length[262144]: 0
Trace length[524288]: 0
Trace length[1048576]: 0
Trace length[2097152]: 0
Trace length[4194304]: 0
Trace length[8388608]: 0
Trace length[16777216]: 0
Trace length[33554432]: 0
Trace length[67108864]: 0
Trace length[134217728]: 0
Trace length[268435456]: 0
Trace length[536870912]: 0
Trace length[1073741824]: 0
Trace length[2147483648]: 0
Trace run length[1]: 0
Trace run length[2]: 0
Trace run length[4]: 0
Trace run length[8]: 0
Trace run length[16]: 0
Trace run length[32]: 0
Trace run length[64]: 0
Trace run length[128]: 0
Trace run length[256]: 0
Trace run length[512]: 0
Trace run length[1024]: 0
Trace run length[2048]: 0
Trace run length[4096]: 0
Trace run length[8192]: 0
Trace run length[16384]: 0
Trace run length[32768]: 0
Trace run length[65536]: 0
Trace run length[131072]: 0
Trace run length[262144]: 0
Trace run length[524288]: 0
Trace run length[1048576]: 0
Trace run length[2097152]: 0
Trace run length[4194304]: 0
Trace run length[8388608]: 0
Trace run length[16777216]: 0
Trace run length[33554432]: 0
Trace run length[67108864]: 0
Trace run length[134217728]: 0
Trace run length[268435456]: 0
Trace run length[536870912]: 0
Trace run length[1073741824]: 0
Trace run length[2147483648]: 0
Optimized trace length[1]: 0
Optimized trace length[2]: 0
Optimized trace length[4]: 0
Optimized trace length[8]: 0
Optimized trace length[16]: 1
Optimized trace length[32]: 0
Optimized trace length[64]: 0
Optimized trace length[128]: 0
Optimized trace length[256]: 0
Optimized trace length[512]: 0
Optimized trace length[1024]: 0
Optimized trace length[2048]: 0
Optimized trace length[4096]: 0
Optimized trace length[8192]: 0
Optimized trace length[16384]: 0
Optimized trace length[32768]: 0
Optimized trace length[65536]: 0
Optimized trace length[131072]: 0
Optimized trace length[262144]: 0
Optimized trace length[524288]: 0
Optimized trace length[1048576]: 0
Optimized trace length[2097152]: 0
Optimized trace length[4194304]: 0
Optimized trace length[8388608]: 0
Optimized trace length[16777216]: 0
Optimized trace length[33554432]: 0
Optimized trace length[67108864]: 0
Optimized trace length[134217728]: 0
Optimized trace length[268435456]: 0
Optimized trace length[536870912]: 0
Optimized trace length[1073741824]: 0
Optimized trace length[2147483648]: 0
Optimization optimizer attempts: 1
Optimization optimizer successes: 1
Optimization optimizer failure no memory: 0
Optimizer remove globals builtins changed: 0
Optimizer remove globals incorrect keys: 0
uops[_STORE_NAME].execution_count : 1981
uops[_EXIT_TRACE].execution_count : 1982
uops[_SET_IP].execution_count : 1981
uops[_CHECK_VALIDITY].execution_count : 1981
uops[_COLD_EXIT].execution_count : 1982
uops[_GUARD_NOT_EXHAUSTED_RANGE].execution_count : 1982
uops[_GUARD_NOT_EXHAUSTED_RANGE].specialization.miss : 1
uops[_ITER_CHECK_RANGE].execution_count : 1982
uops[_ITER_NEXT_RANGE].execution_count : 1981
uops[_START_EXECUTOR].execution_count : 1982
uops[_TIER2_RESUME_CHECK].execution_count : 1982
unsupported_opcode[LOAD_NAME].count : 5
Rare event (set_class): 0
Rare event (set_bases): 0
Rare event (set_eval_frame_func): 0
Rare event (builtin_dict): 0
Rare event (func_modification): 0
Rare event (watched_dict_modification): 0
Rare event (watched_globals_modification): 0
Python bundles a script in its source repo that loads all the stats files in /tmp/py_stats
and creates an nice Markdown summary of all of them:
|
|
If you scroll through the Optimization (Tier 2) Stats, you'll see things like Optimization Attempts, number of Traces Created, how many UOps were executed and which ones. The Faster CPython team maintains separate documentation on this section, since it's evolving rapidly.
To see what the output looks like with a more significant and varied workload, you can run a quick version of the pyperformance
suite of benchmarks. Assuming you've built with pystats enabled, try:
|
|
This will create quite a few (~87!) temporary venvs and run each benchmark a single time, gathering stats as it goes. Running summarize_stats.py
over these generated stats gives us something like:
Conclusion
So, what can you do with the JIT? It isn't, at the moment, any fast than CPython without the JIT... so why turn it on?
Test it Against Your Code. The JIT is brand-spanking-new, and while it passes the full CPython test suite, the real test of its durability is how it survives against real-world code. I'd encourage you to try to turning on the JIT, seeing what happens, and submitting any bugs you find!
Dive Deeper. Have a look in the CPython code at what the configure flags we added actually do - where does lltrace
come from? How does --enable-experimental-jit
ultimately impact how make
runs? (This is more fodder for future blog posts - but in the meantime, go digging!).
Some specific things to look at in the CPython codebase:
- Check out the freshly-built
jit_stencils.h
file at the root of the repo, which contains the actual stencils that Python will fill in and JIT at runtime. - Search for
#ifdef _Py_JIT
and#ifndef _Py_JIT
- Search for
#ifdef _Py_TIER2
and#ifndef _Py_TIER2
- Look at
jit.c
to peek at how the JIT is implemented at runtime. - Look at the
tier2_dispatch
label inceval.c
Mess Around! Play around with the JIT and micro-ops. What patterns of loops and calls tend to lead to traces that can be well-optimized by the JIT? Can you create tooling that guides code toward optimizable hot patterns?
As always, I'd love to hear from corrections and comments, via Email, on Twitter, or on Mastodon.
Addendum: Building for Windows
If you're building for Windows, instead of having separate configure
and make
steps, you'll be passing build options directly to PCBuild/build.bat
. The equivalent options to those discussed earlier discussed earlierare:
Linux/POSIX
Windows
--enable-experimental-jit=yes
--experimental-jit
--enable-experimental-jit=yes-off
--experimental-jit-off
--enable-experimental-jit=interpreter
--experimental-jit-interpreter
You'll also need to follow the unique setup steps for building Python on Windows, as described by Victor Stinner. The JIT README describes how to install LLVM on Windows as well.