Full Code of joerick/pyinstrument for AI

main 004aedebc3c7 cached
178 files
3.1 MB
823.8k tokens
1196 symbols
1 requests
Download .txt
Showing preview only (3,292K chars total). Download the full file or copy to clipboard to get everything.
Repository: joerick/pyinstrument
Branch: main
Commit: 004aedebc3c7
Files: 178
Total size: 3.1 MB

Directory structure:
gitextract_wp7abzyz/

├── .devcontainer/
│   ├── Dockerfile
│   ├── devcontainer.json
│   └── reinstall-cmake.sh
├── .editorconfig
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       ├── test.yml
│       └── wheels.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yaml
├── LICENSE
├── MAINTAINERS.md
├── MANIFEST.in
├── README.md
├── bin/
│   ├── build_js_bundle.py
│   ├── bump_version.py
│   ├── create_demo_data.py
│   ├── create_sample_json.py
│   └── serve_docs
├── docs/
│   ├── Makefile
│   ├── _static/
│   │   └── preview/
│   │       ├── assets/
│   │       │   ├── django_template_render-CIkNzFIy.js
│   │       │   ├── index-B-UkLYqV.js
│   │       │   ├── index-paBu1EOJ.css
│   │       │   ├── sympy_calculation-B9Pn_4RL.js
│   │       │   └── wikipedia_article_word_count-CGt_pvsZ.js
│   │       └── index.html
│   ├── conf.py
│   ├── extensions/
│   │   └── signature_change.py
│   ├── guide.md
│   ├── home.md
│   ├── how-it-works.md
│   ├── index.md
│   └── reference.md
├── examples/
│   ├── aiohttp_web_hello.py
│   ├── async_example_simple.py
│   ├── async_experiment_1.py
│   ├── async_experiment_3.py
│   ├── busy_wait.py
│   ├── c_sort.py
│   ├── context_api.py
│   ├── demo_scripts/
│   │   ├── django_example/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── django_example/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── settings.py
│   │   │   │   ├── templates/
│   │   │   │   │   ├── template.html
│   │   │   │   │   └── template_base.html
│   │   │   │   ├── urls.py
│   │   │   │   └── views.py
│   │   │   └── manage.py
│   │   ├── django_template_render.py
│   │   ├── sympy_calculation.py
│   │   └── wikipedia_article_word_count.py
│   ├── falcon_hello.py
│   ├── falcon_hello_file.py
│   ├── flask_hello.py
│   ├── litestar_hello.py
│   ├── np_c_function.py
│   └── tbhide_demo.py
├── html_renderer/
│   ├── .editorconfig
│   ├── .gitignore
│   ├── demo-data/
│   │   ├── django_template_render.json
│   │   ├── sympy_calculation.json
│   │   └── wikipedia_article_word_count.json
│   ├── demo-src/
│   │   ├── DemoApp.svelte
│   │   └── main.ts
│   ├── index.html
│   ├── package.json
│   ├── src/
│   │   ├── App.svelte
│   │   ├── app.css
│   │   ├── components/
│   │   │   ├── CallStackView.svelte
│   │   │   ├── CogIcon.svelte
│   │   │   ├── Frame.svelte
│   │   │   ├── Header.svelte
│   │   │   ├── Logo.svelte
│   │   │   ├── TimelineCanvasView.ts
│   │   │   ├── TimelineCanvasViewTooltip.svelte
│   │   │   ├── TimelineView.svelte
│   │   │   ├── ViewOptions.svelte
│   │   │   ├── ViewOptionsCallStack.svelte
│   │   │   └── ViewOptionsTimeline.svelte
│   │   ├── lib/
│   │   │   ├── CanvasView.ts
│   │   │   ├── DevicePixelRatioObserver.ts
│   │   │   ├── appState.ts
│   │   │   ├── color.ts
│   │   │   ├── dataTypes.ts
│   │   │   ├── model/
│   │   │   │   ├── Frame.ts
│   │   │   │   ├── FrameGroup.ts
│   │   │   │   ├── Session.ts
│   │   │   │   ├── frameOps.test.ts
│   │   │   │   ├── frameOps.ts
│   │   │   │   ├── modelUtil.ts
│   │   │   │   └── processors.ts
│   │   │   ├── settings.ts
│   │   │   └── utils.ts
│   │   ├── main.ts
│   │   ├── types.d.ts
│   │   └── vite-env.d.ts
│   ├── svelte.config.js
│   ├── tsconfig.json
│   ├── tsconfig.node.json
│   └── vite.config.ts
├── metrics/
│   ├── count_samples.py
│   ├── frame_info.py
│   ├── interrupt.py
│   ├── multi_overhead.py
│   ├── overflow.py
│   └── overhead.py
├── noxfile.py
├── pyinstrument/
│   ├── __init__.py
│   ├── __main__.py
│   ├── context_manager.py
│   ├── frame.py
│   ├── frame_info.py
│   ├── frame_ops.py
│   ├── low_level/
│   │   ├── pyi_floatclock.c
│   │   ├── pyi_floatclock.h
│   │   ├── pyi_shared.h
│   │   ├── pyi_timing_thread.c
│   │   ├── pyi_timing_thread.h
│   │   ├── pyi_timing_thread_python.py
│   │   ├── stat_profile.c
│   │   ├── stat_profile.pyi
│   │   ├── stat_profile_python.py
│   │   └── types.py
│   ├── magic/
│   │   ├── __init__.py
│   │   ├── _utils.py
│   │   └── magic.py
│   ├── middleware.py
│   ├── processors.py
│   ├── profiler.py
│   ├── py.typed
│   ├── renderers/
│   │   ├── __init__.py
│   │   ├── base.py
│   │   ├── console.py
│   │   ├── html.py
│   │   ├── html_resources/
│   │   │   ├── app.css
│   │   │   └── app.js
│   │   ├── jsonrenderer.py
│   │   ├── pstatsrenderer.py
│   │   ├── session.py
│   │   └── speedscope.py
│   ├── session.py
│   ├── stack_sampler.py
│   ├── typing.py
│   ├── util.py
│   └── vendor/
│       ├── __init__.py
│       ├── appdirs.py
│       ├── decorator.py
│       └── keypath.py
├── pyproject.toml
├── requirements-dev.txt
├── setup.cfg
├── setup.py
└── test/
    ├── __init__.py
    ├── conftest.py
    ├── fake_time_util.py
    ├── low_level/
    │   ├── __init__.py
    │   ├── test_context.py
    │   ├── test_custom_timer.py
    │   ├── test_floatclock.py
    │   ├── test_frame_info.py
    │   ├── test_setstatprofile.py
    │   ├── test_threaded.py
    │   ├── test_timing_thread.py
    │   └── util.py
    ├── test_cmdline.py
    ├── test_cmdline_main.py
    ├── test_context_manager.py
    ├── test_ipython_magic.py
    ├── test_overflow.py
    ├── test_processors.py
    ├── test_profiler.py
    ├── test_profiler_async.py
    ├── test_pstats_renderer.py
    ├── test_renderers.py
    ├── test_stack_sampler.py
    ├── test_threading.py
    └── util.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .devcontainer/Dockerfile
================================================
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.238.0/containers/cpp/.devcontainer/base.Dockerfile

# [Choice] Debian / Ubuntu version (use Debian 11, Ubuntu 18.04/22.04 on local arm64/Apple Silicon): debian-11, debian-10, ubuntu-22.04, ubuntu-20.04, ubuntu-18.04
ARG VARIANT="bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/cpp:0-${VARIANT}

# [Optional] Install CMake version different from what base image has already installed.
# CMake reinstall choices: none, 3.21.5, 3.22.2, or versions from https://cmake.org/download/
ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none"

# Optionally install the cmake for vcpkg
COPY ./reinstall-cmake.sh /tmp/
RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \
        chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \
    fi \
    && rm -f /tmp/reinstall-cmake.sh

# [Optional] Uncomment this section to install additional vcpkg ports.
# RUN su vscode -c "${VCPKG_ROOT}/vcpkg install <your-port-name-here>"

# [Optional] Uncomment this section to install additional packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
#     && apt-get -y install --no-install-recommends <your-package-list-here>


================================================
FILE: .devcontainer/devcontainer.json
================================================
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.238.0/containers/cpp
{
	"name": "C++",
	"build": {
		"dockerfile": "Dockerfile",
		// Update 'VARIANT' to pick an Debian / Ubuntu OS version: debian-11, debian-10, ubuntu-22.04, ubuntu-20.04, ubuntu-18.04
		// Use Debian 11, Ubuntu 18.04 or Ubuntu 22.04 on local arm64/Apple Silicon
		"args": { "VARIANT": "ubuntu-22.04" }
	},
	"runArgs": ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"],

	// Configure tool-specific properties.
	"customizations": {
		// Configure properties specific to VS Code.
		"vscode": {
			// Add the IDs of extensions you want installed when the container is created.
			"extensions": [
				"benjamin-simmonds.pythoncpp-debug",
				"eamodio.gitlens",
				"ms-python.python",
				"ms-python.vscode-pylance",
				"ms-vscode.cmake-tools",
				"ms-vscode.cpptools",
				"samuelcolvin.jinjahtml",
				"xr0master.webstorm-intellij-darcula-theme"
			]
		}
	},

	// Use 'forwardPorts' to make a list of ports inside the container available locally.
	// "forwardPorts": [],

	// Use 'postCreateCommand' to run commands after the container is created.
	// "postCreateCommand": "gcc -v",

	// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
	"remoteUser": "vscode",
	"features": {
		"git": "latest",
		"github-cli": "latest",
		"sshd": "latest",
		"node": "16",
		"python": "3.10"
	}
}


================================================
FILE: .devcontainer/reinstall-cmake.sh
================================================
#!/usr/bin/env bash
#-------------------------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
#-------------------------------------------------------------------------------------------------------------
#
set -e

CMAKE_VERSION=${1:-"none"}

if [ "${CMAKE_VERSION}" = "none" ]; then
    echo "No CMake version specified, skipping CMake reinstallation"
    exit 0
fi

# Cleanup temporary directory and associated files when exiting the script.
cleanup() {
    EXIT_CODE=$?
    set +e
    if [[ -n "${TMP_DIR}" ]]; then
        echo "Executing cleanup of tmp files"
        rm -Rf "${TMP_DIR}"
    fi
    exit $EXIT_CODE
}
trap cleanup EXIT


echo "Installing CMake..."
apt-get -y purge --auto-remove cmake
mkdir -p /opt/cmake

architecture=$(dpkg --print-architecture)
case "${architecture}" in
    arm64)
        ARCH=aarch64 ;;
    amd64)
        ARCH=x86_64 ;;
    *)
        echo "Unsupported architecture ${architecture}."
        exit 1
        ;;
esac

CMAKE_BINARY_NAME="cmake-${CMAKE_VERSION}-linux-${ARCH}.sh"
CMAKE_CHECKSUM_NAME="cmake-${CMAKE_VERSION}-SHA-256.txt"
TMP_DIR=$(mktemp -d -t cmake-XXXXXXXXXX)

echo "${TMP_DIR}"
cd "${TMP_DIR}"

curl -sSL "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/${CMAKE_BINARY_NAME}" -O
curl -sSL "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/${CMAKE_CHECKSUM_NAME}" -O

sha256sum -c --ignore-missing "${CMAKE_CHECKSUM_NAME}"
sh "${TMP_DIR}/${CMAKE_BINARY_NAME}" --prefix=/opt/cmake --skip-license

ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake


