How to Get the New CPython JIT

Published June 9, 2024

Tags: python cpython pyperformance JIT

TL;DR

To just build and run with the JIT:

1
2
3
4
5
6
# Install Python Build Dependencies (https://devguide.python.org/getting-started/setup-building/)
git clone --depth 1 --branch v3.13.0b3 https://github.com/python/cpython.git
cd cpython
./configure --enable-experimental-jit
make
./python -c $'x=0\nfor i in range(1000):\n x+=i\nprint(x)'

To include some debug output, to show the JIT is running:

1
2
3
4
5
6
# Install Python Build Dependencies (https://devguide.python.org/getting-started/setup-building/)
git clone --depth 1 --branch v3.13.0b3 https://github.com/python/cpython.git
cd cpython
./configure --enable-experimental-jit --with-pydebug
make
PYTHON_LLTRACE=2 ./python -c $'x=0\nfor i in range(1000):\n x+=i\nprint(x)'

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.

For more background on JITs and copy-and-patch specifically, see:
  • PEP 744 - Jit Compilation: an informational PEP on the thinking behind and basic approach to the copy-and-patch technique.
  • The whitepaper: Copy-and-patch compilation: a fast compilation algorithm for high-level languages and bytecode
  • Haoran Xu's blogpost: Building a baseline JIT for Lua automatically
  • The video of Brandt's Presentation at this year's CPython Core Sprint in Brno. (A similar talk appeared at PyConUS 2024 and will be linked here when available).
  • The internals of the pull request itself. While it's been almost four months since it's been merged, and the JIT has evolved quite a bit since then, I'd recommend that PR as a starting place. Things are essentially the same, but somewhat more complex now. Starting from simpler days is probably best.

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 and make
  • 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
Enables a JIT build; The same as not passing a specific value of this flag at all
--enable-experimental-jit=yes-off
Enables a built that will have the JIT, but it will be disabled by default. May be useful if you're doing some testing of the behavior of turning the JIT itself on and off. See the notes on PYTHON_JIT below.
--enable-experimental-jit=interpreter
Enables just the Tier 2 Interpreter, but not the JIT. This is basically all the machinery of the JIT up to the point where specific stencils are selected to be emitted... and then they're not actually jitted. It runs exactly the same code as the JIT itself, but skips the copy-and-patch step. Performs worse than running with the full JIT, but currently provides more debuggability.
--enable-experimental-jit=no
The same as not passing this flag. Just for comprehensiveness, I suppose.

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:

1
2
./configure --enable-experimental-jit
make -j4

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!

1
./python -c $'x=0\nfor i in range(1000):\n x+=i\nprint(x)'

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:

1
2
./configure --enable-experimental-jit --with-pydebug
make

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!

1
2
3
4
5
6
7
8
# src.py
x = 0
for i in range(2000):
    if x % 10:
        x += i
    else:
        x += i * 2
print(x)

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.

1
2
3
4
5
# Install Python Build Dependencies (https://devguide.python.org/getting-started/setup-building/)
./configure --enable-experimental-jit --enable-pystats
make
mkdir -p /tmp/py_stats
./python -X pystats src.py

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:

1
./python ./Tools/scripts/summarize_stats.py

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:

1
2
3
./python -m venv venv
./venv/bin/python -m pip install pyperformance
./venv/bin/python -m pyperformance run --debug-single-value

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 in ceval.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.