================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[html_renderer/**]
indent_size = 2


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    ignore:
      # Optional: Official actions have moving tags like v1;
      # if you use those, you don't need updates.
      - dependency-name: "actions/*"


================================================
FILE: .github/workflows/test.yml
================================================
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        # Checkout pull request HEAD commit instead of merge commit
        ref: ${{ github.event.pull_request.head.sha }}
        fetch-depth: 0
    - uses: actions/setup-python@v5
    - name: Install Python deps
      run: |
        pip install -r requirements-dev.txt
    - uses: pre-commit/action@v3.0.1
      with:
        token: ${{ secrets.GITHUB_TOKEN }}

  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
        # also add an aarch64 test, just one python version
        include:
          - os: ubuntu-24.04-arm
            python-version: "3.13"
      fail-fast: false

    steps:
    - uses: actions/checkout@v4

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip setuptools wheel
        pip install -e '.[test]'

    - name: Test with pytest
      run: |
        pytest && pytest --only-ipython-magic


================================================
FILE: .github/workflows/wheels.yml
================================================
name: Build wheels

on:
  push:
    branches: [ main ]
    tags:
      - v*

  pull_request:
    branches: [ main ]
    # only run on pull requests that change a C file or build system
    paths:
    - '**.c'
    - setup.py
    - setup.cfg
    - pyproject.toml
    - .github/workflows/wheels.yml

jobs:
  build_wheels:
    name: Build wheels on ${{ matrix.archs }} for ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest, ubuntu-24.04-arm]

    steps:
      - uses: actions/checkout@v4

      - name: Set up QEMU
        if: ${{ matrix.archs == 'aarch64' }}
        uses: docker/setup-qemu-action@v3

      - uses: actions/setup-python@v5
        name: Install Python
        with:
          python-version: '3.8'

      - name: Build wheels
        uses: joerick/cibuildwheel@v3.3.1
        env:
          CIBW_SKIP: pp*
          CIBW_ARCHS_MACOS: auto universal2

      - uses: actions/upload-artifact@v4
        with:
          name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
          path: ./wheelhouse/*.whl

  build_sdist:
    name: Build source distribution
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        name: Install Python
        with:
          python-version: '3.8'

      - name: Check manifest
        run: pipx run check-manifest

      - name: Build sdist
        run: python setup.py sdist

      - uses: actions/upload-artifact@v4
        with:
          name: cibw-sdist
          path: dist/*.tar.gz

  upload_pypi:
    needs: [build_wheels, build_sdist]
    runs-on: ubuntu-latest
    # upload to PyPI on every tag starting with 'v'
    if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v')
    environment:
      name: pypi
      url: https://pypi.org/p/pyinstrument
    permissions:
      id-token: write
      attestations: write

    steps:
      - uses: actions/download-artifact@v4
        with:
          # unpacks all CIBW artifacts into dist/
          pattern: cibw-*
          path: dist
          merge-multiple: true

      - uses: pypa/gh-action-pypi-publish@release/v1


================================================
FILE: .gitignore
================================================
# virtualenv
env/
env2/
env3*/
.Python
/env

# python
*.pyc
__pycache__/

# C extensions
*.so
*.pyd

# distribution
dist/
*.egg-info/
build
.eggs

# testing
.cache
.pytest_cache

# editor
*.code-workspace
.history
.vscode
.idea

# docs
docs/_build


================================================
FILE: .pre-commit-config.yaml
================================================
repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.6.0
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
    -   id: check-yaml
    -   id: check-added-large-files

-   repo: https://github.com/pycqa/isort
    rev: 5.13.2
    hooks:
    -   id: isort
        name: isort (python)

-   repo: https://github.com/psf/black
    rev: 24.4.2
    hooks:
    -   id: black
        language_version: python3

-   repo: https://github.com/codespell-project/codespell
    rev: v2.3.0
    hooks:
    -   id: codespell
        exclude: "\\.(json)$|docs/_static/preview"
        args:
        -   --ignore-words-list=vas

-   repo: https://github.com/RobertCraigie/pyright-python
    rev: v1.1.403
    hooks:
    -   id: pyright
        additional_dependencies:
        -   pytest
        -   ipython == 8.12.3
        -   django
        -   flask
        -   trio
        -   flaky
        -   numpy
        -   nox
        -   requests
        -   greenlet
        -   types-click
        -   types-requests
        -   falcon
        -   litestar
        -   aiohttp


-   repo: local
    hooks:
    -   id: build
        name: build js bundle
        entry: bin/build_js_bundle.py --force
        files: html_renderer/.*
        language: node
        pass_filenames: false

-   repo: https://github.com/asottile/pyupgrade
    rev: v3.17.0
    hooks:
    -   id: pyupgrade
        args: [--py37-plus]
        stages: [manual]
        exclude: ^pyinstrument/vendor/

exclude: ^pyinstrument/renderers/html_resources/app.js$|^pyinstrument/vendor


================================================
FILE: .readthedocs.yaml
================================================
version: 2

build:
  os: ubuntu-22.04
  tools:
    python: "3.11"

sphinx:
   configuration: docs/conf.py

python:
   install:
   - requirements: requirements-dev.txt


================================================
FILE: LICENSE
================================================
Copyright (c) 2014-2020, Joe Rickerby and contributors
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: MAINTAINERS.md
================================================
# Releasing

```
bin/bump_version.py
git push && git push --tags
```

Deployment to PyPI is performed in GitHub Actions.


================================================
FILE: MANIFEST.in
================================================
prune **

graft pyinstrument
graft test
graft bin
graft html_renderer
prune html_renderer/node_modules
prune html_renderer/dist

include LICENSE README.md pyproject.toml setup.py setup.cfg noxfile.py requirements-dev.txt

global-exclude __pycache__ *.py[cod] .* dist


================================================
FILE: README.md
================================================
pyinstrument
============

[![PyPI version](https://badge.fury.io/py/pyinstrument.svg)](https://badge.fury.io/py/pyinstrument)
[![.github/workflows/test.yml](https://github.com/joerick/pyinstrument/actions/workflows/test.yml/badge.svg)](https://github.com/joerick/pyinstrument/actions/workflows/test.yml)
[![Build wheels](https://github.com/joerick/pyinstrument/actions/workflows/wheels.yml/badge.svg)](https://github.com/joerick/pyinstrument/actions/workflows/wheels.yml)

[Documentation](https://pyinstrument.readthedocs.io/)

<!-- MARK intro start -->

[![Screenshot](https://github.com/joerick/pyinstrument/raw/main/docs/img/screenshot.jpg)](https://github.com/joerick/pyinstrument/raw/main/docs/img/screenshot.jpg)

Pyinstrument is a Python profiler. A profiler is a tool to help you optimize
your code - make it faster. To get the biggest speed increase you should
[focus on the slowest part of your program](https://en.wikipedia.org/wiki/Amdahl%27s_law).
Pyinstrument helps you find it!

> ☕️ Not sure where to start? Check out this [video tutorial from calmcode.io](https://calmcode.io/pyinstrument/introduction.html)!

<!-- MARK intro end -->

Installation
------------

<!-- MARK installation start -->

    pip install pyinstrument

Pyinstrument supports Python 3.8+.

<!-- MARK installation end -->

> To run Pyinstrument from a git checkout, there's a build step.
Take a look at [Contributing](#contributing) for more info.

Documentation
-------------

To learn how to use pyinstrument, or to check the reference, head to the
[documentation](https://pyinstrument.readthedocs.io/).

Known issues
------------

- Profiling code inside a Docker container can cause some strange results,
  because the gettimeofday syscall that pyinstrument uses is slow in that
  environment. See [#83](https://github.com/joerick/pyinstrument/issues/83)
- When using `pyinstrument script.py` where `script.py` contains a class
  serialized with `pickle`, you might encounter errors because the
  serialisation machinery doesn't know where `__main__` is. [See this issue
  for workarounds](https://github.com/joerick/pyinstrument/issues/109#issuecomment-722276263)

Changelog
---------

### v5.1.2

_4 January 2026_

-   Adds the ability to customize description using CLI option `--target-description` (#408)
-   You can set the interval for the Django middleware using the PYINSTRUMENT_INTERVAL option (#416)
-   HTMLRenderer can now run preprocessors on the input, to manipulate the call tree before writing to HTML (#403)
-   Fix a bug where mismatched start/stops can produce "call stack without an active session" errors (#406)
-   Limit sample count for the HTML renderer to ensure the browser can load the sample (#407)

### v5.1.1

_12 August 2025_

-   Fix some memory leaks in the low-level C extension (#394)

### v5.1.0

_10 August 2025_

-   Precision of printed durations now adapts to the interval of the profile. This allows you to see more detail when the interval, and hides unnecessary detail when the interval is large. (#390)
-   Adds an option to the Django middleware to customise the filename of saved profile runs using a callback (#393)
-   Adds an aiohttp.web example to the documentation (#389)

### v5.0.3

_2 July 2025_

-   Fix a bug where the HTML renderer would crash when the profile is empty (#377)

### v5.0.2

_24 May 2025_

-   Fix a bug that caused jupyter notebooks to continue to run after a profiled cell was interrupted with Ctrl-C (#373)
-   Fix a type annotation issue when using mypy and import pyinstrument (#373)

### v5.0.1

_23 January 2025_

-   Adds a Django option to customise the filename of saved profile runs (#339)
-   Improve the FastAPI integration docs (#355)
-   Include more options in the IPython magic (#350)

### v5.0.0

_11 October 2024_

Loads of improvements to the HTML renderer!

-   Timeline mode - see and zoom into an interactive linear timeline!

    ![timeline mode](docs/img/timeline.png)
-   HTML mode now has interactive options, rather than needing to set the upfront.
-   Streamlined the design of the HTML page header.
-   HTML Call stack view supports arrow key navigation.
-   The way ‘library’ code is detected has been changed. Previously, if the string ‘/lib/’ occurred in the file path, that was considered library code (and collapsed by default). Now, pyinstrument captures the paths of the Python install and any active virtualenv/conda env at profile time. Files that are stored there are considered library. That should give fewer false positives.
-   Calls to profiler.start() can now pass a target_description parameter, which is displayed in the profile readout.

Check my [blog post](https://joerick.me/posts/2024/10/3/pyinstrument-5/) for more info on the new features.

### v4.7.3

_6 September 2024_

-   Fix a bug introduced in 4.7.0 which would cause the profiler to crash when profiling code with unusual locals, notably some pytest extensions (#332)
-   Fix a bug that causes pyinstrument to fail to import packages like `glom` on Python 3.12 or later, which mutate the locals() dict. (#336)
-   Fix a bug that caused a `UnicodeDecodeError` on some platforms (#330)
-   Fix a DivideByZero error that occurs in some situations
-   The IPython integration takes greater step to ensure a clean profile output, by ensuring internal frames are trimmed before printing. (#321)

### v4.7.2

_5 August 2024_

-   Add CPython 3.13 wheels
-   Fix a bug that caused the HTML output to fail to render in some browser contexts (#328)

### v4.7.1

_2 August 2024_

-   Fix issue with PyPI upload

### v4.7.0

_1 August 2024_

-   Adds a new, convenient API for [profiling chunks of Python code](https://pyinstrument.readthedocs.io/en/stable/guide.html#profile-a-specific-chunk-of-code)! You can now profile simply using a `with` block, or a function/method decorator. This will profile the code and print a short readout into the terminal. (#327)
-   Adds new, lower overhead timing options. Pyinstrument calls timers on every Python function call, which is fine on systems with fast timing available, but it adds significant overhead on systems that require a syscall for each, such as some Docker environments. Pyinstrument will now detect slow timers present a warning with two choices. You can enable a 'timing thread', which offloads the timing workload from the profiled thread, or, if you're happy with lower resolution, you can opt to use a 'coarse' timer, which is provided on some Linux systems. (#273)
-   Alt-click rows in the HTML output to collapse/expand the whole tree (#325)
-   Adds a `flat` argument to the console output, to present a flat list of functions (#294)
-   Adds a Litestar example config and docs (#284)
-   Preliminary Python 3.13 support (#322)

### v4.6.2

_26 January 2024_

-   Fixes a bug with the pstats renderer, where additional frames could be seen in the output. (#287)
-   Adds `show_all` option to [Profiler.output_html](https://pyinstrument.readthedocs.io/en/stable/reference.html#pyinstrument.Profiler.output_html)

### v4.6.1

_8 November 2023_

-   Fixes a bug with unwanted variable expansion in the IPython magics `%pyinstrument` (#278)

### v4.6.0

_12 October 2023_

-   Adds a feature `-c`, which allows profiling code directly from the command line, like `python -c`. (#271)
-   Adds a convenience method [`Profiler.write_html`](https://pyinstrument.readthedocs.io/en/stable/reference.html#pyinstrument.Profiler.write_html), for writing HTML output to a file directly. (#266)

### v4.5.3

_7 September 2023_

-   Fix a problem in the packaging process that prevented upload to PyPI

### v4.5.2

_1 September 2023_

-   Show the program name in the header of the HTML output (#260)
-   Improve program name capture through resilience to other programs modifying sys.argv (#258)
-   Add support for Python 3.12 (#246)

### v4.5.1

_22 July 2023_

-   Fix a bug that caused `[X frames hidden]` in the output when frames were deleted due to `__tracebackhide__` (#255)
-   Fix a bug causing built-in code to display the filepath `None` in the console output (#254)
-   Some docs improvements (#251)

### v4.5.0

_5 June 2023_

-   Adds a flat mode to the console renderer, which can be enabled by passing `-p flat` on the command line. This mode shows the heaviest frame as measured by self-time, which can be useful in some codebases. (#240)
-   Adds the ability to save `pstats` files. This is the file format used by cprofile in the stdlib. It's less detailed than pyinstrument profiles, but it's compatible with more tools. (#236)
-   Fixes a detail of the `--show-all` option - pyinstrument will no longer remove Python-internal frames when this option is supplied. (#239)
-   Internally to the HTML renderer, it now uses Svelte to render the frontend, meaning profile HTML files bundle less javascript and so are smaller. (#222)

### v4.4.0

_5 November 2022_

-   Adds the class name to methods in the console & HTML outputs (#203)
-   Fix a bug that caused pyinstrument machinery to appear at the start of a profile (#215)
-   Frames that set a `__traceback_hide__` local variable will now be removed from the output (#217)
-   Jupyter/IPython magic now supports async/await, if you run with a `--async_mode=enabled` flag. (#212)
-   Fix a crash when more than one root frame is captured in a thread - this can happen with gevent.
-   A big refactor to the backend, allowing more than just static information to be captured. This currently is just powering the class name feature, but more is to come!

### v4.3.0

_21 August 2022_

-   Adds buttons in the HTML output to switch between absolute and
    proportional (percentage) time.
-   Adds a command line flag `--interval` (seconds, default 0.001) to change the interval that
    pyinstrument samples a program. This is useful for long-running programs,
    where increasing the interval reduces the memory overhead.
-   Includes wheels for CPython 3.11.

### v4.2.0

-   Adds a command-line option `-p` `--render-option` that allows arbitrary
    setting of render options. This lets you set options like
    `filter_threshold` from the command line, by doing something like
    `pyinstrument -p processor_options.filter_threshold=0`.

    Here's the help output for the option:
    ```
      -p RENDER_OPTION, --render-option=RENDER_OPTION
                        options to pass to the renderer, in the format
                        'flag_name' or 'option_name=option_value'. For
                        example, to set the option 'time', pass '-p
                        time=percent_of_total'. To pass multiple options, use
                        the -p option multiple times. You can set processor
                        options using dot-syntax, like '-p
                        processor_options.filter_threshold=0'. option_value is
                        parsed as a JSON value or a string.
    ```
-   Adds the ability to view times in the console output as percentages,
    rather than absolute times. Use the ConsoleRenderer option
    `time='percent_of_total'`, or on the command line, use `-p`, like
    `pyinstrument -p time=percent_of_total`.
-   Adds command line options for loading and saving pyinstrument sessions.
    You can save the raw data for a pyinstrument session with `-r session`,
    like `pyinstrument -r session -o session.pyisession myscript.py`. Loading
    is via `--load`, e.g. `pyinstrument --load session.pyisession`.
-   Command line output format is inferred from the `-o` output file
    extension. So if you do `pyinstrument -o profile.html myscript.py`, you
    don't need to supply `-r html`, pyinstrument will automatically use the
    HTML renderer. Or if you do
    `pyinstrument -o profile.pyisession myscript.py`, it will save a raw
    session object.
-   Adds [usage examples for FastAPI and pytest](https://pyinstrument.readthedocs.io/en/stable/guide.html#profile-a-web-request-in-fastapi) to the documentation.
-   Fixes a bug causing NotImplementedError when using `async_mode=strict`.
-   Adds support for Python 3.11

### v4.1.1

-   Fixed an issue causing PYINSTRUMENT_PROFILE_DIR_RENDERER to output the
    wrong file extension when used with the speedscope renderer.

### v4.1.0

-   You can now use pyinstrument natively in an IPython notebook! Just use
    `%load_ext pyinstrument` at the top of your notebook, and then
    `%%pyinstrument` in the cell you want to profile.
-   Added support for the [speedscope](https://www.speedscope.app/) format.
    This provides a way to view interactive flamecharts using pyinstrument. To
    use, profile with `pyinstrument -r speedscope`, and upload to the
    speedscope web app.
-   You can now configure renderers for the Django middleware file output,
    using the `PYINSTRUMENT_PROFILE_DIR_RENDERER` option.
-   Added wheels for Linux aarch64 (64-bit ARM).

### v4.0.4

-   Fix a packaging issue where a package called 'test' was installed
    alongside pyinstrument
-   Use more modern C APIs to resolve deprecation warnings on Python 3.10.
-   Minor docs fixes

### v4.0.3

-   CPython 3.10 support
-   Improve error messages when trying to use Profiler from multiple threads
-   Fix crash when rendering sessions that contain a module in a FrameGroup

### v4.0.2

-   Fix some packaging issues

### v4.0.0

-   Async support! Pyinstrument now detects when an async task hits an await,
    and tracks time spent outside of the async context under this await.

    So, for example, here's a simple script with an async task that does a
    sleep:

    ```python
    import asyncio
    from pyinstrument import Profiler

    async def main():
        p = Profiler(async_mode='disabled')

        with p:
            print('Hello ...')
            await asyncio.sleep(1)
            print('... World!')

        p.print()

    asyncio.run(main())
    ```

    Before Pyinstrument 4.0.0, we'd see only time spent in the run loop, like
    this:

    ```
      _     ._   __/__   _ _  _  _ _/_   Recorded: 18:33:03  Samples:  2
     /_//_/// /_\ / //_// / //_'/ //     Duration: 1.006     CPU time: 0.001
    /   _/                      v3.4.2

    Program: examples/async_example_simple.py

    1.006 _run_once  asyncio/base_events.py:1784
    └─ 1.005 select  selectors.py:553
          [3 frames hidden]  selectors, <built-in>
             1.005 kqueue.control  <built-in>:0
    ```

    Now, with pyinstrument 4.0.0, we get:

          _     ._   __/__   _ _  _  _ _/_   Recorded: 18:30:43  Samples:  2
         /_//_/// /_\ / //_// / //_'/ //     Duration: 1.007     CPU time: 0.001
        /   _/                      v4.0.0

        Program: examples/async_example_simple.py

        1.006 main  async_example_simple.py:4
        └─ 1.005 sleep  asyncio/tasks.py:641
              [2 frames hidden]  asyncio
                 1.005 [await]

    For more information, check out the [async profiling documentation] and
    the [Profiler.async_mode] property.

-   Pyinstrument has a [documentation site], including full Python API docs!

[async profiling documentation]: https://pyinstrument.readthedocs.io/en/stable/how-it-works.html#async-profiling
[Profiler.async_mode]: https://pyinstrument.readthedocs.io/en/stable/reference.html#pyinstrument.Profiler.async_mode
[documentation site]: https://pyinstrument.readthedocs.io

### v3.4.2

- Fix a bug that caused `--show`, `--show-regex`, `--show-all` to be ignored
  on the command line.

### v3.4.1

- Under-the-hood modernisation

### v3.4.0

- Added `timeline` option (boolean) to Profiler methods `output_html()` and
  `open_in_browser()`.

### v3.3.0

- Fixed issue with `pyinstrument -m module`, where pyinstrument wouldn't find
  modules in the current directory.
- Dropped support for Python 2.7 and 3.5. Old versions will remain available
  on PyPI, and pip should choose the correct one automatically.

### v3.2.0

- Added the ability to track time in C functions. Minor note - Pyinstrument
  will record time spent C functions as 'leaf' functions, due to a limitation
  in how Python records frames. `Python -> C -> Python` is recorded as
  `Python -> Python`, but `Python -> Python -> C` will be attributed correctly.
  (#103)

### v3.1.2

- Fix `<__array_function__ internals>` frames appearing as app code in reports

### v3.1.1

- Added support for timeline mode on HTML and JSON renderers
- Released as a tarball as well as a universal wheel

### v3.1.0

- Added PYINSTRUMENT_SHOW_CALLBACK option on the Django middleware to
  add a condition to showing the profile (could be used to run pyinstrument
  on a live server!)
- Fixed bug in the Django middleware where file would not be written because
  of a unicode error

### v3.0.3

- Fixed bug with the Django middleware on Windows where profiling would fail
  because we were trying to put an illegal character '?' in the profile path.
  (#66)

### v3.0.2

- Add `--show` and `--show-regex` options, to mark certain files to be
  displayed. This helps to profile inside specific modules, while hiding
  others. For example, `pyinstrument --show '*/sympy/*' script.py`.

### v3.0.1

- Fix #60: pass all arguments after -m module_name to the called module
- Fix crash during HTML/JSON output when no frames were captured.

### v3.0.0

- Pyinstrument will now hide traces through libraries that you're using by default. So instead of showing you loads of frames going through the internals of something external e.g. urllib, it lets you focus on your code.

    | Before | After |
    | --- | ---
    | ![image](https://user-images.githubusercontent.com/1244307/50928250-1e50db00-1452-11e9-9164-6050a3c950ed.png) | ![image](https://user-images.githubusercontent.com/1244307/50928326-4c361f80-1452-11e9-91e8-cea735584806.png) |

  To go back to the old behaviour, use `--show-all` on the command line.

- 'Entry' frames of hidden groups are shown, so you know which call is the problem
- Really slow frames in the groups are shown too, e.g. the 'read' call on the socket
- Application code is highlighted in the console
- Additional metrics are shown at the top of the trace - timestamp, number of samples, duration, CPU time
- Hidden code is controlled by the `--hide` or `--hide-regex` options - matching on the path of the code files.
  ```
    --hide=EXPR           glob-style pattern matching the file paths whose
                          frames to hide. Defaults to '*/lib/*'.
    --hide-regex=REGEX    regex matching the file paths whose frames to hide.
                          Useful if --hide doesn't give enough control.
  ```

- Outputting a timeline is supported from the command line.

  ```
    -t, --timeline        render as a timeline - preserve ordering and don't
                          condense repeated calls
  ```

- Because there are a few rendering options now, you can load a previous profiling session using `--load-prev` - pyinstrument keeps the last 10 sessions.

- Hidden groups can also call back into application code, that looks like this:

    ![image](https://user-images.githubusercontent.com/1244307/50928591-fca42380-1452-11e9-8320-3c851cf5210e.png)

- (internal) When recording timelines, frame trees are completely linear now, allowing
  for the creation of super-accurate frame charts.

- (internal) The HTML renderer has been rewritten as a Vue.js app. All the console improvements apply to the HTML output too, plus it's interactive.

- (internal) A lot of unit and integration tests added!

Yikes! See #49 for the gory details. I hope you like it.

### v2.3.0

-   Big refactor!
    -   `Recorders` have been removed. The frame recording is now internal to the `Profiler` object.
        This means the 'frame' objects are more general-purpose, which paves the way for...
    -   Processors! These are functions that mutate the tree to sculpt the output.
        They are used by the renderers to filter the output to the correct form. Now, instead of
        a time-aggregating recorder, the profiler just uses timeline-style recording (this is
        lower-overhead anyway) and the aggregation is done as a processing step.
    -   The upshot of this is that it's now way easier to alter the tree to filter stuff out, and
        do more advanced things like combining frames that we don't care about. More features to
        come that use this in v3.0!
-   Importlib frames are removed - you won't see them at all. Their children are retained, so
    imports are just transparent.
-   Django profile file name is now limited to a hundred of characters (#50)
-   Fix bug with --html option (#53)
-   Add `--version` command line option

### v2.2.1

-   Fix crash when using on the command line.

### v2.2.0

-   Added support for JSON output. Use `pyinstrument --renderer=json scriptfile.py`.
    [PR](https://github.com/joerick/pyinstrument/pull/46)
-   [@iddan](https://github.com/iddan) has put together an
    [interactive viewer](https://python-flame-chart.netlify.com/) using the JSON output!

    ![image](https://user-images.githubusercontent.com/1244307/44622790-3ca9a600-a8b8-11e8-8dc2-f33ce433c03d.png)

-   When running `pyinstrument --html` and you don't pipe the output to a file, pyinstrument will write the console output to a temp file and open that in a browser.

### v2.1.0

-   Added support for running modules with pyinstrument via the command line. The new syntax
    is the `-m` flag e.g. `pyinstrument -m module_name`! [PR](https://github.com/joerick/pyinstrument/pull/45#pullrequestreview-143383557)

### v2.0.4

-   Fix crashes due to multi-threaded use of pyinstrument. The fix is in the C extension,
    over at https://github.com/joerick/pyinstrument_cext/pull/3

### v2.0.3

-   Pyinstrument can now be used in a `with` block.

    For example:

		profiler = pyinstrument.Profiler()
		with profiler:
		    # do some work here...
		print(profiler.output_text())
-   Middleware fix for older versions of Django

### v2.0.2

-   Fix for max recursion error when used to profile programs with a lot of frames on the stack.

### v2.0.1

-   Ensure license is included in the sdist.

### v2.0.0

-   **Pyinstrument uses a new profiling mode**. Rather than using
    signals, pyintrument uses a new statistical profiler built on
    PyEval_SetProfile. This means no more main thread restriction, no more
    IO errors when using Pyinstrument, and no need for a separate more
    'setprofile' mode!

-   **Renderers**. Users can customize Pyinstrument to use alternative renderers
    with the `renderer` argument on `Profiler.output()`, or using the `--renderer`
    argument on the command line.

-   **Recorders**. To support other use cases of Pyinstrument (e.g. flame charts),
    pyinstrument now has a 'timeline' recorder mode. This mode records captured
    frames in a linear way, so the program execution can be viewed on a
    timeline.

### v0.13

-   `pyinstrument` command. You can now profile python scripts from the shell
    by running `$ pyinstrument script.py`. This is now equivalent to
    `python -m pyinstrument`. Thanks @asmeurer!

### v0.12

-   Application code is highlighted in HTML traces to make it easier to spot

-   Added `PYINSTRUMENT_PROFILE_DIR` option to the Django interface, which
    will log profiles of all requests to a file the specified folder. Useful
    for profiling API calls.

-   Added `PYINSTRUMENT_USE_SIGNAL` option to the Django interface, for use
    when signal mode presents problems.

Contributing
------------

To setup a dev environment:

    virtualenv --python=python3 env
    . env/bin/activate
    pip install --upgrade pip
    pip install -r requirements-dev.txt
    pre-commit install --install-hooks

To get some sample output:

    pyinstrument examples/demo_scripts/wikipedia_article_word_count.py

To run the tests:

    pytest

To run linting checks locally:

    pre-commit run --all-files

Some of the pre-commit checks, like `isort` or `black`, will auto-fix
the problems they find. So if the above command returns an error, try
running it again, it might succeed the second time :)

Running all the checks can be slow, so you can also run checks
individually, e.g., to format source code that fails `isort` or `black`
checks:

    pre-commit run --all-files isort
    pre-commit run --all-files black

To diagnose why `pyright` checks are failing:

    pre-commit run --all-files pyright

### The HTML renderer Vue.js app

The HTML renderer works by embedding a JSON representation of the sample with
a Javascript 'bundle' inside an HTML file that can be viewed in any web
browser.

To edit the html renderer style, do:

    cd html_renderer
    npm ci
    npm run serve

When launched without a top-level `window.profileSession` object, it will
fetch a sample profile so you can work with it.

To compile the JS app and bundle it back into the pyinstrument python tool:

    bin/build_js_bundle.py [--force]


================================================
FILE: bin/build_js_bundle.py
================================================
#!/usr/bin/env python3

import argparse
import os
import shutil
import subprocess
import sys

HTML_RENDERER_DIR = "html_renderer"
JS_BUNDLE = "pyinstrument/renderers/html_resources/app.js"
CSS_BUNDLE = "pyinstrument/renderers/html_resources/app.css"

DOCS_PREVIEW_DIR = "docs/_static/preview"

if __name__ == "__main__":
    # chdir to root of repo
    os.chdir(os.path.dirname(__file__))
    os.chdir("..")

    parser = argparse.ArgumentParser()
    parser.add_argument("--force", action="store_true", help="force a rebuild of the bundle")

    args = parser.parse_args()

    js_source_mtime = 0
    for dirpath, dirnames, filenames in os.walk(HTML_RENDERER_DIR):
        if "node_modules" in dirnames:
            dirnames.remove("node_modules")

        for filename in filenames:
            file = os.path.join(dirpath, filename)
            js_source_mtime = max(js_source_mtime, os.path.getmtime(file))

    js_bundle_is_up_to_date = (
        os.path.exists(JS_BUNDLE) and os.path.getmtime(JS_BUNDLE) >= js_source_mtime
    )

    if js_bundle_is_up_to_date and not args.force:
        print("Bundle up-to-date")
        sys.exit(0)

    if subprocess.call("npm --version", shell=True) != 0:
        raise RuntimeError("npm is required to build the HTML renderer.")

    subprocess.check_call("npm ci", cwd=HTML_RENDERER_DIR, shell=True)
    subprocess.check_call("npm run build", cwd=HTML_RENDERER_DIR, shell=True)

    shutil.copyfile(HTML_RENDERER_DIR + "/dist/pyinstrument-html.iife.js", JS_BUNDLE)
    shutil.copyfile(HTML_RENDERER_DIR + "/dist/style.css", CSS_BUNDLE)

    subprocess.check_call("npm run build -- --mode preview", cwd=HTML_RENDERER_DIR, shell=True)
    shutil.rmtree(DOCS_PREVIEW_DIR, ignore_errors=True)
    shutil.copytree(HTML_RENDERER_DIR + "/dist", DOCS_PREVIEW_DIR)


================================================
FILE: bin/bump_version.py
================================================
#!/usr/bin/env python3


from __future__ import annotations

import glob
import os
import subprocess
import sys
import urllib.parse
from pathlib import Path

import click
from packaging.version import InvalidVersion, Version

import pyinstrument

config = [
    # file path, version find/replace format
    ("setup.py", 'version="{}"'),
    ("pyinstrument/__init__.py", '__version__ = "{}"'),
    ("docs/conf.py", 'release = "{}"'),
]

RED = "\u001b[31m"
GREEN = "\u001b[32m"
OFF = "\u001b[0m"


@click.command()
def bump_version() -> None:
    current_version = pyinstrument.__version__

    try:
        commit_date_str = subprocess.run(
            [
                "git",
                "show",
                "--no-patch",
                "--pretty=format:%ci",
                f"v{current_version}^{{commit}}",
            ],
            check=True,
            capture_output=True,
            encoding="utf8",
        ).stdout
        cd_date, cd_time, cd_tz = commit_date_str.split(" ")

        url_opts = urllib.parse.urlencode({"q": f"is:pr merged:>{cd_date}T{cd_time}{cd_tz}"})
        url = f"https://github.com/joerick/pyinstrument/pulls?{url_opts}"

        print(f"PRs merged since last release:\n  {url}")
        print()
    except subprocess.CalledProcessError as e:
        print(e)
        print("Failed to get previous version tag information.")

    git_changes_result = subprocess.run(["git diff-index --quiet HEAD --"], shell=True)
    repo_has_uncommitted_changes = git_changes_result.returncode != 0

    if repo_has_uncommitted_changes:
        print("error: Uncommitted changes detected.")
        sys.exit(1)

    # fmt: off
    print(              'Current version:', current_version)  # noqa
    new_version = input('    New version: ').strip()
    # fmt: on

    try:
        Version(new_version)
    except InvalidVersion:
        print("error: This version doesn't conform to PEP440")
        print("       https://www.python.org/dev/peps/pep-0440/")
        sys.exit(1)

    actions = []

    for path_pattern, version_pattern in config:
        paths = [Path(p) for p in glob.glob(path_pattern)]

        if not paths:
            print(f"error: Pattern {path_pattern} didn't match any files")
            sys.exit(1)

        find_pattern = version_pattern.format(current_version)
        replace_pattern = version_pattern.format(new_version)
        found_at_least_one_file_needing_update = False

        for path in paths:
            contents = path.read_text(encoding="utf8")
            if find_pattern in contents:
                found_at_least_one_file_needing_update = True
                actions.append(
                    (
                        path,
                        find_pattern,
                        replace_pattern,
                    )
                )

        if not found_at_least_one_file_needing_update:
            print(f'''error: Didn't find any occurrences of "{find_pattern}" in "{path_pattern}"''')
            sys.exit(1)

    print()
    print("Here's the plan:")
    print()

    for action in actions:
        path, find, replace = action
        print(f"{path}  {RED}{find}{OFF} → {GREEN}{replace}{OFF}")

    print(f"Then commit, and tag as v{new_version}")

    answer = input("Proceed? [y/N] ").strip()

    if answer != "y":
        print("Aborted")
        sys.exit(1)

    for path, find, replace in actions:
        contents = path.read_text(encoding="utf8")
        contents = contents.replace(find, replace)
        path.write_text(contents, encoding="utf8")

    print("Files updated. If you want to update the changelog as part of this")
    print("commit, do that now.")
    print()

    while input('Type "done" to continue: ').strip().lower() != "done":
        pass

    subprocess.run(
        [
            "git",
            "commit",
            "--all",
            f"--message=Bump version: v{new_version}",
        ],
        check=True,
    )

    subprocess.run(
        [
            "git",
            "tag",
            "--annotate",
            f"--message=v{new_version}",
            f"v{new_version}",
        ],
        check=True,
    )

    print("Done.")


if __name__ == "__main__":
    os.chdir(Path(__file__).parent.parent.resolve())
    bump_version()


================================================
FILE: bin/create_demo_data.py
================================================
#!/usr/bin/env python3

import os
import subprocess
import sys
from glob import glob
from pathlib import Path

ROOT_DIR = Path(__file__).parent.parent


def main():
    os.chdir(ROOT_DIR)
    for script in glob(str("examples/demo_scripts/*.py")):
        subprocess.run([sys.executable, "bin/create_sample_json.py", script], check=True)


if __name__ == "__main__":
    main()


================================================
FILE: bin/create_sample_json.py
================================================
#!/usr/bin/env python3
import argparse
import subprocess
import sys
from pathlib import Path

ROOT_DIR = Path(__file__).parent.parent
OUTPUT_DIR = ROOT_DIR / "html_renderer" / "demo-data"


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("SCRIPT", help="The script to run to produce the sample", type=Path)
    args = parser.parse_args()
    script_file: Path = args.SCRIPT
    output_file = (OUTPUT_DIR / script_file.with_suffix("").name).with_suffix(".json")

    result = subprocess.run(
        [
            "pyinstrument",
            "-o",
            str(output_file),
            "-r",
            "pyinstrument.renderers.html.JSONForHTMLRenderer",
            script_file,
        ]
    )

    if result.returncode != 0:
        return result.returncode

    print(f"Sample JSON written to {output_file}")


if __name__ == "__main__":
    sys.exit(main())


================================================
FILE: bin/serve_docs
================================================
#!/bin/sh

cd "$(dirname "$0")"
cd ..

exec make -C docs livehtml


================================================
FILE: docs/Makefile
================================================
# Minimal makefile for Sphinx documentation
#

# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS    ?=
SPHINXBUILD   ?= sphinx-build
SOURCEDIR     = .
BUILDDIR      = _build

# Put it first so that "make" without argument is like "make help".
help:
	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile livehtml

livehtml:
	sphinx-autobuild -a --watch ../pyinstrument "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)


================================================
FILE: docs/_static/preview/assets/django_template_render-CIkNzFIy.js
================================================
const e={start_time:1727459143227702e-6,duration:.1257030963897705,min_interval:.001,max_interval:.001,sample_count:117,start_call_stack:["MainThread\0<thread>\x008219610944","<module>\0/Users/joerick/Projects/pyinstrument/env/bin/pyinstrument\x001l8","main\0/Users/joerick/Projects/pyinstrument/pyinstrument/__main__.py\x0029l379"],target_description:"Program: examples/demo_scripts/django_template_render.py",cpu_time:.116475,sys_path:["examples/demo_scripts","/Library/Frameworks/Python.framework/Versions/3.10/lib/python310.zip","/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10","/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/lib-dynload","/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages","__editable__.pyinstrument-4.6.2.finder.__path_hook__"],sys_prefixes:["/Library/Frameworks/Python.framework/Versions/3.10","/Users/joerick/Projects/pyinstrument/env"]},i={identifier:"main\0/Users/joerick/Projects/pyinstrument/pyinstrument/__main__.py\x0029",time:.125509,attributes:{l383:.1255092500068713},children:[{identifier:"<module>\0<string>\x001",time:.125509,attributes:{l1:.1255092500068713},children:[{identifier:"run_path\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py\x00260",time:.125509,attributes:{l289:.1255092500068713},children:[{identifier:"_run_module_code\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py\x0089",time:.125509,attributes:{l96:.1255092500068713},children:[{identifier:"_run_code\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/runpy.py\x0063",time:.125509,attributes:{l86:.1255092500068713},children:[{identifier:"<module>\0examples/demo_scripts/django_template_render.py\x001",time:.125509,attributes:{l5:.0033853330241981894,l11:.0314499169762712,l12:.016375583014450967,l49:.07429841699195094},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.051211,attributes:{l1027:.051210833014920354},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.051211,attributes:{l1006:.03483525000046939,l992:.016375583014450967},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.034835,attributes:{l688:.03483525000046939},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.034835,attributes:{cSourceFileLoader:.03483525000046939,l883:.03483525000046939},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.034835,attributes:{l241:.03483525000046939},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/__init__.py\x001",time:.003385,attributes:{l1:.0033853330241981894},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.003385,attributes:{l1027:.0033853330241981894},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.003385,attributes:{l992:.0010544170218054205,l1006:.002330916002392769},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001054,attributes:{l241:.0010544170218054205},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001054,attributes:{l1027:.0010544170218054205},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001054,attributes:{l1002:.0010544170218054205},children:[{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:.001054,attributes:{l945:.0010544170218054205},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001431",time:.001054,attributes:{cPathFinder:.0010544170218054205,l1439:.0010544170218054205},children:[{identifier:"_get_spec\0<frozen importlib._bootstrap_external>\x001399",time:.001054,attributes:{cPathFinder:.0010544170218054205,l1411:.0010544170218054205},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001536",time:.001054,attributes:{cFileFinder:.0010544170218054205,l1548:.0010544170218054205},children:[{identifier:"_fill_cache\0<frozen importlib._bootstrap_external>\x001587",time:.001054,attributes:{cFileFinder:.0010544170218054205,l1591:.0010544170218054205},children:[{identifier:"listdir\0<built-in>\x000",time:.001054,attributes:{},children:[{identifier:"[self]",time:.001054,attributes:{},children:[]}]}]}]}]}]}]}]}]}]},{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002331,attributes:{l688:.002330916002392769},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002331,attributes:{cSourceFileLoader:.002330916002392769,l883:.002330916002392769},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002331,attributes:{l241:.002330916002392769},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/version.py\x001",time:.002331,attributes:{l1:.0013325829932000488,l7:.00099833300919272},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002331,attributes:{l1027:.002330916002392769},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002331,attributes:{l1006:.002330916002392769},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002331,attributes:{l688:.002330916002392769},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002331,attributes:{cSourceFileLoader:.002330916002392769,l883:.002330916002392769},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002331,attributes:{l241:.002330916002392769},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/datetime.py\x001",time:.001333,attributes:{l2506:.0013325829932000488},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001333,attributes:{l1027:.0013325829932000488},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001333,attributes:{l1006:.0013325829932000488},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001333,attributes:{l674:.0013325829932000488},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.001333,attributes:{l571:.0013325829932000488},children:[{identifier:"create_module\0<frozen importlib._bootstrap_external>\x001174",time:.001333,attributes:{cExtensionFileLoader:.0013325829932000488,l1176:.0013325829932000488},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001333,attributes:{l241:.0013325829932000488},children:[{identifier:"create_dynamic\0<built-in>\x000",time:.001333,attributes:{},children:[{identifier:"[self]",time:.001333,attributes:{},children:[]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/regex_helper.py\x001",time:998e-6,attributes:{l342:.00099833300919272},children:[{identifier:"[self]",time:998e-6,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/conf/__init__.py\x001",time:.03145,attributes:{l18:.008104334003292024,l19:.023345582972979173},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.03145,attributes:{l1027:.0314499169762712},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.03145,attributes:{l1002:.0048556249821558595,l1006:.026594291994115338},children:[{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:.004856,attributes:{l945:.0048556249821558595},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001431",time:.004856,attributes:{cPathFinder:.0048556249821558595,l1439:.0048556249821558595},children:[{identifier:"_get_spec\0<frozen importlib._bootstrap_external>\x001399",time:.004856,attributes:{cPathFinder:.0048556249821558595,l1411:.0048556249821558595},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001536",time:.004856,attributes:{cFileFinder:.0048556249821558595,l1548:.0048556249821558595},children:[{identifier:"_fill_cache\0<frozen importlib._bootstrap_external>\x001587",time:.004856,attributes:{cFileFinder:.0048556249821558595,l1591:.003862916986690834,l1616:.0009927079954650253},children:[{identifier:"listdir\0<built-in>\x000",time:.003863,attributes:{},children:[{identifier:"[self]",time:.003863,attributes:{},children:[]}]},{identifier:"<setcomp>\0<frozen importlib._bootstrap_external>\x001616",time:993e-6,attributes:{l1616:.0009927079954650253},children:[{identifier:"[self]",time:993e-6,attributes:{},children:[]}]}]}]}]}]}]},{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.026594,attributes:{l674:.001022917014779523,l688:.025571374979335815},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.001023,attributes:{l577:.001022917014779523},children:[{identifier:"_init_module_attrs\0<frozen importlib._bootstrap>\x00492",time:.001023,attributes:{l558:.001022917014779523},children:[{identifier:"[self]",time:.001023,attributes:{},children:[]}]}]},{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.025571,attributes:{cSourceFileLoader:.025571374979335815,l879:.0012274579785298556,l883:.02434391700080596},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001227,attributes:{cSourceFileLoader:.0012274579785298556,l975:.0012274579785298556},children:[{identifier:"get_data\0<frozen importlib._bootstrap_external>\x001070",time:.001227,attributes:{cSourceFileLoader:.0012274579785298556,l1073:.0012274579785298556},children:[{identifier:"open_code\0<built-in>\x000",time:.001227,attributes:{},children:[{identifier:"[self]",time:.001227,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.024344,attributes:{l241:.02434391700080596},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/exceptions.py\x001",time:998e-6,attributes:{l61:.000998334027826786},children:[{identifier:"[self]",time:998e-6,attributes:{},children:[]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/deprecation.py\x001",time:.023346,attributes:{l1:.02134095798828639,l5:.002004624984692782},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.023346,attributes:{l1027:.023345582972979173},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.023346,attributes:{l1006:.023345582972979173},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.023346,attributes:{l688:.023345582972979173},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.023346,attributes:{cSourceFileLoader:.023345582972979173,l883:.023345582972979173},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.023346,attributes:{l241:.023345582972979173},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/__init__.py\x001",time:.021341,attributes:{l8:.019340665981872007,l18:.0010017500026151538,l42:.0009985420037992299},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.021341,attributes:{l1027:.02134095798828639},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.021341,attributes:{l1006:.02134095798828639},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.021341,attributes:{l688:.02134095798828639},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.021341,attributes:{cSourceFileLoader:.02134095798828639,l883:.020339207985671237,l879:.0010017500026151538},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.019341,attributes:{l241:.019340665981872007},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py\x001",time:.019341,attributes:{l18:.005713040998671204,l23:.003007333987625316,l34:.0055455410038121045,l39:.0009991670085582882,l40:.0020012079912703484,l44:.0010601670073810965,l48:.00101420798455365},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.014266,attributes:{l1027:.014265915990108624},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.014266,attributes:{l1006:.013266791007481515,l1002:.0009991249826271087},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.005713,attributes:{l688:.005713040998671204},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.005713,attributes:{cSourceFileLoader:.005713040998671204,l883:.005713040998671204},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.005713,attributes:{l241:.005713040998671204},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/concurrent/futures/__init__.py\x001",time:.005713,attributes:{l8:.005713040998671204},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.005713,attributes:{l1027:.005713040998671204},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.005713,attributes:{l1006:.005713040998671204},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.005713,attributes:{l688:.005713040998671204},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.005713,attributes:{cSourceFileLoader:.005713040998671204,l879:.0010118329955730587,l883:.004701208003098145},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001012,attributes:{cSourceFileLoader:.0010118329955730587,l975:.0010118329955730587},children:[{identifier:"get_data\0<frozen importlib._bootstrap_external>\x001070",time:.001012,attributes:{cSourceFileLoader:.0010118329955730587,l1073:.0010118329955730587},children:[{identifier:"open_code\0<built-in>\x000",time:.001012,attributes:{},children:[{identifier:"[self]",time:.001012,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.004701,attributes:{l241:.004701208003098145},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/concurrent/futures/_base.py\x001",time:.004701,attributes:{l7:.004701208003098145},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.004701,attributes:{l1027:.004701208003098145},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.004701,attributes:{l1006:.004701208003098145},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.004701,attributes:{l688:.004701208003098145},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.004701,attributes:{cSourceFileLoader:.004701208003098145,l883:.004701208003098145},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.004701,attributes:{l241:.004701208003098145},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/logging/__init__.py\x001",time:.004701,attributes:{l28:.0010013749997597188,l412:.002712499990593642,l1242:.0009873330127447844},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001001,attributes:{l1027:.0010013749997597188},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001001,attributes:{l1006:.0010013749997597188},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001001,attributes:{l688:.0010013749997597188},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001001,attributes:{cSourceFileLoader:.0010013749997597188,l883:.0010013749997597188},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001001,attributes:{l241:.0010013749997597188},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/string.py\x001",time:.001001,attributes:{l146:.0010013749997597188},children:[{identifier:"__init_subclass__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/string.py\x0069",time:.001001,attributes:{cTemplate:.0010013749997597188,l85:.0010013749997597188},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:.001001,attributes:{l251:.0010013749997597188},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:.001001,attributes:{l303:.0010013749997597188},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00783",time:.001001,attributes:{l788:.0010013749997597188},children:[{identifier:"parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00944",time:.001001,attributes:{l955:.0010013749997597188},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:.001001,attributes:{l444:.0010013749997597188},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:.001001,attributes:{l841:.0010013749997597188},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:.001001,attributes:{l444:.0010013749997597188},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:.001001,attributes:{l512:.0010013749997597188},children:[{identifier:"get\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00255",time:.001001,attributes:{cTokenizer:.0010013749997597188,l257:.0010013749997597188},children:[{identifier:"[self]",time:.001001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"PercentStyle\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/logging/__init__.py\x00412",time:.002712,attributes:{l417:.002712499990593642},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:.002712,attributes:{l251:.002712499990593642},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:.002712,attributes:{l305:.002712499990593642},children:[{identifier:"[self]",time:.002712,attributes:{},children:[]}]}]}]},{identifier:"__init__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/logging/__init__.py\x001231",time:987e-6,attributes:{c_StderrHandler:.0009873330127447844,l1235:.0009873330127447844},children:[{identifier:"__init__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/logging/__init__.py\x00872",time:987e-6,attributes:{c_StderrHandler:.0009873330127447844,l884:.0009873330127447844},children:[{identifier:"createLock\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/logging/__init__.py\x00902",time:987e-6,attributes:{c_StderrHandler:.0009873330127447844,l907:.0009873330127447844},children:[{identifier:"_register_at_fork_reinit_lock\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/logging/__init__.py\x00247",time:987e-6,attributes:{l252:.0009873330127447844},children:[{identifier:"[self]",time:987e-6,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:999e-6,attributes:{l945:.0009991249826271087},children:[{identifier:"find_spec\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/_distutils_hack/__init__.py\x0089",time:999e-6,attributes:{cDistutilsMetaFinder:.0009991249826271087,l95:.0009991249826271087},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]},{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.007554,attributes:{l688:.0075537500088103116},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.007554,attributes:{cSourceFileLoader:.0075537500088103116,l883:.006506417004857212,l879:.0010473330039530993},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002008,attributes:{l241:.002008209004998207},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/socket.py\x001",time:.002008,attributes:{l75:.0010014169965870678,l214:.0010067920084111392},children:[{identifier:"_convert_\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00536",time:.001001,attributes:{cIntEnum:.0010014169965870678,l563:.0010014169965870678},children:[{identifier:"__call__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00359",time:.001001,attributes:{cIntEnum:.0010014169965870678,l387:.0010014169965870678},children:[{identifier:"_create_\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00483",time:.001001,attributes:{cIntEnum:.0010014169965870678,l518:.0010014169965870678},children:[{identifier:"__new__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00180",time:.001001,attributes:{l290:.0010014169965870678},children:[{identifier:"[self]",time:.001001,attributes:{},children:[]}]}]}]}]},{identifier:"socket\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/socket.py\x00214",time:.001007,attributes:{l345:.0010067920084111392},children:[{identifier:"[self]",time:.001007,attributes:{},children:[]}]}]}]},{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001047,attributes:{cSourceFileLoader:.0010473330039530993,l1012:.0010473330039530993},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001047,attributes:{l672:.0010473330039530993},children:[{identifier:"loads\0<built-in>\x000",time:.001047,attributes:{},children:[{identifier:"[self]",time:.001047,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.004498,attributes:{l241:.004498207999859005},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ssl.py\x001",time:.004498,attributes:{l99:.0013646669976878911,l133:.00099833300919272,l183:.001000832999125123,l259:.001134374993853271},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001365,attributes:{l1027:.0013646669976878911},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001365,attributes:{l1006:.0013646669976878911},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001365,attributes:{l674:.0013646669976878911},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.001365,attributes:{l571:.0013646669976878911},children:[{identifier:"create_module\0<frozen importlib._bootstrap_external>\x001174",time:.001365,attributes:{cExtensionFileLoader:.0013646669976878911,l1176:.0013646669976878911},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001365,attributes:{l241:.0013646669976878911},children:[{identifier:"create_dynamic\0<built-in>\x000",time:.001365,attributes:{},children:[{identifier:"[self]",time:.001365,attributes:{},children:[]}]}]}]}]}]}]}]},{identifier:"_convert_\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00536",time:998e-6,attributes:{cIntEnum:.00099833300919272,l563:.00099833300919272},children:[{identifier:"__call__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00359",time:998e-6,attributes:{cIntEnum:.00099833300919272,l387:.00099833300919272},children:[{identifier:"_create_\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00483",time:998e-6,attributes:{cIntEnum:.00099833300919272,l517:.00099833300919272},children:[{identifier:"__setitem__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x0089",time:998e-6,attributes:{c_EnumDict:.00099833300919272,l106:.00099833300919272},children:[{identifier:"_is_sunder\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x0033",time:998e-6,attributes:{l38:.00099833300919272},children:[{identifier:"[self]",time:998e-6,attributes:{},children:[]}]}]}]}]}]},{identifier:"_TLSAlertType\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ssl.py\x00183",time:.001001,attributes:{l213:.001000832999125123},children:[{identifier:"__setitem__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x0089",time:.001001,attributes:{c_EnumDict:.001000832999125123,l129:.001000832999125123},children:[{identifier:"_is_dunder\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x0022",time:.001001,attributes:{l26:.001000832999125123},children:[{identifier:"[self]",time:.001001,attributes:{},children:[]}]}]}]},{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001134,attributes:{l1027:.001134374993853271},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001134,attributes:{l1006:.001134374993853271},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001134,attributes:{l688:.001134374993853271},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001134,attributes:{cSourceFileLoader:.001134374993853271,l883:.001134374993853271},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001134,attributes:{l241:.001134374993853271},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/base64.py\x001",time:.001134,attributes:{l10:.001134374993853271},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001134,attributes:{l1027:.001134374993853271},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001134,attributes:{l1006:.001134374993853271},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001134,attributes:{l688:.001134374993853271},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001134,attributes:{cSourceFileLoader:.001134374993853271,l883:.001134374993853271},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001134,attributes:{l241:.001134374993853271},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/struct.py\x001",time:.001134,attributes:{l13:.001134374993853271},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001134,attributes:{l1027:.001134374993853271},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001134,attributes:{l1006:.001134374993853271},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001134,attributes:{l674:.001134374993853271},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.001134,attributes:{l571:.001134374993853271},children:[{identifier:"create_module\0<frozen importlib._bootstrap_external>\x001174",time:.001134,attributes:{cExtensionFileLoader:.001134374993853271,l1176:.001134374993853271},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001134,attributes:{l241:.001134374993853271},children:[{identifier:"create_dynamic\0<built-in>\x000",time:.001134,attributes:{},children:[{identifier:"[self]",time:.001134,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.005075,attributes:{l1078:.005074749991763383},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.005075,attributes:{l241:.005074749991763383},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.005075,attributes:{l1027:.005074749991763383},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.005075,attributes:{l1002:.0009991670085582882,l1006:.004075582983205095},children:[{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:999e-6,attributes:{l945:.0009991670085582882},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001431",time:999e-6,attributes:{cPathFinder:.0009991670085582882,l1439:.0009991670085582882},children:[{identifier:"_get_spec\0<frozen importlib._bootstrap_external>\x001399",time:999e-6,attributes:{cPathFinder:.0009991670085582882,l1411:.0009991670085582882},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001536",time:999e-6,attributes:{cFileFinder:.0009991670085582882,l1578:.0009991670085582882},children:[{identifier:"_get_spec\0<frozen importlib._bootstrap_external>\x001531",time:999e-6,attributes:{cFileFinder:.0009991670085582882,l1533:.0009991670085582882},children:[{identifier:"spec_from_file_location\0<frozen importlib._bootstrap_external>\x00721",time:999e-6,attributes:{l758:.0009991670085582882},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]}]}]}]},{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.004076,attributes:{l688:.004075582983205095},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.004076,attributes:{cSourceFileLoader:.004075582983205095,l883:.003061374998651445,l879:.00101420798455365},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.003061,attributes:{l241:.003061374998651445},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/events.py\x001",time:.002001,attributes:{l683:.0010007079981733114,l808:.001000499993097037},children:[{identifier:"allocate_lock\0<built-in>\x000",time:.001001,attributes:{},children:[{identifier:"[self]",time:.001001,attributes:{},children:[]}]},{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001,attributes:{l1027:.001000499993097037},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001,attributes:{l1006:.001000499993097037},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001,attributes:{l674:.001000499993097037},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.001,attributes:{l571:.001000499993097037},children:[{identifier:"create_module\0<frozen importlib._bootstrap_external>\x001174",time:.001,attributes:{cExtensionFileLoader:.001000499993097037,l1176:.001000499993097037},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001,attributes:{l241:.001000499993097037},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001,attributes:{l1027:.001000499993097037},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001,attributes:{l1006:.001000499993097037},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001,attributes:{l688:.001000499993097037},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001,attributes:{cSourceFileLoader:.001000499993097037,l879:.001000499993097037},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001,attributes:{cSourceFileLoader:.001000499993097037,l1012:.001000499993097037},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001,attributes:{l672:.001000499993097037},children:[{identifier:"loads\0<built-in>\x000",time:.001,attributes:{},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/sslproto.py\x001",time:.00106,attributes:{l10:.0010601670073810965},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.00106,attributes:{l1078:.0010601670073810965},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.00106,attributes:{l241:.0010601670073810965},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.00106,attributes:{l1027:.0010601670073810965},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.00106,attributes:{l1006:.0010601670073810965},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.00106,attributes:{l688:.0010601670073810965},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.00106,attributes:{cSourceFileLoader:.0010601670073810965,l879:.0010601670073810965},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.00106,attributes:{cSourceFileLoader:.0010601670073810965,l1012:.0010601670073810965},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.00106,attributes:{l672:.0010601670073810965},children:[{identifier:"loads\0<built-in>\x000",time:.00106,attributes:{},children:[{identifier:"[self]",time:.00106,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001014,attributes:{cSourceFileLoader:.00101420798455365,l975:.00101420798455365},children:[{identifier:"get_data\0<frozen importlib._bootstrap_external>\x001070",time:.001014,attributes:{cSourceFileLoader:.00101420798455365,l1073:.00101420798455365},children:[{identifier:"open_code\0<built-in>\x000",time:.001014,attributes:{},children:[{identifier:"[self]",time:.001014,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001002,attributes:{cSourceFileLoader:.0010017500026151538,l975:.0010017500026151538},children:[{identifier:"get_data\0<frozen importlib._bootstrap_external>\x001070",time:.001002,attributes:{cSourceFileLoader:.0010017500026151538,l1073:.0010017500026151538},children:[{identifier:"open_code\0<built-in>\x000",time:.001002,attributes:{},children:[{identifier:"[self]",time:.001002,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:999e-6,attributes:{l241:.0009985420037992299},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/unix_events.py\x001",time:999e-6,attributes:{l787:.0009985420037992299},children:[{identifier:"__build_class__\0<built-in>\x000",time:999e-6,attributes:{},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/asgiref/sync.py\x001",time:.002005,attributes:{l11:.0010015419975388795,l295:.0010030829871539026},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.001002,attributes:{l1075:.0010015419975388795},children:[{identifier:"__getattr__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/concurrent/futures/__init__.py\x0040",time:.001002,attributes:{l49:.0010015419975388795},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001002,attributes:{l1027:.0010015419975388795},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001002,attributes:{l1006:.0010015419975388795},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001002,attributes:{l688:.0010015419975388795},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001002,attributes:{cSourceFileLoader:.0010015419975388795,l879:.0010015419975388795},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001002,attributes:{cSourceFileLoader:.0010015419975388795,l975:.0010015419975388795},children:[{identifier:"get_data\0<frozen importlib._bootstrap_external>\x001070",time:.001002,attributes:{cSourceFileLoader:.0010015419975388795,l1074:.0010015419975388795},children:[{identifier:"BufferedReader.read\0<built-in>\x000",time:.001002,attributes:{},children:[{identifier:"[self]",time:.001002,attributes:{},children:[]}]}]}]}]}]}]}]}]}]},{identifier:"__build_class__\0<built-in>\x000",time:.001003,attributes:{},children:[{identifier:"[self]",time:.001003,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.016376,attributes:{l241:.016375583014450967},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.016376,attributes:{l1027:.016375583014450967},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.016376,attributes:{l1006:.016375583014450967},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.016376,attributes:{l688:.016375583014450967},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.016376,attributes:{cSourceFileLoader:.016375583014450967,l883:.016375583014450967},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.016376,attributes:{l241:.016375583014450967},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/template/__init__.py\x001",time:.016376,attributes:{l44:.015375375020084903,l60:.0010002079943660647},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.015375,attributes:{l1027:.015375375020084903},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.015375,attributes:{l1006:.015375375020084903},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.015375,attributes:{l688:.015375375020084903},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.015375,attributes:{cSourceFileLoader:.015375375020084903,l883:.015375375020084903},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.015375,attributes:{l241:.015375375020084903},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/template/engine.py\x001",time:.015375,attributes:{l7:.015375375020084903},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.015375,attributes:{l1027:.015375375020084903},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.015375,attributes:{l1006:.015375375020084903},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.015375,attributes:{l688:.015375375020084903},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.015375,attributes:{cSourceFileLoader:.015375375020084903,l883:.015375375020084903},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.015375,attributes:{l241:.015375375020084903},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/template/base.py\x001",time:.015375,attributes:{l58:.0010047079995274544,l59:.00914466701215133,l60:.0052260000084061176},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.015375,attributes:{l1027:.015375375020084903},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.015375,attributes:{l1006:.015375375020084903},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.015375,attributes:{l688:.015375375020084903},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.015375,attributes:{cSourceFileLoader:.015375375020084903,l883:.015375375020084903},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.015375,attributes:{l241:.015375375020084903},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/template/context.py\x001",time:.001005,attributes:{l13:.0010047079995274544},children:[{identifier:"__build_class__\0<built-in>\x000",time:.001005,attributes:{},children:[{identifier:"[self]",time:.001005,attributes:{},children:[]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/formats.py\x001",time:.009145,attributes:{l2:.0009999590110965073,l9:.008144708001054823},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001,attributes:{l1027:.0009999590110965073},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001,attributes:{l1006:.0009999590110965073},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001,attributes:{l688:.0009999590110965073},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001,attributes:{cSourceFileLoader:.0009999590110965073,l883:.0009999590110965073},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001,attributes:{l241:.0009999590110965073},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/decimal.py\x001",time:.001,attributes:{l3:.0009999590110965073},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001,attributes:{l1027:.0009999590110965073},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001,attributes:{l1006:.0009999590110965073},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001,attributes:{l674:.0009999590110965073},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.001,attributes:{l571:.0009999590110965073},children:[{identifier:"create_module\0<frozen importlib._bootstrap_external>\x001174",time:.001,attributes:{cExtensionFileLoader:.0009999590110965073,l1176:.0009999590110965073},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001,attributes:{l241:.0009999590110965073},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001,attributes:{l1027:.0009999590110965073},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001,attributes:{l1002:.0009999590110965073},children:[{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:.001,attributes:{l945:.0009999590110965073},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001431",time:.001,attributes:{cPathFinder:.0009999590110965073,l1439:.0009999590110965073},children:[{identifier:"_get_spec\0<frozen importlib._bootstrap_external>\x001399",time:.001,attributes:{cPathFinder:.0009999590110965073,l1408:.0009999590110965073},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.008145,attributes:{l1078:.008144708001054823},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.008145,attributes:{l241:.008144708001054823},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.008145,attributes:{l1027:.008144708001054823},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.008145,attributes:{l1006:.008144708001054823},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.008145,attributes:{l688:.007145083014620468,l674:.0009996249864343554},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.007145,attributes:{cSourceFileLoader:.007145083014620468,l879:.000999665993731469,l883:.006145417020888999},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001,attributes:{cSourceFileLoader:.000999665993731469,l1000:.000999665993731469},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.006145,attributes:{l241:.006145417020888999},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/dateformat.py\x001",time:.006145,attributes:{l15:.002020125015405938,l17:.0020976249943487346,l26:.0020276670111343265},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.006145,attributes:{l1027:.006145417020888999},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.006145,attributes:{l1006:.006145417020888999},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.006145,attributes:{l688:.006145417020888999},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.006145,attributes:{cSourceFileLoader:.006145417020888999,l883:.006145417020888999},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.006145,attributes:{l241:.006145417020888999},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/utils.py\x001",time:.00202,attributes:{l33:.0010212500055786222,l40:.0009988750098273158},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.00202,attributes:{l1027:.002020125015405938},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.00202,attributes:{l1006:.002020125015405938},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.00202,attributes:{l688:.002020125015405938},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.00202,attributes:{cSourceFileLoader:.002020125015405938,l879:.0010212500055786222,l883:.0009988750098273158},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001021,attributes:{cSourceFileLoader:.0010212500055786222,l1012:.0010212500055786222},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001021,attributes:{l672:.0010212500055786222},children:[{identifier:"loads\0<built-in>\x000",time:.001021,attributes:{},children:[{identifier:"[self]",time:.001021,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:999e-6,attributes:{l241:.0009988750098273158},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/charset.py\x001",time:999e-6,attributes:{l167:.0009988750098273158},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/dates.py\x001",time:.002098,attributes:{l3:.0020976249943487346},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002098,attributes:{l1027:.0020976249943487346},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002098,attributes:{l1006:.0020976249943487346},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002098,attributes:{l688:.0020976249943487346},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002098,attributes:{cSourceFileLoader:.0020976249943487346,l883:.0020976249943487346},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002098,attributes:{l241:.0020976249943487346},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/translation/__init__.py\x001",time:.002098,attributes:{l7:.0020976249943487346},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002098,attributes:{l1027:.0020976249943487346},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002098,attributes:{l1006:.0020976249943487346},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002098,attributes:{l688:.0020976249943487346},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002098,attributes:{cSourceFileLoader:.0020976249943487346,l883:.0020976249943487346},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002098,attributes:{l241:.0020976249943487346},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/autoreload.py\x001",time:.002098,attributes:{l18:.0010094169992953539,l38:.0010882079950533807},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002098,attributes:{l1027:.0020976249943487346},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002098,attributes:{l1006:.0020976249943487346},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002098,attributes:{l688:.0010094169992953539,l674:.0010882079950533807},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001009,attributes:{cSourceFileLoader:.0010094169992953539,l883:.0010094169992953539},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001009,attributes:{l241:.0010094169992953539},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/apps/__init__.py\x001",time:.001009,attributes:{l1:.0010094169992953539},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001009,attributes:{l1027:.0010094169992953539},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001009,attributes:{l1006:.0010094169992953539},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001009,attributes:{l688:.0010094169992953539},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001009,attributes:{cSourceFileLoader:.0010094169992953539,l879:.0010094169992953539},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001009,attributes:{cSourceFileLoader:.0010094169992953539,l975:.0010094169992953539},children:[{identifier:"get_data\0<frozen importlib._bootstrap_external>\x001070",time:.001009,attributes:{cSourceFileLoader:.0010094169992953539,l1073:.0010094169992953539},children:[{identifier:"open_code\0<built-in>\x000",time:.001009,attributes:{},children:[{identifier:"[self]",time:.001009,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]},{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.001088,attributes:{l571:.0010882079950533807},children:[{identifier:"create_module\0<frozen importlib._bootstrap_external>\x001174",time:.001088,attributes:{cExtensionFileLoader:.0010882079950533807,l1176:.0010882079950533807},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001088,attributes:{l241:.0010882079950533807},children:[{identifier:"create_dynamic\0<built-in>\x000",time:.001088,attributes:{},children:[{identifier:"[self]",time:.001088,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/timezone.py\x001",time:.002028,attributes:{l10:.0020276670111343265},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002028,attributes:{l1027:.0020276670111343265},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002028,attributes:{l1006:.0020276670111343265},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002028,attributes:{l688:.0020276670111343265},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002028,attributes:{cSourceFileLoader:.0020276670111343265,l883:.0020276670111343265},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002028,attributes:{l241:.0020276670111343265},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zoneinfo/__init__.py\x001",time:.002028,attributes:{l10:.0020276670111343265},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.002028,attributes:{l1078:.0020276670111343265},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002028,attributes:{l241:.0020276670111343265},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002028,attributes:{l1027:.0020276670111343265},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002028,attributes:{l1006:.0020276670111343265},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002028,attributes:{l688:.0020276670111343265},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002028,attributes:{cSourceFileLoader:.0020276670111343265,l883:.0020276670111343265},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002028,attributes:{l241:.0020276670111343265},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zoneinfo/_tzpath.py\x001",time:.002028,attributes:{l2:.0009996249864343554,l175:.001028042024699971},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001,attributes:{l1027:.0009996249864343554},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001,attributes:{l1006:.0009996249864343554},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001,attributes:{l688:.0009996249864343554},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001,attributes:{cSourceFileLoader:.0009996249864343554,l879:.0009996249864343554},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001,attributes:{cSourceFileLoader:.0009996249864343554,l1012:.0009996249864343554},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]},{identifier:"reset_tzpath\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zoneinfo/_tzpath.py\x005",time:.001028,attributes:{l25:.001028042024699971},children:[{identifier:"get_config_var\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sysconfig.py\x00658",time:.001028,attributes:{l667:.001028042024699971},children:[{identifier:"get_config_vars\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sysconfig.py\x00575",time:.001028,attributes:{l647:.001028042024699971},children:[{identifier:"customize_config_vars\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/_osx_support.py\x00438",time:.001028,attributes:{l463:.001028042024699971},children:[{identifier:"_supports_universal_builds\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/_osx_support.py\x00178",time:.001028,attributes:{l185:.001028042024699971},children:[{identifier:"_get_system_version_tuple\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/_osx_support.py\x00117",time:.001028,attributes:{l126:.001028042024699971},children:[{identifier:"_get_system_version\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/_osx_support.py\x0086",time:.001028,attributes:{l99:.001028042024699971},children:[{identifier:"[self]",time:.001028,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.001,attributes:{l576:.0009996249864343554},children:[{identifier:"_new_module\0<frozen importlib._bootstrap>\x0048",time:.001,attributes:{l49:.0009996249864343554},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/html.py\x001",time:.005226,attributes:{l3:.001224832987645641,l6:.001999750005779788,l9:.0010001670161727816,l14:.001001249998807907},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.005226,attributes:{l1027:.0052260000084061176},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.005226,attributes:{l1006:.0052260000084061176},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.005226,attributes:{l688:.0052260000084061176},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.005226,attributes:{cSourceFileLoader:.0052260000084061176,l883:.0052260000084061176},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.005226,attributes:{l241:.0052260000084061176},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/html/__init__.py\x001",time:.001225,attributes:{l6:.001224832987645641},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001225,attributes:{l1027:.001224832987645641},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001225,attributes:{l1006:.001224832987645641},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001225,attributes:{l688:.001224832987645641},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001225,attributes:{cSourceFileLoader:.001224832987645641,l883:.001224832987645641},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001225,attributes:{l241:.001224832987645641},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/html/entities.py\x001",time:.001225,attributes:{l2506:.001224832987645641},children:[{identifier:"[self]",time:.001225,attributes:{},children:[]}]}]}]}]}]}]}]},{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/html/parser.py\x001",time:.002,attributes:{l12:.0010008750250563025,l40:.0009988749807234854},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001001,attributes:{l1027:.0010008750250563025},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001001,attributes:{l1006:.0010008750250563025},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001001,attributes:{l688:.0010008750250563025},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001001,attributes:{cSourceFileLoader:.0010008750250563025,l883:.0010008750250563025},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001001,attributes:{l241:.0010008750250563025},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/_markupbase.py\x001",time:.001001,attributes:{l18:.0010008750250563025},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:.001001,attributes:{l251:.0010008750250563025},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:.001001,attributes:{l304:.0010008750250563025},children:[{identifier:"__and__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00986",time:.001001,attributes:{cRegexFlag:.0010008750250563025,l989:.0010008750250563025},children:[{identifier:"[self]",time:.001001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]},{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:999e-6,attributes:{l251:.0009988749807234854},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:999e-6,attributes:{l303:.0009988749807234854},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00783",time:999e-6,attributes:{l788:.0009988749807234854},children:[{identifier:"parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00944",time:999e-6,attributes:{l955:.0009988749807234854},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:999e-6,attributes:{l444:.0009988749807234854},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:999e-6,attributes:{l841:.0009988749807234854},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:999e-6,attributes:{l444:.0009988749807234854},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:999e-6,attributes:{l841:.0009988749807234854},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:999e-6,attributes:{l444:.0009988749807234854},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:999e-6,attributes:{l841:.0009988749807234854},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:999e-6,attributes:{l444:.0009988749807234854},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:999e-6,attributes:{l512:.0009988749807234854},children:[{identifier:"get\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00255",time:999e-6,attributes:{cTokenizer:.0009988749807234854,l257:.0009988749807234854},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/encoding.py\x001",time:.001,attributes:{l155:.0010001670161727816},children:[{identifier:"<dictcomp>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/encoding.py\x00155",time:.001,attributes:{l155:.0010001670161727816},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/text.py\x001",time:.001001,attributes:{l400:.001001249998807907},children:[{identifier:"keep_lazy_text\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/functional.py\x00253",time:.001001,attributes:{l257:.001001249998807907},children:[{identifier:"decorator\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/functional.py\x00236",time:.001001,attributes:{l237:.001001249998807907},children:[{identifier:"lazy\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/functional.py\x0087",time:.001001,attributes:{l96:.001001249998807907},children:[{identifier:"__build_class__\0<built-in>\x000",time:.001001,attributes:{},children:[{identifier:"[self]",time:.001001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]},{identifier:"main\0examples/demo_scripts/django_template_render.py\x0015",time:.074298,attributes:{l39:.062296084011904895,l41:.012002332980046049},children:[{identifier:"setup\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/__init__.py\x008",time:.062296,attributes:{l16:.04627362499013543,l17:.010880917019676417,l19:.005141542002093047},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.057155,attributes:{l1027:.05715454200981185},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.057155,attributes:{l1006:.05715454200981185},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.057155,attributes:{l688:.05715454200981185},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.057155,attributes:{cSourceFileLoader:.05715454200981185,l883:.05715454200981185},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.057155,attributes:{l241:.05715454200981185},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/urls/__init__.py\x001",time:.046274,attributes:{l1:.04627362499013543},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.046274,attributes:{l1027:.04627362499013543},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.046274,attributes:{l1006:.04627362499013543},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.046274,attributes:{l674:.000999334006337449,l688:.04527429098379798},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:999e-6,attributes:{l577:.000999334006337449},children:[{identifier:"_init_module_attrs\0<frozen importlib._bootstrap>\x00492",time:999e-6,attributes:{l556:.000999334006337449},children:[{identifier:"cached\0<frozen importlib._bootstrap>\x00391",time:999e-6,attributes:{cModuleSpec:.000999334006337449,l397:.000999334006337449},children:[{identifier:"_get_cached\0<frozen importlib._bootstrap_external>\x00510",time:999e-6,attributes:{l513:.000999334006337449},children:[{identifier:"cache_from_source\0<frozen importlib._bootstrap_external>\x00380",time:999e-6,attributes:{l448:.000999334006337449},children:[{identifier:"_path_join\0<frozen importlib._bootstrap_external>\x00126",time:999e-6,attributes:{l128:.000999334006337449},children:[{identifier:"str.join\0<built-in>\x000",time:999e-6,attributes:{},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]}]}]}]}]},{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.045274,attributes:{cSourceFileLoader:.04527429098379798,l883:.04527429098379798},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.045274,attributes:{l241:.04527429098379798},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/urls/base.py\x001",time:.045274,attributes:{l8:.044129665999207646,l9:.0011446249845903367},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.045274,attributes:{l1027:.04527429098379798},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.045274,attributes:{l1006:.04527429098379798},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.045274,attributes:{l688:.04527429098379798},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.045274,attributes:{cSourceFileLoader:.04527429098379798,l883:.044129665999207646,l879:.0011446249845903367},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.04413,attributes:{l241:.044129665999207646},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/urls/exceptions.py\x001",time:.04413,attributes:{l1:.044129665999207646},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.04413,attributes:{l1027:.044129665999207646},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.04413,attributes:{l1006:.044129665999207646},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.04413,attributes:{l688:.044129665999207646},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.04413,attributes:{cSourceFileLoader:.044129665999207646,l883:.044129665999207646},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.04413,attributes:{l241:.044129665999207646},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/http/__init__.py\x001",time:.04413,attributes:{l1:.002000207983655855,l2:.007112332998076454,l8:.03501712501747534},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.04413,attributes:{l1027:.044129665999207646},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.04413,attributes:{l1006:.044129665999207646},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.04413,attributes:{l688:.044129665999207646},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.04413,attributes:{cSourceFileLoader:.044129665999207646,l883:.042104748979909346,l879:.0020249170192983},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002,attributes:{l241:.002000207983655855},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/http/cookie.py\x001",time:.002,attributes:{l1:.002000207983655855},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.002,attributes:{l1078:.002000207983655855},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002,attributes:{l241:.002000207983655855},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002,attributes:{l1027:.002000207983655855},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002,attributes:{l1002:.001000082993414253,l1006:.001000124990241602},children:[{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:.001,attributes:{l937:.001000082993414253},children:[{identifier:"__enter__\0<frozen importlib._bootstrap>\x00893",time:.001,attributes:{c_ImportLockContext:.001000082993414253,l895:.001000082993414253},children:[{identifier:"acquire_lock\0<built-in>\x000",time:.001,attributes:{},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]},{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001,attributes:{l688:.001000124990241602},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001,attributes:{cSourceFileLoader:.001000124990241602,l883:.001000124990241602},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001,attributes:{l241:.001000124990241602},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/cookies.py\x001",time:.001,attributes:{l437:.001000124990241602},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:.001,attributes:{l251:.001000124990241602},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:.001,attributes:{l303:.001000124990241602},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00783",time:.001,attributes:{l788:.001000124990241602},children:[{identifier:"parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00944",time:.001,attributes:{l955:.001000124990241602},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:.001,attributes:{l444:.001000124990241602},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:.001,attributes:{l841:.001000124990241602},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:.001,attributes:{l444:.001000124990241602},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:.001,attributes:{l555:.001000124990241602},children:[{identifier:"_class_escape\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00296",time:.001,attributes:{l348:.001000124990241602},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.00101,attributes:{cSourceFileLoader:.0010095000034198165,l1012:.0010095000034198165},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.00101,attributes:{l672:.0010095000034198165},children:[{identifier:"loads\0<built-in>\x000",time:.00101,attributes:{},children:[{identifier:"[self]",time:.00101,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.006103,attributes:{l241:.006102832994656637},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/http/request.py\x001",time:.006103,attributes:{l8:.0051046670123469085,l15:.0009981659823097289},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.006103,attributes:{l1078:.006102832994656637},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.006103,attributes:{l241:.006102832994656637},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.006103,attributes:{l1027:.006102832994656637},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.006103,attributes:{l1006:.006102832994656637},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.006103,attributes:{l688:.006102832994656637},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.006103,attributes:{cSourceFileLoader:.006102832994656637,l883:.006102832994656637},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.006103,attributes:{l241:.006102832994656637},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/signing.py\x001",time:.005105,attributes:{l43:.0051046670123469085},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.005105,attributes:{l1027:.0051046670123469085},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.005105,attributes:{l1006:.0051046670123469085},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.005105,attributes:{l688:.0051046670123469085},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.005105,attributes:{cSourceFileLoader:.0051046670123469085,l883:.0051046670123469085},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.005105,attributes:{l241:.0051046670123469085},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/crypto.py\x001",time:.005105,attributes:{l4:.0011004580010194331,l84:.004004209011327475},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.0011,attributes:{l1027:.0011004580010194331},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.0011,attributes:{l1006:.0011004580010194331},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.0011,attributes:{l688:.0011004580010194331},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.0011,attributes:{cSourceFileLoader:.0011004580010194331,l883:.0011004580010194331},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.0011,attributes:{l241:.0011004580010194331},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/hashlib.py\x001",time:.0011,attributes:{l261:.0011004580010194331},children:[{identifier:"__get_openssl_constructor\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/hashlib.py\x00126",time:.0011,attributes:{l129:.0011004580010194331},children:[{identifier:"__get_builtin_constructor\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/hashlib.py\x0082",time:.0011,attributes:{l103:.0011004580010194331},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.0011,attributes:{l1027:.0011004580010194331},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.0011,attributes:{l1006:.0011004580010194331},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.0011,attributes:{l674:.0011004580010194331},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.0011,attributes:{l571:.0011004580010194331},children:[{identifier:"create_module\0<frozen importlib._bootstrap_external>\x001174",time:.0011,attributes:{cExtensionFileLoader:.0011004580010194331,l1176:.0011004580010194331},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.0011,attributes:{l241:.0011004580010194331},children:[{identifier:"create_dynamic\0<built-in>\x000",time:.0011,attributes:{},children:[{identifier:"[self]",time:.0011,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"func_supports_parameter\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/inspect.py\x0072",time:.004004,attributes:{l73:.004004209011327475},children:[{identifier:"_get_callable_parameters\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/inspect.py\x0013",time:.004004,attributes:{l16:.004004209011327475},children:[{identifier:"_get_func_parameters\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/inspect.py\x005",time:.004004,attributes:{l7:.004004209011327475},children:[{identifier:"signature\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/inspect.py\x003245",time:.004004,attributes:{l3247:.004004209011327475},children:[{identifier:"from_callable\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/inspect.py\x002991",time:.004004,attributes:{cSignature:.004004209011327475,l2995:.004004209011327475},children:[{identifier:"_signature_from_callable\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/inspect.py\x002371",time:.004004,attributes:{l2461:.004004209011327475},children:[{identifier:"_signature_from_builtin\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/inspect.py\x002260",time:.004004,attributes:{cSignature:.004004209011327475,l2273:.004004209011327475},children:[{identifier:"_signature_fromstr\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/inspect.py\x002122",time:.004004,attributes:{cSignature:.004004209011327475,l2133:.003002125013154,l2158:.0010020839981734753},children:[{identifier:"_signature_strip_non_python_syntax\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/inspect.py\x002050",time:.003002,attributes:{l2086:.003002125013154},children:[{identifier:"_tokenize\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tokenize.py\x00431",time:.003002,attributes:{l527:.003002125013154},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tokenize.py\x0099",time:.003002,attributes:{l101:.003002125013154},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:.003002,attributes:{l251:.003002125013154},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:.003002,attributes:{l303:.003002125013154},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00783",time:.003002,attributes:{l788:.001999250001972541,l792:.0010028750111814588},children:[{identifier:"parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00944",time:.001999,attributes:{l955:.001999250001972541},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:.001999,attributes:{l444:.001999250001972541},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:.001999,attributes:{l841:.001999250001972541},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:.001999,attributes:{l444:.001999250001972541},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:.001999,attributes:{l841:.001999250001972541},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:.001999,attributes:{l444:.001999250001972541},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:.001999,attributes:{l841:.0009989170066546649,l846:.0010003329953178763},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:999e-6,attributes:{l444:.0009989170066546649},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:999e-6,attributes:{l841:.0009989170066546649},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:999e-6,attributes:{l444:.0009989170066546649},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:999e-6,attributes:{l841:.0009989170066546649},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:999e-6,attributes:{l444:.0009989170066546649},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:999e-6,attributes:{l692:.0009989170066546649},children:[{identifier:"match\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00250",time:999e-6,attributes:{cTokenizer:.0009989170066546649,l252:.0009989170066546649},children:[{identifier:"__next\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00234",time:999e-6,attributes:{cTokenizer:.0009989170066546649,l249:.0009989170066546649},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]}]}]}]}]}]},{identifier:"closegroup\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x0097",time:.001,attributes:{cState:.0010003329953178763,l98:.0010003329953178763},children:[{identifier:"getwidth\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00175",time:.001,attributes:{cSubPattern:.0010003329953178763,l186:.0010003329953178763},children:[{identifier:"min\0<built-in>\x000",time:.001,attributes:{},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]},{identifier:"_code\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00622",time:.001003,attributes:{l631:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l184:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l225:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l184:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l225:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l184:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l225:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l184:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l225:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l172:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l184:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l164:.0010028750111814588},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001003,attributes:{l136:.0010028750111814588},children:[{identifier:"_optimize_charset\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00292",time:.001003,attributes:{l384:.0010028750111814588},children:[{identifier:"[self]",time:.001003,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"dict.copy\0<built-in>\x000",time:.001002,attributes:{},children:[{identifier:"[self]",time:.001002,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/files/uploadhandler.py\x001",time:998e-6,attributes:{l8:.0009981659823097289},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:998e-6,attributes:{l1027:.0009981659823097289},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:998e-6,attributes:{l1002:.0009981659823097289},children:[{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:998e-6,attributes:{l945:.0009981659823097289},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001431",time:998e-6,attributes:{cPathFinder:.0009981659823097289,l1439:.0009981659823097289},children:[{identifier:"_get_spec\0<frozen importlib._bootstrap_external>\x001399",time:998e-6,attributes:{cPathFinder:.0009981659823097289,l1411:.0009981659823097289},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001536",time:998e-6,attributes:{cFileFinder:.0009981659823097289,l1577:.0009981659823097289},children:[{identifier:"[self]",time:998e-6,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001015,attributes:{cSourceFileLoader:.0010154170158784837,l1012:.0010154170158784837},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001015,attributes:{l672:.0010154170158784837},children:[{identifier:"loads\0<built-in>\x000",time:.001015,attributes:{},children:[{identifier:"[self]",time:.001015,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.034002,attributes:{l241:.03400170800159685},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/http/response.py\x001",time:.034002,attributes:{l9:.0010021250054705888,l10:.001996416976908222,l16:.031003166019218042},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.034002,attributes:{l1027:.03400170800159685},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.034002,attributes:{l1006:.0029985419823788106,l992:.031003166019218042},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002999,attributes:{l688:.0029985419823788106},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002999,attributes:{cSourceFileLoader:.0029985419823788106,l883:.0029985419823788106},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002999,attributes:{l241:.0029985419823788106},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/header.py\x001",time:.001002,attributes:{l35:.0010021250054705888},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:.001002,attributes:{l251:.0010021250054705888},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:.001002,attributes:{l303:.0010021250054705888},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00783",time:.001002,attributes:{l792:.0010021250054705888},children:[{identifier:"_code\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00622",time:.001002,attributes:{l631:.0010021250054705888},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001002,attributes:{l187:.0010021250054705888},children:[{identifier:"[self]",time:.001002,attributes:{},children:[]}]}]}]}]}]}]},{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py\x001",time:.001996,attributes:{l71:.0009967079968191683,l72:.0009997089800890535},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001996,attributes:{l1027:.001996416976908222},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001996,attributes:{l1006:.001996416976908222},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001996,attributes:{l688:.001996416976908222},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001996,attributes:{cSourceFileLoader:.001996416976908222,l883:.001996416976908222},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001996,attributes:{l241:.001996416976908222},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/parser.py\x001",time:997e-6,attributes:{l12:.0009967079968191683},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:997e-6,attributes:{l1027:.0009967079968191683},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:997e-6,attributes:{l1006:.0009967079968191683},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:997e-6,attributes:{l688:.0009967079968191683},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:997e-6,attributes:{cSourceFileLoader:.0009967079968191683,l883:.0009967079968191683},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:997e-6,attributes:{l241:.0009967079968191683},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/feedparser.py\x001",time:997e-6,attributes:{l27:.0009967079968191683},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:997e-6,attributes:{l1027:.0009967079968191683},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:997e-6,attributes:{l1006:.0009967079968191683},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:997e-6,attributes:{l688:.0009967079968191683},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:997e-6,attributes:{cSourceFileLoader:.0009967079968191683,l883:.0009967079968191683},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:997e-6,attributes:{l241:.0009967079968191683},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/_policybase.py\x001",time:997e-6,attributes:{l272:.0009967079968191683},children:[{identifier:"_extend_docstrings\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/_policybase.py\x0099",time:997e-6,attributes:{cCompat32:.0009967079968191683,l101:.0009967079968191683},children:[{identifier:"_append_doc\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/_policybase.py\x0094",time:997e-6,attributes:{l95:.0009967079968191683},children:[{identifier:"str.rsplit\0<built-in>\x000",time:997e-6,attributes:{},children:[{identifier:"[self]",time:997e-6,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/message.py\x001",time:.001,attributes:{l19:.0009997089800890535},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001,attributes:{l1027:.0009997089800890535},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001,attributes:{l1006:.0009997089800890535},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001,attributes:{l688:.0009997089800890535},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001,attributes:{cSourceFileLoader:.0009997089800890535,l883:.0009997089800890535},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001,attributes:{l241:.0009997089800890535},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/_encoded_words.py\x001",time:.001,attributes:{l64:.0009997089800890535},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:.001,attributes:{l251:.0009997089800890535},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:.001,attributes:{l290:.0009997089800890535},children:[{identifier:"isinstance\0<built-in>\x000",time:.001,attributes:{},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.031003,attributes:{l241:.031003166019218042},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.031003,attributes:{l1027:.031003166019218042},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.031003,attributes:{l1006:.031003166019218042},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.031003,attributes:{l688:.031003166019218042},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.031003,attributes:{cSourceFileLoader:.031003166019218042,l883:.031003166019218042},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.031003,attributes:{l241:.031003166019218042},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/serializers/__init__.py\x001",time:.031003,attributes:{l23:.031003166019218042},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.031003,attributes:{l1027:.031003166019218042},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.031003,attributes:{l1006:.031003166019218042},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.031003,attributes:{l688:.031003166019218042},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.031003,attributes:{cSourceFileLoader:.031003166019218042,l879:.0010000000183936208,l883:.03000316600082442},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001,attributes:{cSourceFileLoader:.0010000000183936208,l1000:.0010000000183936208},children:[{identifier:"_validate_timestamp_pyc\0<frozen importlib._bootstrap_external>\x00618",time:.001,attributes:{l641:.0010000000183936208},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.030003,attributes:{l241:.03000316600082442},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/serializers/base.py\x001",time:.030003,attributes:{l4:.0011990409984719008,l9:.02880412500235252},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002208,attributes:{l1027:.0022080409980844706},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002208,attributes:{l1006:.0022080409980844706},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002208,attributes:{l688:.0022080409980844706},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002208,attributes:{cSourceFileLoader:.0022080409980844706,l883:.0022080409980844706},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002208,attributes:{l241:.0022080409980844706},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/pickle.py\x001",time:.001199,attributes:{l43:.0011990409984719008},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001199,attributes:{l1027:.0011990409984719008},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001199,attributes:{l1006:.0011990409984719008},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001199,attributes:{l674:.0011990409984719008},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:.001199,attributes:{l571:.0011990409984719008},children:[{identifier:"create_module\0<frozen importlib._bootstrap_external>\x001174",time:.001199,attributes:{cExtensionFileLoader:.0011990409984719008,l1176:.0011990409984719008},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001199,attributes:{l241:.0011990409984719008},children:[{identifier:"create_dynamic\0<built-in>\x000",time:.001199,attributes:{},children:[{identifier:"[self]",time:.001199,attributes:{},children:[]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/__init__.py\x001",time:.001009,attributes:{l2:.0010089999996125698},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001009,attributes:{l1027:.0010089999996125698},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001009,attributes:{l1006:.0010089999996125698},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001009,attributes:{l688:.0010089999996125698},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001009,attributes:{cSourceFileLoader:.0010089999996125698,l883:.0010089999996125698},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001009,attributes:{l241:.0010089999996125698},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/utils.py\x001",time:.001009,attributes:{l8:.0010089999996125698},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001009,attributes:{l1027:.0010089999996125698},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001009,attributes:{l1006:.0010089999996125698},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001009,attributes:{l688:.0010089999996125698},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001009,attributes:{cSourceFileLoader:.0010089999996125698,l879:.0010089999996125698},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001009,attributes:{cSourceFileLoader:.0010089999996125698,l1012:.0010089999996125698},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001009,attributes:{l672:.0010089999996125698},children:[{identifier:"loads\0<built-in>\x000",time:.001009,attributes:{},children:[{identifier:"[self]",time:.001009,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.027795,attributes:{l1078:.02779512500273995},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.027795,attributes:{l241:.02779512500273995},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.027795,attributes:{l1027:.02779512500273995},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.027795,attributes:{l1006:.02779512500273995},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.027795,attributes:{l688:.02779512500273995},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.027795,attributes:{cSourceFileLoader:.02779512500273995,l883:.02779512500273995},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.027795,attributes:{l241:.02779512500273995},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/__init__.py\x001",time:.027795,attributes:{l3:.020749208983033895,l5:.003011375025380403,l18:.0009991249826271087,l46:.0010145410196855664,l51:.0020208749920129776},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.027795,attributes:{l1027:.02779512500273995},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.027795,attributes:{l1006:.02779512500273995},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.027795,attributes:{l688:.02779512500273995},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.027795,attributes:{cSourceFileLoader:.02779512500273995,l883:.02575991698540747,l879:.0020352080173324794},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.02476,attributes:{l241:.024759708991041407},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/aggregates.py\x001",time:.020749,attributes:{l5:.015257041988661513,l7:.005492166994372383},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.020749,attributes:{l1027:.020749208983033895},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.020749,attributes:{l1006:.015257041988661513,l992:.005492166994372383},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.015257,attributes:{l688:.015257041988661513},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.015257,attributes:{cSourceFileLoader:.015257041988661513,l879:.0011616249976214021,l883:.01409541699104011},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001162,attributes:{cSourceFileLoader:.0011616249976214021,l1012:.0011616249976214021},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001162,attributes:{l672:.0011616249976214021},children:[{identifier:"loads\0<built-in>\x000",time:.001162,attributes:{},children:[{identifier:"[self]",time:.001162,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.014095,attributes:{l241:.01409541699104011},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/expressions.py\x001",time:.014095,attributes:{l12:.0130916670022998,l1083:.00100374998874031},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.013092,attributes:{l1078:.0130916670022998},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.013092,attributes:{l241:.0130916670022998},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.013092,attributes:{l1027:.0130916670022998},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.013092,attributes:{l1006:.0130916670022998},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.013092,attributes:{l688:.0130916670022998},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.013092,attributes:{cSourceFileLoader:.0130916670022998,l883:.0130916670022998},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.013092,attributes:{l241:.0130916670022998},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/fields/__init__.py\x001",time:.013092,attributes:{l12:.007069791987305507,l15:.005018708005081862,l18:.0010031670099124312},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.012088,attributes:{l1078:.01208849999238737},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.012088,attributes:{l241:.01208849999238737},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.012088,attributes:{l1027:.01208849999238737},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.012088,attributes:{l1006:.01208849999238737},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.012088,attributes:{l688:.01208849999238737},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.012088,attributes:{cSourceFileLoader:.01208849999238737,l883:.01208849999238737},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.012088,attributes:{l241:.01208849999238737},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/forms/__init__.py\x001",time:.00707,attributes:{l6:.0020097499946132302,l7:.004060209001181647,l9:.0009998329915106297},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.00707,attributes:{l1027:.007069791987305507},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.00707,attributes:{l1006:.007069791987305507},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.00707,attributes:{l688:.007069791987305507},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.00707,attributes:{cSourceFileLoader:.007069791987305507,l879:.0010112919844686985,l883:.0060585000028368086},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001011,attributes:{cSourceFileLoader:.0010112919844686985,l975:.0010112919844686985},children:[{identifier:"get_data\0<frozen importlib._bootstrap_external>\x001070",time:.001011,attributes:{cSourceFileLoader:.0010112919844686985,l1073:.0010112919844686985},children:[{identifier:"open_code\0<built-in>\x000",time:.001011,attributes:{},children:[{identifier:"[self]",time:.001011,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.006059,attributes:{l241:.0060585000028368086},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/forms/boundfield.py\x001",time:998e-6,attributes:{l5:.0009984580101445317},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:998e-6,attributes:{l1027:.0009984580101445317},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:998e-6,attributes:{l1006:.0009984580101445317},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:998e-6,attributes:{l688:.0009984580101445317},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:998e-6,attributes:{cSourceFileLoader:.0009984580101445317,l883:.0009984580101445317},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:998e-6,attributes:{l241:.0009984580101445317},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/forms/widgets.py\x001",time:998e-6,attributes:{l12:.0009984580101445317},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:998e-6,attributes:{l1027:.0009984580101445317},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:998e-6,attributes:{l1006:.0009984580101445317},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:998e-6,attributes:{l674:.0009984580101445317},children:[{identifier:"module_from_spec\0<frozen importlib._bootstrap>\x00564",time:998e-6,attributes:{l577:.0009984580101445317},children:[{identifier:"_init_module_attrs\0<frozen importlib._bootstrap>\x00492",time:998e-6,attributes:{l556:.0009984580101445317},children:[{identifier:"cached\0<frozen importlib._bootstrap>\x00391",time:998e-6,attributes:{cModuleSpec:.0009984580101445317,l397:.0009984580101445317},children:[{identifier:"_get_cached\0<frozen importlib._bootstrap_external>\x00510",time:998e-6,attributes:{l513:.0009984580101445317},children:[{identifier:"cache_from_source\0<frozen importlib._bootstrap_external>\x00380",time:998e-6,attributes:{l448:.0009984580101445317},children:[{identifier:"[self]",time:998e-6,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/forms/fields.py\x001",time:.00406,attributes:{l17:.003060959017602727,l44:.0009992499835789204},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.003061,attributes:{l1078:.003060959017602727},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.003061,attributes:{l241:.003060959017602727},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.003061,attributes:{l1027:.003060959017602727},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.003061,attributes:{l1006:.003060959017602727},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.003061,attributes:{l688:.003060959017602727},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.003061,attributes:{cSourceFileLoader:.003060959017602727,l879:.0010596250067465007,l883:.002001334010856226},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.00106,attributes:{cSourceFileLoader:.0010596250067465007,l1012:.0010596250067465007},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.00106,attributes:{l672:.0010596250067465007},children:[{identifier:"loads\0<built-in>\x000",time:.00106,attributes:{},children:[{identifier:"[self]",time:.00106,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002001,attributes:{l241:.002001334010856226},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/validators.py\x001",time:.002001,attributes:{l1:.0010005839867517352,l415:.0010007500241044909},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001001,attributes:{l1027:.0010005839867517352},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001001,attributes:{l1006:.0010005839867517352},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001001,attributes:{l688:.0010005839867517352},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001001,attributes:{cSourceFileLoader:.0010005839867517352,l883:.0010005839867517352},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001001,attributes:{l241:.0010005839867517352},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ipaddress.py\x001",time:.001001,attributes:{l1532:.0010005839867517352},children:[{identifier:"_IPv4Constants\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ipaddress.py\x001532",time:.001001,attributes:{l1546:.0010005839867517352},children:[{identifier:"__init__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ipaddress.py\x001465",time:.001001,attributes:{cIPv4Network:.0010005839867517352,l1503:.0010005839867517352},children:[{identifier:"_make_netmask\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ipaddress.py\x001147",time:.001001,attributes:{cIPv4Network:.0010005839867517352,l1169:.0010005839867517352},children:[{identifier:"[self]",time:.001001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]},{identifier:"MinLengthValidator\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/validators.py\x00414",time:.001001,attributes:{l416:.0010007500241044909},children:[{identifier:"ngettext_lazy\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/translation/__init__.py\x00170",time:.001001,attributes:{l171:.0010007500241044909},children:[{identifier:"lazy_number\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/translation/__init__.py\x00114",time:.001001,attributes:{l158:.0010007500241044909},children:[{identifier:"lazy\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/functional.py\x0087",time:.001001,attributes:{l208:.0010007500241044909},children:[{identifier:"[self]",time:.001001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:999e-6,attributes:{l1027:.0009992499835789204},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:999e-6,attributes:{l1006:.0009992499835789204},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:999e-6,attributes:{l688:.0009992499835789204},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:999e-6,attributes:{cSourceFileLoader:.0009992499835789204,l879:.0009992499835789204},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:999e-6,attributes:{cSourceFileLoader:.0009992499835789204,l964:.0009992499835789204},children:[{identifier:"cache_from_source\0<frozen importlib._bootstrap_external>\x00380",time:999e-6,attributes:{l448:.0009992499835789204},children:[{identifier:"_path_join\0<frozen importlib._bootstrap_external>\x00126",time:999e-6,attributes:{l128:.0009992499835789204},children:[{identifier:"<listcomp>\0<frozen importlib._bootstrap_external>\x00128",time:999e-6,attributes:{l128:.0009992499835789204},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/forms/formsets.py\x001",time:.001,attributes:{l28:.0009998329915106297},children:[{identifier:"ManagementForm\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/forms/formsets.py\x0028",time:.001,attributes:{l43:.0009998329915106297},children:[{identifier:"__init__\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/forms/fields.py\x00302",time:.001,attributes:{cIntegerField:.0009998329915106297,l307:.0009998329915106297},children:[{identifier:"__init__\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/forms/fields.py\x0095",time:.001,attributes:{cIntegerField:.0009998329915106297,l139:.0009998329915106297},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/checks/__init__.py\x001",time:.005019,attributes:{l1:.0010016250016633421,l18:.0010029580153059214,l22:.0010002089838963002,l25:.0010118750215042382,l28:.0010020409827120602},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.005019,attributes:{l1027:.005018708005081862},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.005019,attributes:{l1006:.004016667022369802,l1002:.0010020409827120602},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.004017,attributes:{l688:.004016667022369802},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.004017,attributes:{cSourceFileLoader:.004016667022369802,l883:.0020045830169692636,l879:.0020120840054005384},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002005,attributes:{l241:.0020045830169692636},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/checks/messages.py\x001",time:.001002,attributes:{l69:.0010016250016633421},children:[{identifier:"__build_class__\0<built-in>\x000",time:.001002,attributes:{},children:[{identifier:"[self]",time:.001002,attributes:{},children:[]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/checks/caches.py\x001",time:.001003,attributes:{l5:.0010029580153059214},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001003,attributes:{l1027:.0010029580153059214},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001003,attributes:{l1006:.0010029580153059214},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001003,attributes:{l688:.0010029580153059214},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001003,attributes:{cSourceFileLoader:.0010029580153059214,l883:.0010029580153059214},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001003,attributes:{l241:.0010029580153059214},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/cache/backends/filebased.py\x001",time:.001003,attributes:{l11:.0010029580153059214},children:[{identifier:"[self]",time:.001003,attributes:{},children:[]}]}]}]}]}]}]}]}]},{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.002012,attributes:{cSourceFileLoader:.0020120840054005384,l969:.0010002089838963002,l975:.0010118750215042382},children:[{identifier:"path_stats\0<frozen importlib._bootstrap_external>\x001089",time:.001,attributes:{cSourceFileLoader:.0010002089838963002,l1092:.0010002089838963002},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]},{identifier:"get_data\0<frozen importlib._bootstrap_external>\x001070",time:.001012,attributes:{cSourceFileLoader:.0010118750215042382,l1073:.0010118750215042382},children:[{identifier:"open_code\0<built-in>\x000",time:.001012,attributes:{},children:[{identifier:"[self]",time:.001012,attributes:{},children:[]}]}]}]}]}]},{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:.001002,attributes:{l945:.0010020409827120602},children:[{identifier:"[self]",time:.001002,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001003,attributes:{l1027:.0010031670099124312},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001003,attributes:{l1006:.0010031670099124312},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001003,attributes:{l688:.0010031670099124312},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001003,attributes:{cSourceFileLoader:.0010031670099124312,l883:.0010031670099124312},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001003,attributes:{l241:.0010031670099124312},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/query_utils.py\x001",time:.001003,attributes:{l196:.0010031670099124312},children:[{identifier:"__build_class__\0<built-in>\x000",time:.001003,attributes:{},children:[{identifier:"[self]",time:.001003,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"__build_class__\0<built-in>\x000",time:.001004,attributes:{},children:[{identifier:"[self]",time:.001004,attributes:{},children:[]}]}]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.005492,attributes:{l241:.005492166994372383},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.005492,attributes:{l1027:.005492166994372383},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.005492,attributes:{l1006:.005492166994372383},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.005492,attributes:{l688:.005492166994372383},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.005492,attributes:{cSourceFileLoader:.005492166994372383,l883:.005492166994372383},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.005492,attributes:{l241:.005492166994372383},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/functions/__init__.py\x001",time:.005492,attributes:{l1:.0034892919939011335,l2:.0009989580139517784,l28:.0010039169865194708},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.005492,attributes:{l1027:.005492166994372383},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.005492,attributes:{l1006:.004493208980420604,l1002:.0009989580139517784},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.003489,attributes:{l688:.0034892919939011335},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.003489,attributes:{cSourceFileLoader:.0034892919939011335,l879:.0011883749975822866,l883:.002300916996318847},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001188,attributes:{cSourceFileLoader:.0011883749975822866,l1012:.0011883749975822866},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001188,attributes:{l674:.0011883749975822866},children:[{identifier:"[self]",time:.001188,attributes:{},children:[]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002301,attributes:{l241:.002300916996318847},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/functions/comparison.py\x001",time:.002301,attributes:{l4:.002300916996318847},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002301,attributes:{l1027:.002300916996318847},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002301,attributes:{l1006:.002300916996318847},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002301,attributes:{l688:.002300916996318847},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002301,attributes:{cSourceFileLoader:.002300916996318847,l883:.002300916996318847},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002301,attributes:{l241:.002300916996318847},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/fields/json.py\x001",time:.002301,attributes:{l6:.002300916996318847},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.002301,attributes:{l1078:.002300916996318847},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002301,attributes:{l241:.002300916996318847},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002301,attributes:{l1027:.002300916996318847},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002301,attributes:{l1006:.002300916996318847},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002301,attributes:{l688:.002300916996318847},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002301,attributes:{cSourceFileLoader:.002300916996318847,l883:.002300916996318847},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002301,attributes:{l241:.002300916996318847},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/lookups.py\x001",time:.002301,attributes:{l312:.0009891250228974968,l594:.0013117919734213501},children:[{identifier:"__build_class__\0<built-in>\x000",time:989e-6,attributes:{},children:[{identifier:"[self]",time:989e-6,attributes:{},children:[]}]},{identifier:"register_lookup\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/query_utils.py\x00245",time:.001312,attributes:{cField:.0013117919734213501,l252:.0013117919734213501},children:[{identifier:"_clear_cached_lookups\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/query_utils.py\x00240",time:.001312,attributes:{cField:.0013117919734213501,l243:.0013117919734213501},children:[{identifier:"[self]",time:.001312,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:999e-6,attributes:{l945:.0009989580139517784},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001431",time:999e-6,attributes:{cPathFinder:.0009989580139517784,l1439:.0009989580139517784},children:[{identifier:"_get_spec\0<frozen importlib._bootstrap_external>\x001399",time:999e-6,attributes:{cPathFinder:.0009989580139517784,l1408:.0009989580139517784},children:[{identifier:"_path_importer_cache\0<frozen importlib._bootstrap_external>\x001356",time:999e-6,attributes:{cPathFinder:.0009989580139517784,l1376:.0009989580139517784},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]}]},{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001004,attributes:{l688:.0010039169865194708},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001004,attributes:{cSourceFileLoader:.0010039169865194708,l883:.0010039169865194708},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001004,attributes:{l241:.0010039169865194708},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/functions/math.py\x001",time:.001004,attributes:{l157:.0010039169865194708},children:[{identifier:"__build_class__\0<built-in>\x000",time:.001004,attributes:{},children:[{identifier:"[self]",time:.001004,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/constraints.py\x001",time:.003011,attributes:{l6:.003011375025380403},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.003011,attributes:{l1024:.0009992910199798644,l1027:.0020120840054005384},children:[{identifier:"__enter__\0<frozen importlib._bootstrap>\x00169",time:999e-6,attributes:{c_ModuleLockManager:.0009992910199798644,l170:.0009992910199798644},children:[{identifier:"_get_module_lock\0<frozen importlib._bootstrap>\x00179",time:999e-6,attributes:{l196:.0009992910199798644},children:[{identifier:"__init__\0<frozen importlib._bootstrap>\x0071",time:999e-6,attributes:{c_ModuleLock:.0009992910199798644,l73:.0009992910199798644},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]},{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002012,attributes:{l1006:.0020120840054005384},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002012,attributes:{l688:.0020120840054005384},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002012,attributes:{cSourceFileLoader:.0020120840054005384,l883:.0020120840054005384},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002012,attributes:{l241:.0020120840054005384},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/indexes.py\x001",time:.002012,attributes:{l5:.0020120840054005384},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002012,attributes:{l1027:.0020120840054005384},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002012,attributes:{l1006:.0020120840054005384},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002012,attributes:{l688:.0020120840054005384},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002012,attributes:{cSourceFileLoader:.0020120840054005384,l883:.0020120840054005384},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002012,attributes:{l241:.0020120840054005384},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/sql/__init__.py\x001",time:.002012,attributes:{l1:.0020120840054005384},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002012,attributes:{l1027:.0020120840054005384},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002012,attributes:{l1006:.0020120840054005384},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002012,attributes:{l688:.0020120840054005384},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002012,attributes:{cSourceFileLoader:.0020120840054005384,l883:.0020120840054005384},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.002012,attributes:{l241:.0020120840054005384},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/sql/query.py\x001",time:.002012,attributes:{l10:.0009999999892897904,l42:.001012084016110748},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002012,attributes:{l1027:.0020120840054005384},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002012,attributes:{l1002:.0009999999892897904,l1006:.001012084016110748},children:[{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:.001,attributes:{l945:.0009999999892897904},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001431",time:.001,attributes:{cPathFinder:.0009999999892897904,l1439:.0009999999892897904},children:[{identifier:"_get_spec\0<frozen importlib._bootstrap_external>\x001399",time:.001,attributes:{cPathFinder:.0009999999892897904,l1411:.0009999999892897904},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001536",time:.001,attributes:{cFileFinder:.0009999999892897904,l1572:.0009999999892897904},children:[{identifier:"_path_join\0<frozen importlib._bootstrap_external>\x00126",time:.001,attributes:{l128:.0009999999892897904},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]},{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001012,attributes:{l688:.001012084016110748},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001012,attributes:{cSourceFileLoader:.001012084016110748,l879:.001012084016110748},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001012,attributes:{cSourceFileLoader:.001012084016110748,l1012:.001012084016110748},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001012,attributes:{l672:.001012084016110748},children:[{identifier:"loads\0<built-in>\x000",time:.001012,attributes:{},children:[{identifier:"[self]",time:.001012,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/enums.py\x001",time:999e-6,attributes:{l59:.0009991249826271087},children:[{identifier:"__prepare__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00165",time:999e-6,attributes:{l168:.0009991249826271087},children:[{identifier:"_check_for_existing_members\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/enum.py\x00569",time:999e-6,attributes:{l573:.0009991249826271087},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]}]}]}]}]},{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.002035,attributes:{cSourceFileLoader:.0020352080173324794,l1012:.0020352080173324794},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.002035,attributes:{l672:.0020352080173324794},children:[{identifier:"loads\0<built-in>\x000",time:.002035,attributes:{},children:[{identifier:"[self]",time:.001015,attributes:{},children:[]},{identifier:"[self]",time:.001021,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001,attributes:{l241:.0010002079943660647},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/base.py\x001",time:.001,attributes:{l40:.0010002079943660647},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001,attributes:{l1027:.0010002079943660647},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001,attributes:{l1006:.0010002079943660647},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001,attributes:{l688:.0010002079943660647},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001,attributes:{cSourceFileLoader:.0010002079943660647,l883:.0010002079943660647},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001,attributes:{l241:.0010002079943660647},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/db/models/options.py\x001",time:.001,attributes:{l9:.0010002079943660647},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001145,attributes:{cSourceFileLoader:.0011446249845903367,l1012:.0011446249845903367},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001145,attributes:{l672:.0011446249845903367},children:[{identifier:"loads\0<built-in>\x000",time:.001145,attributes:{},children:[{identifier:"[self]",time:.001145,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/utils/log.py\x001",time:.010881,attributes:{l2:.0021367090230342,l6:.004325957997934893,l8:.004418249998707324},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.002137,attributes:{l1027:.0021367090230342},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.002137,attributes:{l1006:.0021367090230342},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.002137,attributes:{l688:.0021367090230342},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.002137,attributes:{cSourceFileLoader:.0021367090230342,l879:.001029042003210634,l883:.001107667019823566},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x00950",time:.001029,attributes:{cSourceFileLoader:.001029042003210634,l1012:.001029042003210634},children:[{identifier:"_compile_bytecode\0<frozen importlib._bootstrap_external>\x00670",time:.001029,attributes:{l672:.001029042003210634},children:[{identifier:"loads\0<built-in>\x000",time:.001029,attributes:{},children:[{identifier:"[self]",time:.001029,attributes:{},children:[]}]}]}]},{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001108,attributes:{l241:.001107667019823566},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/logging/config.py\x001",time:.001108,attributes:{l279:.001107667019823566},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:.001108,attributes:{l251:.001107667019823566},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:.001108,attributes:{l303:.001107667019823566},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00783",time:.001108,attributes:{l792:.001107667019823566},children:[{identifier:"_code\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00622",time:.001108,attributes:{l631:.001107667019823566},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001108,attributes:{l164:.001107667019823566},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x0087",time:.001108,attributes:{l136:.001107667019823566},children:[{identifier:"_optimize_charset\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00292",time:.001108,attributes:{l426:.001107667019823566},children:[{identifier:"[self]",time:.001108,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.004326,attributes:{l1078:.004325957997934893},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.004326,attributes:{l241:.004325957997934893},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.004326,attributes:{l1027:.004325957997934893},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.004326,attributes:{l1006:.004325957997934893},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.004326,attributes:{l688:.004325957997934893},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.004326,attributes:{cSourceFileLoader:.004325957997934893,l883:.004325957997934893},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.004326,attributes:{l241:.004325957997934893},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/mail/__init__.py\x001",time:.004326,attributes:{l10:.004325957997934893},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.004326,attributes:{l1027:.004325957997934893},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.004326,attributes:{l1002:.0013186659780330956,l1006:.003007292019901797},children:[{identifier:"_find_spec\0<frozen importlib._bootstrap>\x00921",time:.001319,attributes:{l945:.0013186659780330956},children:[{identifier:"find_spec\0<frozen importlib._bootstrap_external>\x001431",time:.001319,attributes:{cPathFinder:.0013186659780330956,l1439:.0013186659780330956},children:[{identifier:"_get_spec\0<frozen importlib._bootstrap_external>\x001399",time:.001319,attributes:{cPathFinder:.0013186659780330956,l1408:.0013186659780330956},children:[{identifier:"_path_importer_cache\0<frozen importlib._bootstrap_external>\x001356",time:.001319,attributes:{cPathFinder:.0013186659780330956,l1374:.0013186659780330956},children:[{identifier:"_path_hooks\0<frozen importlib._bootstrap_external>\x001343",time:.001319,attributes:{l1350:.0013186659780330956},children:[{identifier:"__init__\0<frozen zipimport>\x0064",time:.001319,attributes:{czipimporter:.0013186659780330956,l89:.0013186659780330956},children:[{identifier:"[self]",time:.001319,attributes:{},children:[]}]}]}]}]}]}]},{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.003007,attributes:{l688:.003007292019901797},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.003007,attributes:{cSourceFileLoader:.003007292019901797,l883:.003007292019901797},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.003007,attributes:{l241:.003007292019901797},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/mail/message.py\x001",time:.003007,attributes:{l7:.0019989169959444553,l9:.001008375023957342},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.003007,attributes:{l1027:.003007292019901797},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.003007,attributes:{l1006:.003007292019901797},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.003007,attributes:{l688:.003007292019901797},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.003007,attributes:{cSourceFileLoader:.003007292019901797,l883:.003007292019901797},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.003007,attributes:{l241:.003007292019901797},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/headerregistry.py\x001",time:.001999,attributes:{l10:.0019989169959444553},children:[{identifier:"_handle_fromlist\0<frozen importlib._bootstrap>\x001053",time:.001999,attributes:{l1078:.0019989169959444553},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001999,attributes:{l241:.0019989169959444553},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001999,attributes:{l1027:.0019989169959444553},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001999,attributes:{l1006:.0019989169959444553},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001999,attributes:{l688:.0019989169959444553},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001999,attributes:{cSourceFileLoader:.0019989169959444553,l883:.0019989169959444553},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001999,attributes:{l241:.0019989169959444553},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/_header_value_parser.py\x001",time:.001999,attributes:{l100:.0009986250079236925,l983:.0010002919880207628},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00249",time:.001999,attributes:{l251:.0019989169959444553},children:[{identifier:"_compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py\x00288",time:.001999,attributes:{l303:.0019989169959444553},children:[{identifier:"compile\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_compile.py\x00783",time:.001999,attributes:{l788:.0019989169959444553},children:[{identifier:"parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00944",time:.001999,attributes:{l955:.0019989169959444553},children:[{identifier:"_parse_sub\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00436",time:.001999,attributes:{l444:.0019989169959444553},children:[{identifier:"_parse\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00494",time:.001999,attributes:{l520:.0009986250079236925,l548:.0010002919880207628},children:[{identifier:"get\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00255",time:.001999,attributes:{cTokenizer:.0019989169959444553,l257:.0019989169959444553},children:[{identifier:"[self]",time:999e-6,attributes:{},children:[]},{identifier:"__next\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/sre_parse.py\x00234",time:.001,attributes:{cTokenizer:.0010002919880207628,l249:.0010002919880207628},children:[{identifier:"[self]",time:.001,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/mime/base.py\x001",time:.001008,attributes:{l9:.001008375023957342},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.001008,attributes:{l1027:.001008375023957342},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.001008,attributes:{l1006:.001008375023957342},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.001008,attributes:{l688:.001008375023957342},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.001008,attributes:{cSourceFileLoader:.001008375023957342,l883:.001008375023957342},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.001008,attributes:{l241:.001008375023957342},children:[{identifier:"<module>\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/email/policy.py\x001",time:.001008,attributes:{l27:.001008375023957342},children:[{identifier:"__new__\0/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/abc.py\x00105",time:.001008,attributes:{l106:.001008375023957342},children:[{identifier:"type.__new__\0<built-in>\x000",time:.001008,attributes:{},children:[{identifier:"[self]",time:.001008,attributes:{},children:[]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.004418,attributes:{l1027:.004418249998707324},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.004418,attributes:{l992:.004418249998707324},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.004418,attributes:{l241:.004418249998707324},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.004418,attributes:{l1027:.004418249998707324},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.004418,attributes:{l1006:.004418249998707324},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.004418,attributes:{l688:.004418249998707324},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.004418,attributes:{cSourceFileLoader:.004418249998707324,l883:.004418249998707324},children:[{identifier:"_call_with_frames_removed\0<frozen importlib._bootstrap>\x00233",time:.004418,attributes:{l241:.004418249998707324},children:[{identifier:"<module>\0/Users/joerick/Projects/pyinstrument/env/lib/python3.10/site-packages/django/core/management/__init__.py\x001",time:.004418,attributes:{l5:.001110791985411197,l19:.0033074580132961273},children:[{identifier:"_find_and_load\0<frozen importlib._bootstrap>\x001022",time:.004418,attributes:{l1027:.004418249998707324},children:[{identifier:"_find_and_load_unlocked\0<frozen importlib._bootstrap>\x00987",time:.004418,attributes:{l1006:.004418249998707324},children:[{identifier:"_load_unlocked\0<frozen importlib._bootstrap>\x00664",time:.004418,attributes:{l688:.004418249998707324},children:[{identifier:"exec_module\0<frozen importlib._bootstrap_external>\x00877",time:.004418,attributes:{cSourceFileLoader:.004418249998707324,l879:.001110791985411197,l883:.0033074580132961273},children:[{identifier:"get_code\0<frozen importlib._bootstrap_external>\x
Download .txt
gitextract_wp7abzyz/

├── .devcontainer/
│   ├── Dockerfile
│   ├── devcontainer.json
│   └── reinstall-cmake.sh
├── .editorconfig
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       ├── test.yml
│       └── wheels.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yaml
├── LICENSE
├── MAINTAINERS.md
├── MANIFEST.in
├── README.md
├── bin/
│   ├── build_js_bundle.py
│   ├── bump_version.py
│   ├── create_demo_data.py
│   ├── create_sample_json.py
│   └── serve_docs
├── docs/
│   ├── Makefile
│   ├── _static/
│   │   └── preview/
│   │       ├── assets/
│   │       │   ├── django_template_render-CIkNzFIy.js
│   │       │   ├── index-B-UkLYqV.js
│   │       │   ├── index-paBu1EOJ.css
│   │       │   ├── sympy_calculation-B9Pn_4RL.js
│   │       │   └── wikipedia_article_word_count-CGt_pvsZ.js
│   │       └── index.html
│   ├── conf.py
│   ├── extensions/
│   │   └── signature_change.py
│   ├── guide.md
│   ├── home.md
│   ├── how-it-works.md
│   ├── index.md
│   └── reference.md
├── examples/
│   ├── aiohttp_web_hello.py
│   ├── async_example_simple.py
│   ├── async_experiment_1.py
│   ├── async_experiment_3.py
│   ├── busy_wait.py
│   ├── c_sort.py
│   ├── context_api.py
│   ├── demo_scripts/
│   │   ├── django_example/
│   │   │   ├── .gitignore
│   │   │   ├── README.md
│   │   │   ├── django_example/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── settings.py
│   │   │   │   ├── templates/
│   │   │   │   │   ├── template.html
│   │   │   │   │   └── template_base.html
│   │   │   │   ├── urls.py
│   │   │   │   └── views.py
│   │   │   └── manage.py
│   │   ├── django_template_render.py
│   │   ├── sympy_calculation.py
│   │   └── wikipedia_article_word_count.py
│   ├── falcon_hello.py
│   ├── falcon_hello_file.py
│   ├── flask_hello.py
│   ├── litestar_hello.py
│   ├── np_c_function.py
│   └── tbhide_demo.py
├── html_renderer/
│   ├── .editorconfig
│   ├── .gitignore
│   ├── demo-data/
│   │   ├── django_template_render.json
│   │   ├── sympy_calculation.json
│   │   └── wikipedia_article_word_count.json
│   ├── demo-src/
│   │   ├── DemoApp.svelte
│   │   └── main.ts
│   ├── index.html
│   ├── package.json
│   ├── src/
│   │   ├── App.svelte
│   │   ├── app.css
│   │   ├── components/
│   │   │   ├── CallStackView.svelte
│   │   │   ├── CogIcon.svelte
│   │   │   ├── Frame.svelte
│   │   │   ├── Header.svelte
│   │   │   ├── Logo.svelte
│   │   │   ├── TimelineCanvasView.ts
│   │   │   ├── TimelineCanvasViewTooltip.svelte
│   │   │   ├── TimelineView.svelte
│   │   │   ├── ViewOptions.svelte
│   │   │   ├── ViewOptionsCallStack.svelte
│   │   │   └── ViewOptionsTimeline.svelte
│   │   ├── lib/
│   │   │   ├── CanvasView.ts
│   │   │   ├── DevicePixelRatioObserver.ts
│   │   │   ├── appState.ts
│   │   │   ├── color.ts
│   │   │   ├── dataTypes.ts
│   │   │   ├── model/
│   │   │   │   ├── Frame.ts
│   │   │   │   ├── FrameGroup.ts
│   │   │   │   ├── Session.ts
│   │   │   │   ├── frameOps.test.ts
│   │   │   │   ├── frameOps.ts
│   │   │   │   ├── modelUtil.ts
│   │   │   │   └── processors.ts
│   │   │   ├── settings.ts
│   │   │   └── utils.ts
│   │   ├── main.ts
│   │   ├── types.d.ts
│   │   └── vite-env.d.ts
│   ├── svelte.config.js
│   ├── tsconfig.json
│   ├── tsconfig.node.json
│   └── vite.config.ts
├── metrics/
│   ├── count_samples.py
│   ├── frame_info.py
│   ├── interrupt.py
│   ├── multi_overhead.py
│   ├── overflow.py
│   └── overhead.py
├── noxfile.py
├── pyinstrument/
│   ├── __init__.py
│   ├── __main__.py
│   ├── context_manager.py
│   ├── frame.py
│   ├── frame_info.py
│   ├── frame_ops.py
│   ├── low_level/
│   │   ├── pyi_floatclock.c
│   │   ├── pyi_floatclock.h
│   │   ├── pyi_shared.h
│   │   ├── pyi_timing_thread.c
│   │   ├── pyi_timing_thread.h
│   │   ├── pyi_timing_thread_python.py
│   │   ├── stat_profile.c
│   │   ├── stat_profile.pyi
│   │   ├── stat_profile_python.py
│   │   └── types.py
│   ├── magic/
│   │   ├── __init__.py
│   │   ├── _utils.py
│   │   └── magic.py
│   ├── middleware.py
│   ├── processors.py
│   ├── profiler.py
│   ├── py.typed
│   ├── renderers/
│   │   ├── __init__.py
│   │   ├── base.py
│   │   ├── console.py
│   │   ├── html.py
│   │   ├── html_resources/
│   │   │   ├── app.css
│   │   │   └── app.js
│   │   ├── jsonrenderer.py
│   │   ├── pstatsrenderer.py
│   │   ├── session.py
│   │   └── speedscope.py
│   ├── session.py
│   ├── stack_sampler.py
│   ├── typing.py
│   ├── util.py
│   └── vendor/
│       ├── __init__.py
│       ├── appdirs.py
│       ├── decorator.py
│       └── keypath.py
├── pyproject.toml
├── requirements-dev.txt
├── setup.cfg
├── setup.py
└── test/
    ├── __init__.py
    ├── conftest.py
    ├── fake_time_util.py
    ├── low_level/
    │   ├── __init__.py
    │   ├── test_context.py
    │   ├── test_custom_timer.py
    │   ├── test_floatclock.py
    │   ├── test_frame_info.py
    │   ├── test_setstatprofile.py
    │   ├── test_threaded.py
    │   ├── test_timing_thread.py
    │   └── util.py
    ├── test_cmdline.py
    ├── test_cmdline_main.py
    ├── test_context_manager.py
    ├── test_ipython_magic.py
    ├── test_overflow.py
    ├── test_processors.py
    ├── test_profiler.py
    ├── test_profiler_async.py
    ├── test_pstats_renderer.py
    ├── test_renderers.py
    ├── test_stack_sampler.py
    ├── test_threading.py
    └── util.py
Download .txt
SYMBOL INDEX (1196 symbols across 98 files)

FILE: bin/bump_version.py
  function bump_version (line 31) | def bump_version() -> None:

FILE: bin/create_demo_data.py
  function main (line 12) | def main():

FILE: bin/create_sample_json.py
  function main (line 11) | def main():

FILE: docs/_static/preview/assets/index-B-UkLYqV.js
  function t (line 1) | function t(s){const r={};return s.integrity&&(r.integrity=s.integrity),s...
  function n (line 1) | function n(s){if(s.ep)return;s.ep=!0;const r=t(s);fetch(s.href,r)}
  function R (line 1) | function R(){}
  function hi (line 1) | function hi(i){return i()}
  function Yt (line 1) | function Yt(){return Object.create(null)}
  function ae (line 1) | function ae(i){i.forEach(hi)}
  function kt (line 1) | function kt(i){return typeof i=="function"}
  function oe (line 1) | function oe(i,e){return i!=i?e==e:i!==e||i&&typeof i=="object"||typeof i...
  function Oi (line 1) | function Oi(i){return Object.keys(i).length===0}
  function mi (line 1) | function mi(i,...e){if(i==null){for(const n of e)n(void 0);return R}cons...
  function we (line 1) | function we(i,e,t){i.$$.on_destroy.push(mi(e,t))}
  function Di (line 1) | function Di(i,e,t){return i.set(t),e}
  function u (line 1) | function u(i,e){i.appendChild(e)}
  function O (line 1) | function O(i,e,t){i.insertBefore(e,t||null)}
  function I (line 1) | function I(i){i.parentNode&&i.parentNode.removeChild(i)}
  function Hi (line 1) | function Hi(i,e){for(let t=0;t<i.length;t+=1)i[t]&&i[t].d(e)}
  function h (line 1) | function h(i){return document.createElement(i)}
  function x (line 1) | function x(i){return document.createElementNS("http://www.w3.org/2000/sv...
  function L (line 1) | function L(i){return document.createTextNode(i)}
  function A (line 1) | function A(){return L(" ")}
  function Vi (line 1) | function Vi(){return L("")}
  function N (line 1) | function N(i,e,t,n){return i.addEventListener(e,t,n),()=>i.removeEventLi...
  function Ct (line 1) | function Ct(i){return function(e){return e.preventDefault(),i.call(this,...
  function Mt (line 1) | function Mt(i){return function(e){return e.stopPropagation(),i.call(this...
  function c (line 1) | function c(i,e,t){t==null?i.removeAttribute(e):i.getAttribute(e)!==t&&i....
  function yt (line 1) | function yt(i){let e;return{p(...t){e=t,e.forEach(n=>i.push(n))},r(){e.f...
  function Ni (line 1) | function Ni(i){return Array.from(i.childNodes)}
  function me (line 1) | function me(i,e){e=""+e,i.data!==e&&(i.data=e)}
  function le (line 1) | function le(i,e){i.value=e??""}
  function Z (line 1) | function Z(i,e,t,n){t==null?i.style.removeProperty(e):i.style.setPropert...
  function Xt (line 1) | function Xt(i,e,t){for(let n=0;n<i.options.length;n+=1){const s=i.option...
  function Bi (line 1) | function Bi(i){const e=i.querySelector(":checked");return e&&e.__value}
  function Me (line 1) | function Me(i,e,t){i.classList.toggle(e,!!t)}
  function xi (line 1) | function xi(i,e,{bubbles:t=!1,cancelable:n=!1}={}){return new CustomEven...
  class zi (line 1) | class zi{constructor(e=!1){k(this,"is_svg",!1);k(this,"e");k(this,"n");k...
    method constructor (line 1) | constructor(e=!1){k(this,"is_svg",!1);k(this,"e");k(this,"n");k(this,"...
    method c (line 1) | c(e){this.h(e)}
    method m (line 1) | m(e,t,n=null){this.e||(this.is_svg?this.e=x(t.nodeName):this.e=h(t.nod...
    method h (line 1) | h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName==="TEMPLATE"...
    method i (line 1) | i(e){for(let t=0;t<this.n.length;t+=1)O(this.t,this.n[t],e)}
    method p (line 1) | p(e){this.d(),this.h(e),this.i(this.a)}
    method d (line 1) | d(){this.n.forEach(I)}
  function Ke (line 1) | function Ke(i){Qe=i}
  function Ft (line 1) | function Ft(){if(!Qe)throw new Error("Function called outside component ...
  function Tt (line 1) | function Tt(i){Ft().$$.on_mount.push(i)}
  function $i (line 1) | function $i(i){Ft().$$.on_destroy.push(i)}
  function qi (line 1) | function qi(){const i=Ft();return(e,t,{cancelable:n=!1}={})=>{const s=i....
  function Ui (line 1) | function Ui(){At||(At=!0,Wi.then(pi))}
  function ut (line 1) | function ut(i){Be.push(i)}
  function pi (line 1) | function pi(){if(He!==0)return;const i=Qe;do{try{for(;He<Ne.length;){con...
  function ji (line 1) | function ji(i){if(i.fragment!==null){i.update(),ae(i.before_update);cons...
  function Yi (line 1) | function Yi(i){const e=[],t=[];Be.forEach(n=>i.indexOf(n)===-1?e.push(n)...
  function $e (line 1) | function $e(){Le={r:0,c:[],p:Le}}
  function qe (line 1) | function qe(){Le.r||ae(Le.c),Le=Le.p}
  function H (line 1) | function H(i,e){i&&i.i&&(ct.delete(i),i.i(e))}
  function z (line 1) | function z(i,e,t,n){if(i&&i.o){if(ct.has(i))return;ct.add(i),Le.c.push((...
  function dt (line 1) | function dt(i){return(i==null?void 0:i.length)!==void 0?i:Array.from(i)}
  function Xi (line 1) | function Xi(i,e){z(i,1,1,()=>{e.delete(i.key)})}
  function Gi (line 1) | function Gi(i,e,t,n,s,r,l,o,a,d,v,p){let m=i.length,f=r.length,g=m;const...
  function be (line 1) | function be(i){i&&i.c()}
  function pe (line 1) | function pe(i,e,t){const{fragment:n,after_update:s}=i.$$;n&&n.m(e,t),ut(...
  function ve (line 1) | function ve(i,e){const t=i.$$;t.fragment!==null&&(Yi(t.after_update),ae(...
  function Ki (line 1) | function Ki(i,e){i.$$.dirty[0]===-1&&(Ne.push(i),Ui(),i.$$.dirty.fill(0)...
  function ce (line 1) | function ce(i,e,t,n,s,r,l=null,o=[-1]){const a=Qe;Ke(i);const d=i.$$={fr...
  class ue (line 1) | class ue{constructor(){k(this,"$$");k(this,"$$set")}$destroy(){ve(this,1...
    method constructor (line 1) | constructor(){k(this,"$$");k(this,"$$set")}
    method $destroy (line 1) | $destroy(){ve(this,1),this.$destroy=R}
    method $on (line 1) | $on(e,t){if(!kt(t))return R;const n=this.$$.callbacks[e]||(this.$$.cal...
    method $set (line 1) | $set(e){this.$$set&&!Oi(e)&&(this.$$.skip_bound=!0,this.$$set(e),this....
  function Qi (line 1) | function Qi(i){let e,t;return{c(){e=x("svg"),t=x("path"),c(t,"fill-rule"...
  class Ji (line 1) | class Ji extends ue{constructor(e){super(),ce(this,e,null,Qi,oe,{})}}
    method constructor (line 1) | constructor(e){super(),ce(this,e,null,Qi,oe,{})}
  function en (line 1) | function en(i){let e,t,n,s,r,l,o,a,d,v,p,m,f,g,_,b,M;return{c(){e=x("svg...
  class tn (line 1) | class tn extends ue{constructor(e){super(),ce(this,e,null,en,oe,{})}}
    method constructor (line 1) | constructor(e){super(),ce(this,e,null,en,oe,{})}
  function nn (line 1) | function nn(i,e){return{subscribe:ft(i,e).subscribe}}
  function ft (line 1) | function ft(i,e=R){let t;const n=new Set;function s(o){if(oe(i,o)&&(i=o,...
  function vi (line 1) | function vi(i,e,t){const n=!Array.isArray(i),s=n?[i]:i;if(!s.every(Boole...
  function sn (line 1) | function sn(i){return i==="local"?localStorage:sessionStorage}
  function Pt (line 1) | function Pt(i,e,t){var n,s,r,l,o,a,d,v;t!=null&&t.onError&&console.warn(...
  function Kt (line 1) | function Kt(){return{collapseMode:"non-application",collapseCustomHide:"...
  method beforeRead (line 1) | beforeRead(i){return{...Kt(),...i}}
  class on (line 1) | class on extends Error{constructor(e){super(`Unreachable case: ${e}`)}}
    method constructor (line 1) | constructor(e){super(`Unreachable case: ${e}`)}
  function rn (line 1) | function rn(i,e){const t=e*(i.length-1),n=Math.floor(t),s=Math.ceil(t),r...
  function ln (line 1) | function ln(i,e,t){return i===1/0?(console.warn("clamp: value is Infinit...
  function xe (line 1) | function xe(i,e){const{from:t=[0,1],to:n=[0,1]}=e,s=e.clamp||!1;let r=(i...
  function an (line 1) | function an(i,e){return`rgb(
  function cn (line 5) | function cn(i){if(i.substr(0,1)=="#"){var e=(i.length-1)/3,t=[17,1,.0622...
  function un (line 5) | function un(i,e,t={}){const{ignore:n=[],capture:s=!0}=t,r=window;if(!r)r...
  function dn (line 5) | function dn(i){const e=document.createElement("div");return e.appendChil...
  function Et (line 5) | function Et(i){return dn(i).replace(/(\/|\\)/g,t=>`${t}<wbr>`)}
  function fn (line 5) | function fn(i,e){if(i.length==0)return null;let t=i[0],n=e(t);for(const ...
  function ht (line 5) | function ht(){return Math.random().toString(36).substring(2)}
  function hn (line 5) | function hn(i){let e,t,n,s,r,l,o,a,d,v,p,m,f,g,_,b,M,T,y,F,D,E,P,w,C,S,$...
  function mn (line 10) | function mn(i,e,t){let n;we(i,K,y=>t(0,n=y));const s=ht();function r(){r...
  class pn (line 10) | class pn extends ue{constructor(e){super(),ce(this,e,mn,hn,oe,{})}}
    method constructor (line 10) | constructor(e){super(),ce(this,e,mn,hn,oe,{})}
  function vn (line 10) | function vn(i){let e,t,n,s,r,l,o,a,d,v,p,m,f,g,_,b,M,T,y,F,D,E,P,w;retur...
  function gn (line 10) | function gn(i,e,t){let n;we(i,Ge,a=>t(0,n=a));const s=ht();function r(){...
  class _n (line 10) | class _n extends ue{constructor(e){super(),ce(this,e,gn,vn,oe,{})}}
    method constructor (line 10) | constructor(e){super(),ce(this,e,gn,vn,oe,{})}
  function wn (line 10) | function wn(i){let e,t;return e=new _n({}),{c(){be(e.$$.fragment)},m(n,s...
  function bn (line 10) | function bn(i){let e,t;return e=new pn({}),{c(){be(e.$$.fragment)},m(n,s...
  function yn (line 10) | function yn(i){let e,t,n,s,r,l,o,a,d;const v=[bn,wn],p=[];function m(f,g...
  function Tn (line 10) | function Tn(i,e,t){let n;we(i,Ze,m=>t(0,n=m));const s=qi();function r(){...
  class An (line 10) | class An extends ue{constructor(e){super(),ce(this,e,Tn,yn,oe,{})}}
    method constructor (line 10) | constructor(e){super(),ce(this,e,Tn,yn,oe,{})}
  function Zt (line 10) | function Zt(i){let e,t;return e=new An({}),e.$on("close",i[9]),{c(){be(e...
  function En (line 10) | function En(i){let e,t,n,s,r,l,o,a,d=Et(i[0].target_description)+"",v,p,...
  function kn (line 14) | function kn(i,e,t){let n;we(i,Ze,f=>t(2,n=f));let{session:s}=e;const r=n...
  class Cn (line 14) | class Cn extends ue{constructor(e){super(),ce(this,e,kn,En,oe,{session:0...
    method constructor (line 14) | constructor(e){super(),ce(this,e,kn,En,oe,{session:0})}
  function gi (line 14) | function gi(i){return i>.6?"#FF4159":i>.3?"#F5A623":i>.15?"#D8CB2A":i>.0...
  function ei (line 14) | function ei(i,e,t){const n=i.slice();return n[21]=e[t],n}
  function ti (line 14) | function ti(i){let e,t,n,s,r,l,o,a,d,v,p,m,f,g,_,b,M;return{c(){e=h("div...
  function ii (line 14) | function ii(i){let e,t,n,s,r=i[0].group.frames.length-1+"",l,o,a,d,v,p;r...
  function ni (line 14) | function ni(i){let e,t=[],n=new Map,s,r=dt(i[0].children);const l=o=>o[2...
  function si (line 14) | function si(i,e){let t,n,s;return n=new wi({props:{frame:e[21],rootFrame...
  function Fn (line 14) | function Fn(i){let e,t,n,s,r=i[3]&&ti(i),l=i[0].group&&i[0].group.rootFr...
  function _i (line 14) | function _i(){const i='a:not([disabled]), button:not([disabled]), input[...
  function oi (line 14) | function oi(){const i=_i();var e=i.indexOf(document.activeElement);if(e>...
  function ri (line 14) | function ri(){const i=_i();var e=i.indexOf(document.activeElement);if(e>...
  function Pn (line 14) | function Pn(i,e,t){let n,s,r,l,o;we(i,Jt,w=>t(16,r=w)),we(i,Qt,w=>t(17,l...
  method constructor (line 14) | constructor(e){super(),ce(this,e,Pn,Fn,oe,{frame:0,rootFrame:1,indent:2})}
  function bi (line 14) | function bi(i,e,t){let n=i;for(const s of e)if(n=s(n,t),!n)return null;r...
  class Je (line 14) | class Je{constructor(e,t){k(this,"uuid",ht());k(this,"identifier");k(thi...
    method constructor (line 14) | constructor(e,t){k(this,"uuid",ht());k(this,"identifier");k(this,"_ide...
    method cloneDeep (line 14) | cloneDeep(){return new Je(this,this.context)}
    method children (line 14) | get children(){return this._children}
    method addChild (line 14) | addChild(e,t={}){if(e.removeFromParent(),e.parent=this,t.after){const ...
    method addChildren (line 14) | addChildren(e,t={}){e=e.slice(),t.after?(e.slice().reverse(),e.forEach...
    method removeFromParent (line 14) | removeFromParent(){if(this.parent){const e=this.parent._children.index...
    method getAttributes (line 14) | getAttributes(e){return Object.keys(this.attributes).filter(n=>n.start...
    method getAttributeValue (line 14) | getAttributeValue(e){const t=this.getAttributes(e);if(!t||t.length==0)...
    method hasTracebackHide (line 14) | get hasTracebackHide(){return this.getAttributeValue(Hn)=="1"}
    method function (line 14) | get function(){return this._identifierParts[0]}
    method filePath (line 14) | get filePath(){return this._identifierParts[1]??null}
    method lineNo (line 14) | get lineNo(){const e=this._identifierParts[2];return e?parseInt(e):null}
    method isSynthetic (line 14) | get isSynthetic(){return On.includes(this.identifier)}
    method filePathShort (line 14) | get filePathShort(){return this.isSynthetic&&this.parent?this.parent.f...
    method isApplicationCode (line 14) | get isApplicationCode(){if(this.isSynthetic)return!1;const e=this.file...
    method proportionOfParent (line 14) | get proportionOfParent(){return this.parent?this.time/this.parent.time:1}
    method className (line 14) | get className(){return this.getAttributeValue(Dn)??""}
    method library (line 14) | get library(){const e=this.filePathShort;return e?/^[\\/.]*[^\\/.]*/.e...
  class Vn (line 14) | class Vn{constructor(e){k(this,"id");k(this,"rootFrame");k(this,"_frames...
    method constructor (line 14) | constructor(e){k(this,"id");k(this,"rootFrame");k(this,"_frames",[]);t...
    method addFrame (line 14) | addFrame(e){e.group&&e.group.removeFrame(e),this._frames.push(e),e.gro...
    method removeFrame (line 14) | removeFrame(e){if(e.group!==this)throw new Error("Frame not in group."...
    method frames (line 14) | get frames(){return this._frames}
    method exitFrames (line 14) | get exitFrames(){const e=[];for(const t of this.frames){let n=!1;for(c...
    method libraries (line 14) | get libraries(){const e=[];for(const t of this.frames){const n=t.libra...
  function mt (line 14) | function mt(i,e){const{replaceWith:t}=e,n=i.parent;if(!n)throw new Error...
  function Nn (line 14) | function Nn(i,e){if(i.parent!==e.parent)throw new Error("Both frames mus...
  function Lt (line 14) | function Lt(i,e){if(e&&i.children&&i.children.forEach(t=>{Lt(t,!0)}),i.g...
  function Rt (line 14) | function Rt(i,e){if(!i)return null;for(const t of i.children)Rt(t),t.fil...
  function St (line 14) | function St(i,e){if(!i)return null;for(const t of i.children)St(t),t.has...
  function yi (line 14) | function yi(i,e){if(!i)return null;const t={};for(const n of i.children....
  function Ti (line 14) | function Ti(i,e){if(!i)return null;const t=e.hideRegex,n=e.showRegex;fun...
  function Ai (line 14) | function Ai(i,e,t=!0){if(!i)return null;let n=null;for(const s of i.chil...
  function Ei (line 14) | function Ei(i,e){return i?(i.children.length===1&&i.children[0].identifi...
  function ki (line 14) | function ki(i,e,t=null){if(!i)return null;t===null&&(t=i.time,t<=0&&(t=1...
  function Ci (line 14) | function Ci(i,e){if(!i)return null;const t=o=>fn(o,a=>a.time),n=o=>{var ...
  function Mi (line 14) | function Mi(i,e){return i?(i.children.forEach(t=>Mi(t)),i.group&&i.group...
  function Bn (line 14) | function Bn(i){let e,t,n;return t=new wi({props:{frame:i[3],rootFrame:i[...
  function xn (line 14) | function xn(i){let e;return{c(){e=h("div"),e.innerHTML='<div class="erro...
  function zn (line 14) | function zn(i){let e,t,n,s,r,l,o;const a=[xn,Bn],d=[];function v(p,m){re...
  function $n (line 14) | function $n(i,e,t){let n,{session:s}=e;const r=vi([K],([f])=>{const g=[f...
  class qn (line 14) | class qn extends ue{constructor(e){super(),ce(this,e,$n,zn,oe,{session:5...
    method constructor (line 14) | constructor(e){super(),ce(this,e,$n,zn,oe,{session:5})}
  class Wn (line 14) | class Wn{constructor(e){k(this,"mediaQueryList",null);this.onDevicePixel...
    method constructor (line 14) | constructor(e){k(this,"mediaQueryList",null);this.onDevicePixelRatioCh...
    method createMediaQueryList (line 14) | createMediaQueryList(){this.removeMediaQueryList();let e=`(resolution:...
    method removeMediaQueryList (line 14) | removeMediaQueryList(){var e;(e=this.mediaQueryList)==null||e.removeEv...
    method _onChange (line 14) | _onChange(e){this.onDevicePixelRatioChanged(),this.createMediaQueryLis...
    method destroy (line 14) | destroy(){this.removeMediaQueryList()}
  class Un (line 14) | class Un{constructor(e){k(this,"canvas");k(this,"_size_observer");k(this...
    method constructor (line 14) | constructor(e){k(this,"canvas");k(this,"_size_observer");k(this,"_devi...
    method destroy (line 14) | destroy(){this._size_observer.disconnect(),this._devicePixelRatioObser...
    method setNeedsRedraw (line 14) | setNeedsRedraw(){this.drawAnimationRequest===null&&(this.drawAnimation...
    method redrawIfNeeded (line 14) | redrawIfNeeded(){this.drawAnimationRequest!==null&&(window.cancelAnima...
    method canvasViewRedraw (line 14) | canvasViewRedraw(){const e=this.canvas.getContext("2d");e&&(e.resetTra...
    method width (line 14) | get width(){return this.canvas.width/window.devicePixelRatio}
    method height (line 14) | get height(){return this.canvas.height/window.devicePixelRatio}
    method setCanvasSize (line 14) | setCanvasSize(){const e=window.devicePixelRatio;this.canvas.height=thi...
  function jn (line 14) | function jn(i){let e,t=i[2]=="self"?"self":"time",n,s,r,l=i[3](i[0].time...
  function Yn (line 14) | function Yn(i){let e,t,n,s,r=i[3](i[0].time)+"",l,o=i[0].selfTime/i[0].t...
  function li (line 14) | function li(i){let e,t,n,s=i[3](i[0].selfTime)+"";return{c(){e=h("div"),...
  function Xn (line 14) | function Xn(i){let e,t,n=i[0].name+"",s,r,l,o,a,d,v,p,m,f;function g(M,T...
  function Fi (line 14) | function Fi(i){return i.selfTime==i.time?"self":i.selfTime/i.time>.001?"...
  function Gn (line 14) | function Gn(i,e){i.font=Pi;const t=Fi(e)=="both"?140:70,n=i.measureText(...
  function Zn (line 14) | function Zn(i,e,t){let{f:n}=e,s,r;function l(o){return`<span style="colo...
  class Qn (line 14) | class Qn extends ue{constructor(e){super(),ce(this,e,Zn,Xn,oe,{f:0})}}
    method constructor (line 14) | constructor(e){super(),ce(this,e,Zn,Xn,oe,{f:0})}
  class ns (line 14) | class ns extends Un{constructor(t){super(t);k(this,"zoom",1);k(this,"sta...
    method constructor (line 14) | constructor(t){super(t);k(this,"zoom",1);k(this,"startT",0);k(this,"yO...
    method destroy (line 14) | destroy(){this.canvas.removeEventListener("wheel",this.onWheel),this.c...
    method setRootFrame (line 14) | setRootFrame(t){this._rootFrame=t,this.frames=[],this._frameMaxT=void ...
    method _collectFrames (line 14) | _collectFrames(t,n){this.frames.push({frame:t,depth:n,isApplicationCod...
    method updateTooltip (line 14) | updateTooltip(t,n){var s,r;if(n){const l={name:this.frameName(n),time:...
    method redraw (line 14) | redraw(t,n){const{width:s,height:r}=n;(s!==this.lastDrawWidth||r!==thi...
    method drawAxes (line 14) | drawAxes(t){const n=Math.max(800,this.width)/this.zoom;if(n==0)return;...
    method drawAxis (line 14) | drawAxis(t,n,s,r=!1){t.fillStyle="white";const l=Math.floor(this.start...
    method drawFrame (line 14) | drawFrame(t,n){const{x:s,y:r,w:l,h:o}=this.frameDims(n);if(s+l<0||s>th...
    method _assignLibraryOrder (line 14) | _assignLibraryOrder(){const t={};for(const s of this.frames){const l=s...
    method colorForLibraryIndex (line 14) | colorForLibraryIndex(t){if(this._colors[t]!==void 0)return this._color...
    method libraryIndexForFrame (line 14) | libraryIndexForFrame(t){this._libraryOrder||this._assignLibraryOrder()...
    method colorForFrame (line 14) | colorForFrame(t){const n=this.libraryIndexForFrame(t);return this.colo...
    method frameMaxT (line 14) | get frameMaxT(){return this._frameMaxT===void 0&&(this._frameMaxT=this...
    method maxYOffset (line 14) | get maxYOffset(){return Math.max(0,(this.maxDepth+1)*ai+at*2+ci-this.h...
    method minZoom (line 14) | get minZoom(){return(this.width-2*Pe)/this.frameMaxT}
    method maxZoom (line 14) | get maxZoom(){return 10/15e-8}
    method fitContents (line 14) | fitContents(){this.startT=0,this.zoom=this.minZoom,this.isZoomedIn=!1}
    method clampViewport (line 14) | clampViewport(){this.zoom<this.minZoom?(this.zoom=this.minZoom,this.is...
    method frameDims (line 14) | frameDims(t){const n=t.depth*ai+at+ci-this.yOffset,s=es;let r=this.xFo...
    method xForT (line 14) | xForT(t){return(t-this.startT)*this.zoom+Pe}
    method tForX (line 14) | tForX(t){return(t-Pe)/this.zoom+this.startT}
    method frameName (line 14) | frameName(t){let n;return t.className?n=`${t.className}.${t.frame.func...
    method frameSelfTime (line 14) | frameSelfTime(t){let n=t.frame.time;const s=t.frame.children.filter(r=...
    method hitTest (line 14) | hitTest(t){for(const n of this.frames){const{x:s,y:r,w:l,h:o}=this.fra...
    method onWheel (line 14) | onWheel(t){const n=t.ctrlKey||t.metaKey,s=n?.01:.0023,r=this.tForX(t.o...
    method onMouseMove (line 14) | onMouseMove(t){const n={x:t.offsetX,y:t.offsetY},s=this.mouseLocation;...
    method onMouseLeave (line 14) | onMouseLeave(t){this.mouseLocation=null,this.tooltipLocation=null,this...
    method onMouseDown (line 14) | onMouseDown(t){(t.button===0||t.button===1)&&(this.mouseDownLocation={...
    method windowMouseUp (line 14) | windowMouseUp(t){window.removeEventListener("mouseup",this.windowMouse...
    method onTouchstart (line 14) | onTouchstart(t){t.preventDefault(),t.stopPropagation();for(const n of ...
    method onTouchmove (line 14) | onTouchmove(t){t.preventDefault(),t.stopPropagation();let n=0;for(cons...
    method onTouchend (line 14) | onTouchend(t){t.preventDefault(),t.stopPropagation();for(const n of Ar...
    method onTouchcancel (line 14) | onTouchcancel(t){t.preventDefault(),t.stopPropagation();for(const n of...
    method adjustXAxisForTouches (line 14) | adjustXAxisForTouches(){const t=Object.keys(this.touches).map(Number);...
  function ss (line 14) | function ss(i){let e;return{c(){e=h("div"),e.innerHTML="",c(e,"class","t...
  function os (line 14) | function os(i,e,t){let n,{session:s}=e;const r=vi([Ge],([v])=>({processo...
  class rs (line 14) | class rs extends ue{constructor(e){super(),ce(this,e,os,ss,oe,{session:2...
    method constructor (line 14) | constructor(e){super(),ce(this,e,os,ss,oe,{session:2})}
  function ls (line 14) | function ls(i){let e,t,n=i[1].viewMode+"",s;return{c(){e=h("div"),t=L("U...
  function as (line 14) | function as(i){let e,t;return e=new rs({props:{session:i[0]}}),{c(){be(e...
  function cs (line 14) | function cs(i){let e,t;return e=new qn({props:{session:i[0]}}),{c(){be(e...
  function us (line 14) | function us(i){let e;return{c(){e=h("div"),e.innerHTML='<div class="spac...
  function ds (line 14) | function ds(i){let e,t,n,s,r,l,o,a;n=new Cn({props:{session:i[0]}});cons...
  function fs (line 14) | function fs(i,e,t){let n;we(i,Ze,p=>t(1,n=p));let{session:s}=e;const r=d...
  class hs (line 14) | class hs extends ue{constructor(e){super(),ce(this,e,fs,ds,oe,{session:0...
    method constructor (line 14) | constructor(e){super(),ce(this,e,fs,ds,oe,{session:0})}
  class ms (line 14) | class ms{constructor(e){k(this,"startTime");k(this,"duration");k(this,"m...
    method constructor (line 14) | constructor(e){k(this,"startTime");k(this,"duration");k(this,"minInter...
    method shortenPath (line 14) | shortenPath(e){if(this._shortenPathCache[e])return this._shortenPathCa...
  function ze (line 14) | function ze(i){return i.split(/[/\\]/)}
  function ui (line 14) | function ui(i){const e=ze(i);return e.length>0&&e[0].endsWith(":")?e[0]:...
  function ps (line 14) | function ps(i,e){if(ui(i)!=ui(e))return i;const t=ze(i),n=ze(e);let s=0;...
  method render (line 14) | render(i,e){const t=new ms(e);return new hs({target:i,props:{session:t}})}
  function di (line 14) | function di(i,e,t){const n=i.slice();return n[10]=e[t],n}
  function fi (line 14) | function fi(i){let e,t=i[10].name+"",n;return{c(){e=h("option"),n=L(t),e...
  function gs (line 14) | function gs(i){let e,t,n=i[3].message+"",s;return{c(){e=h("div"),t=L("Er...
  function _s (line 14) | function _s(i){let e;return{c(){e=h("div"),e.textContent="Loading..."},m...
  function ws (line 14) | function ws(i){let e,t,n,s,r,l,o,a,d,v,p,m,f,g,_=dt(i[5]),b=[];for(let F...
  function bs (line 15) | function bs(i,e,t){const s=Object.entries(Object.assign({"../demo-data/d...
  class ys (line 15) | class ys extends ue{constructor(e){super(),ce(this,e,bs,ws,oe,{})}}
    method constructor (line 15) | constructor(e){super(),ce(this,e,bs,ws,oe,{})}

FILE: docs/extensions/signature_change.py
  function process_sig (line 1) | def process_sig(app, what, name, obj, options, signature, return_annotat...
  function setup (line 7) | def setup(app):

FILE: examples/aiohttp_web_hello.py
  function profiler_middleware (line 15) | async def profiler_middleware(
  function get_handler (line 28) | async def get_handler(request: web.Request) -> web.Response:
  function dev_init (line 36) | def dev_init(argv):

FILE: examples/async_example_simple.py
  function main (line 6) | async def main():

FILE: examples/async_experiment_1.py
  function do_nothing (line 7) | def do_nothing():
  function busy_wait (line 11) | def busy_wait(duration):
  function say (line 18) | async def say(what, when, profile=False):

FILE: examples/async_experiment_3.py
  function do_nothing (line 9) | def do_nothing():
  function busy_wait (line 13) | def busy_wait(duration):
  function say (line 20) | async def say(what, when, profile=False):
  function task (line 39) | async def task():

FILE: examples/busy_wait.py
  function function_1 (line 4) | def function_1():
  function function_2 (line 8) | def function_2():
  function main (line 12) | def main():

FILE: examples/c_sort.py
  function slow_key (line 28) | def slow_key(el):

FILE: examples/context_api.py
  function main (line 11) | def main():
  class A (line 34) | class A:
    method foo (line 36) | def foo(self):

FILE: examples/demo_scripts/django_example/django_example/settings.py
  function custom_show_pyinstrument (line 59) | def custom_show_pyinstrument(request):

FILE: examples/demo_scripts/django_example/django_example/views.py
  function hello_world (line 6) | def hello_world(request):

FILE: examples/demo_scripts/django_template_render.py
  function main (line 15) | def main():
  function render_templates (line 44) | def render_templates(iterations: int):

FILE: examples/demo_scripts/sympy_calculation.py
  function do_thing (line 10) | def do_thing():

FILE: examples/demo_scripts/wikipedia_article_word_count.py
  function download (line 15) | def download():
  function parse (line 21) | def parse(json_data):
  function most_common_words (line 25) | def most_common_words(page):
  function main (line 41) | def main():

FILE: examples/falcon_hello.py
  class ProfilerMiddleware (line 15) | class ProfilerMiddleware:
    method __init__ (line 16) | def __init__(self, interval=0.01):
    method process_request (line 19) | def process_request(self, req, resp):
    method process_response (line 22) | def process_response(self, req, resp, resource, req_succeeded):
  class HelloResource (line 27) | class HelloResource:
    method on_get (line 28) | def on_get(self, req, resp):

FILE: examples/falcon_hello_file.py
  class ProfilerMiddleware (line 16) | class ProfilerMiddleware:
    method __init__ (line 19) | def __init__(self, interval=0.01):
    method process_request (line 22) | def process_request(self, req, resp):
    method process_response (line 25) | def process_response(self, req, resp, resource, req_succeeded):
  class HelloResource (line 32) | class HelloResource:
    method on_get (line 33) | def on_get(self, req, resp):

FILE: examples/flask_hello.py
  function before_request (line 16) | def before_request():
  function after_request (line 23) | def after_request(response):
  function hello_world (line 32) | def hello_world():
  function sleep (line 37) | def sleep():
  function do_something (line 43) | def do_something():

FILE: examples/litestar_hello.py
  class ProfilingMiddleware (line 12) | class ProfilingMiddleware(MiddlewareProtocol):
    method __init__ (line 13) | def __init__(self, app: ASGIApp) -> None:
    method __call__ (line 17) | async def __call__(self, scope: Scope, receive: Receive, send: Send) -...
  function index (line 40) | async def index() -> str:

FILE: examples/tbhide_demo.py
  function D (line 4) | def D():
  function C (line 8) | def C():
  function B (line 14) | def B():
  function A (line 20) | def A():

FILE: html_renderer/src/components/TimelineCanvasView.ts
  constant BACKGROUND_COLOR (line 8) | const BACKGROUND_COLOR = '#212325'
  constant FRAME_PITCH (line 10) | const FRAME_PITCH = 18
  constant FRAME_HEIGHT (line 11) | const FRAME_HEIGHT = 17
  constant X_MARGIN (line 13) | const X_MARGIN = 28
  constant Y_MARGIN (line 14) | const Y_MARGIN = 17
  constant Y_FRAME_INSET (line 15) | const Y_FRAME_INSET = 29 // vertical space between y margin and first fr...
  constant GRADIENT_STR (line 17) | const GRADIENT_STR = ['#3475BA','#318DBC','#47A298','#8AAE5D','#C1A731',...
  constant GRADIENT (line 18) | const GRADIENT = GRADIENT_STR.map(parseColor)
  type TimelineFrame (line 20) | interface TimelineFrame {
  class TimelineCanvasView (line 29) | class TimelineCanvasView extends CanvasView {
    method constructor (line 39) | constructor(container: HTMLElement) {
    method destroy (line 65) | destroy(): void {
    method setRootFrame (line 80) | setRootFrame(rootFrame: Frame) {
    method _collectFrames (line 90) | _collectFrames(frame: Frame, depth: number) {
    method updateTooltip (line 110) | updateTooltip(ctx: CanvasRenderingContext2D, timelineFrame: TimelineFr...
    method redraw (line 181) | redraw(ctx: CanvasRenderingContext2D, extra: { width: number; height: ...
    method drawAxes (line 225) | drawAxes(ctx: CanvasRenderingContext2D) {
    method drawAxis (line 254) | drawAxis(ctx: CanvasRenderingContext2D, increment: number, alpha: numb...
    method drawFrame (line 290) | drawFrame(ctx: CanvasRenderingContext2D, timelineFrame: TimelineFrame) {
    method _assignLibraryOrder (line 341) | _assignLibraryOrder() {
    method colorForLibraryIndex (line 356) | colorForLibraryIndex(libraryIndex: number) {
    method libraryIndexForFrame (line 371) | libraryIndexForFrame(timelineFrame: TimelineFrame) {
    method colorForFrame (line 388) | colorForFrame(timelineFrame: TimelineFrame) {
    method frameMaxT (line 407) | get frameMaxT() {
    method maxYOffset (line 414) | get maxYOffset() {
    method minZoom (line 418) | get minZoom() {
    method maxZoom (line 422) | get maxZoom() {
    method fitContents (line 428) | fitContents() {
    method clampViewport (line 434) | clampViewport() {
    method frameDims (line 462) | frameDims(timelineFrame: TimelineFrame): { x: number; y: number; w: nu...
    method xForT (line 479) | xForT(t: number): number {
    method tForX (line 483) | tForX(x: number): number {
    method frameName (line 487) | frameName(timelineFrame: TimelineFrame): string {
    method frameSelfTime (line 499) | frameSelfTime(timelineFrame: TimelineFrame): number {
    method hitTest (line 510) | hitTest(loc: {x: number, y: number}): TimelineFrame | null {
    method onWheel (line 531) | onWheel(event: WheelEvent) {
    method onMouseMove (line 552) | onMouseMove(event: MouseEvent): void {
    method onMouseLeave (line 565) | onMouseLeave(event: MouseEvent): void {
    method onMouseDown (line 570) | onMouseDown(event: MouseEvent): void {
    method windowMouseUp (line 578) | windowMouseUp(event: MouseEvent): void {
    method onTouchstart (line 594) | onTouchstart(event: TouchEvent) {
    method onTouchmove (line 609) | onTouchmove(event: TouchEvent) {
    method onTouchend (line 631) | onTouchend(event: TouchEvent) {
    method onTouchcancel (line 640) | onTouchcancel(event: TouchEvent) {
    method adjustXAxisForTouches (line 649) | adjustXAxisForTouches() {

FILE: html_renderer/src/lib/CanvasView.ts
  method constructor (line 8) | constructor(readonly container: HTMLElement) {
  method destroy (line 35) | destroy() {
  method setNeedsRedraw (line 47) | setNeedsRedraw() {
  method redrawIfNeeded (line 58) | redrawIfNeeded() {
  method canvasViewRedraw (line 66) | canvasViewRedraw() {
  method width (line 80) | get width() { return this.canvas.width / window.devicePixelRatio }
  method height (line 81) | get height() { return this.canvas.height / window.devicePixelRatio }
  method setCanvasSize (line 83) | setCanvasSize() {

FILE: html_renderer/src/lib/DevicePixelRatioObserver.ts
  class DevicePixelRatioObserver (line 1) | class DevicePixelRatioObserver {
    method constructor (line 4) | constructor(readonly onDevicePixelRatioChanged: () => void) {
    method createMediaQueryList (line 9) | createMediaQueryList() {
    method removeMediaQueryList (line 16) | removeMediaQueryList() {
    method _onChange (line 20) | _onChange(event: MediaQueryListEvent) {
    method destroy (line 24) | destroy() {

FILE: html_renderer/src/lib/color.ts
  function colorForFrameProportionOfTotal (line 1) | function colorForFrameProportionOfTotal(proportion: number): string {

FILE: html_renderer/src/lib/dataTypes.ts
  type SessionData (line 1) | interface SessionData {
  type FrameData (line 17) | interface FrameData {

FILE: html_renderer/src/lib/model/Frame.ts
  type FrameData (line 5) | interface FrameData {
  constant IDENTIFIER_SEP (line 14) | const IDENTIFIER_SEP = "\x00"
  constant ATTRIBUTES_SEP (line 15) | const ATTRIBUTES_SEP = "\x01"
  constant AWAIT_FRAME_IDENTIFIER (line 17) | const AWAIT_FRAME_IDENTIFIER = "[await]"
  constant SELF_TIME_FRAME_IDENTIFIER (line 18) | const SELF_TIME_FRAME_IDENTIFIER = "[self]"
  constant OUT_OF_CONTEXT_FRAME_IDENTIFIER (line 19) | const OUT_OF_CONTEXT_FRAME_IDENTIFIER = "[out-of-context]"
  constant DUMMY_ROOT_FRAME_IDENTIFIER (line 20) | const DUMMY_ROOT_FRAME_IDENTIFIER = "[root]"
  constant SYNTHETIC_FRAME_IDENTIFIERS (line 22) | const SYNTHETIC_FRAME_IDENTIFIERS = [
  constant SYNTHETIC_LEAF_IDENTIFIERS (line 29) | const SYNTHETIC_LEAF_IDENTIFIERS = [
  constant ATTRIBUTE_MARKER_CLASS_NAME (line 35) | const ATTRIBUTE_MARKER_CLASS_NAME = "c"
  constant ATTRIBUTE_MARKER_LINE_NUMBER (line 36) | const ATTRIBUTE_MARKER_LINE_NUMBER = "l"
  constant ATTRIBUTE_MARKER_TRACEBACKHIDE (line 37) | const ATTRIBUTE_MARKER_TRACEBACKHIDE = "h"
  class Frame (line 39) | class Frame {
    method constructor (line 53) | constructor(
    method cloneDeep (line 78) | cloneDeep(): Frame {
    method children (line 82) | get children(): readonly Frame[] {
    method addChild (line 86) | addChild(frame: Frame, options: {after?: Frame} = {}) {
    method addChildren (line 100) | addChildren(frames: readonly Frame[], options: {after?: Frame} = {}) {
    method removeFromParent (line 111) | removeFromParent() {
    method getAttributes (line 119) | getAttributes(marker: string): {data: string, time: number}[] {
    method getAttributeValue (line 126) | getAttributeValue(marker: string) {
    method hasTracebackHide (line 141) | get hasTracebackHide(): boolean {
    method function (line 145) | get function(): string {
    method filePath (line 149) | get filePath(): string | null {
    method lineNo (line 153) | get lineNo(): number | null {
    method isSynthetic (line 158) | get isSynthetic(): boolean {
    method filePathShort (line 162) | get filePathShort(): string | null {
    method isApplicationCode (line 172) | get isApplicationCode(): boolean {
    method proportionOfParent (line 211) | get proportionOfParent(): number {
    method className (line 219) | get className(): string {
    method library (line 223) | get library(): string|null {
  type FrameContext (line 233) | interface FrameContext {

FILE: html_renderer/src/lib/model/FrameGroup.ts
  class FrameGroup (line 4) | class FrameGroup {
    method constructor (line 9) | constructor(rootFrame: Frame) {
    method addFrame (line 14) | addFrame(frame: Frame) {
    method removeFrame (line 22) | removeFrame(frame: Frame) {
    method frames (line 35) | get frames(): readonly Frame[] {
    method exitFrames (line 39) | get exitFrames() {
    method libraries (line 60) | get libraries() {

FILE: html_renderer/src/lib/model/Session.ts
  class Session (line 4) | class Session {
    method constructor (line 17) | constructor(data: SessionData) {
    method shortenPath (line 32) | shortenPath(path: string): string {
  function pathSplit (line 54) | function pathSplit(path: string): string[] {
  function getPathDrive (line 58) | function getPathDrive(path: string): string | null {
  function getRelPath (line 67) | function getRelPath(path: string, start: string): string {

FILE: html_renderer/src/lib/model/frameOps.ts
  function deleteFrameFromTree (line 5) | function deleteFrameFromTree(frame: Frame, options: {replaceWith: 'child...
  function combineFrames (line 38) | function combineFrames(frame: Frame, into: Frame): void {
  function removeFrameFromGroups (line 66) | function removeFrameFromGroups(frame: Frame, recursive: boolean): void {

FILE: html_renderer/src/lib/model/modelUtil.ts
  function applyProcessors (line 4) | function applyProcessors(rootFrame: Frame | null, processors: ProcessorF...

FILE: html_renderer/src/lib/model/processors.ts
  type ProcessorOptions (line 7) | interface ProcessorOptions {
  type ProcessorFunction (line 12) | type ProcessorFunction = (frame: Frame | null, options: ProcessorOptions...
  type Processor (line 14) | interface Processor {
  function remove_importlib (line 45) | function remove_importlib(frame: Frame | null, options: ProcessorOptions...
  function remove_tracebackhide (line 72) | function remove_tracebackhide(frame: Frame | null, options: ProcessorOpt...
  function aggregate_repeated_calls (line 105) | function aggregate_repeated_calls(frame: Frame | null, options: Processo...
  function group_library_frames_processor (line 138) | function group_library_frames_processor(frame: Frame | null, options: Pr...
  function merge_consecutive_self_time (line 208) | function merge_consecutive_self_time(frame: Frame | null, options: Proce...
  function remove_unnecessary_self_time_nodes (line 245) | function remove_unnecessary_self_time_nodes(frame: Frame | null, options...
  function remove_irrelevant_nodes (line 269) | function remove_irrelevant_nodes(frame: Frame | null, options: Processor...
  function remove_first_pyinstrument_frames_processor (line 318) | function remove_first_pyinstrument_frames_processor(frame: Frame | null,...
  function remove_useless_groups_processor (line 355) | function remove_useless_groups_processor(frame: Frame | null, options: P...

FILE: html_renderer/src/lib/settings.ts
  type ViewOptionsCallStack (line 3) | interface ViewOptionsCallStack {
  function CallStackViewOptionsDefaults (line 15) | function CallStackViewOptionsDefaults(): ViewOptionsCallStack {
  method beforeRead (line 34) | beforeRead(val) {
  type ViewOptionsTimeline (line 49) | interface ViewOptionsTimeline {

FILE: html_renderer/src/lib/utils.ts
  class UnreachableCaseError (line 2) | class UnreachableCaseError extends Error {
    method constructor (line 3) | constructor(value: never) {
  function sampleGradient (line 8) | function sampleGradient(gradient: number[][], location: number) {
  function clamp (line 18) | function clamp(value: number, min: number, max: number): number {
  function map (line 37) | function map(x: number, options: {
  function mapRGBColor (line 53) | function mapRGBColor(x: number, options: {
  function mapColor (line 65) | function mapColor(x: number, options: {
  function parseColor (line 81) | function parseColor(input: string) {
  function cyrb53 (line 97) | function cyrb53(str: string, seed: number = 0) {
  function hash (line 112) | function hash(str: string) {
  type OnClickOutsideOptions (line 116) | interface OnClickOutsideOptions {
  type OnClickOutsideHandler (line 121) | type OnClickOutsideHandler = (evt: MouseEvent) => void;
  function onClickOutside (line 136) | function onClickOutside(
  function escapeForHtml (line 199) | function escapeForHtml(str: string) {
  function htmlForStringWithWBRAtSlashes (line 205) | function htmlForStringWithWBRAtSlashes(str: string) {
  function maxBy (line 210) | function maxBy<T>(list: readonly T[], keyFunc: (a:T) => number): T|null {
  function randomId (line 230) | function randomId() {

FILE: html_renderer/src/main.ts
  method render (line 7) | render(element: HTMLElement, data: SessionData) {

FILE: metrics/count_samples.py
  function do_nothing (line 6) | def do_nothing():
  function busy_wait (line 10) | def busy_wait(duration: float):
  function count_samples (line 16) | def count_samples(duration: float, interval: float, use_timing_thread: b...

FILE: metrics/frame_info.py
  function test_func (line 14) | def test_func():

FILE: metrics/interrupt.py
  function func (line 10) | def func():

FILE: metrics/multi_overhead.py
  function test_func_re (line 27) | def test_func_re():
  function test_func_template (line 33) | def test_func_template():
  function time_base (line 41) | def time_base(function, repeats):
  function time_profile (line 46) | def time_profile(function, repeats):
  function time_cProfile (line 52) | def time_cProfile(function, repeats):
  function time_pyinstrument (line 58) | def time_pyinstrument(function, repeats):
  function timings_for_test (line 80) | def timings_for_test(test_func, repeats):

FILE: metrics/overflow.py
  function func (line 8) | def func(num):

FILE: metrics/overhead.py
  function test_func_template (line 24) | def test_func_template():

FILE: noxfile.py
  function test (line 10) | def test(session):
  function docs (line 18) | def docs(session):
  function livedocs (line 25) | def livedocs(session):
  function htmldev (line 32) | def htmldev(session):
  function watchbuild (line 39) | def watchbuild(session):
  function watch (line 60) | def watch(session):

FILE: pyinstrument/__init__.py
  function load_ipython_extension (line 13) | def load_ipython_extension(ipython):

FILE: pyinstrument/__main__.py
  function main (line 29) | def main():
  class OptionsParseError (line 438) | class OptionsParseError(Exception):
  function compute_render_options (line 442) | def compute_render_options(
  function create_renderer (line 532) | def create_renderer(
  function get_renderer_class (line 551) | def get_renderer_class(options: CommandLineOptions) -> type[renderers.Re...
  function guess_renderer_from_outfile (line 589) | def guess_renderer_from_outfile(outfile: str) -> str | None:
  function report_dir (line 611) | def report_dir() -> str:
  function load_report_from_temp_storage (line 619) | def load_report_from_temp_storage(identifier: str) -> Session:
  function save_report_to_temp_storage (line 630) | def save_report_to_temp_storage(session: Session):
  class CommandLineOptions (line 649) | class CommandLineOptions:
  class ValueWithRemainingArgs (line 677) | class ValueWithRemainingArgs:
    method __init__ (line 678) | def __init__(self, value: str, remaining_args: list[str]):

FILE: pyinstrument/context_manager.py
  class ProfileContextOptions (line 17) | class ProfileContextOptions(typing.TypedDict, total=False):
  class ProfileContext (line 25) | class ProfileContext:
    method __init__ (line 28) | def __init__(
    method __call__ (line 44) | def __call__(self, func: CallableVar, /) -> CallableVar: ...
    method __call__ (line 46) | def __call__(self, /, **kwargs: Unpack[ProfileContextOptions]) -> "Pro...
    method __call__ (line 47) | def __call__(
    method __enter__ (line 65) | def __enter__(self):
    method __exit__ (line 84) | def __exit__(self, exc_type, exc_value, traceback):
  class _Profile (line 100) | class _Profile:
    method __call__ (line 102) | def __call__(self, func: CallableVar, /) -> CallableVar: ...
    method __call__ (line 104) | def __call__(self, /, **kwargs: Unpack[ProfileContextOptions]) -> "Pro...
    method __call__ (line 105) | def __call__(

FILE: pyinstrument/frame.py
  class FrameContext (line 46) | class FrameContext(typing.Protocol):
    method shorten_path (line 47) | def shorten_path(self, path: str) -> str: ...
    method sys_prefixes (line 49) | def sys_prefixes(self) -> Sequence[str]: ...
  class Frame (line 52) | class Frame:
    method __init__ (line 69) | def __init__(
    method record_time_from_frame_info (line 94) | def record_time_from_frame_info(self, frame_info: str, time: float):
    method remove_from_parent (line 105) | def remove_from_parent(self):
    method context (line 114) | def context(self):
    method set_context (line 119) | def set_context(self, context: FrameContext | None):
    method new_subclass_with_frame_info (line 125) | def new_subclass_with_frame_info(frame_info: str) -> Frame:
    method proportion_of_parent (line 130) | def proportion_of_parent(self) -> float:
    method total_self_time (line 140) | def total_self_time(self) -> float:
    method function (line 156) | def function(self) -> str:
    method file_path (line 160) | def file_path(self) -> str | None:
    method line_no (line 165) | def line_no(self) -> int | None:
    method file_path_short (line 170) | def file_path_short(self) -> str | None:
    method is_application_code (line 181) | def is_application_code(self) -> bool:
    method code_position_short (line 213) | def code_position_short(self) -> str | None:
    method add_child (line 222) | def add_child(self, frame: Frame, after: Frame | None = None):
    method add_children (line 241) | def add_children(self, frames: Sequence[Frame], after: Frame | None = ...
    method is_synthetic (line 255) | def is_synthetic(self) -> bool:
    method is_synthetic_leaf (line 259) | def is_synthetic_leaf(self) -> bool:
    method children (line 263) | def children(self) -> Sequence[Frame]:
    method await_time (line 269) | def await_time(self) -> float:
    method get_attribute_value (line 281) | def get_attribute_value(self, attribute_marker: str) -> str | None:
    method class_name (line 305) | def class_name(self) -> str | None:
    method has_tracebackhide (line 309) | def has_tracebackhide(self) -> bool:
    method self_check (line 315) | def self_check(self, recursive: bool = True) -> None:
    method __repr__ (line 334) | def __repr__(self):
    method to_json_str (line 342) | def to_json_str(self):
  class FrameGroup (line 360) | class FrameGroup:
    method __init__ (line 364) | def __init__(self, root: Frame):
    method frames (line 373) | def frames(self) -> Sequence[Frame]:
    method add_frame (line 376) | def add_frame(self, frame: Frame):
    method remove_frame (line 383) | def remove_frame(self, frame: Frame):
    method exit_frames (line 389) | def exit_frames(self):
    method __repr__ (line 402) | def __repr__(self):

FILE: pyinstrument/frame_info.py
  function parse_frame_info (line 14) | def parse_frame_info(frame_info: str) -> Tuple[str, List[str]]:
  function frame_info_get_identifier (line 30) | def frame_info_get_identifier(frame_info: str) -> str:

FILE: pyinstrument/frame_ops.py
  class IdentifierDoesntMatchException (line 20) | class IdentifierDoesntMatchException(ValueError):
  function build_frame_tree (line 24) | def build_frame_tree(
  function delete_frame_from_tree (line 76) | def delete_frame_from_tree(
  function combine_frames (line 114) | def combine_frames(frame: Frame, into: Frame):
  function remove_frame_from_groups (line 137) | def remove_frame_from_groups(frame: Frame, recursive: bool):

FILE: pyinstrument/low_level/pyi_floatclock.c
  function pyi_monotonic_coarse_resolution (line 15) | double pyi_monotonic_coarse_resolution(void)
  function pyi_floatclock (line 22) | double pyi_floatclock(PYIFloatClockType timer)
  function pyi_monotonic_coarse_resolution (line 55) | double pyi_monotonic_coarse_resolution(void)
  function pyi_floatclock (line 76) | double pyi_floatclock(PYIFloatClockType timer)

FILE: pyinstrument/low_level/pyi_floatclock.h
  type PYIFloatClockType (line 7) | typedef enum {

FILE: pyinstrument/low_level/pyi_timing_thread.c
  type Subscription (line 17) | typedef struct Subscription {
  function get_interval (line 26) | static double get_interval(double max_interval) {
  function timing_thread (line 38) | static void timing_thread(void* args) {
  function pyi_timing_thread_subscribe (line 57) | int pyi_timing_thread_subscribe(double desiredInterval) {
  function pyi_timing_thread_unsubscribe (line 111) | int pyi_timing_thread_unsubscribe(int id) {
  function pyi_timing_thread_get_time (line 142) | double pyi_timing_thread_get_time(void) {
  function pyi_timing_thread_get_interval (line 146) | double pyi_timing_thread_get_interval(void) {

FILE: pyinstrument/low_level/pyi_timing_thread_python.py
  class Subscription (line 12) | class Subscription:
    method __init__ (line 13) | def __init__(self, interval: float, id: int):
  function get_interval (line 21) | def get_interval(max_interval: float):
  function timing_thread (line 27) | def timing_thread():
  function pyi_timing_thread_subscribe (line 38) | def pyi_timing_thread_subscribe(desired_interval: float):
  function pyi_timing_thread_unsubscribe (line 62) | def pyi_timing_thread_unsubscribe(id: int):
  function pyi_timing_thread_get_time (line 79) | def pyi_timing_thread_get_time() -> float:
  function pyi_timing_thread_get_interval (line 83) | def pyi_timing_thread_get_interval() -> float:

FILE: pyinstrument/low_level/stat_profile.c
  function PyFrameObject (line 23) | static PyFrameObject *
  type ProfilerState (line 35) | typedef struct profiler_state {
  function ProfilerState_SetTarget (line 48) | static void ProfilerState_SetTarget(ProfilerState *self, PyObject *targe...
  function ProfilerState_UpdateContextVar (line 60) | static int ProfilerState_UpdateContextVar(ProfilerState *self) {
  function ProfilerState_GetTime (line 85) | static double ProfilerState_GetTime(ProfilerState *self) {
  function ProfilerState_Dealloc (line 115) | static void ProfilerState_Dealloc(ProfilerState *self) {
  function ProfilerState (line 169) | static ProfilerState *ProfilerState_New(void) {
  function stat_profile_init (line 207) | static int
  function PyObject (line 236) | static PyObject *
  function PyCodeObject (line 261) | static PyCodeObject *
  function PyObject (line 277) | static PyObject *
  function PyObject (line 365) | static PyObject *
  function _get_tracebackhide (line 466) | static const int
  function PyObject (line 495) | static PyObject *
  function _parse_timer_type (line 561) | static int
  function profile (line 594) | static int
  function PyObject (line 702) | static PyObject *
  function PyObject (line 796) | static PyObject *
  function measure_timing_overhead_for_timer (line 814) | static inline double
  function PyObject (line 834) | static PyObject *
  function PyObject (line 853) | static PyObject *
  function PyMODINIT_FUNC (line 881) | PyMODINIT_FUNC PyInit_stat_profile(void)

FILE: pyinstrument/low_level/stat_profile.pyi
  function setstatprofile (line 7) | def setstatprofile(
  function get_frame_info (line 14) | def get_frame_info(frame: types.FrameType) -> str: ...
  function measure_timing_overhead (line 15) | def measure_timing_overhead() -> Dict[TimerType, float]: ...
  function walltime_coarse_resolution (line 16) | def walltime_coarse_resolution() -> float | None: ...

FILE: pyinstrument/low_level/stat_profile_python.py
  class PythonStatProfiler (line 17) | class PythonStatProfiler:
    method __init__ (line 21) | def __init__(
    method __del__ (line 56) | def __del__(self):
    method profile (line 60) | def profile(self, frame: types.FrameType, event: str, arg: Any):
  function setstatprofile (line 96) | def setstatprofile(
  function get_frame_info (line 116) | def get_frame_info(frame: types.FrameType) -> str:

FILE: pyinstrument/magic/_utils.py
  class PrePostAstTransformer (line 10) | class PrePostAstTransformer(NodeTransformer):
    method __init__ (line 44) | def __init__(self, pre: str | ast.Module, post: str | ast.Module):
    method reset (line 62) | def reset(self):
    method visit_Module (line 76) | def visit_Module(self, node: ast.Module):

FILE: pyinstrument/magic/magic.py
  function _get_active_profiler (line 35) | def _get_active_profiler():
  class InterruptSilently (line 43) | class InterruptSilently(Exception):
  class PyinstrumentMagic (line 48) | class PyinstrumentMagic(Magics):
    method __init__ (line 49) | def __init__(self, shell):
    method recreate_transformer (line 53) | def recreate_transformer(self, target_description: str):
    method pyinstrument (line 179) | def pyinstrument(self, line, cell=None):
    method run_cell_async (line 294) | def run_cell_async(self, ip, code):
  function strip_ipython_frames_processor (line 326) | def strip_ipython_frames_processor(frame: Frame | None, options: Process...

FILE: pyinstrument/middleware.py
  function get_renderer (line 20) | def get_renderer(path) -> Renderer:
  class ProfilerMiddleware (line 37) | class ProfilerMiddleware(MiddlewareMixin):  # type: ignore
    method process_request (line 38) | def process_request(self, request):
    method process_response (line 59) | def process_response(self, request, response):

FILE: pyinstrument/processors.py
  function remove_importlib (line 25) | def remove_importlib(frame: Frame | None, options: ProcessorOptions) -> ...
  function remove_tracebackhide (line 41) | def remove_tracebackhide(frame: Frame | None, options: ProcessorOptions)...
  function aggregate_repeated_calls (line 59) | def aggregate_repeated_calls(frame: Frame | None, options: ProcessorOpti...
  function group_library_frames_processor (line 95) | def group_library_frames_processor(frame: Frame | None, options: Process...
  function merge_consecutive_self_time (line 152) | def merge_consecutive_self_time(
  function remove_unnecessary_self_time_nodes (line 182) | def remove_unnecessary_self_time_nodes(
  function remove_irrelevant_nodes (line 202) | def remove_irrelevant_nodes(
  function remove_first_pyinstrument_frames_processor (line 237) | def remove_first_pyinstrument_frames_processor(

FILE: pyinstrument/profiler.py
  class ActiveProfilerSession (line 23) | class ActiveProfilerSession:
    method __init__ (line 26) | def __init__(
  class Profiler (line 45) | class Profiler:
    method __init__ (line 56) | def __init__(
    method interval (line 78) | def interval(self) -> float:
    method async_mode (line 86) | def async_mode(self) -> AsyncMode:
    method last_session (line 112) | def last_session(self) -> Session | None:
    method start (line 118) | def start(
    method stop (line 171) | def stop(self) -> Session:
    method is_running (line 216) | def is_running(self):
    method reset (line 222) | def reset(self):
    method __enter__ (line 231) | def __enter__(self):
    method __exit__ (line 249) | def __exit__(self, *args: Any):
    method _sampler_saw_call_stack (line 253) | def _sampler_saw_call_stack(
    method print (line 292) | def print(
    method output_text (line 334) | def output_text(
    method output_html (line 365) | def output_html(
    method write_html (line 376) | def write_html(
    method open_in_browser (line 396) | def open_in_browser(self, timeline: bool = False, resample_interval: f...
    method output (line 406) | def output(self, renderer: renderers.Renderer) -> str:
    method _get_last_session_or_fail (line 416) | def _get_last_session_or_fail(self) -> Session:

FILE: pyinstrument/renderers/base.py
  class Renderer (line 16) | class Renderer:
    method __init__ (line 31) | def __init__(self):
    method render (line 34) | def render(self, session: Session) -> str:
    class MisconfigurationError (line 40) | class MisconfigurationError(Exception):
  class FrameRenderer (line 44) | class FrameRenderer(Renderer):
    method __init__ (line 66) | def __init__(
    method default_processors (line 105) | def default_processors(self) -> ProcessorList:
    method preprocess (line 111) | def preprocess(self, root_frame: Frame | None) -> Frame | None:
    method render (line 117) | def render(self, session: Session) -> str:

FILE: pyinstrument/renderers/console.py
  class ConsoleRenderer (line 22) | class ConsoleRenderer(FrameRenderer):
    method __init__ (line 28) | def __init__(
    method render (line 64) | def render(self, session: Session) -> str:
    method render_preamble (line 91) | def render_preamble(self, session: Session) -> str:
    method should_render_frame (line 123) | def should_render_frame(self, frame: Frame) -> bool:
    method should_render_frame_in_group (line 128) | def should_render_frame_in_group(self, frame: Frame) -> bool:
    method should_ignore_group (line 137) | def should_ignore_group(self, group: FrameGroup) -> bool:
    method group_description (line 145) | def group_description(self, group: FrameGroup) -> str:
    method libraries_for_frames (line 154) | def libraries_for_frames(self, frames: list[Frame]) -> list[str]:
    method render_frame (line 164) | def render_frame(
    method render_frame_flat (line 208) | def render_frame_flat(self, frame: Frame, precision: int) -> str:
    method frame_description (line 246) | def frame_description(
    method frame_proportion_of_total_time (line 275) | def frame_proportion_of_total_time(self, time: float) -> float:
    method _ansi_color_for_time (line 280) | def _ansi_color_for_time(self, time: float) -> str:
    method _ansi_color_for_name (line 292) | def _ansi_color_for_name(self, frame: Frame) -> str:
    method default_processors (line 298) | def default_processors(self) -> ProcessorList:
    class colors_enabled (line 310) | class colors_enabled:
    class colors_disabled (line 327) | class colors_disabled:

FILE: pyinstrument/renderers/html.py
  class HTMLRenderer (line 19) | class HTMLRenderer(Renderer):
    method __init__ (line 40) | def __init__(
    method render (line 73) | def render(self, session: Session):
    method open_in_browser (line 131) | def open_in_browser(self, session: Session, output_filename: str | Non...
  class JSONForHTMLRenderer (line 154) | class JSONForHTMLRenderer(FrameRenderer):
    method default_processors (line 164) | def default_processors(self) -> ProcessorList:
    method render (line 167) | def render(self, session: Session) -> str:

FILE: pyinstrument/renderers/html_resources/app.js
  function F (line 1) | function F(){}
  function ve (line 1) | function ve(i){return i()}
  function Pe (line 1) | function Pe(){return Object.create(null)}
  function oe (line 1) | function oe(i){i.forEach(ve)}
  function pt (line 1) | function pt(i){return typeof i=="function"}
  function re (line 1) | function re(i,e){return i!=i?e==e:i!==e||i&&typeof i=="object"||typeof i...
  function ki (line 1) | function ki(i){return Object.keys(i).length===0}
  function St (line 1) | function St(i,...e){if(i==null){for(const n of e)n(void 0);return F}cons...
  function ge (line 1) | function ge(i,e,t){i.$$.on_destroy.push(St(e,t))}
  function Ci (line 1) | function Ci(i,e,t){return i.set(t),e}
  function u (line 1) | function u(i,e){i.appendChild(e)}
  function S (line 1) | function S(i,e,t){i.insertBefore(e,t||null)}
  function L (line 1) | function L(i){i.parentNode&&i.parentNode.removeChild(i)}
  function f (line 1) | function f(i){return document.createElement(i)}
  function V (line 1) | function V(i){return document.createElementNS("http://www.w3.org/2000/sv...
  function I (line 1) | function I(i){return document.createTextNode(i)}
  function b (line 1) | function b(){return I(" ")}
  function Mi (line 1) | function Mi(){return I("")}
  function x (line 1) | function x(i,e,t,n){return i.addEventListener(e,t,n),()=>i.removeEventLi...
  function vt (line 1) | function vt(i){return function(e){return e.preventDefault(),i.call(this,...
  function gt (line 1) | function gt(i){return function(e){return e.stopPropagation(),i.call(this...
  function a (line 1) | function a(i,e,t){t==null?i.removeAttribute(e):i.getAttribute(e)!==t&&i....
  function _t (line 1) | function _t(i){let e;return{p(...t){e=t,e.forEach(n=>i.push(n))},r(){e.f...
  function Fi (line 1) | function Fi(i){return Array.from(i.childNodes)}
  function _e (line 1) | function _e(i,e){e=""+e,i.data!==e&&(i.data=e)}
  function ae (line 1) | function ae(i,e){i.value=e??""}
  function j (line 1) | function j(i,e,t,n){t==null?i.style.removeProperty(e):i.style.setPropert...
  function Ee (line 1) | function Ee(i,e,t){i.classList.toggle(e,!!t)}
  function Pi (line 1) | function Pi(i,e,{bubbles:t=!1,cancelable:n=!1}={}){return new CustomEven...
  class Ri (line 1) | class Ri{constructor(e=!1){T(this,"is_svg",!1);T(this,"e");T(this,"n");T...
    method constructor (line 1) | constructor(e=!1){T(this,"is_svg",!1);T(this,"e");T(this,"n");T(this,"...
    method c (line 1) | c(e){this.h(e)}
    method m (line 1) | m(e,t,n=null){this.e||(this.is_svg?this.e=V(t.nodeName):this.e=f(t.nod...
    method h (line 1) | h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName==="TEMPLATE"...
    method i (line 1) | i(e){for(let t=0;t<this.n.length;t+=1)S(this.t,this.n[t],e)}
    method p (line 1) | p(e){this.d(),this.h(e),this.i(this.a)}
    method d (line 1) | d(){this.n.forEach(L)}
  function Xe (line 1) | function Xe(i){Ye=i}
  function wt (line 1) | function wt(){if(!Ye)throw new Error("Function called outside component ...
  function bt (line 1) | function bt(i){wt().$$.on_mount.push(i)}
  function Ii (line 1) | function Ii(i){wt().$$.on_destroy.push(i)}
  function Li (line 1) | function Li(){const i=wt();return(e,t,{cancelable:n=!1}={})=>{const s=i....
  function Di (line 1) | function Di(){yt||(yt=!0,Si.then(Ht))}
  function Tt (line 1) | function Tt(i){De.push(i)}
  function Ht (line 1) | function Ht(){if(He!==0)return;const i=Ye;do{try{for(;He<Se.length;){con...
  function Hi (line 1) | function Hi(i){if(i.fragment!==null){i.update(),oe(i.before_update);cons...
  function Oi (line 1) | function Oi(i){const e=[],t=[];De.forEach(n=>i.indexOf(n)===-1?e.push(n)...
  function Oe (line 1) | function Oe(){Re={r:0,c:[],p:Re}}
  function Ve (line 1) | function Ve(){Re.r||oe(Re.c),Re=Re.p}
  function D (line 1) | function D(i,e){i&&i.i&&(nt.delete(i),i.i(e))}
  function N (line 1) | function N(i,e,t,n){if(i&&i.o){if(nt.has(i))return;nt.add(i),Re.c.push((...
  function Ot (line 1) | function Ot(i){return(i==null?void 0:i.length)!==void 0?i:Array.from(i)}
  function Vi (line 1) | function Vi(i,e){N(i,1,1,()=>{e.delete(i.key)})}
  function xi (line 1) | function xi(i,e,t,n,s,l,r,o,c,d,v,p){let m=i.length,h=l.length,g=m;const...
  function we (line 1) | function we(i){i&&i.c()}
  function ce (line 1) | function ce(i,e,t){const{fragment:n,after_update:s}=i.$$;n&&n.m(e,t),Tt(...
  function ue (line 1) | function ue(i,e){const t=i.$$;t.fragment!==null&&(Oi(t.after_update),oe(...
  function Ni (line 1) | function Ni(i,e){i.$$.dirty[0]===-1&&(Se.push(i),Di(),i.$$.dirty.fill(0)...
  function de (line 1) | function de(i,e,t,n,s,l,r=null,o=[-1]){const c=Ye;Xe(i);const d=i.$$={fr...
  class he (line 1) | class he{constructor(){T(this,"$$");T(this,"$$set")}$destroy(){ue(this,1...
    method constructor (line 1) | constructor(){T(this,"$$");T(this,"$$set")}
    method $destroy (line 1) | $destroy(){ue(this,1),this.$destroy=F}
    method $on (line 1) | $on(e,t){if(!pt(t))return F;const n=this.$$.callbacks[e]||(this.$$.cal...
    method $set (line 1) | $set(e){this.$$set&&!ki(e)&&(this.$$.skip_bound=!0,this.$$set(e),this....
  function Bi (line 1) | function Bi(i){let e,t;return{c(){e=V("svg"),t=V("path"),a(t,"fill-rule"...
  class zi (line 1) | class zi extends he{constructor(e){super(),de(this,e,null,Bi,re,{})}}
    method constructor (line 1) | constructor(e){super(),de(this,e,null,Bi,re,{})}
  function Wi (line 1) | function Wi(i){let e,t,n,s,l,r,o,c,d,v,p,m,h,g,w,E,C;return{c(){e=V("svg...
  class qi (line 1) | class qi extends he{constructor(e){super(),de(this,e,null,Wi,re,{})}}
    method constructor (line 1) | constructor(e){super(),de(this,e,null,Wi,re,{})}
  function Ui (line 1) | function Ui(i,e){return{subscribe:st(i,e).subscribe}}
  function st (line 1) | function st(i,e=F){let t;const n=new Set;function s(o){if(re(i,o)&&(i=o,...
  function Vt (line 1) | function Vt(i,e,t){const n=!Array.isArray(i),s=n?[i]:i;if(!s.every(Boole...
  function Yi (line 1) | function Yi(i){return i==="local"?localStorage:sessionStorage}
  function kt (line 1) | function kt(i,e,t){var n,s,l,r,o,c,d,v;t!=null&&t.onError&&console.warn(...
  function xt (line 1) | function xt(){return{collapseMode:"non-application",collapseCustomHide:"...
  method beforeRead (line 1) | beforeRead(i){return{...xt(),...i}}
  class Xi (line 1) | class Xi extends Error{constructor(e){super(`Unreachable case: ${e}`)}}
    method constructor (line 1) | constructor(e){super(`Unreachable case: ${e}`)}
  function Gi (line 1) | function Gi(i,e){const t=e*(i.length-1),n=Math.floor(t),s=Math.ceil(t),l...
  function ji (line 1) | function ji(i,e,t){return i===1/0?(console.warn("clamp: value is Infinit...
  function Ne (line 1) | function Ne(i,e){const{from:t=[0,1],to:n=[0,1]}=e,s=e.clamp||!1;let l=(i...
  function Zi (line 1) | function Zi(i,e){return`rgb(
  function Ki (line 5) | function Ki(i){if(i.substr(0,1)=="#"){var e=(i.length-1)/3,t=[17,1,.0622...
  function Qi (line 5) | function Qi(i,e,t={}){const{ignore:n=[],capture:s=!0}=t,l=window;if(!l)r...
  function Ji (line 5) | function Ji(i){const e=document.createElement("div");return e.appendChil...
  function Ct (line 5) | function Ct(i){return Ji(i).replace(/(\/|\\)/g,t=>`${t}<wbr>`)}
  function en (line 5) | function en(i,e){if(i.length==0)return null;let t=i[0],n=e(t);for(const ...
  function ot (line 5) | function ot(){return Math.random().toString(36).substring(2)}
  function tn (line 5) | function tn(i){let e,t,n,s,l,r,o,c,d,v,p,m,h,g,w,E,C,y,k,H,W,P,M,_,A,R,B...
  function nn (line 10) | function nn(i,e,t){let n;ge(i,Z,k=>t(0,n=k));const s=ot();function l(){r...
  class sn (line 10) | class sn extends he{constructor(e){super(),de(this,e,nn,tn,re,{})}}
    method constructor (line 10) | constructor(e){super(),de(this,e,nn,tn,re,{})}
  function on (line 10) | function on(i){let e,t,n,s,l,r,o,c,d,v,p,m,h,g,w,E,C,y,k,H,W,P,M,_;retur...
  function rn (line 10) | function rn(i,e,t){let n;ge(i,je,c=>t(0,n=c));const s=ot();function l(){...
  class ln (line 10) | class ln extends he{constructor(e){super(),de(this,e,rn,on,re,{})}}
    method constructor (line 10) | constructor(e){super(),de(this,e,rn,on,re,{})}
  function an (line 10) | function an(i){let e,t;return e=new ln({}),{c(){we(e.$$.fragment)},m(n,s...
  function cn (line 10) | function cn(i){let e,t;return e=new sn({}),{c(){we(e.$$.fragment)},m(n,s...
  function un (line 10) | function un(i){let e,t,n,s,l,r,o,c,d;const v=[cn,an],p=[];function m(h,g...
  function dn (line 10) | function dn(i,e,t){let n;ge(i,Ge,m=>t(0,n=m));const s=Li();function l(){...
  class hn (line 10) | class hn extends he{constructor(e){super(),de(this,e,dn,un,re,{})}}
    method constructor (line 10) | constructor(e){super(),de(this,e,dn,un,re,{})}
  function Nt (line 10) | function Nt(i){let e,t;return e=new hn({}),e.$on("close",i[9]),{c(){we(e...
  function fn (line 10) | function fn(i){let e,t,n,s,l,r,o,c,d=Ct(i[0].target_description)+"",v,p,...
  function mn (line 14) | function mn(i,e,t){let n;ge(i,Ge,h=>t(2,n=h));let{session:s}=e;const l=n...
  class pn (line 14) | class pn extends he{constructor(e){super(),de(this,e,mn,fn,re,{session:0...
    method constructor (line 14) | constructor(e){super(),de(this,e,mn,fn,re,{session:0})}
  function zt (line 14) | function zt(i){return i>.6?"#FF4159":i>.3?"#F5A623":i>.15?"#D8CB2A":i>.0...
  function Wt (line 14) | function Wt(i,e,t){const n=i.slice();return n[21]=e[t],n}
  function qt (line 14) | function qt(i){let e,t,n,s,l,r,o,c,d,v,p,m,h,g,w,E,C;return{c(){e=f("div...
  function Ut (line 14) | function Ut(i){let e,t,n,s,l=i[0].group.frames.length-1+"",r,o,c,d,v,p;r...
  function Yt (line 14) | function Yt(i){let e,t=[],n=new Map,s,l=Ot(i[0].children);const r=o=>o[2...
  function Xt (line 14) | function Xt(i,e){let t,n,s;return n=new Kt({props:{frame:e[21],rootFrame...
  function gn (line 14) | function gn(i){let e,t,n,s,l=i[3]&&qt(i),r=i[0].group&&i[0].group.rootFr...
  function Gt (line 14) | function Gt(){const i='a:not([disabled]), button:not([disabled]), input[...
  function jt (line 14) | function jt(){const i=Gt();var e=i.indexOf(document.activeElement);if(e>...
  function Zt (line 14) | function Zt(){const i=Gt();var e=i.indexOf(document.activeElement);if(e>...
  function _n (line 14) | function _n(i,e,t){let n,s,l,r,o;ge(i,Bt,_=>t(16,l=_)),ge(i,$t,_=>t(17,r...
  method constructor (line 14) | constructor(e){super(),de(this,e,_n,gn,re,{frame:0,rootFrame:1,indent:2})}
  function Qt (line 14) | function Qt(i,e,t){let n=i;for(const s of e)if(n=s(n,t),!n)return null;r...
  class Ke (line 14) | class Ke{constructor(e,t){T(this,"uuid",ot());T(this,"identifier");T(thi...
    method constructor (line 14) | constructor(e,t){T(this,"uuid",ot());T(this,"identifier");T(this,"_ide...
    method cloneDeep (line 14) | cloneDeep(){return new Ke(this,this.context)}
    method children (line 14) | get children(){return this._children}
    method addChild (line 14) | addChild(e,t={}){if(e.removeFromParent(),e.parent=this,t.after){const ...
    method addChildren (line 14) | addChildren(e,t={}){e=e.slice(),t.after?(e.slice().reverse(),e.forEach...
    method removeFromParent (line 14) | removeFromParent(){if(this.parent){const e=this.parent._children.index...
    method getAttributes (line 14) | getAttributes(e){return Object.keys(this.attributes).filter(n=>n.start...
    method getAttributeValue (line 14) | getAttributeValue(e){const t=this.getAttributes(e);if(!t||t.length==0)...
    method hasTracebackHide (line 14) | get hasTracebackHide(){return this.getAttributeValue(An)=="1"}
    method function (line 14) | get function(){return this._identifierParts[0]}
    method filePath (line 14) | get filePath(){return this._identifierParts[1]??null}
    method lineNo (line 14) | get lineNo(){const e=this._identifierParts[2];return e?parseInt(e):null}
    method isSynthetic (line 14) | get isSynthetic(){return yn.includes(this.identifier)}
    method filePathShort (line 14) | get filePathShort(){return this.isSynthetic&&this.parent?this.parent.f...
    method isApplicationCode (line 14) | get isApplicationCode(){if(this.isSynthetic)return!1;const e=this.file...
    method proportionOfParent (line 14) | get proportionOfParent(){return this.parent?this.time/this.parent.time:1}
    method className (line 14) | get className(){return this.getAttributeValue(Tn)??""}
    method library (line 14) | get library(){const e=this.filePathShort;return e?/^[\\/.]*[^\\/.]*/.e...
  class En (line 14) | class En{constructor(e){T(this,"id");T(this,"rootFrame");T(this,"_frames...
    method constructor (line 14) | constructor(e){T(this,"id");T(this,"rootFrame");T(this,"_frames",[]);t...
    method addFrame (line 14) | addFrame(e){e.group&&e.group.removeFrame(e),this._frames.push(e),e.gro...
    method removeFrame (line 14) | removeFrame(e){if(e.group!==this)throw new Error("Frame not in group."...
    method frames (line 14) | get frames(){return this._frames}
    method exitFrames (line 14) | get exitFrames(){const e=[];for(const t of this.frames){let n=!1;for(c...
    method libraries (line 14) | get libraries(){const e=[];for(const t of this.frames){const n=t.libra...
  function rt (line 14) | function rt(i,e){const{replaceWith:t}=e,n=i.parent;if(!n)throw new Error...
  function kn (line 14) | function kn(i,e){if(i.parent!==e.parent)throw new Error("Both frames mus...
  function Mt (line 14) | function Mt(i,e){if(e&&i.children&&i.children.forEach(t=>{Mt(t,!0)}),i.g...
  function Ft (line 14) | function Ft(i,e){if(!i)return null;for(const t of i.children)Ft(t),t.fil...
  function Pt (line 14) | function Pt(i,e){if(!i)return null;for(const t of i.children)Pt(t),t.has...
  function Jt (line 14) | function Jt(i,e){if(!i)return null;const t={};for(const n of i.children....
  function ei (line 14) | function ei(i,e){if(!i)return null;const t=e.hideRegex,n=e.showRegex;fun...
  function ti (line 14) | function ti(i,e,t=!0){if(!i)return null;let n=null;for(const s of i.chil...
  function ii (line 14) | function ii(i,e){return i?(i.children.length===1&&i.children[0].identifi...
  function ni (line 14) | function ni(i,e,t=null){if(!i)return null;t===null&&(t=i.time,t<=0&&(t=1...
  function si (line 14) | function si(i,e){if(!i)return null;const t=o=>en(o,c=>c.time),n=o=>{var ...
  function oi (line 14) | function oi(i,e){return i?(i.children.forEach(t=>oi(t)),i.group&&i.group...
  function Cn (line 14) | function Cn(i){let e,t,n;return t=new Kt({props:{frame:i[3],rootFrame:i[...
  function Mn (line 14) | function Mn(i){let e;return{c(){e=f("div"),e.innerHTML='<div class="erro...
  function Fn (line 14) | function Fn(i){let e,t,n,s,l,r,o;const c=[Mn,Cn],d=[];function v(p,m){re...
  function Pn (line 14) | function Pn(i,e,t){let n,{session:s}=e;const l=Vt([Z],([h])=>{const g=[h...
  class Rn (line 14) | class Rn extends he{constructor(e){super(),de(this,e,Pn,Fn,re,{session:5...
    method constructor (line 14) | constructor(e){super(),de(this,e,Pn,Fn,re,{session:5})}
  class In (line 14) | class In{constructor(e){T(this,"mediaQueryList",null);this.onDevicePixel...
    method constructor (line 14) | constructor(e){T(this,"mediaQueryList",null);this.onDevicePixelRatioCh...
    method createMediaQueryList (line 14) | createMediaQueryList(){this.removeMediaQueryList();let e=`(resolution:...
    method removeMediaQueryList (line 14) | removeMediaQueryList(){var e;(e=this.mediaQueryList)==null||e.removeEv...
    method _onChange (line 14) | _onChange(e){this.onDevicePixelRatioChanged(),this.createMediaQueryLis...
    method destroy (line 14) | destroy(){this.removeMediaQueryList()}
  class Ln (line 14) | class Ln{constructor(e){T(this,"canvas");T(this,"_size_observer");T(this...
    method constructor (line 14) | constructor(e){T(this,"canvas");T(this,"_size_observer");T(this,"_devi...
    method destroy (line 14) | destroy(){this._size_observer.disconnect(),this._devicePixelRatioObser...
    method setNeedsRedraw (line 14) | setNeedsRedraw(){this.drawAnimationRequest===null&&(this.drawAnimation...
    method redrawIfNeeded (line 14) | redrawIfNeeded(){this.drawAnimationRequest!==null&&(window.cancelAnima...
    method canvasViewRedraw (line 14) | canvasViewRedraw(){const e=this.canvas.getContext("2d");e&&(e.resetTra...
    method width (line 14) | get width(){return this.canvas.width/window.devicePixelRatio}
    method height (line 14) | get height(){return this.canvas.height/window.devicePixelRatio}
    method setCanvasSize (line 14) | setCanvasSize(){const e=window.devicePixelRatio;this.canvas.height=thi...
  function Sn (line 14) | function Sn(i){let e,t=i[2]=="self"?"self":"time",n,s,l,r=i[3](i[0].time...
  function Dn (line 14) | function Dn(i){let e,t,n,s,l=i[3](i[0].time)+"",r,o=i[0].selfTime/i[0].t...
  function ri (line 14) | function ri(i){let e,t,n,s=i[3](i[0].selfTime)+"";return{c(){e=f("div"),...
  function Hn (line 14) | function Hn(i){let e,t,n=i[0].name+"",s,l,r,o,c,d,v,p,m,h;function g(C,y...
  function li (line 14) | function li(i){return i.selfTime==i.time?"self":i.selfTime/i.time>.001?"...
  function On (line 14) | function On(i,e){i.font=ai;const t=li(e)=="both"?140:70,n=i.measureText(...
  function xn (line 14) | function xn(i,e,t){let{f:n}=e,s,l;function r(o){return`<span style="colo...
  class Nn (line 14) | class Nn extends he{constructor(e){super(),de(this,e,xn,Hn,re,{f:0})}}
    method constructor (line 14) | constructor(e){super(),de(this,e,xn,Hn,re,{f:0})}
  class Wn (line 14) | class Wn extends Ln{constructor(t){super(t);T(this,"zoom",1);T(this,"sta...
    method constructor (line 14) | constructor(t){super(t);T(this,"zoom",1);T(this,"startT",0);T(this,"yO...
    method destroy (line 14) | destroy(){this.canvas.removeEventListener("wheel",this.onWheel),this.c...
    method setRootFrame (line 14) | setRootFrame(t){this._rootFrame=t,this.frames=[],this._frameMaxT=void ...
    method _collectFrames (line 14) | _collectFrames(t,n){this.frames.push({frame:t,depth:n,isApplicationCod...
    method updateTooltip (line 14) | updateTooltip(t,n){var s,l;if(n){const r={name:this.frameName(n),time:...
    method redraw (line 14) | redraw(t,n){const{width:s,height:l}=n;(s!==this.lastDrawWidth||l!==thi...
    method drawAxes (line 14) | drawAxes(t){const n=Math.max(800,this.width)/this.zoom;if(n==0)return;...
    method drawAxis (line 14) | drawAxis(t,n,s,l=!1){t.fillStyle="white";const r=Math.floor(this.start...
    method drawFrame (line 14) | drawFrame(t,n){const{x:s,y:l,w:r,h:o}=this.frameDims(n);if(s+r<0||s>th...
    method _assignLibraryOrder (line 14) | _assignLibraryOrder(){const t={};for(const s of this.frames){const r=s...
    method colorForLibraryIndex (line 14) | colorForLibraryIndex(t){if(this._colors[t]!==void 0)return this._color...
    method libraryIndexForFrame (line 14) | libraryIndexForFrame(t){this._libraryOrder||this._assignLibraryOrder()...
    method colorForFrame (line 14) | colorForFrame(t){const n=this.libraryIndexForFrame(t);return this.colo...
    method frameMaxT (line 14) | get frameMaxT(){return this._frameMaxT===void 0&&(this._frameMaxT=this...
    method maxYOffset (line 14) | get maxYOffset(){return Math.max(0,(this.maxDepth+1)*ci+lt*2+ui-this.h...
    method minZoom (line 14) | get minZoom(){return(this.width-2*Ie)/this.frameMaxT}
    method maxZoom (line 14) | get maxZoom(){return 6666666666666667e-8}
    method fitContents (line 14) | fitContents(){this.startT=0,this.zoom=this.minZoom,this.isZoomedIn=!1}
    method clampViewport (line 14) | clampViewport(){this.zoom<this.minZoom?(this.zoom=this.minZoom,this.is...
    method frameDims (line 14) | frameDims(t){const n=t.depth*ci+lt+ui-this.yOffset,s=Bn;let l=this.xFo...
    method xForT (line 14) | xForT(t){return(t-this.startT)*this.zoom+Ie}
    method tForX (line 14) | tForX(t){return(t-Ie)/this.zoom+this.startT}
    method frameName (line 14) | frameName(t){let n;return t.className?n=`${t.className}.${t.frame.func...
    method frameSelfTime (line 14) | frameSelfTime(t){let n=t.frame.time;const s=t.frame.children.filter(l=...
    method hitTest (line 14) | hitTest(t){for(const n of this.frames){const{x:s,y:l,w:r,h:o}=this.fra...
    method onWheel (line 14) | onWheel(t){const n=t.ctrlKey||t.metaKey,s=n?.01:.0023,l=this.tForX(t.o...
    method onMouseMove (line 14) | onMouseMove(t){const n={x:t.offsetX,y:t.offsetY},s=this.mouseLocation;...
    method onMouseLeave (line 14) | onMouseLeave(t){this.mouseLocation=null,this.tooltipLocation=null,this...
    method onMouseDown (line 14) | onMouseDown(t){(t.button===0||t.button===1)&&(this.mouseDownLocation={...
    method windowMouseUp (line 14) | windowMouseUp(t){window.removeEventListener("mouseup",this.windowMouse...
    method onTouchstart (line 14) | onTouchstart(t){t.preventDefault(),t.stopPropagation();for(const n of ...
    method onTouchmove (line 14) | onTouchmove(t){t.preventDefault(),t.stopPropagation();let n=0;for(cons...
    method onTouchend (line 14) | onTouchend(t){t.preventDefault(),t.stopPropagation();for(const n of Ar...
    method onTouchcancel (line 14) | onTouchcancel(t){t.preventDefault(),t.stopPropagation();for(const n of...
    method adjustXAxisForTouches (line 14) | adjustXAxisForTouches(){const t=Object.keys(this.touches).map(Number);...
  function qn (line 14) | function qn(i){let e;return{c(){e=f("div"),e.innerHTML="",a(e,"class","t...
  function Un (line 14) | function Un(i,e,t){let n,{session:s}=e;const l=Vt([je],([v])=>({processo...
  class Yn (line 14) | class Yn extends he{constructor(e){super(),de(this,e,Un,qn,re,{session:2...
    method constructor (line 14) | constructor(e){super(),de(this,e,Un,qn,re,{session:2})}
  function Xn (line 14) | function Xn(i){let e,t,n=i[1].viewMode+"",s;return{c(){e=f("div"),t=I("U...
  function Gn (line 14) | function Gn(i){let e,t;return e=new Yn({props:{session:i[0]}}),{c(){we(e...
  function jn (line 14) | function jn(i){let e,t;return e=new Rn({props:{session:i[0]}}),{c(){we(e...
  function Zn (line 14) | function Zn(i){let e;return{c(){e=f("div"),e.innerHTML='<div class="spac...
  function Kn (line 14) | function Kn(i){let e,t,n,s,l,r,o,c;n=new pn({props:{session:i[0]}});cons...
  function Qn (line 14) | function Qn(i,e,t){let n;ge(i,Ge,p=>t(1,n=p));let{session:s}=e;const l=d...
  class Jn (line 14) | class Jn extends he{constructor(e){super(),de(this,e,Qn,Kn,re,{session:0...
    method constructor (line 14) | constructor(e){super(),de(this,e,Qn,Kn,re,{session:0})}
  class es (line 14) | class es{constructor(e){T(this,"startTime");T(this,"duration");T(this,"m...
    method constructor (line 14) | constructor(e){T(this,"startTime");T(this,"duration");T(this,"minInter...
    method shortenPath (line 14) | shortenPath(e){if(this._shortenPathCache[e])return this._shortenPathCa...
  function $e (line 14) | function $e(i){return i.split(/[/\\]/)}
  function di (line 14) | function di(i){const e=$e(i);return e.length>0&&e[0].endsWith(":")?e[0]:...
  function ts (line 14) | function ts(i,e){if(di(i)!=di(e))return i;const t=$e(i),n=$e(e);let s=0;...
  method render (line 14) | render(i,e){const t=new es(e);return new Jn({target:i,props:{session:t}})}

FILE: pyinstrument/renderers/jsonrenderer.py
  function encode_bool (line 20) | def encode_bool(a_bool: bool):
  class JSONRenderer (line 24) | class JSONRenderer(FrameRenderer):
    method __init__ (line 31) | def __init__(self, **kwargs: Any):
    method render_frame (line 34) | def render_frame(self, frame: Frame | None):
    method render (line 65) | def render(self, session: Session):
    method default_processors (line 78) | def default_processors(self) -> ProcessorList:

FILE: pyinstrument/renderers/pstatsrenderer.py
  class PstatsRenderer (line 19) | class PstatsRenderer(FrameRenderer):
    method __init__ (line 28) | def __init__(self, **kwargs: Any):
    method frame_key (line 31) | def frame_key(self, frame: Frame) -> FrameKey:
    method render_frame (line 34) | def render_frame(self, frame: Frame | None, stats: StatsDict) -> None:
    method render (line 77) | def render(self, session: Session):
    method default_processors (line 87) | def default_processors(self) -> ProcessorList:

FILE: pyinstrument/renderers/session.py
  class SessionRenderer (line 7) | class SessionRenderer(Renderer):
    method __init__ (line 10) | def __init__(self, tree_format: bool = False):
    method render (line 14) | def render(self, session: Session) -> str:

FILE: pyinstrument/renderers/speedscope.py
  class SpeedscopeFrame (line 18) | class SpeedscopeFrame:
  class SpeedscopeEventType (line 32) | class SpeedscopeEventType(Enum):
  class SpeedscopeEvent (line 40) | class SpeedscopeEvent:
  class SpeedscopeProfile (line 53) | class SpeedscopeProfile:
  class SpeedscopeFile (line 67) | class SpeedscopeFile:
  class SpeedscopeEncoder (line 84) | class SpeedscopeEncoder(json.JSONEncoder):
    method default (line 90) | def default(self, o: Any) -> Any:
  class SpeedscopeRenderer (line 117) | class SpeedscopeRenderer(FrameRenderer):
    method __init__ (line 130) | def __init__(self, **kwargs: Any):
    method render_frame (line 144) | def render_frame(self, frame: Frame | None) -> list[SpeedscopeEvent]:
    method render (line 209) | def render(self, session: Session):
    method default_processors (line 229) | def default_processors(self) -> ProcessorList:

FILE: pyinstrument/session.py
  class Session (line 23) | class Session:
    method __init__ (line 24) | def __init__(
    method load (line 58) | def load(filename: PathOrStr) -> Session:
    method save (line 68) | def save(self, filename: PathOrStr) -> None:
    method to_json (line 77) | def to_json(self, include_frame_records: bool = True):
    method from_json (line 97) | def from_json(json_dict: dict[str, Any]):
    method combine (line 113) | def combine(session1: Session, session2: Session) -> Session:
    method current_sys_prefixes (line 144) | def current_sys_prefixes() -> list[str]:
    method root_frame (line 147) | def root_frame(self, trim_stem: bool = True) -> Frame | None:
    method _trim_stem (line 165) | def _trim_stem(self, frame: Frame):
    method shorten_path (line 187) | def shorten_path(self, path: str) -> str:
    method _resample_frame_records (line 218) | def _resample_frame_records(
    method resample (line 236) | def resample(self, interval: float) -> Session:

FILE: pyinstrument/stack_sampler.py
  class StackSamplerSubscriber (line 32) | class StackSamplerSubscriber:
    method __init__ (line 33) | def __init__(
  class StackSampler (line 54) | class StackSampler:
    method __init__ (line 63) | def __init__(self) -> None:
    method subscribe (line 70) | def subscribe(
    method unsubscribe (line 100) | def unsubscribe(self, target: StackSamplerSubscriberTarget):
    method _update (line 115) | def _update(self):
    method _start_sampling (line 136) | def _start_sampling(self, interval: float, use_timing_thread: bool):
    method _stop_sampling (line 169) | def _stop_sampling(self):
    method _sample (line 174) | def _sample(self, frame: types.FrameType, event: str, arg: Any):
    method _timer (line 205) | def _timer(self):
    method _check_timing_overhead (line 211) | def _check_timing_overhead(self, interval: float, timer_type: TimerType):
    class SubscriberNotFound (line 273) | class SubscriberNotFound(Exception):
  function get_stack_sampler (line 277) | def get_stack_sampler() -> StackSampler:
  function build_call_stack (line 290) | def build_call_stack(frame: types.FrameType | None, event: str, arg: Any...
  class AsyncState (line 322) | class AsyncState(NamedTuple):
  function timing_overhead (line 344) | def timing_overhead() -> dict[TimerType, float]:

FILE: pyinstrument/typing.py
  class _LiteralStr (line 9) | class _LiteralStr:
    method __getitem__ (line 10) | def __getitem__(self, values):
  function assert_never (line 15) | def assert_never(value: Any):

FILE: pyinstrument/util.py
  function object_with_import_path (line 13) | def object_with_import_path(import_path: str) -> Any:
  function truncate (line 22) | def truncate(string: str, max_length: int) -> str:
  function deprecated (line 29) | def deprecated(func: Callable[..., Any], *args: Any, **kwargs: Any) -> Any:
  function deprecated_option (line 39) | def deprecated_option(option_name: str, message: str = "") -> Any:
  function file_supports_color (line 55) | def file_supports_color(file_obj: IO[AnyStr]) -> bool:
  function file_supports_unicode (line 70) | def file_supports_unicode(file_obj: IO[AnyStr]) -> bool:
  function file_is_a_tty (line 80) | def file_is_a_tty(file_obj: IO[AnyStr]) -> bool:
  function unwrap (line 84) | def unwrap(string: str) -> str:
  function format_float_with_sig_figs (line 90) | def format_float_with_sig_figs(value: float, sig_figs: int = 3, trim_zer...
  function strtobool (line 109) | def strtobool(val: str) -> bool:

FILE: pyinstrument/vendor/appdirs.py
  function user_data_dir (line 63) | def user_data_dir(appname=None, appauthor=None, version=None, roaming=Fa...
  function site_data_dir (line 118) | def site_data_dir(appname=None, appauthor=None, version=None, multipath=...
  function user_config_dir (line 184) | def user_config_dir(appname=None, appauthor=None, version=None, roaming=...
  function site_config_dir (line 228) | def site_config_dir(appname=None, appauthor=None, version=None, multipat...
  function user_cache_dir (line 283) | def user_cache_dir(appname=None, appauthor=None, version=None, opinion=T...
  function user_state_dir (line 340) | def user_state_dir(appname=None, appauthor=None, version=None, roaming=F...
  function user_log_dir (line 382) | def user_log_dir(appname=None, appauthor=None, version=None, opinion=True):
  class AppDirs (line 433) | class AppDirs(object):
    method __init__ (line 435) | def __init__(self, appname=None, appauthor=None, version=None,
    method user_data_dir (line 444) | def user_data_dir(self):
    method site_data_dir (line 449) | def site_data_dir(self):
    method user_config_dir (line 454) | def user_config_dir(self):
    method site_config_dir (line 459) | def site_config_dir(self):
    method user_cache_dir (line 464) | def user_cache_dir(self):
    method user_state_dir (line 469) | def user_state_dir(self):
    method user_log_dir (line 474) | def user_log_dir(self):
  function _get_win_folder_from_registry (line 481) | def _get_win_folder_from_registry(csidl_name):
  function _get_win_folder_with_ctypes (line 505) | def _get_win_folder_with_ctypes(csidl_name):
  function _get_win_folder_with_jna (line 531) | def _get_win_folder_with_jna(csidl_name):

FILE: pyinstrument/vendor/decorator.py
  function get_init (line 48) | def get_init(cls):
  function getfullargspec (line 55) | def getfullargspec(f):
  function get_init (line 59) | def get_init(cls):
  function iscoroutinefunction (line 66) | def iscoroutinefunction(f):
  class FunctionMaker (line 74) | class FunctionMaker(object):
    method __init__ (line 87) | def __init__(self, func=None, name=None, signature=None,
    method update (line 139) | def update(self, func, **kw):
    method make (line 156) | def make(self, src_templ, evaldict=None, addsource=False, **attrs):
    method create (line 192) | def create(cls, obj, body, evaldict, defaults=None,
  function decorate (line 219) | def decorate(func, caller, extras=()):
  function decorator (line 237) | def decorator(caller, _func=None):
  class ContextManager (line 282) | class ContextManager(_GeneratorContextManager):
    method __call__ (line 283) | def __call__(self, func):
  function __init__ (line 293) | def __init__(self, g, *a, **k):
  function __init__ (line 299) | def __init__(self, g, *a, **k):
  function contextmanager (line 306) | def contextmanager(func):
  function append (line 313) | def append(a, vancestors):
  function dispatch_on (line 331) | def dispatch_on(*dispatch_args):

FILE: pyinstrument/vendor/keypath.py
  function value_at_keypath (line 38) | def value_at_keypath(obj: Any, keypath: str) -> Any:
  function set_value_at_keypath (line 62) | def set_value_at_keypath(obj: Any, keypath: str, val: Any):

FILE: test/conftest.py
  function pytest_addoption (line 8) | def pytest_addoption(parser) -> None:
  function pytest_configure (line 20) | def pytest_configure(config):
  function pytest_collection_modifyitems (line 26) | def pytest_collection_modifyitems(config, items) -> None:
  function check_sampler_state (line 42) | def check_sampler_state():

FILE: test/fake_time_util.py
  class FakeClock (line 14) | class FakeClock:
    method __init__ (line 15) | def __init__(self) -> None:
    method get_time (line 18) | def get_time(self):
    method sleep (line 21) | def sleep(self, duration):
  function fake_time (line 26) | def fake_time(fake_clock=None):
  class FakeClockAsyncio (line 37) | class FakeClockAsyncio:
    method __init__ (line 42) | def __init__(self) -> None:
    method get_time (line 45) | def get_time(self):
    method sleep (line 48) | def sleep(self, duration):
    method _virtual_select (line 51) | def _virtual_select(self, orig_select, timeout):
  function fake_time_asyncio (line 57) | def fake_time_asyncio(loop=None):
  class FakeClockTrio (line 75) | class FakeClockTrio:
    method __init__ (line 76) | def __init__(self, clock: "MockClock") -> None:
    method get_time (line 79) | def get_time(self):
    method sleep (line 82) | def sleep(self, duration):
  function fake_time_trio (line 87) | def fake_time_trio():

FILE: test/low_level/test_context.py
  function test_context_type (line 14) | def test_context_type(setstatprofile):
  function test_context_tracking (line 26) | def test_context_tracking(setstatprofile):

FILE: test/low_level/test_custom_timer.py
  class CallCounter (line 6) | class CallCounter:
    method __init__ (line 7) | def __init__(self) -> None:
    method __call__ (line 10) | def __call__(self, *args: Any, **kwds: Any) -> Any:
  function test_increment (line 15) | def test_increment(setstatprofile):

FILE: test/low_level/test_floatclock.py
  function test_floatclock (line 15) | def test_floatclock():
  function test_is_in_seconds (line 22) | def test_is_in_seconds():

FILE: test/low_level/test_frame_info.py
  class AClass (line 9) | class AClass:
    method get_frame_info_for_a_method (line 10) | def get_frame_info_for_a_method(self, getter_function, del_local):
    method get_frame_info_with_cell_variable (line 17) | def get_frame_info_with_cell_variable(self, getter_function, del_local):
    method get_frame_info_for_a_class_method (line 31) | def get_frame_info_for_a_class_method(cls, getter_function, del_local):
    method get_frame_info_for_a_class_method_where_cls_is_reassigned (line 39) | def get_frame_info_for_a_class_method_where_cls_is_reassigned(cls, get...
  function test_frame_info (line 48) | def test_frame_info():
  function test_frame_info_hide_true (line 55) | def test_frame_info_hide_true():
  function test_frame_info_hide_false (line 64) | def test_frame_info_hide_false():
  function test_frame_info_with_classes (line 92) | def test_frame_info_with_classes(test_function, del_local):

FILE: test/low_level/test_setstatprofile.py
  class CallCounter (line 11) | class CallCounter:
    method __init__ (line 12) | def __init__(self) -> None:
    method __call__ (line 15) | def __call__(self, *args: Any, **kwds: Any) -> Any:
  function test_100ms (line 21) | def test_100ms(setstatprofile):
  function test_10ms (line 31) | def test_10ms(setstatprofile):
  function test_internal_object_compatibility (line 40) | def test_internal_object_compatibility(setstatprofile):

FILE: test/low_level/test_threaded.py
  class CallCounter (line 15) | class CallCounter:
    method __init__ (line 16) | def __init__(self, thread) -> None:
    method __call__ (line 20) | def __call__(self, *args: Any, **kwds: Any) -> Any:
  function test_threaded (line 25) | def test_threaded():

FILE: test/low_level/test_timing_thread.py
  function test (line 48) | def test():
  function test_max_subscribers (line 87) | def test_max_subscribers():

FILE: test/test_cmdline.py
  class TestCommandLine (line 26) | class TestCommandLine:
    method _suppress_warnings (line 28) | def _suppress_warnings(self, monkeypatch: pytest.MonkeyPatch):
    method test_command_line (line 31) | def test_command_line(self, pyinstrument_invocation, tmp_path: Path):
    method test_module_running (line 41) | def test_module_running(self, pyinstrument_invocation, tmp_path: Path):
    method test_single_file_module_running (line 53) | def test_single_file_module_running(self, pyinstrument_invocation, tmp...
    method test_running_yourself_as_module (line 64) | def test_running_yourself_as_module(self, pyinstrument_invocation):
    method test_path (line 69) | def test_path(self, pyinstrument_invocation, tmp_path: Path, monkeypat...
    method test_program_passed_as_string (line 83) | def test_program_passed_as_string(self, pyinstrument_invocation, tmp_p...
    method test_script_execution_details (line 114) | def test_script_execution_details(self, pyinstrument_invocation, tmp_p...
    method test_module_execution_details (line 135) | def test_module_execution_details(self, pyinstrument_invocation, tmp_p...
    method test_path_execution_details (line 160) | def test_path_execution_details(self, pyinstrument_invocation, tmp_pat...
    method test_program_passed_as_string_execution_details (line 193) | def test_program_passed_as_string_execution_details(
    method test_session_save_and_load (line 214) | def test_session_save_and_load(self, pyinstrument_invocation, tmp_path...
    method test_interval (line 239) | def test_interval(self, pyinstrument_invocation, tmp_path: Path):
    method test_invocation_machinery_is_trimmed (line 255) | def test_invocation_machinery_is_trimmed(self, pyinstrument_invocation...
    method test_target_description (line 280) | def test_target_description(self, pyinstrument_invocation, tmp_path: P...
    method test_target_description_format (line 295) | def test_target_description_format(self, pyinstrument_invocation, tmp_...
    method test_target_description_format_errors (line 310) | def test_target_description_format_errors(self, pyinstrument_invocatio...
    method test_binary_output (line 342) | def test_binary_output(self, pyinstrument_invocation, tmp_path: Path):
    method test_program_exit_code (line 366) | def test_program_exit_code(self, pyinstrument_invocation, tmp_path: Pa...

FILE: test/test_cmdline_main.py
  class FakeRenderer (line 13) | class FakeRenderer(FrameRenderer):
    method __init__ (line 14) | def __init__(self, time=None, **kwargs):
    method default_processors (line 21) | def default_processors(self):
    method render (line 27) | def render(self, session) -> str:
  function test_renderer_option (line 31) | def test_renderer_option(monkeypatch: pytest.MonkeyPatch, tmp_path: Path):
  function test_json_renderer_option (line 55) | def test_json_renderer_option(monkeypatch: pytest.MonkeyPatch, tmp_path:...
  function test_dotted_renderer_option (line 79) | def test_dotted_renderer_option(monkeypatch: pytest.MonkeyPatch, tmp_pat...

FILE: test/test_context_manager.py
  function test_profile_context_decorator (line 9) | def test_profile_context_decorator(capfd):
  function test_profile_context_manager (line 24) | def test_profile_context_manager(capfd):

FILE: test/test_ipython_magic.py
  function test_magics (line 38) | def test_magics(ip):
  function test_magic_empty_line (line 70) | def test_magic_empty_line(ip):
  function test_magic_no_variable_expansion (line 76) | def test_magic_no_variable_expansion(ip, capsys):
  function test_pyinstrument_handles_interrupt_silently (line 85) | def test_pyinstrument_handles_interrupt_silently(ip, capsys):
  function test_async_cell_with_pyinstrument (line 101) | def test_async_cell_with_pyinstrument(ip, capsys):
  function session_ip (line 124) | def session_ip():
  function _interrupt_after_1s (line 130) | def _interrupt_after_1s():
  function ip (line 136) | def ip(session_ip):

FILE: test/test_overflow.py
  function recurse (line 19) | def recurse(depth):
  function current_stack_depth (line 27) | def current_stack_depth():
  function deep_profiler_session (line 40) | def deep_profiler_session():
  function test_console (line 55) | def test_console(deep_profiler_session):
  function test_html (line 59) | def test_html(deep_profiler_session):
  function test_json (line 63) | def test_json(deep_profiler_session):
  function test_speedscope (line 67) | def test_speedscope(deep_profiler_session):
  function test_prof (line 71) | def test_prof(deep_profiler_session):

FILE: test/test_processors.py
  function self_time_frame (line 21) | def self_time_frame(time):
  function test_frame_passthrough_none (line 25) | def test_frame_passthrough_none():
  function test_remove_importlib (line 30) | def test_remove_importlib():
  function test_remove_hidden (line 84) | def test_remove_hidden():
  function test_merge_consecutive_self_time (line 134) | def test_merge_consecutive_self_time():
  function test_aggregate_repeated_calls (line 171) | def test_aggregate_repeated_calls():
  function test_remove_irrelevant_nodes (line 219) | def test_remove_irrelevant_nodes():
  function test_remove_unnecessary_self_time_nodes (line 259) | def test_remove_unnecessary_self_time_nodes():
  function test_group_library_frames_processor (line 300) | def test_group_library_frames_processor(monkeypatch):

FILE: test/test_profiler.py
  function long_function_a (line 22) | def long_function_a():
  function long_function_b (line 26) | def long_function_b():
  class ClassWithMethods (line 30) | class ClassWithMethods:
    method long_method (line 31) | def long_method(self):
    method long_static_method (line 35) | def long_static_method():
    method long_class_method (line 39) | def long_class_method(cls):
  function test_collapses_multiple_calls_by_default (line 46) | def test_collapses_multiple_calls_by_default():
  function test_profiler_retains_multiple_calls (line 72) | def test_profiler_retains_multiple_calls():
  function test_two_functions (line 94) | def test_two_functions():
  function test_class_methods (line 126) | def test_class_methods():
  function test_context_manager (line 156) | def test_context_manager():
  function test_json_output (line 169) | def test_json_output():
  function test_speedscope_output (line 186) | def test_speedscope_output():
  function test_empty_profile (line 310) | def test_empty_profile():
  function test_state_management (line 317) | def test_state_management():
  function test_profiler_convenience_methods_have_all_options_available (line 369) | def test_profiler_convenience_methods_have_all_options_available(
  function test_profiler_raises_on_double_subscribe (line 401) | def test_profiler_raises_on_double_subscribe():

FILE: test/test_profiler_async.py
  function tidy_up_stack_sampler (line 21) | def tidy_up_stack_sampler():
  function test_sleep (line 36) | async def test_sleep():
  function test_sleep_trio (line 59) | def test_sleep_trio():
  function test_profiler_task_isolation (line 87) | def test_profiler_task_isolation(engine):
  function test_greenlet (line 178) | def test_greenlet():
  function test_strict_with_greenlet (line 210) | def test_strict_with_greenlet():

FILE: test/test_pstats_renderer.py
  function a (line 14) | def a():
  function b (line 19) | def b():
  function c (line 23) | def c():
  function d (line 27) | def d():
  function e (line 31) | def e():
  function profiler_session (line 36) | def profiler_session():
  function test_pstats_renderer (line 47) | def test_pstats_renderer(profiler_session, tmp_path):
  function test_round_trip_encoding_of_binary_data (line 89) | def test_round_trip_encoding_of_binary_data(tmp_path: Path):
  function sleep_and_busy_wait (line 104) | def sleep_and_busy_wait(clock: FakeClock):
  function test_sum_of_tottime (line 110) | def test_sum_of_tottime(tmp_path):

FILE: test/test_renderers.py
  function a (line 33) | def a():
  function b (line 38) | def b():
  function c (line 42) | def c():
  function d (line 46) | def d():
  function e (line 50) | def e():
  function profiler_session (line 55) | def profiler_session():
  function test_empty_profile (line 70) | def test_empty_profile(frame_renderer_class: type[renderers.FrameRendere...
  function test_timeline_doesnt_crash (line 77) | def test_timeline_doesnt_crash(
  function test_show_all_doesnt_crash (line 85) | def test_show_all_doesnt_crash(
  function test_console_renderer_flat_doesnt_crash (line 93) | def test_console_renderer_flat_doesnt_crash(profiler_session, flat_time):
  function test_html_renderer_resampling (line 98) | def test_html_renderer_resampling(capsys):

FILE: test/test_stack_sampler.py
  class SampleCounter (line 12) | class SampleCounter:
    method sample (line 15) | def sample(self, stack, time, async_state):
  function test_create (line 19) | def test_create():
  function test_get_samples (line 28) | def test_get_samples():
  function test_multiple_samplers (line 52) | def test_multiple_samplers():
  function test_multiple_samplers_async_error (line 79) | def test_multiple_samplers_async_error():
  function test_multiple_contexts (line 95) | def test_multiple_contexts():
  function test_same_callback_twice_error (line 133) | def test_same_callback_twice_error():

FILE: test/test_threading.py
  function test_profiler_access_from_multiple_threads (line 12) | def test_profiler_access_from_multiple_threads():

FILE: test/util.py
  function assert_never (line 22) | def assert_never(x: NoReturn) -> NoReturn:
  function do_nothing (line 26) | def do_nothing():
  function busy_wait (line 30) | def busy_wait(duration):
  function walk_frames (line 37) | def walk_frames(frame: Frame) -> Generator[Frame, None, None]:
  function first (line 47) | def first(iterator: Iterator[T]) -> Optional[T]:
  function calculate_frame_tree_times (line 54) | def calculate_frame_tree_times(frame: Frame):
  function dummy_session (line 91) | def dummy_session() -> Session:
  function tidy_up_profiler_state_on_fail (line 107) | def tidy_up_profiler_state_on_fail(func: Callable) -> Callable[[], None]:
Condensed preview — 178 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,434K chars).
[
  {
    "path": ".devcontainer/Dockerfile",
    "chars": 1274,
    "preview": "# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.238.0/containers/cpp/.devconta"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "chars": 1532,
    "preview": "// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:\n// https://github.co"
  },
  {
    "path": ".devcontainer/reinstall-cmake.sh",
    "chars": 1751,
    "preview": "#!/usr/bin/env bash\n#---------------------------------------------------------------------------------------------------"
  },
  {
    "path": ".editorconfig",
    "chars": 265,
    "preview": "# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n[*]\nindent_style = space\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 278,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n  "
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 1335,
    "preview": "on:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  pre-commit:\n    runs-on: ubuntu-lates"
  },
  {
    "path": ".github/workflows/wheels.yml",
    "chars": 2198,
    "preview": "name: Build wheels\n\non:\n  push:\n    branches: [ main ]\n    tags:\n      - v*\n\n  pull_request:\n    branches: [ main ]\n    "
  },
  {
    "path": ".gitignore",
    "chars": 248,
    "preview": "# virtualenv\nenv/\nenv2/\nenv3*/\n.Python\n/env\n\n# python\n*.pyc\n__pycache__/\n\n# C extensions\n*.so\n*.pyd\n\n# distribution\ndist"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 1581,
    "preview": "repos:\n-   repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v4.6.0\n    hooks:\n    -   id: trailing-whitespa"
  },
  {
    "path": ".readthedocs.yaml",
    "chars": 167,
    "preview": "version: 2\n\nbuild:\n  os: ubuntu-22.04\n  tools:\n    python: \"3.11\"\n\nsphinx:\n   configuration: docs/conf.py\n\npython:\n   in"
  },
  {
    "path": "LICENSE",
    "chars": 1505,
    "preview": "Copyright (c) 2014-2020, Joe Rickerby and contributors\nAll rights reserved.\n\nRedistribution and use in source and binary"
  },
  {
    "path": "MAINTAINERS.md",
    "chars": 121,
    "preview": "# Releasing\n\n```\nbin/bump_version.py\ngit push && git push --tags\n```\n\nDeployment to PyPI is performed in GitHub Actions."
  },
  {
    "path": "MANIFEST.in",
    "chars": 267,
    "preview": "prune **\n\ngraft pyinstrument\ngraft test\ngraft bin\ngraft html_renderer\nprune html_renderer/node_modules\nprune html_render"
  },
  {
    "path": "README.md",
    "chars": 24886,
    "preview": "pyinstrument\n============\n\n[![PyPI version](https://badge.fury.io/py/pyinstrument.svg)](https://badge.fury.io/py/pyinstr"
  },
  {
    "path": "bin/build_js_bundle.py",
    "chars": 1804,
    "preview": "#!/usr/bin/env python3\n\nimport argparse\nimport os\nimport shutil\nimport subprocess\nimport sys\n\nHTML_RENDERER_DIR = \"html_"
  },
  {
    "path": "bin/bump_version.py",
    "chars": 4283,
    "preview": "#!/usr/bin/env python3\n\n\nfrom __future__ import annotations\n\nimport glob\nimport os\nimport subprocess\nimport sys\nimport u"
  },
  {
    "path": "bin/create_demo_data.py",
    "chars": 377,
    "preview": "#!/usr/bin/env python3\n\nimport os\nimport subprocess\nimport sys\nfrom glob import glob\nfrom pathlib import Path\n\nROOT_DIR "
  },
  {
    "path": "bin/create_sample_json.py",
    "chars": 893,
    "preview": "#!/usr/bin/env python3\nimport argparse\nimport subprocess\nimport sys\nfrom pathlib import Path\n\nROOT_DIR = Path(__file__)."
  },
  {
    "path": "bin/serve_docs",
    "chars": 66,
    "preview": "#!/bin/sh\n\ncd \"$(dirname \"$0\")\"\ncd ..\n\nexec make -C docs livehtml\n"
  },
  {
    "path": "docs/Makefile",
    "chars": 747,
    "preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the "
  },
  {
    "path": "docs/_static/preview/assets/django_template_render-CIkNzFIy.js",
    "chars": 200873,
    "preview": "const e={start_time:1727459143227702e-6,duration:.1257030963897705,min_interval:.001,max_interval:.001,sample_count:117,"
  },
  {
    "path": "docs/_static/preview/assets/index-B-UkLYqV.js",
    "chars": 71891,
    "preview": "var Li=Object.defineProperty;var Ri=(i,e,t)=>e in i?Li(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;v"
  },
  {
    "path": "docs/_static/preview/assets/index-paBu1EOJ.css",
    "chars": 8248,
    "preview": "html,body{background-color:#303538;color:#fff;padding:0;margin:0}.margins{padding:0 30px}label{-webkit-user-select:none;"
  },
  {
    "path": "docs/_static/preview/assets/sympy_calculation-B9Pn_4RL.js",
    "chars": 950319,
    "preview": "const e={start_time:17274591419289448e-7,duration:1.1479542255401611,min_interval:.001,max_interval:.001,sample_count:11"
  },
  {
    "path": "docs/_static/preview/assets/wikipedia_article_word_count-CGt_pvsZ.js",
    "chars": 41142,
    "preview": "const e={start_time:17274591414039412e-7,duration:.4107379913330078,min_interval:.001,max_interval:.001,sample_count:29,"
  },
  {
    "path": "docs/_static/preview/index.html",
    "chars": 465,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/"
  },
  {
    "path": "docs/conf.py",
    "chars": 2266,
    "preview": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common op"
  },
  {
    "path": "docs/extensions/signature_change.py",
    "chars": 252,
    "preview": "def process_sig(app, what, name, obj, options, signature, return_annotation):\n    if \"HTMLRenderer\" in name:\n        sig"
  },
  {
    "path": "docs/guide.md",
    "chars": 12593,
    "preview": "User guide\n==========\n\n## Installation\n\n```{include} ../README.md\n---\nrelative-docs: docs/\nrelative-images:\nstart-after:"
  },
  {
    "path": "docs/home.md",
    "chars": 217,
    "preview": "---\nhtml_meta:\n    title: Home\nhide-toc:\n---\n\n# pyinstrument\n\n```{include} ../README.md\n---\nrelative-docs: docs/\nrelativ"
  },
  {
    "path": "docs/how-it-works.md",
    "chars": 6780,
    "preview": "How it works\n============\n\nPyinstrument interrupts the program every 1ms[^interval] and records the entire stack at\nthat"
  },
  {
    "path": "docs/index.md",
    "chars": 260,
    "preview": "pyinstrument\n============\n\n```{toctree}\n---\nmaxdepth: 2\ncaption: \"Contents\"\n---\nHome <home.md>\nguide.md\nhow-it-works.md\n"
  },
  {
    "path": "docs/reference.md",
    "chars": 4105,
    "preview": "# API Reference\n\n## Command line interface\n\n``pyinstrument`` works just like ``python``, on the command line, so you can"
  },
  {
    "path": "examples/aiohttp_web_hello.py",
    "chars": 991,
    "preview": "from asyncio import sleep\nfrom typing import Awaitable, Callable\n\nfrom pyinstrument import Profiler\n\ntry:\n    from aioht"
  },
  {
    "path": "examples/async_example_simple.py",
    "chars": 223,
    "preview": "import asyncio\n\nfrom pyinstrument import Profiler\n\n\nasync def main():\n    p = Profiler()\n    with p:\n        print(\"Hell"
  },
  {
    "path": "examples/async_experiment_1.py",
    "chars": 808,
    "preview": "import asyncio\nimport time\n\nimport pyinstrument\n\n\ndef do_nothing():\n    pass\n\n\ndef busy_wait(duration):\n    end_time = t"
  },
  {
    "path": "examples/async_experiment_3.py",
    "chars": 840,
    "preview": "import asyncio\nimport time\n\nimport trio\n\nimport pyinstrument\n\n\ndef do_nothing():\n    pass\n\n\ndef busy_wait(duration):\n   "
  },
  {
    "path": "examples/busy_wait.py",
    "chars": 239,
    "preview": "import time\n\n\ndef function_1():\n    pass\n\n\ndef function_2():\n    pass\n\n\ndef main():\n    start_time = time.time()\n\n    wh"
  },
  {
    "path": "examples/c_sort.py",
    "chars": 909,
    "preview": "\"\"\"\nlist.sort is interesting in that it calls a C function, that calls back to a\nPython function. In an ideal world, we'"
  },
  {
    "path": "examples/context_api.py",
    "chars": 1004,
    "preview": "import os\nimport pprint\nimport sys\nimport time\n\npprint.pprint(sys.path)\nimport pyinstrument\n\n\n@pyinstrument.profile()\nde"
  },
  {
    "path": "examples/demo_scripts/django_example/.gitignore",
    "chars": 11,
    "preview": "db.sqlite3\n"
  },
  {
    "path": "examples/demo_scripts/django_example/README.md",
    "chars": 78,
    "preview": "\nThis is a simple simple test rig to develop pyinstrument's Django middleware\n"
  },
  {
    "path": "examples/demo_scripts/django_example/django_example/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "examples/demo_scripts/django_example/django_example/settings.py",
    "chars": 1896,
    "preview": "import os\n\nBASE_DIR = os.path.dirname(os.path.dirname(__file__))\n\nDATABASES = {\n    \"default\": {\n        \"ENGINE\": \"djan"
  },
  {
    "path": "examples/demo_scripts/django_example/django_example/templates/template.html",
    "chars": 140,
    "preview": "{% extends \"template_base.html\" %}\n\n{% block content %}\n    {% spaceless %}\n        something\n    {% endspaceless %}\n{% "
  },
  {
    "path": "examples/demo_scripts/django_example/django_example/templates/template_base.html",
    "chars": 88,
    "preview": "<html>\n<head>\n</head>\n<body>\n    {% block content %}\n    {% endblock %}\n</body>\n</html>\n"
  },
  {
    "path": "examples/demo_scripts/django_example/django_example/urls.py",
    "chars": 184,
    "preview": "from django.contrib import admin\nfrom django.urls import include, path\n\nfrom . import views\n\nurlpatterns = [\n    path(\"a"
  },
  {
    "path": "examples/demo_scripts/django_example/django_example/views.py",
    "chars": 263,
    "preview": "import time\n\nfrom django.http import HttpResponse\n\n\ndef hello_world(request):\n    # do some useless work to delay this c"
  },
  {
    "path": "examples/demo_scripts/django_example/manage.py",
    "chars": 257,
    "preview": "#!/usr/bin/env python\nimport os\nimport sys\n\nif __name__ == \"__main__\":\n    os.environ.setdefault(\"DJANGO_SETTINGS_MODULE"
  },
  {
    "path": "examples/demo_scripts/django_template_render.py",
    "chars": 1097,
    "preview": "import os\nfrom optparse import OptionParser\n\ntry:\n    import django\nexcept ImportError:\n    print(\"This example requires"
  },
  {
    "path": "examples/demo_scripts/sympy_calculation.py",
    "chars": 1610,
    "preview": "# All right, here is a reproducer (sympy 1.12, pyinstrument 4.5.3, Python 3.11.5).\n# With python sympy_instrument.py, pr"
  },
  {
    "path": "examples/demo_scripts/wikipedia_article_word_count.py",
    "chars": 1172,
    "preview": "import json\n\ntry:\n    from urllib.request import Request, urlopen\nexcept ImportError:\n    from urllib2 import Request, u"
  },
  {
    "path": "examples/falcon_hello.py",
    "chars": 854,
    "preview": "import time\n\nfrom pyinstrument import Profiler\n\ntry:\n    import falcon\n\n    PROFILING = True  # Use environment variable"
  },
  {
    "path": "examples/falcon_hello_file.py",
    "chars": 1022,
    "preview": "import time\nfrom datetime import datetime\n\nfrom pyinstrument import Profiler\n\ntry:\n    import falcon\n\n    PROFILING = Tr"
  },
  {
    "path": "examples/flask_hello.py",
    "chars": 889,
    "preview": "import time\n\nfrom pyinstrument import Profiler\n\ntry:\n    from flask import Flask, g, make_response, request\nexcept Impor"
  },
  {
    "path": "examples/litestar_hello.py",
    "chars": 1485,
    "preview": "from __future__ import annotations\n\nfrom asyncio import sleep\n\nfrom litestar import Litestar, get\nfrom litestar.middlewa"
  },
  {
    "path": "examples/np_c_function.py",
    "chars": 308,
    "preview": "import sys\n\nimport numpy as np\n\narr = np.random.randint(0, 10000, 10000)\n\n# def print_profiler(frame, event, arg):\n#    "
  },
  {
    "path": "examples/tbhide_demo.py",
    "chars": 224,
    "preview": "import time\n\n\ndef D():\n    time.sleep(0.7)\n\n\ndef C():\n    __tracebackhide__ = True\n    time.sleep(0.1)\n    D()\n\n\ndef B()"
  },
  {
    "path": "html_renderer/.editorconfig",
    "chars": 242,
    "preview": "# EditorConfig is awesome: https://EditorConfig.org\n\n\n[*]\nindent_style = space\nindent_size = 4\nend_of_line = lf\ncharset "
  },
  {
    "path": "html_renderer/.gitignore",
    "chars": 265,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
  },
  {
    "path": "html_renderer/demo-data/django_template_render.json",
    "chars": 232853,
    "preview": "{\"session\": {\"start_time\": 1727459143.227702, \"duration\": 0.1257030963897705, \"min_interval\": 0.001, \"max_interval\": 0.0"
  },
  {
    "path": "html_renderer/demo-data/sympy_calculation.json",
    "chars": 1097669,
    "preview": "{\"session\": {\"start_time\": 1727459141.9289448, \"duration\": 1.1479542255401611, \"min_interval\": 0.001, \"max_interval\": 0."
  },
  {
    "path": "html_renderer/demo-data/wikipedia_article_word_count.json",
    "chars": 47550,
    "preview": "{\"session\": {\"start_time\": 1727459141.4039412, \"duration\": 0.4107379913330078, \"min_interval\": 0.001, \"max_interval\": 0."
  },
  {
    "path": "html_renderer/demo-src/DemoApp.svelte",
    "chars": 2385,
    "preview": "<script lang=\"ts\">\n  import pyinstrumentHTMLRenderer from \"../src/main\";\n\n  const fileURLs = import.meta.glob(\"../demo-d"
  },
  {
    "path": "html_renderer/demo-src/main.ts",
    "chars": 86,
    "preview": "import DemoApp from \"./DemoApp.svelte\";\n\nnew DemoApp({\n    target: document.body,\n});\n"
  },
  {
    "path": "html_renderer/index.html",
    "chars": 368,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"/"
  },
  {
    "path": "html_renderer/package.json",
    "chars": 688,
    "preview": "{\n  \"name\": \"svelte-test\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\""
  },
  {
    "path": "html_renderer/src/App.svelte",
    "chars": 2701,
    "preview": "<script lang=\"ts\">\n  import Header from './components/Header.svelte'\n  import type Session from \"./lib/model/Session\";\n "
  },
  {
    "path": "html_renderer/src/app.css",
    "chars": 207,
    "preview": "html, body {\n    background-color: #303538;\n    color: white;\n    padding: 0;\n    margin: 0;\n}\n\n.margins {\n    padding: "
  },
  {
    "path": "html_renderer/src/components/CallStackView.svelte",
    "chars": 4842,
    "preview": "<script lang=\"ts\">\n  import FrameView from './Frame.svelte'\n  import type Frame from '../lib/model/Frame';\n  import type"
  },
  {
    "path": "html_renderer/src/components/CogIcon.svelte",
    "chars": 991,
    "preview": "<svg width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n  <path fill-rule=\"evenodd\" "
  },
  {
    "path": "html_renderer/src/components/Frame.svelte",
    "chars": 10574,
    "preview": "<script lang=\"ts\" context=\"module\">\n  // focusable code taken from https://stackoverflow.com/a/35173443/382749\n  functio"
  },
  {
    "path": "html_renderer/src/components/Header.svelte",
    "chars": 4289,
    "preview": "<script lang=\"ts\">\n  import type Session from \"../lib/model/Session\";\n  import CogIcon from './CogIcon.svelte';\n  import"
  },
  {
    "path": "html_renderer/src/components/Logo.svelte",
    "chars": 1530,
    "preview": "<svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g opacity=\"0.5\" filter="
  },
  {
    "path": "html_renderer/src/components/TimelineCanvasView.ts",
    "chars": 24933,
    "preview": "import CanvasView from \"../lib/CanvasView\";\nimport type Frame from \"../lib/model/Frame\";\nimport { SELF_TIME_FRAME_IDENTI"
  },
  {
    "path": "html_renderer/src/components/TimelineCanvasViewTooltip.svelte",
    "chars": 3486,
    "preview": "<script context=\"module\" lang=\"ts\">\n  import { get } from \"svelte/store\";\n\n  export interface TooltipFrameInfo {\n    nam"
  },
  {
    "path": "html_renderer/src/components/TimelineView.svelte",
    "chars": 1778,
    "preview": "<script lang=\"ts\">\n  import { derived } from \"svelte/store\";\n  import Frame, { SELF_TIME_FRAME_IDENTIFIER } from \"../lib"
  },
  {
    "path": "html_renderer/src/components/ViewOptions.svelte",
    "chars": 2562,
    "preview": "<script lang=\"ts\">\n  import { createEventDispatcher, onMount } from \"svelte\";\n  import { viewOptions } from \"../lib/sett"
  },
  {
    "path": "html_renderer/src/components/ViewOptionsCallStack.svelte",
    "chars": 5992,
    "preview": "<script lang=\"ts\">\n  import { viewOptionsCallStack } from \"../lib/settings\";\n  import { randomId } from \"../lib/utils\";\n"
  },
  {
    "path": "html_renderer/src/components/ViewOptionsTimeline.svelte",
    "chars": 1259,
    "preview": "<script lang=\"ts\">\n  import { viewOptionsTimeline } from \"../lib/settings\";\n  import { randomId } from \"../lib/utils\";\n "
  },
  {
    "path": "html_renderer/src/lib/CanvasView.ts",
    "chars": 2965,
    "preview": "import DevicePixelRatioObserver from \"./DevicePixelRatioObserver\"\n\nexport default abstract class CanvasView {\n    canvas"
  },
  {
    "path": "html_renderer/src/lib/DevicePixelRatioObserver.ts",
    "chars": 856,
    "preview": "export default class DevicePixelRatioObserver {\n    mediaQueryList: MediaQueryList | null = null\n\n    constructor(readon"
  },
  {
    "path": "html_renderer/src/lib/appState.ts",
    "chars": 177,
    "preview": "import { writable } from 'svelte/store'\n\nexport const visibleGroups = writable<{[id: string]: boolean}>({})\nexport const"
  },
  {
    "path": "html_renderer/src/lib/color.ts",
    "chars": 358,
    "preview": "export function colorForFrameProportionOfTotal(proportion: number): string {\n    if (proportion > 0.6) {\n        return "
  },
  {
    "path": "html_renderer/src/lib/dataTypes.ts",
    "chars": 530,
    "preview": "export interface SessionData {\n    session: {\n        start_time: number;\n        duration: number;\n        min_interval"
  },
  {
    "path": "html_renderer/src/lib/model/Frame.ts",
    "chars": 6807,
    "preview": "import type FrameGroup from './FrameGroup';\nimport { randomId } from '../utils';\n// import type { FrameData } from '../d"
  },
  {
    "path": "html_renderer/src/lib/model/FrameGroup.ts",
    "chars": 1779,
    "preview": "import { randomId } from '../utils';\nimport type Frame from './Frame';\n\nexport default class FrameGroup {\n    id: string"
  },
  {
    "path": "html_renderer/src/lib/model/Session.ts",
    "chars": 2676,
    "preview": "import type { SessionData } from \"../dataTypes\";\nimport Frame from \"./Frame\";\n\nexport default class Session {\n    startT"
  },
  {
    "path": "html_renderer/src/lib/model/frameOps.test.ts",
    "chars": 1895,
    "preview": "import { deleteFrameFromTree } from \"./frameOps\";\nimport { describe, it, expect } from \"vitest\";\nimport Frame, { SELF_TI"
  },
  {
    "path": "html_renderer/src/lib/model/frameOps.ts",
    "chars": 2565,
    "preview": "import { UnreachableCaseError } from \"../utils\";\nimport Frame from \"./Frame\";\nimport { SELF_TIME_FRAME_IDENTIFIER } from"
  },
  {
    "path": "html_renderer/src/lib/model/modelUtil.ts",
    "chars": 441,
    "preview": "import type Frame from \"./Frame\"\nimport type { Processor, ProcessorFunction, ProcessorOptions } from \"./processors\"\n\nexp"
  },
  {
    "path": "html_renderer/src/lib/model/processors.ts",
    "chars": 11305,
    "preview": "import { maxBy } from \"../utils\";\nimport type Frame from \"./Frame\";\nimport { SELF_TIME_FRAME_IDENTIFIER } from \"./Frame\""
  },
  {
    "path": "html_renderer/src/lib/settings.ts",
    "chars": 1882,
    "preview": "import { persisted } from \"svelte-persisted-store\"\n\nexport interface ViewOptionsCallStack {\n    collapseMode: 'non-appli"
  },
  {
    "path": "html_renderer/src/lib/utils.ts",
    "chars": 7026,
    "preview": "\nexport class UnreachableCaseError extends Error {\n    constructor(value: never) {\n        super(`Unreachable case: ${va"
  },
  {
    "path": "html_renderer/src/main.ts",
    "chars": 335,
    "preview": "import './app.css'\nimport App from './App.svelte'\nimport type { SessionData } from './lib/dataTypes'\nimport Session from"
  },
  {
    "path": "html_renderer/src/types.d.ts",
    "chars": 60,
    "preview": "declare module 'uuid' {\n    export function v4(): string;\n}\n"
  },
  {
    "path": "html_renderer/src/vite-env.d.ts",
    "chars": 71,
    "preview": "/// <reference types=\"svelte\" />\n/// <reference types=\"vite/client\" />\n"
  },
  {
    "path": "html_renderer/svelte.config.js",
    "chars": 228,
    "preview": "import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'\n\nexport default {\n  // Consult https://svelte.dev/docs#com"
  },
  {
    "path": "html_renderer/tsconfig.json",
    "chars": 786,
    "preview": "{\n  \"extends\": \"@tsconfig/svelte/tsconfig.json\",\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"useDefineForClassFi"
  },
  {
    "path": "html_renderer/tsconfig.node.json",
    "chars": 263,
    "preview": "{\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"tsBuildInfoFile\": \"./node_modules/.tmp/tsconfig.node.tsbuildinfo\",\n"
  },
  {
    "path": "html_renderer/vite.config.ts",
    "chars": 698,
    "preview": "import { defineConfig } from 'vite'\nimport { svelte } from '@sveltejs/vite-plugin-svelte'\n\n// https://vitejs.dev/config/"
  },
  {
    "path": "metrics/count_samples.py",
    "chars": 846,
    "preview": "import time\n\nimport pyinstrument\n\n\ndef do_nothing():\n    pass\n\n\ndef busy_wait(duration: float):\n    start = time.time()\n"
  },
  {
    "path": "metrics/frame_info.py",
    "chars": 536,
    "preview": "from __future__ import annotations\n\nimport inspect\nfrom timeit import Timer\nfrom types import FrameType\nfrom typing impo"
  },
  {
    "path": "metrics/interrupt.py",
    "chars": 290,
    "preview": "from platform import platform\n\nfrom pyinstrument import Profiler\n\np = Profiler()\n\np.start()\n\n\ndef func():\n    fd = open("
  },
  {
    "path": "metrics/multi_overhead.py",
    "chars": 2310,
    "preview": "import cProfile\nimport profile\nimport re\nimport sys\nimport time\nfrom timeit import Timer\n\nimport django.conf\nimport djan"
  },
  {
    "path": "metrics/overflow.py",
    "chars": 273,
    "preview": "from pyinstrument import Profiler\n\np = Profiler()\n\np.start()\n\n\ndef func(num):\n    if num == 0:\n        return\n    b = 0\n"
  },
  {
    "path": "metrics/overhead.py",
    "chars": 1735,
    "preview": "import cProfile\nimport profile\nfrom timeit import Timer\n\nimport django.conf\nimport django.template.loader\n\nimport pyinst"
  },
  {
    "path": "noxfile.py",
    "chars": 1934,
    "preview": "import os\n\nimport nox\n\nnox.needs_version = \">=2024.4.15\"\nnox.options.default_venv_backend = \"uv|virtualenv\"\n\n\n@nox.sessi"
  },
  {
    "path": "pyinstrument/__init__.py",
    "chars": 624,
    "preview": "import warnings\n\nfrom pyinstrument.context_manager import profile\nfrom pyinstrument.profiler import Profiler\n\n__all__ = "
  },
  {
    "path": "pyinstrument/__main__.py",
    "chars": 21872,
    "preview": "from __future__ import annotations\n\nimport fnmatch\nimport glob\nimport json\nimport optparse\nimport os\nimport runpy\nimport"
  },
  {
    "path": "pyinstrument/context_manager.py",
    "chars": 3844,
    "preview": "from __future__ import annotations\n\nimport functools\nimport inspect\nimport sys\nimport typing\n\nfrom pyinstrument.profiler"
  },
  {
    "path": "pyinstrument/frame.py",
    "chars": 12625,
    "preview": "from __future__ import annotations\n\nimport json\nimport math\nimport typing\nimport uuid\nfrom typing import Callable, Seque"
  },
  {
    "path": "pyinstrument/frame_info.py",
    "chars": 1038,
    "preview": "from typing import List, Tuple\n\n# pyright: strict\n\n\nIDENTIFIER_SEP = \"\\x00\"\nATTRIBUTES_SEP = \"\\x01\"\n\nATTRIBUTE_MARKER_CL"
  },
  {
    "path": "pyinstrument/frame_ops.py",
    "chars": 5015,
    "preview": "from __future__ import annotations\n\nfrom typing import List, Sequence, Tuple\n\nfrom pyinstrument.frame import (\n    DUMMY"
  },
  {
    "path": "pyinstrument/low_level/pyi_floatclock.c",
    "chars": 2804,
    "preview": "#include \"pyi_floatclock.h\"\n\n#include <Python.h>\n#include <time.h> // gettimeofday, clock()\n#include <float.h> // DBL_MA"
  },
  {
    "path": "pyinstrument/low_level/pyi_floatclock.h",
    "chars": 346,
    "preview": "#ifndef PYI_FLOATCLOCK_H\n#define PYI_FLOATCLOCK_H\n\n#include <Python.h>\n#include \"pyi_shared.h\"\n\ntypedef enum {\n    PYI_F"
  },
  {
    "path": "pyinstrument/low_level/pyi_shared.h",
    "chars": 888,
    "preview": "#ifndef PYI_SHARED_H\n#define PYI_SHARED_H\n\n#include <Python.h>\n#include <stdio.h>\n\n#ifndef __has_attribute\n#  define __h"
  },
  {
    "path": "pyinstrument/low_level/pyi_timing_thread.c",
    "chars": 4162,
    "preview": "#include \"pyi_timing_thread.h\"\n\n#include <Python.h>\n#include <time.h>\n#include <float.h>\n\n#include \"pyi_floatclock.h\"\n\ns"
  },
  {
    "path": "pyinstrument/low_level/pyi_timing_thread.h",
    "chars": 1016,
    "preview": "#ifndef PYI_TIMINGTHREAD_H\n#define PYI_TIMINGTHREAD_H\n\n#include <Python.h>\n#include \"pyi_shared.h\"\n\n/**\n * Adds a subscr"
  },
  {
    "path": "pyinstrument/low_level/pyi_timing_thread_python.py",
    "chars": 2130,
    "preview": "import threading\nimport time\n\ncurrent_time = 0.0\n\nsubscriber_lock = threading.Lock()\nupdate_lock = threading.Lock()\nthre"
  },
  {
    "path": "pyinstrument/low_level/stat_profile.c",
    "chars": 27363,
    "preview": "#include <Python.h>\n#include <structmember.h>\n#include <frameobject.h>\n\n#include \"pyi_floatclock.h\"\n#include \"pyi_timing"
  },
  {
    "path": "pyinstrument/low_level/stat_profile.pyi",
    "chars": 583,
    "preview": "import contextvars\nimport types\nfrom typing import Any, Callable, Dict\n\nfrom pyinstrument.low_level.types import TimerTy"
  },
  {
    "path": "pyinstrument/low_level/stat_profile_python.py",
    "chars": 4761,
    "preview": "from __future__ import annotations\n\nimport contextvars\nimport sys\nimport timeit\nimport types\nfrom typing import Any, Cal"
  },
  {
    "path": "pyinstrument/low_level/types.py",
    "chars": 131,
    "preview": "from pyinstrument.typing import LiteralStr\n\nTimerType = LiteralStr[\"walltime\", \"walltime_thread\", \"timer_func\", \"walltim"
  },
  {
    "path": "pyinstrument/magic/__init__.py",
    "chars": 37,
    "preview": "from .magic import PyinstrumentMagic\n"
  },
  {
    "path": "pyinstrument/magic/_utils.py",
    "chars": 3096,
    "preview": "from __future__ import annotations\n\n# This file is largely based on https://gist.github.com/Carreau/0f051f57734222da925c"
  },
  {
    "path": "pyinstrument/magic/magic.py",
    "chars": 12082,
    "preview": "from __future__ import annotations\n\nimport asyncio\nimport html\nimport threading\nimport urllib.parse\nfrom ast import pars"
  },
  {
    "path": "pyinstrument/middleware.py",
    "chars": 4336,
    "preview": "import io\nimport os\nimport sys\nimport time\n\nfrom django.conf import settings\nfrom django.http import HttpResponse\nfrom d"
  },
  {
    "path": "pyinstrument/processors.py",
    "chars": 9162,
    "preview": "\"\"\"\nProcessors are functions that take a Frame object, and mutate the tree to perform some task.\n\nThey can mutate the tr"
  },
  {
    "path": "pyinstrument/profiler.py",
    "chars": 14393,
    "preview": "from __future__ import annotations\n\nimport inspect\nimport os\nimport sys\nimport time\nimport types\nfrom pathlib import Pat"
  },
  {
    "path": "pyinstrument/py.typed",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "pyinstrument/renderers/__init__.py",
    "chars": 612,
    "preview": "from pyinstrument.renderers.base import FrameRenderer, Renderer\nfrom pyinstrument.renderers.console import ConsoleRender"
  },
  {
    "path": "pyinstrument/renderers/base.py",
    "chars": 3798,
    "preview": "from __future__ import annotations\n\nimport contextlib\nfrom typing import Any, List\n\nfrom pyinstrument import processors\n"
  },
  {
    "path": "pyinstrument/renderers/console.py",
    "chars": 11913,
    "preview": "from __future__ import annotations\n\nimport math\nimport re\nimport textwrap\nimport time\nfrom typing import Any, Dict, List"
  },
  {
    "path": "pyinstrument/renderers/html.py",
    "chars": 6551,
    "preview": "from __future__ import annotations\n\nimport codecs\nimport json\nimport sys\nimport tempfile\nimport urllib.parse\nimport warn"
  },
  {
    "path": "pyinstrument/renderers/html_resources/app.css",
    "chars": 7778,
    "preview": "html,body{background-color:#303538;color:#fff;padding:0;margin:0}.margins{padding:0 30px}label{-webkit-user-select:none;"
  },
  {
    "path": "pyinstrument/renderers/html_resources/app.js",
    "chars": 67104,
    "preview": "var pyinstrumentHTMLRenderer=function(){\"use strict\";var is=Object.defineProperty;var ns=(F,ve,Pe)=>ve in F?is(F,ve,{enu"
  },
  {
    "path": "pyinstrument/renderers/jsonrenderer.py",
    "chars": 3336,
    "preview": "from __future__ import annotations\n\nimport json\nimport typing\nfrom typing import Any, Callable\n\nfrom pyinstrument import"
  },
  {
    "path": "pyinstrument/renderers/pstatsrenderer.py",
    "chars": 3276,
    "preview": "from __future__ import annotations\n\nimport marshal\nfrom typing import Any, Dict, Tuple\n\nfrom pyinstrument import process"
  },
  {
    "path": "pyinstrument/renderers/session.py",
    "chars": 395,
    "preview": "import json\n\nfrom pyinstrument.renderers.base import Renderer\nfrom pyinstrument.session import Session\n\n\nclass SessionRe"
  },
  {
    "path": "pyinstrument/renderers/speedscope.py",
    "chars": 8606,
    "preview": "from __future__ import annotations\n\nimport json\nimport time\nfrom dataclasses import dataclass\nfrom enum import Enum\nfrom"
  },
  {
    "path": "pyinstrument/session.py",
    "chars": 9178,
    "preview": "from __future__ import annotations\n\nimport json\nimport os\nimport sys\nfrom collections import deque\nfrom typing import An"
  },
  {
    "path": "pyinstrument/stack_sampler.py",
    "chars": 12550,
    "preview": "from __future__ import annotations\n\nimport os\nimport sys\nimport textwrap\nimport threading\nimport timeit\nimport types\nfro"
  },
  {
    "path": "pyinstrument/typing.py",
    "chars": 599,
    "preview": "import os\nfrom typing import TYPE_CHECKING, Any, Union\n\nif TYPE_CHECKING:\n    from typing_extensions import Literal as L"
  },
  {
    "path": "pyinstrument/util.py",
    "chars": 2964,
    "preview": "import codecs\nimport importlib\nimport math\nimport os\nimport re\nimport sys\nimport warnings\nfrom typing import IO, Any, An"
  },
  {
    "path": "pyinstrument/vendor/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "pyinstrument/vendor/appdirs.py",
    "chars": 25075,
    "preview": "# -*- coding: utf-8 -*-\n# Copyright (c) 2005-2010 ActiveState Software Inc.\n# Copyright (c) 2013 Eddy Petrișor\n\n# Permis"
  },
  {
    "path": "pyinstrument/vendor/decorator.py",
    "chars": 16323,
    "preview": "# #########################     LICENSE     ############################ #\n\n# Copyright (c) 2005-2018, Michele Simionato"
  },
  {
    "path": "pyinstrument/vendor/keypath.py",
    "chars": 3198,
    "preview": "# keypath vendored from https://github.com/fictorial/keypath\n\n# keypath is released under the BSD license:\n\n# Copyright "
  },
  {
    "path": "pyproject.toml",
    "chars": 300,
    "preview": "[build-system]\nrequires = [\"setuptools\", \"wheel\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[tool.black]\nline-length = 10"
  },
  {
    "path": "requirements-dev.txt",
    "chars": 35,
    "preview": "-e .[test,bin,docs,examples,types]\n"
  },
  {
    "path": "setup.cfg",
    "chars": 56,
    "preview": "[aliases]\ntest = pytest\n\n[tool:pytest]\ntestpaths = test\n"
  },
  {
    "path": "setup.py",
    "chars": 2399,
    "preview": "import os\nfrom pathlib import Path\n\nfrom setuptools import Extension, find_namespace_packages, setup\n\nPROJECT_ROOT = Pat"
  },
  {
    "path": "test/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "test/conftest.py",
    "chars": 1437,
    "preview": "import sys\n\nimport pytest\n\nfrom pyinstrument import stack_sampler\n\n\ndef pytest_addoption(parser) -> None:\n    # IPython "
  },
  {
    "path": "test/fake_time_util.py",
    "chars": 2400,
    "preview": "import asyncio\nimport contextlib\nimport functools\nimport random\nfrom typing import TYPE_CHECKING\nfrom unittest import mo"
  },
  {
    "path": "test/low_level/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "test/low_level/test_context.py",
    "chars": 1708,
    "preview": "from __future__ import annotations\n\nimport contextvars\nimport time\nfrom typing import Any\n\nimport pytest\n\nfrom ..util im"
  },
  {
    "path": "test/low_level/test_custom_timer.py",
    "chars": 641,
    "preview": "from typing import Any\n\nfrom .util import parametrize_setstatprofile\n\n\nclass CallCounter:\n    def __init__(self) -> None"
  },
  {
    "path": "test/low_level/test_floatclock.py",
    "chars": 748,
    "preview": "import ctypes\nimport time\n\nimport pytest\n\nimport pyinstrument.low_level.stat_profile as native_module\n\nlib = ctypes.CDLL"
  },
  {
    "path": "test/low_level/test_frame_info.py",
    "chars": 2671,
    "preview": "import inspect\n\nimport pytest\n\nfrom pyinstrument.low_level import stat_profile as stat_profile_c\nfrom pyinstrument.low_l"
  },
  {
    "path": "test/low_level/test_setstatprofile.py",
    "chars": 1101,
    "preview": "import sys\nimport time\nfrom typing import Any\n\nimport pytest\n\nfrom ..util import busy_wait, flaky_in_ci\nfrom .util impor"
  },
  {
    "path": "test/low_level/test_threaded.py",
    "chars": 1226,
    "preview": "from __future__ import annotations\n\nimport threading\nimport time\nfrom typing import Any, List\nfrom unittest import TestC"
  },
  {
    "path": "test/low_level/test_timing_thread.py",
    "chars": 3668,
    "preview": "import ctypes\nimport os\nimport sys\nimport time\n\nimport pyinstrument.low_level.stat_profile as native_module\n\nfrom ..util"
  },
  {
    "path": "test/low_level/util.py",
    "chars": 478,
    "preview": "import functools\n\nimport pytest\n\nfrom pyinstrument.low_level.stat_profile import setstatprofile as setstatprofile_c\nfrom"
  },
  {
    "path": "test/test_cmdline.py",
    "chars": 12368,
    "preview": "import os\nimport re\nimport subprocess\nimport sys\nimport textwrap\nfrom pathlib import Path\n\nimport pytest\n\nfrom .util imp"
  },
  {
    "path": "test/test_cmdline_main.py",
    "chars": 2567,
    "preview": "from pathlib import Path\n\nimport pytest\n\nfrom pyinstrument.__main__ import main\nfrom pyinstrument.renderers.base import "
  },
  {
    "path": "test/test_context_manager.py",
    "chars": 788,
    "preview": "from test.fake_time_util import fake_time\n\nimport pytest\n\nimport pyinstrument\nfrom pyinstrument.context_manager import P"
  },
  {
    "path": "test/test_ipython_magic.py",
    "chars": 3512,
    "preview": "import signal\nimport textwrap\nfrom test.fake_time_util import fake_time\nfrom threading import Thread\nfrom time import sl"
  },
  {
    "path": "test/test_overflow.py",
    "chars": 1318,
    "preview": "import inspect\nimport sys\nimport time\n\nimport pytest\n\nfrom pyinstrument import Profiler\nfrom pyinstrument.renderers impo"
  },
  {
    "path": "test/test_processors.py",
    "chars": 12987,
    "preview": "import os\nimport sys\nfrom test.util import calculate_frame_tree_times, dummy_session\n\nfrom pytest import approx\n\nfrom py"
  },
  {
    "path": "test/test_profiler.py",
    "chars": 12201,
    "preview": "import asyncio\nimport dataclasses\nimport inspect\nimport json\nimport time\nfrom functools import partial\nfrom test.fake_ti"
  },
  {
    "path": "test/test_profiler_async.py",
    "chars": 6914,
    "preview": "import asyncio\nimport sys\nimport time\nfrom functools import partial\nfrom test.fake_time_util import fake_time, fake_time"
  },
  {
    "path": "test/test_pstats_renderer.py",
    "chars": 3441,
    "preview": "import os\nimport time\nfrom pathlib import Path\nfrom pstats import Stats\nfrom test.fake_time_util import FakeClock, fake_"
  },
  {
    "path": "test/test_renderers.py",
    "chars": 2917,
    "preview": "# some tests for the renderer classes\n\nfrom __future__ import annotations\n\nimport sys\nimport time\nfrom unittest.mock imp"
  },
  {
    "path": "test/test_stack_sampler.py",
    "chars": 3804,
    "preview": "import contextvars\nimport sys\nimport time\n\nimport pytest\n\nfrom pyinstrument import stack_sampler\n\nfrom .util import do_n"
  },
  {
    "path": "test/test_threading.py",
    "chars": 1102,
    "preview": "import threading\nimport time\nfrom test.fake_time_util import fake_time\n\nimport pytest\n\nfrom pyinstrument import Profiler"
  },
  {
    "path": "test/util.py",
    "chars": 2805,
    "preview": "import asyncio\nimport os\nimport sys\nimport time\nfrom typing import Callable, Generator, Generic, Iterable, Iterator, NoR"
  }
]

About this extraction

This page contains the full source code of the joerick/pyinstrument GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 178 files (3.1 MB), approximately 823.8k tokens, and a symbol index with 1196 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!