This is page 147 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .DS_Store
├── .venv
│ ├── __pycache__
│ │ └── hello.cpython-312.pyc
│ ├── bin
│ │ ├── activate
│ │ ├── activate.csh
│ │ ├── activate.fish
│ │ ├── Activate.ps1
│ │ ├── flask
│ │ ├── normalizer
│ │ ├── pip
│ │ ├── pip3
│ │ ├── pip3.12
│ │ ├── python
│ │ ├── python3
│ │ └── python3.12
│ ├── hello.py
│ ├── lib
│ │ └── python3.12
│ │ └── site-packages
│ │ ├── beautifulsoup4-4.12.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ ├── AUTHORS
│ │ │ │ └── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── blinker
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _utilities.cpython-312.pyc
│ │ │ │ └── base.cpython-312.pyc
│ │ │ ├── _utilities.py
│ │ │ ├── base.py
│ │ │ └── py.typed
│ │ ├── blinker-1.8.2.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── bs4
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── css.cpython-312.pyc
│ │ │ │ ├── dammit.cpython-312.pyc
│ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ ├── element.cpython-312.pyc
│ │ │ │ └── formatter.cpython-312.pyc
│ │ │ ├── builder
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _html5lib.cpython-312.pyc
│ │ │ │ │ ├── _htmlparser.cpython-312.pyc
│ │ │ │ │ └── _lxml.cpython-312.pyc
│ │ │ │ ├── _html5lib.py
│ │ │ │ ├── _htmlparser.py
│ │ │ │ └── _lxml.py
│ │ │ ├── css.py
│ │ │ ├── dammit.py
│ │ │ ├── diagnose.py
│ │ │ ├── element.py
│ │ │ ├── formatter.py
│ │ │ └── tests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── test_builder_registry.cpython-312.pyc
│ │ │ │ ├── test_builder.cpython-312.pyc
│ │ │ │ ├── test_css.cpython-312.pyc
│ │ │ │ ├── test_dammit.cpython-312.pyc
│ │ │ │ ├── test_docs.cpython-312.pyc
│ │ │ │ ├── test_element.cpython-312.pyc
│ │ │ │ ├── test_formatter.cpython-312.pyc
│ │ │ │ ├── test_fuzz.cpython-312.pyc
│ │ │ │ ├── test_html5lib.cpython-312.pyc
│ │ │ │ ├── test_htmlparser.cpython-312.pyc
│ │ │ │ ├── test_lxml.cpython-312.pyc
│ │ │ │ ├── test_navigablestring.cpython-312.pyc
│ │ │ │ ├── test_pageelement.cpython-312.pyc
│ │ │ │ ├── test_soup.cpython-312.pyc
│ │ │ │ ├── test_tag.cpython-312.pyc
│ │ │ │ └── test_tree.cpython-312.pyc
│ │ │ ├── fuzz
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│ │ │ │ ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│ │ │ │ ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│ │ │ │ └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│ │ │ ├── test_builder_registry.py
│ │ │ ├── test_builder.py
│ │ │ ├── test_css.py
│ │ │ ├── test_dammit.py
│ │ │ ├── test_docs.py
│ │ │ ├── test_element.py
│ │ │ ├── test_formatter.py
│ │ │ ├── test_fuzz.py
│ │ │ ├── test_html5lib.py
│ │ │ ├── test_htmlparser.py
│ │ │ ├── test_lxml.py
│ │ │ ├── test_navigablestring.py
│ │ │ ├── test_pageelement.py
│ │ │ ├── test_soup.py
│ │ │ ├── test_tag.py
│ │ │ └── test_tree.py
│ │ ├── certifi
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── core.cpython-312.pyc
│ │ │ ├── cacert.pem
│ │ │ ├── core.py
│ │ │ └── py.typed
│ │ ├── certifi-2024.8.30.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── charset_normalizer
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── cd.cpython-312.pyc
│ │ │ │ ├── constant.cpython-312.pyc
│ │ │ │ ├── legacy.cpython-312.pyc
│ │ │ │ ├── md.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── version.cpython-312.pyc
│ │ │ ├── api.py
│ │ │ ├── cd.py
│ │ │ ├── cli
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __main__.py
│ │ │ │ └── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── __main__.cpython-312.pyc
│ │ │ ├── constant.py
│ │ │ ├── legacy.py
│ │ │ ├── md__mypyc.cpython-312-darwin.so
│ │ │ ├── md.cpython-312-darwin.so
│ │ │ ├── md.py
│ │ │ ├── models.py
│ │ │ ├── py.typed
│ │ │ ├── utils.py
│ │ │ └── version.py
│ │ ├── charset_normalizer-3.4.0.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── click
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ ├── _termui_impl.cpython-312.pyc
│ │ │ │ ├── _textwrap.cpython-312.pyc
│ │ │ │ ├── _winconsole.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── decorators.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formatting.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── shell_completion.cpython-312.pyc
│ │ │ │ ├── termui.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── types.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── _compat.py
│ │ │ ├── _termui_impl.py
│ │ │ ├── _textwrap.py
│ │ │ ├── _winconsole.py
│ │ │ ├── core.py
│ │ │ ├── decorators.py
│ │ │ ├── exceptions.py
│ │ │ ├── formatting.py
│ │ │ ├── globals.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── shell_completion.py
│ │ │ ├── termui.py
│ │ │ ├── testing.py
│ │ │ ├── types.py
│ │ │ └── utils.py
│ │ ├── click-8.1.7.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.rst
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── fake_useragent
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ ├── fake.cpython-312.pyc
│ │ │ │ ├── log.cpython-312.pyc
│ │ │ │ ├── settings.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── data
│ │ │ │ └── browsers.json
│ │ │ ├── errors.py
│ │ │ ├── fake.py
│ │ │ ├── log.py
│ │ │ ├── settings.py
│ │ │ └── utils.py
│ │ ├── fake_useragent-1.5.1.dist-info
│ │ │ ├── AUTHORS
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── flask
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ ├── cli.cpython-312.pyc
│ │ │ │ ├── config.cpython-312.pyc
│ │ │ │ ├── ctx.cpython-312.pyc
│ │ │ │ ├── debughelpers.cpython-312.pyc
│ │ │ │ ├── globals.cpython-312.pyc
│ │ │ │ ├── helpers.cpython-312.pyc
│ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── signals.cpython-312.pyc
│ │ │ │ ├── templating.cpython-312.pyc
│ │ │ │ ├── testing.cpython-312.pyc
│ │ │ │ ├── typing.cpython-312.pyc
│ │ │ │ ├── views.cpython-312.pyc
│ │ │ │ └── wrappers.cpython-312.pyc
│ │ │ ├── app.py
│ │ │ ├── blueprints.py
│ │ │ ├── cli.py
│ │ │ ├── config.py
│ │ │ ├── ctx.py
│ │ │ ├── debughelpers.py
│ │ │ ├── globals.py
│ │ │ ├── helpers.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ └── tag.cpython-312.pyc
│ │ │ │ ├── provider.py
│ │ │ │ └── tag.py
│ │ │ ├── logging.py
│ │ │ ├── py.typed
│ │ │ ├── sansio
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── app.cpython-312.pyc
│ │ │ │ │ ├── blueprints.cpython-312.pyc
│ │ │ │ │ └── scaffold.cpython-312.pyc
│ │ │ │ ├── app.py
│ │ │ │ ├── blueprints.py
│ │ │ │ ├── README.md
│ │ │ │ └── scaffold.py
│ │ │ ├── sessions.py
│ │ │ ├── signals.py
│ │ │ ├── templating.py
│ │ │ ├── testing.py
│ │ │ ├── typing.py
│ │ │ ├── views.py
│ │ │ └── wrappers.py
│ │ ├── flask-3.0.3.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ └── WHEEL
│ │ ├── idna
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ ├── codec.py
│ │ │ ├── compat.py
│ │ │ ├── core.py
│ │ │ ├── idnadata.py
│ │ │ ├── intranges.py
│ │ │ ├── package_data.py
│ │ │ ├── py.typed
│ │ │ └── uts46data.py
│ │ ├── idna-3.10.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── itsdangerous
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ ├── exc.cpython-312.pyc
│ │ │ │ ├── serializer.cpython-312.pyc
│ │ │ │ ├── signer.cpython-312.pyc
│ │ │ │ ├── timed.cpython-312.pyc
│ │ │ │ └── url_safe.cpython-312.pyc
│ │ │ ├── _json.py
│ │ │ ├── encoding.py
│ │ │ ├── exc.py
│ │ │ ├── py.typed
│ │ │ ├── serializer.py
│ │ │ ├── signer.py
│ │ │ ├── timed.py
│ │ │ └── url_safe.py
│ │ ├── itsdangerous-2.2.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── jinja2
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _identifier.cpython-312.pyc
│ │ │ │ ├── async_utils.cpython-312.pyc
│ │ │ │ ├── bccache.cpython-312.pyc
│ │ │ │ ├── compiler.cpython-312.pyc
│ │ │ │ ├── constants.cpython-312.pyc
│ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ ├── defaults.cpython-312.pyc
│ │ │ │ ├── environment.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ ├── filters.cpython-312.pyc
│ │ │ │ ├── idtracking.cpython-312.pyc
│ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ ├── loaders.cpython-312.pyc
│ │ │ │ ├── meta.cpython-312.pyc
│ │ │ │ ├── nativetypes.cpython-312.pyc
│ │ │ │ ├── nodes.cpython-312.pyc
│ │ │ │ ├── optimizer.cpython-312.pyc
│ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ ├── runtime.cpython-312.pyc
│ │ │ │ ├── sandbox.cpython-312.pyc
│ │ │ │ ├── tests.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── visitor.cpython-312.pyc
│ │ │ ├── _identifier.py
│ │ │ ├── async_utils.py
│ │ │ ├── bccache.py
│ │ │ ├── compiler.py
│ │ │ ├── constants.py
│ │ │ ├── debug.py
│ │ │ ├── defaults.py
│ │ │ ├── environment.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext.py
│ │ │ ├── filters.py
│ │ │ ├── idtracking.py
│ │ │ ├── lexer.py
│ │ │ ├── loaders.py
│ │ │ ├── meta.py
│ │ │ ├── nativetypes.py
│ │ │ ├── nodes.py
│ │ │ ├── optimizer.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── runtime.py
│ │ │ ├── sandbox.py
│ │ │ ├── tests.py
│ │ │ ├── utils.py
│ │ │ └── visitor.py
│ │ ├── jinja2-3.1.4.dist-info
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── lxml
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _elementpath.cpython-312.pyc
│ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ ├── cssselect.cpython-312.pyc
│ │ │ │ ├── doctestcompare.cpython-312.pyc
│ │ │ │ ├── ElementInclude.cpython-312.pyc
│ │ │ │ ├── pyclasslookup.cpython-312.pyc
│ │ │ │ ├── sax.cpython-312.pyc
│ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ ├── _elementpath.cpython-312-darwin.so
│ │ │ ├── _elementpath.py
│ │ │ ├── apihelpers.pxi
│ │ │ ├── builder.cpython-312-darwin.so
│ │ │ ├── builder.py
│ │ │ ├── classlookup.pxi
│ │ │ ├── cleanup.pxi
│ │ │ ├── cssselect.py
│ │ │ ├── debug.pxi
│ │ │ ├── docloader.pxi
│ │ │ ├── doctestcompare.py
│ │ │ ├── dtd.pxi
│ │ │ ├── ElementInclude.py
│ │ │ ├── etree_api.h
│ │ │ ├── etree.cpython-312-darwin.so
│ │ │ ├── etree.h
│ │ │ ├── etree.pyx
│ │ │ ├── extensions.pxi
│ │ │ ├── html
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── _diffcommand.cpython-312.pyc
│ │ │ │ │ ├── _html5builder.cpython-312.pyc
│ │ │ │ │ ├── _setmixin.cpython-312.pyc
│ │ │ │ │ ├── builder.cpython-312.pyc
│ │ │ │ │ ├── clean.cpython-312.pyc
│ │ │ │ │ ├── defs.cpython-312.pyc
│ │ │ │ │ ├── diff.cpython-312.pyc
│ │ │ │ │ ├── ElementSoup.cpython-312.pyc
│ │ │ │ │ ├── formfill.cpython-312.pyc
│ │ │ │ │ ├── html5parser.cpython-312.pyc
│ │ │ │ │ ├── soupparser.cpython-312.pyc
│ │ │ │ │ └── usedoctest.cpython-312.pyc
│ │ │ │ ├── _diffcommand.py
│ │ │ │ ├── _html5builder.py
│ │ │ │ ├── _setmixin.py
│ │ │ │ ├── builder.py
│ │ │ │ ├── clean.py
│ │ │ │ ├── defs.py
│ │ │ │ ├── diff.cpython-312-darwin.so
│ │ │ │ ├── diff.py
│ │ │ │ ├── ElementSoup.py
│ │ │ │ ├── formfill.py
│ │ │ │ ├── html5parser.py
│ │ │ │ ├── soupparser.py
│ │ │ │ └── usedoctest.py
│ │ │ ├── includes
│ │ │ │ ├── __init__.pxd
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── c14n.pxd
│ │ │ │ ├── config.pxd
│ │ │ │ ├── dtdvalid.pxd
│ │ │ │ ├── etree_defs.h
│ │ │ │ ├── etreepublic.pxd
│ │ │ │ ├── extlibs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── libcharset.h
│ │ │ │ │ ├── localcharset.h
│ │ │ │ │ ├── zconf.h
│ │ │ │ │ └── zlib.h
│ │ │ │ ├── htmlparser.pxd
│ │ │ │ ├── libexslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── exslt.h
│ │ │ │ │ ├── exsltconfig.h
│ │ │ │ │ └── exsltexports.h
│ │ │ │ ├── libxml
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── c14n.h
│ │ │ │ │ ├── catalog.h
│ │ │ │ │ ├── chvalid.h
│ │ │ │ │ ├── debugXML.h
│ │ │ │ │ ├── dict.h
│ │ │ │ │ ├── encoding.h
│ │ │ │ │ ├── entities.h
│ │ │ │ │ ├── globals.h
│ │ │ │ │ ├── hash.h
│ │ │ │ │ ├── HTMLparser.h
│ │ │ │ │ ├── HTMLtree.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── nanoftp.h
│ │ │ │ │ ├── nanohttp.h
│ │ │ │ │ ├── parser.h
│ │ │ │ │ ├── parserInternals.h
│ │ │ │ │ ├── relaxng.h
│ │ │ │ │ ├── SAX.h
│ │ │ │ │ ├── SAX2.h
│ │ │ │ │ ├── schemasInternals.h
│ │ │ │ │ ├── schematron.h
│ │ │ │ │ ├── threads.h
│ │ │ │ │ ├── tree.h
│ │ │ │ │ ├── uri.h
│ │ │ │ │ ├── valid.h
│ │ │ │ │ ├── xinclude.h
│ │ │ │ │ ├── xlink.h
│ │ │ │ │ ├── xmlautomata.h
│ │ │ │ │ ├── xmlerror.h
│ │ │ │ │ ├── xmlexports.h
│ │ │ │ │ ├── xmlIO.h
│ │ │ │ │ ├── xmlmemory.h
│ │ │ │ │ ├── xmlmodule.h
│ │ │ │ │ ├── xmlreader.h
│ │ │ │ │ ├── xmlregexp.h
│ │ │ │ │ ├── xmlsave.h
│ │ │ │ │ ├── xmlschemas.h
│ │ │ │ │ ├── xmlschemastypes.h
│ │ │ │ │ ├── xmlstring.h
│ │ │ │ │ ├── xmlunicode.h
│ │ │ │ │ ├── xmlversion.h
│ │ │ │ │ ├── xmlwriter.h
│ │ │ │ │ ├── xpath.h
│ │ │ │ │ ├── xpathInternals.h
│ │ │ │ │ └── xpointer.h
│ │ │ │ ├── libxslt
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── attributes.h
│ │ │ │ │ ├── documents.h
│ │ │ │ │ ├── extensions.h
│ │ │ │ │ ├── extra.h
│ │ │ │ │ ├── functions.h
│ │ │ │ │ ├── imports.h
│ │ │ │ │ ├── keys.h
│ │ │ │ │ ├── namespaces.h
│ │ │ │ │ ├── numbersInternals.h
│ │ │ │ │ ├── pattern.h
│ │ │ │ │ ├── preproc.h
│ │ │ │ │ ├── security.h
│ │ │ │ │ ├── templates.h
│ │ │ │ │ ├── transform.h
│ │ │ │ │ ├── variables.h
│ │ │ │ │ ├── xslt.h
│ │ │ │ │ ├── xsltconfig.h
│ │ │ │ │ ├── xsltexports.h
│ │ │ │ │ ├── xsltInternals.h
│ │ │ │ │ ├── xsltlocale.h
│ │ │ │ │ └── xsltutils.h
│ │ │ │ ├── lxml-version.h
│ │ │ │ ├── relaxng.pxd
│ │ │ │ ├── schematron.pxd
│ │ │ │ ├── tree.pxd
│ │ │ │ ├── uri.pxd
│ │ │ │ ├── xinclude.pxd
│ │ │ │ ├── xmlerror.pxd
│ │ │ │ ├── xmlparser.pxd
│ │ │ │ ├── xmlschema.pxd
│ │ │ │ ├── xpath.pxd
│ │ │ │ └── xslt.pxd
│ │ │ ├── isoschematron
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ └── resources
│ │ │ │ ├── rng
│ │ │ │ │ └── iso-schematron.rng
│ │ │ │ └── xsl
│ │ │ │ ├── iso-schematron-xslt1
│ │ │ │ │ ├── iso_abstract_expand.xsl
│ │ │ │ │ ├── iso_dsdl_include.xsl
│ │ │ │ │ ├── iso_schematron_message.xsl
│ │ │ │ │ ├── iso_schematron_skeleton_for_xslt1.xsl
│ │ │ │ │ ├── iso_svrl_for_xslt1.xsl
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── RNG2Schtrn.xsl
│ │ │ │ └── XSD2Schtrn.xsl
│ │ │ ├── iterparse.pxi
│ │ │ ├── lxml.etree_api.h
│ │ │ ├── lxml.etree.h
│ │ │ ├── nsclasses.pxi
│ │ │ ├── objectify.cpython-312-darwin.so
│ │ │ ├── objectify.pyx
│ │ │ ├── objectpath.pxi
│ │ │ ├── parser.pxi
│ │ │ ├── parsertarget.pxi
│ │ │ ├── proxy.pxi
│ │ │ ├── public-api.pxi
│ │ │ ├── pyclasslookup.py
│ │ │ ├── readonlytree.pxi
│ │ │ ├── relaxng.pxi
│ │ │ ├── sax.cpython-312-darwin.so
│ │ │ ├── sax.py
│ │ │ ├── saxparser.pxi
│ │ │ ├── schematron.pxi
│ │ │ ├── serializer.pxi
│ │ │ ├── usedoctest.py
│ │ │ ├── xinclude.pxi
│ │ │ ├── xmlerror.pxi
│ │ │ ├── xmlid.pxi
│ │ │ ├── xmlschema.pxi
│ │ │ ├── xpath.pxi
│ │ │ ├── xslt.pxi
│ │ │ └── xsltext.pxi
│ │ ├── lxml-5.3.0.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── LICENSES.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── markupsafe
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ └── _native.cpython-312.pyc
│ │ │ ├── _native.py
│ │ │ ├── _speedups.c
│ │ │ ├── _speedups.cpython-312-darwin.so
│ │ │ ├── _speedups.pyi
│ │ │ └── py.typed
│ │ ├── MarkupSafe-3.0.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── pip
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── __pip-runner__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ └── __pip-runner__.cpython-312.pyc
│ │ │ ├── _internal
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── build_env.cpython-312.pyc
│ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ ├── pyproject.cpython-312.pyc
│ │ │ │ │ ├── self_outdated_check.cpython-312.pyc
│ │ │ │ │ └── wheel_builder.cpython-312.pyc
│ │ │ │ ├── build_env.py
│ │ │ │ ├── cache.py
│ │ │ │ ├── cli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── autocompletion.cpython-312.pyc
│ │ │ │ │ │ ├── base_command.cpython-312.pyc
│ │ │ │ │ │ ├── cmdoptions.cpython-312.pyc
│ │ │ │ │ │ ├── command_context.cpython-312.pyc
│ │ │ │ │ │ ├── index_command.cpython-312.pyc
│ │ │ │ │ │ ├── main_parser.cpython-312.pyc
│ │ │ │ │ │ ├── main.cpython-312.pyc
│ │ │ │ │ │ ├── parser.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bars.cpython-312.pyc
│ │ │ │ │ │ ├── req_command.cpython-312.pyc
│ │ │ │ │ │ ├── spinners.cpython-312.pyc
│ │ │ │ │ │ └── status_codes.cpython-312.pyc
│ │ │ │ │ ├── autocompletion.py
│ │ │ │ │ ├── base_command.py
│ │ │ │ │ ├── cmdoptions.py
│ │ │ │ │ ├── command_context.py
│ │ │ │ │ ├── index_command.py
│ │ │ │ │ ├── main_parser.py
│ │ │ │ │ ├── main.py
│ │ │ │ │ ├── parser.py
│ │ │ │ │ ├── progress_bars.py
│ │ │ │ │ ├── req_command.py
│ │ │ │ │ ├── spinners.py
│ │ │ │ │ └── status_codes.py
│ │ │ │ ├── commands
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── completion.cpython-312.pyc
│ │ │ │ │ │ ├── configuration.cpython-312.pyc
│ │ │ │ │ │ ├── debug.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ ├── hash.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── inspect.cpython-312.pyc
│ │ │ │ │ │ ├── install.cpython-312.pyc
│ │ │ │ │ │ ├── list.cpython-312.pyc
│ │ │ │ │ │ ├── search.cpython-312.pyc
│ │ │ │ │ │ ├── show.cpython-312.pyc
│ │ │ │ │ │ ├── uninstall.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── completion.py
│ │ │ │ │ ├── configuration.py
│ │ │ │ │ ├── debug.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── hash.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── inspect.py
│ │ │ │ │ ├── install.py
│ │ │ │ │ ├── list.py
│ │ │ │ │ ├── search.py
│ │ │ │ │ ├── show.py
│ │ │ │ │ ├── uninstall.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── configuration.py
│ │ │ │ ├── distributions
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── installed.cpython-312.pyc
│ │ │ │ │ │ ├── sdist.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── installed.py
│ │ │ │ │ ├── sdist.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── index
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── collector.cpython-312.pyc
│ │ │ │ │ │ ├── package_finder.cpython-312.pyc
│ │ │ │ │ │ └── sources.cpython-312.pyc
│ │ │ │ │ ├── collector.py
│ │ │ │ │ ├── package_finder.py
│ │ │ │ │ └── sources.py
│ │ │ │ ├── locations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _distutils.cpython-312.pyc
│ │ │ │ │ │ ├── _sysconfig.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── _distutils.py
│ │ │ │ │ ├── _sysconfig.py
│ │ │ │ │ └── base.py
│ │ │ │ ├── main.py
│ │ │ │ ├── metadata
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _json.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ └── pkg_resources.cpython-312.pyc
│ │ │ │ │ ├── _json.py
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── importlib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ │ ├── _dists.cpython-312.pyc
│ │ │ │ │ │ │ └── _envs.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.py
│ │ │ │ │ │ ├── _dists.py
│ │ │ │ │ │ └── _envs.py
│ │ │ │ │ └── pkg_resources.py
│ │ │ │ ├── models
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── candidate.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url.cpython-312.pyc
│ │ │ │ │ │ ├── format_control.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── installation_report.cpython-312.pyc
│ │ │ │ │ │ ├── link.cpython-312.pyc
│ │ │ │ │ │ ├── scheme.cpython-312.pyc
│ │ │ │ │ │ ├── search_scope.cpython-312.pyc
│ │ │ │ │ │ ├── selection_prefs.cpython-312.pyc
│ │ │ │ │ │ ├── target_python.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── candidate.py
│ │ │ │ │ ├── direct_url.py
│ │ │ │ │ ├── format_control.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── installation_report.py
│ │ │ │ │ ├── link.py
│ │ │ │ │ ├── scheme.py
│ │ │ │ │ ├── search_scope.py
│ │ │ │ │ ├── selection_prefs.py
│ │ │ │ │ ├── target_python.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── network
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── download.cpython-312.pyc
│ │ │ │ │ │ ├── lazy_wheel.cpython-312.pyc
│ │ │ │ │ │ ├── session.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── xmlrpc.cpython-312.pyc
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── download.py
│ │ │ │ │ ├── lazy_wheel.py
│ │ │ │ │ ├── session.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── xmlrpc.py
│ │ │ │ ├── operations
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── check.cpython-312.pyc
│ │ │ │ │ │ ├── freeze.cpython-312.pyc
│ │ │ │ │ │ └── prepare.cpython-312.pyc
│ │ │ │ │ ├── build
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── build_tracker.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata_legacy.cpython-312.pyc
│ │ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_editable.cpython-312.pyc
│ │ │ │ │ │ │ ├── wheel_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── build_tracker.py
│ │ │ │ │ │ ├── metadata_editable.py
│ │ │ │ │ │ ├── metadata_legacy.py
│ │ │ │ │ │ ├── metadata.py
│ │ │ │ │ │ ├── wheel_editable.py
│ │ │ │ │ │ ├── wheel_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ ├── check.py
│ │ │ │ │ ├── freeze.py
│ │ │ │ │ ├── install
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── editable_legacy.cpython-312.pyc
│ │ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ │ ├── editable_legacy.py
│ │ │ │ │ │ └── wheel.py
│ │ │ │ │ └── prepare.py
│ │ │ │ ├── pyproject.py
│ │ │ │ ├── req
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── constructors.cpython-312.pyc
│ │ │ │ │ │ ├── req_file.cpython-312.pyc
│ │ │ │ │ │ ├── req_install.cpython-312.pyc
│ │ │ │ │ │ ├── req_set.cpython-312.pyc
│ │ │ │ │ │ └── req_uninstall.cpython-312.pyc
│ │ │ │ │ ├── constructors.py
│ │ │ │ │ ├── req_file.py
│ │ │ │ │ ├── req_install.py
│ │ │ │ │ ├── req_set.py
│ │ │ │ │ └── req_uninstall.py
│ │ │ │ ├── resolution
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── base.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── legacy
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ │ └── resolver.py
│ │ │ │ │ └── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── base.cpython-312.pyc
│ │ │ │ │ │ ├── candidates.cpython-312.pyc
│ │ │ │ │ │ ├── factory.cpython-312.pyc
│ │ │ │ │ │ ├── found_candidates.cpython-312.pyc
│ │ │ │ │ │ ├── provider.cpython-312.pyc
│ │ │ │ │ │ ├── reporter.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ └── resolver.cpython-312.pyc
│ │ │ │ │ ├── base.py
│ │ │ │ │ ├── candidates.py
│ │ │ │ │ ├── factory.py
│ │ │ │ │ ├── found_candidates.py
│ │ │ │ │ ├── provider.py
│ │ │ │ │ ├── reporter.py
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ └── resolver.py
│ │ │ │ ├── self_outdated_check.py
│ │ │ │ ├── utils
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _jaraco_text.cpython-312.pyc
│ │ │ │ │ │ ├── _log.cpython-312.pyc
│ │ │ │ │ │ ├── appdirs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── compatibility_tags.cpython-312.pyc
│ │ │ │ │ │ ├── datetime.cpython-312.pyc
│ │ │ │ │ │ ├── deprecation.cpython-312.pyc
│ │ │ │ │ │ ├── direct_url_helpers.cpython-312.pyc
│ │ │ │ │ │ ├── egg_link.cpython-312.pyc
│ │ │ │ │ │ ├── encoding.cpython-312.pyc
│ │ │ │ │ │ ├── entrypoints.cpython-312.pyc
│ │ │ │ │ │ ├── filesystem.cpython-312.pyc
│ │ │ │ │ │ ├── filetypes.cpython-312.pyc
│ │ │ │ │ │ ├── glibc.cpython-312.pyc
│ │ │ │ │ │ ├── hashes.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── misc.cpython-312.pyc
│ │ │ │ │ │ ├── packaging.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── setuptools_build.cpython-312.pyc
│ │ │ │ │ │ ├── subprocess.cpython-312.pyc
│ │ │ │ │ │ ├── temp_dir.cpython-312.pyc
│ │ │ │ │ │ ├── unpacking.cpython-312.pyc
│ │ │ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ │ │ ├── virtualenv.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── _jaraco_text.py
│ │ │ │ │ ├── _log.py
│ │ │ │ │ ├── appdirs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── compatibility_tags.py
│ │ │ │ │ ├── datetime.py
│ │ │ │ │ ├── deprecation.py
│ │ │ │ │ ├── direct_url_helpers.py
│ │ │ │ │ ├── egg_link.py
│ │ │ │ │ ├── encoding.py
│ │ │ │ │ ├── entrypoints.py
│ │ │ │ │ ├── filesystem.py
│ │ │ │ │ ├── filetypes.py
│ │ │ │ │ ├── glibc.py
│ │ │ │ │ ├── hashes.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── misc.py
│ │ │ │ │ ├── packaging.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── setuptools_build.py
│ │ │ │ │ ├── subprocess.py
│ │ │ │ │ ├── temp_dir.py
│ │ │ │ │ ├── unpacking.py
│ │ │ │ │ ├── urls.py
│ │ │ │ │ ├── virtualenv.py
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── vcs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── bazaar.cpython-312.pyc
│ │ │ │ │ │ ├── git.cpython-312.pyc
│ │ │ │ │ │ ├── mercurial.cpython-312.pyc
│ │ │ │ │ │ ├── subversion.cpython-312.pyc
│ │ │ │ │ │ └── versioncontrol.cpython-312.pyc
│ │ │ │ │ ├── bazaar.py
│ │ │ │ │ ├── git.py
│ │ │ │ │ ├── mercurial.py
│ │ │ │ │ ├── subversion.py
│ │ │ │ │ └── versioncontrol.py
│ │ │ │ └── wheel_builder.py
│ │ │ ├── _vendor
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ └── typing_extensions.cpython-312.pyc
│ │ │ │ ├── cachecontrol
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _cmd.cpython-312.pyc
│ │ │ │ │ │ ├── adapter.cpython-312.pyc
│ │ │ │ │ │ ├── cache.cpython-312.pyc
│ │ │ │ │ │ ├── controller.cpython-312.pyc
│ │ │ │ │ │ ├── filewrapper.cpython-312.pyc
│ │ │ │ │ │ ├── heuristics.cpython-312.pyc
│ │ │ │ │ │ ├── serialize.cpython-312.pyc
│ │ │ │ │ │ └── wrapper.cpython-312.pyc
│ │ │ │ │ ├── _cmd.py
│ │ │ │ │ ├── adapter.py
│ │ │ │ │ ├── cache.py
│ │ │ │ │ ├── caches
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── file_cache.cpython-312.pyc
│ │ │ │ │ │ │ └── redis_cache.cpython-312.pyc
│ │ │ │ │ │ ├── file_cache.py
│ │ │ │ │ │ └── redis_cache.py
│ │ │ │ │ ├── controller.py
│ │ │ │ │ ├── filewrapper.py
│ │ │ │ │ ├── heuristics.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── serialize.py
│ │ │ │ │ └── wrapper.py
│ │ │ │ ├── certifi
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── core.cpython-312.pyc
│ │ │ │ │ ├── cacert.pem
│ │ │ │ │ ├── core.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── distlib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── database.cpython-312.pyc
│ │ │ │ │ │ ├── index.cpython-312.pyc
│ │ │ │ │ │ ├── locators.cpython-312.pyc
│ │ │ │ │ │ ├── manifest.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── resources.cpython-312.pyc
│ │ │ │ │ │ ├── scripts.cpython-312.pyc
│ │ │ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── wheel.cpython-312.pyc
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── database.py
│ │ │ │ │ ├── index.py
│ │ │ │ │ ├── locators.py
│ │ │ │ │ ├── manifest.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── resources.py
│ │ │ │ │ ├── scripts.py
│ │ │ │ │ ├── t32.exe
│ │ │ │ │ ├── t64-arm.exe
│ │ │ │ │ ├── t64.exe
│ │ │ │ │ ├── util.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ ├── w32.exe
│ │ │ │ │ ├── w64-arm.exe
│ │ │ │ │ ├── w64.exe
│ │ │ │ │ └── wheel.py
│ │ │ │ ├── distro
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ └── distro.cpython-312.pyc
│ │ │ │ │ ├── distro.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── idna
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── codec.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── core.cpython-312.pyc
│ │ │ │ │ │ ├── idnadata.cpython-312.pyc
│ │ │ │ │ │ ├── intranges.cpython-312.pyc
│ │ │ │ │ │ ├── package_data.cpython-312.pyc
│ │ │ │ │ │ └── uts46data.cpython-312.pyc
│ │ │ │ │ ├── codec.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── core.py
│ │ │ │ │ ├── idnadata.py
│ │ │ │ │ ├── intranges.py
│ │ │ │ │ ├── package_data.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ └── uts46data.py
│ │ │ │ ├── msgpack
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── ext.cpython-312.pyc
│ │ │ │ │ │ └── fallback.cpython-312.pyc
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── ext.py
│ │ │ │ │ └── fallback.py
│ │ │ │ ├── packaging
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _elffile.cpython-312.pyc
│ │ │ │ │ │ ├── _manylinux.cpython-312.pyc
│ │ │ │ │ │ ├── _musllinux.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _structures.cpython-312.pyc
│ │ │ │ │ │ ├── _tokenizer.cpython-312.pyc
│ │ │ │ │ │ ├── markers.cpython-312.pyc
│ │ │ │ │ │ ├── metadata.cpython-312.pyc
│ │ │ │ │ │ ├── requirements.cpython-312.pyc
│ │ │ │ │ │ ├── specifiers.cpython-312.pyc
│ │ │ │ │ │ ├── tags.cpython-312.pyc
│ │ │ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ │ │ └── version.cpython-312.pyc
│ │ │ │ │ ├── _elffile.py
│ │ │ │ │ ├── _manylinux.py
│ │ │ │ │ ├── _musllinux.py
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _structures.py
│ │ │ │ │ ├── _tokenizer.py
│ │ │ │ │ ├── markers.py
│ │ │ │ │ ├── metadata.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── requirements.py
│ │ │ │ │ ├── specifiers.py
│ │ │ │ │ ├── tags.py
│ │ │ │ │ ├── utils.py
│ │ │ │ │ └── version.py
│ │ │ │ ├── pkg_resources
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── __pycache__
│ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ ├── platformdirs
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── android.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── macos.cpython-312.pyc
│ │ │ │ │ │ ├── unix.cpython-312.pyc
│ │ │ │ │ │ ├── version.cpython-312.pyc
│ │ │ │ │ │ └── windows.cpython-312.pyc
│ │ │ │ │ ├── android.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── macos.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── unix.py
│ │ │ │ │ ├── version.py
│ │ │ │ │ └── windows.py
│ │ │ │ ├── pygments
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── cmdline.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── filter.cpython-312.pyc
│ │ │ │ │ │ ├── formatter.cpython-312.pyc
│ │ │ │ │ │ ├── lexer.cpython-312.pyc
│ │ │ │ │ │ ├── modeline.cpython-312.pyc
│ │ │ │ │ │ ├── plugin.cpython-312.pyc
│ │ │ │ │ │ ├── regexopt.cpython-312.pyc
│ │ │ │ │ │ ├── scanner.cpython-312.pyc
│ │ │ │ │ │ ├── sphinxext.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── token.cpython-312.pyc
│ │ │ │ │ │ ├── unistring.cpython-312.pyc
│ │ │ │ │ │ └── util.cpython-312.pyc
│ │ │ │ │ ├── cmdline.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── filter.py
│ │ │ │ │ ├── filters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── __pycache__
│ │ │ │ │ │ └── __init__.cpython-312.pyc
│ │ │ │ │ ├── formatter.py
│ │ │ │ │ ├── formatters
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ ├── bbcode.cpython-312.pyc
│ │ │ │ │ │ │ ├── groff.cpython-312.pyc
│ │ │ │ │ │ │ ├── html.cpython-312.pyc
│ │ │ │ │ │ │ ├── img.cpython-312.pyc
│ │ │ │ │ │ │ ├── irc.cpython-312.pyc
│ │ │ │ │ │ │ ├── latex.cpython-312.pyc
│ │ │ │ │ │ │ ├── other.cpython-312.pyc
│ │ │ │ │ │ │ ├── pangomarkup.cpython-312.pyc
│ │ │ │ │ │ │ ├── rtf.cpython-312.pyc
│ │ │ │ │ │ │ ├── svg.cpython-312.pyc
│ │ │ │ │ │ │ ├── terminal.cpython-312.pyc
│ │ │ │ │ │ │ └── terminal256.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ ├── bbcode.py
│ │ │ │ │ │ ├── groff.py
│ │ │ │ │ │ ├── html.py
│ │ │ │ │ │ ├── img.py
│ │ │ │ │ │ ├── irc.py
│ │ │ │ │ │ ├── latex.py
│ │ │ │ │ │ ├── other.py
│ │ │ │ │ │ ├── pangomarkup.py
│ │ │ │ │ │ ├── rtf.py
│ │ │ │ │ │ ├── svg.py
│ │ │ │ │ │ ├── terminal.py
│ │ │ │ │ │ └── terminal256.py
│ │ │ │ │ ├── lexer.py
│ │ │ │ │ ├── lexers
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _mapping.cpython-312.pyc
│ │ │ │ │ │ │ └── python.cpython-312.pyc
│ │ │ │ │ │ ├── _mapping.py
│ │ │ │ │ │ └── python.py
│ │ │ │ │ ├── modeline.py
│ │ │ │ │ ├── plugin.py
│ │ │ │ │ ├── regexopt.py
│ │ │ │ │ ├── scanner.py
│ │ │ │ │ ├── sphinxext.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styles
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── _mapping.cpython-312.pyc
│ │ │ │ │ │ └── _mapping.py
│ │ │ │ │ ├── token.py
│ │ │ │ │ ├── unistring.py
│ │ │ │ │ └── util.py
│ │ │ │ ├── pyproject_hooks
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _compat.cpython-312.pyc
│ │ │ │ │ │ └── _impl.cpython-312.pyc
│ │ │ │ │ ├── _compat.py
│ │ │ │ │ ├── _impl.py
│ │ │ │ │ └── _in_process
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ └── _in_process.cpython-312.pyc
│ │ │ │ │ └── _in_process.py
│ │ │ │ ├── requests
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ │ ├── __version__.py
│ │ │ │ │ ├── _internal_utils.py
│ │ │ │ │ ├── adapters.py
│ │ │ │ │ ├── api.py
│ │ │ │ │ ├── auth.py
│ │ │ │ │ ├── certs.py
│ │ │ │ │ ├── compat.py
│ │ │ │ │ ├── cookies.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── help.py
│ │ │ │ │ ├── hooks.py
│ │ │ │ │ ├── models.py
│ │ │ │ │ ├── packages.py
│ │ │ │ │ ├── sessions.py
│ │ │ │ │ ├── status_codes.py
│ │ │ │ │ ├── structures.py
│ │ │ │ │ └── utils.py
│ │ │ │ ├── resolvelib
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── providers.cpython-312.pyc
│ │ │ │ │ │ ├── reporters.cpython-312.pyc
│ │ │ │ │ │ ├── resolvers.cpython-312.pyc
│ │ │ │ │ │ └── structs.cpython-312.pyc
│ │ │ │ │ ├── compat
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── collections_abc.cpython-312.pyc
│ │ │ │ │ │ └── collections_abc.py
│ │ │ │ │ ├── providers.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── reporters.py
│ │ │ │ │ ├── resolvers.py
│ │ │ │ │ └── structs.py
│ │ │ │ ├── rich
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __main__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── __main__.cpython-312.pyc
│ │ │ │ │ │ ├── _cell_widths.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_codes.cpython-312.pyc
│ │ │ │ │ │ ├── _emoji_replace.cpython-312.pyc
│ │ │ │ │ │ ├── _export_format.cpython-312.pyc
│ │ │ │ │ │ ├── _extension.cpython-312.pyc
│ │ │ │ │ │ ├── _fileno.cpython-312.pyc
│ │ │ │ │ │ ├── _inspect.cpython-312.pyc
│ │ │ │ │ │ ├── _log_render.cpython-312.pyc
│ │ │ │ │ │ ├── _loop.cpython-312.pyc
│ │ │ │ │ │ ├── _null_file.cpython-312.pyc
│ │ │ │ │ │ ├── _palettes.cpython-312.pyc
│ │ │ │ │ │ ├── _pick.cpython-312.pyc
│ │ │ │ │ │ ├── _ratio.cpython-312.pyc
│ │ │ │ │ │ ├── _spinners.cpython-312.pyc
│ │ │ │ │ │ ├── _stack.cpython-312.pyc
│ │ │ │ │ │ ├── _timer.cpython-312.pyc
│ │ │ │ │ │ ├── _win32_console.cpython-312.pyc
│ │ │ │ │ │ ├── _windows_renderer.cpython-312.pyc
│ │ │ │ │ │ ├── _windows.cpython-312.pyc
│ │ │ │ │ │ ├── _wrap.cpython-312.pyc
│ │ │ │ │ │ ├── abc.cpython-312.pyc
│ │ │ │ │ │ ├── align.cpython-312.pyc
│ │ │ │ │ │ ├── ansi.cpython-312.pyc
│ │ │ │ │ │ ├── bar.cpython-312.pyc
│ │ │ │ │ │ ├── box.cpython-312.pyc
│ │ │ │ │ │ ├── cells.cpython-312.pyc
│ │ │ │ │ │ ├── color_triplet.cpython-312.pyc
│ │ │ │ │ │ ├── color.cpython-312.pyc
│ │ │ │ │ │ ├── columns.cpython-312.pyc
│ │ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ │ ├── constrain.cpython-312.pyc
│ │ │ │ │ │ ├── containers.cpython-312.pyc
│ │ │ │ │ │ ├── control.cpython-312.pyc
│ │ │ │ │ │ ├── default_styles.cpython-312.pyc
│ │ │ │ │ │ ├── diagnose.cpython-312.pyc
│ │ │ │ │ │ ├── emoji.cpython-312.pyc
│ │ │ │ │ │ ├── errors.cpython-312.pyc
│ │ │ │ │ │ ├── file_proxy.cpython-312.pyc
│ │ │ │ │ │ ├── filesize.cpython-312.pyc
│ │ │ │ │ │ ├── highlighter.cpython-312.pyc
│ │ │ │ │ │ ├── json.cpython-312.pyc
│ │ │ │ │ │ ├── jupyter.cpython-312.pyc
│ │ │ │ │ │ ├── layout.cpython-312.pyc
│ │ │ │ │ │ ├── live_render.cpython-312.pyc
│ │ │ │ │ │ ├── live.cpython-312.pyc
│ │ │ │ │ │ ├── logging.cpython-312.pyc
│ │ │ │ │ │ ├── markup.cpython-312.pyc
│ │ │ │ │ │ ├── measure.cpython-312.pyc
│ │ │ │ │ │ ├── padding.cpython-312.pyc
│ │ │ │ │ │ ├── pager.cpython-312.pyc
│ │ │ │ │ │ ├── palette.cpython-312.pyc
│ │ │ │ │ │ ├── panel.cpython-312.pyc
│ │ │ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ │ │ ├── progress_bar.cpython-312.pyc
│ │ │ │ │ │ ├── progress.cpython-312.pyc
│ │ │ │ │ │ ├── prompt.cpython-312.pyc
│ │ │ │ │ │ ├── protocol.cpython-312.pyc
│ │ │ │ │ │ ├── region.cpython-312.pyc
│ │ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ │ ├── rule.cpython-312.pyc
│ │ │ │ │ │ ├── scope.cpython-312.pyc
│ │ │ │ │ │ ├── screen.cpython-312.pyc
│ │ │ │ │ │ ├── segment.cpython-312.pyc
│ │ │ │ │ │ ├── spinner.cpython-312.pyc
│ │ │ │ │ │ ├── status.cpython-312.pyc
│ │ │ │ │ │ ├── style.cpython-312.pyc
│ │ │ │ │ │ ├── styled.cpython-312.pyc
│ │ │ │ │ │ ├── syntax.cpython-312.pyc
│ │ │ │ │ │ ├── table.cpython-312.pyc
│ │ │ │ │ │ ├── terminal_theme.cpython-312.pyc
│ │ │ │ │ │ ├── text.cpython-312.pyc
│ │ │ │ │ │ ├── theme.cpython-312.pyc
│ │ │ │ │ │ ├── themes.cpython-312.pyc
│ │ │ │ │ │ ├── traceback.cpython-312.pyc
│ │ │ │ │ │ └── tree.cpython-312.pyc
│ │ │ │ │ ├── _cell_widths.py
│ │ │ │ │ ├── _emoji_codes.py
│ │ │ │ │ ├── _emoji_replace.py
│ │ │ │ │ ├── _export_format.py
│ │ │ │ │ ├── _extension.py
│ │ │ │ │ ├── _fileno.py
│ │ │ │ │ ├── _inspect.py
│ │ │ │ │ ├── _log_render.py
│ │ │ │ │ ├── _loop.py
│ │ │ │ │ ├── _null_file.py
│ │ │ │ │ ├── _palettes.py
│ │ │ │ │ ├── _pick.py
│ │ │ │ │ ├── _ratio.py
│ │ │ │ │ ├── _spinners.py
│ │ │ │ │ ├── _stack.py
│ │ │ │ │ ├── _timer.py
│ │ │ │ │ ├── _win32_console.py
│ │ │ │ │ ├── _windows_renderer.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ ├── _wrap.py
│ │ │ │ │ ├── abc.py
│ │ │ │ │ ├── align.py
│ │ │ │ │ ├── ansi.py
│ │ │ │ │ ├── bar.py
│ │ │ │ │ ├── box.py
│ │ │ │ │ ├── cells.py
│ │ │ │ │ ├── color_triplet.py
│ │ │ │ │ ├── color.py
│ │ │ │ │ ├── columns.py
│ │ │ │ │ ├── console.py
│ │ │ │ │ ├── constrain.py
│ │ │ │ │ ├── containers.py
│ │ │ │ │ ├── control.py
│ │ │ │ │ ├── default_styles.py
│ │ │ │ │ ├── diagnose.py
│ │ │ │ │ ├── emoji.py
│ │ │ │ │ ├── errors.py
│ │ │ │ │ ├── file_proxy.py
│ │ │ │ │ ├── filesize.py
│ │ │ │ │ ├── highlighter.py
│ │ │ │ │ ├── json.py
│ │ │ │ │ ├── jupyter.py
│ │ │ │ │ ├── layout.py
│ │ │ │ │ ├── live_render.py
│ │ │ │ │ ├── live.py
│ │ │ │ │ ├── logging.py
│ │ │ │ │ ├── markup.py
│ │ │ │ │ ├── measure.py
│ │ │ │ │ ├── padding.py
│ │ │ │ │ ├── pager.py
│ │ │ │ │ ├── palette.py
│ │ │ │ │ ├── panel.py
│ │ │ │ │ ├── pretty.py
│ │ │ │ │ ├── progress_bar.py
│ │ │ │ │ ├── progress.py
│ │ │ │ │ ├── prompt.py
│ │ │ │ │ ├── protocol.py
│ │ │ │ │ ├── py.typed
│ │ │ │ │ ├── region.py
│ │ │ │ │ ├── repr.py
│ │ │ │ │ ├── rule.py
│ │ │ │ │ ├── scope.py
│ │ │ │ │ ├── screen.py
│ │ │ │ │ ├── segment.py
│ │ │ │ │ ├── spinner.py
│ │ │ │ │ ├── status.py
│ │ │ │ │ ├── style.py
│ │ │ │ │ ├── styled.py
│ │ │ │ │ ├── syntax.py
│ │ │ │ │ ├── table.py
│ │ │ │ │ ├── terminal_theme.py
│ │ │ │ │ ├── text.py
│ │ │ │ │ ├── theme.py
│ │ │ │ │ ├── themes.py
│ │ │ │ │ ├── traceback.py
│ │ │ │ │ └── tree.py
│ │ │ │ ├── tomli
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _parser.cpython-312.pyc
│ │ │ │ │ │ ├── _re.cpython-312.pyc
│ │ │ │ │ │ └── _types.cpython-312.pyc
│ │ │ │ │ ├── _parser.py
│ │ │ │ │ ├── _re.py
│ │ │ │ │ ├── _types.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── truststore
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _api.cpython-312.pyc
│ │ │ │ │ │ ├── _macos.cpython-312.pyc
│ │ │ │ │ │ ├── _openssl.cpython-312.pyc
│ │ │ │ │ │ ├── _ssl_constants.cpython-312.pyc
│ │ │ │ │ │ └── _windows.cpython-312.pyc
│ │ │ │ │ ├── _api.py
│ │ │ │ │ ├── _macos.py
│ │ │ │ │ ├── _openssl.py
│ │ │ │ │ ├── _ssl_constants.py
│ │ │ │ │ ├── _windows.py
│ │ │ │ │ └── py.typed
│ │ │ │ ├── typing_extensions.py
│ │ │ │ ├── urllib3
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── _collections.py
│ │ │ │ │ ├── _version.py
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── connectionpool.py
│ │ │ │ │ ├── contrib
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ ├── _appengine_environ.cpython-312.pyc
│ │ │ │ │ │ │ ├── appengine.cpython-312.pyc
│ │ │ │ │ │ │ ├── ntlmpool.cpython-312.pyc
│ │ │ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ │ │ ├── securetransport.cpython-312.pyc
│ │ │ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ │ │ ├── _appengine_environ.py
│ │ │ │ │ │ ├── _securetransport
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── bindings.cpython-312.pyc
│ │ │ │ │ │ │ │ └── low_level.cpython-312.pyc
│ │ │ │ │ │ │ ├── bindings.py
│ │ │ │ │ │ │ └── low_level.py
│ │ │ │ │ │ ├── appengine.py
│ │ │ │ │ │ ├── ntlmpool.py
│ │ │ │ │ │ ├── pyopenssl.py
│ │ │ │ │ │ ├── securetransport.py
│ │ │ │ │ │ └── socks.py
│ │ │ │ │ ├── exceptions.py
│ │ │ │ │ ├── fields.py
│ │ │ │ │ ├── filepost.py
│ │ │ │ │ ├── packages
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ └── six.cpython-312.pyc
│ │ │ │ │ │ ├── backports
│ │ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ │ │ ├── makefile.cpython-312.pyc
│ │ │ │ │ │ │ │ └── weakref_finalize.cpython-312.pyc
│ │ │ │ │ │ │ ├── makefile.py
│ │ │ │ │ │ │ └── weakref_finalize.py
│ │ │ │ │ │ └── six.py
│ │ │ │ │ ├── poolmanager.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ └── util
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ │ │ ├── queue.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ │ │ └── wait.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── proxy.py
│ │ │ │ │ ├── queue.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ ├── response.py
│ │ │ │ │ ├── retry.py
│ │ │ │ │ ├── ssl_.py
│ │ │ │ │ ├── ssl_match_hostname.py
│ │ │ │ │ ├── ssltransport.py
│ │ │ │ │ ├── timeout.py
│ │ │ │ │ ├── url.py
│ │ │ │ │ └── wait.py
│ │ │ │ └── vendor.txt
│ │ │ └── py.typed
│ │ ├── pip-24.2.dist-info
│ │ │ ├── AUTHORS.txt
│ │ │ ├── entry_points.txt
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── requests
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __version__.cpython-312.pyc
│ │ │ │ ├── _internal_utils.cpython-312.pyc
│ │ │ │ ├── adapters.cpython-312.pyc
│ │ │ │ ├── api.cpython-312.pyc
│ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ ├── certs.cpython-312.pyc
│ │ │ │ ├── compat.cpython-312.pyc
│ │ │ │ ├── cookies.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── help.cpython-312.pyc
│ │ │ │ ├── hooks.cpython-312.pyc
│ │ │ │ ├── models.cpython-312.pyc
│ │ │ │ ├── packages.cpython-312.pyc
│ │ │ │ ├── sessions.cpython-312.pyc
│ │ │ │ ├── status_codes.cpython-312.pyc
│ │ │ │ ├── structures.cpython-312.pyc
│ │ │ │ └── utils.cpython-312.pyc
│ │ │ ├── __version__.py
│ │ │ ├── _internal_utils.py
│ │ │ ├── adapters.py
│ │ │ ├── api.py
│ │ │ ├── auth.py
│ │ │ ├── certs.py
│ │ │ ├── compat.py
│ │ │ ├── cookies.py
│ │ │ ├── exceptions.py
│ │ │ ├── help.py
│ │ │ ├── hooks.py
│ │ │ ├── models.py
│ │ │ ├── packages.py
│ │ │ ├── sessions.py
│ │ │ ├── status_codes.py
│ │ │ ├── structures.py
│ │ │ └── utils.py
│ │ ├── requests-2.32.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── soupsieve
│ │ │ ├── __init__.py
│ │ │ ├── __meta__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── __meta__.cpython-312.pyc
│ │ │ │ ├── css_match.cpython-312.pyc
│ │ │ │ ├── css_parser.cpython-312.pyc
│ │ │ │ ├── css_types.cpython-312.pyc
│ │ │ │ ├── pretty.cpython-312.pyc
│ │ │ │ └── util.cpython-312.pyc
│ │ │ ├── css_match.py
│ │ │ ├── css_parser.py
│ │ │ ├── css_types.py
│ │ │ ├── pretty.py
│ │ │ ├── py.typed
│ │ │ └── util.py
│ │ ├── soupsieve-2.6.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.md
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── urllib3
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _base_connection.cpython-312.pyc
│ │ │ │ ├── _collections.cpython-312.pyc
│ │ │ │ ├── _request_methods.cpython-312.pyc
│ │ │ │ ├── _version.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── connectionpool.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── fields.cpython-312.pyc
│ │ │ │ ├── filepost.cpython-312.pyc
│ │ │ │ ├── poolmanager.cpython-312.pyc
│ │ │ │ └── response.cpython-312.pyc
│ │ │ ├── _base_connection.py
│ │ │ ├── _collections.py
│ │ │ ├── _request_methods.py
│ │ │ ├── _version.py
│ │ │ ├── connection.py
│ │ │ ├── connectionpool.py
│ │ │ ├── contrib
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── pyopenssl.cpython-312.pyc
│ │ │ │ │ └── socks.cpython-312.pyc
│ │ │ │ ├── emscripten
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── __pycache__
│ │ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ │ ├── fetch.cpython-312.pyc
│ │ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ │ ├── connection.py
│ │ │ │ │ ├── emscripten_fetch_worker.js
│ │ │ │ │ ├── fetch.py
│ │ │ │ │ ├── request.py
│ │ │ │ │ └── response.py
│ │ │ │ ├── pyopenssl.py
│ │ │ │ └── socks.py
│ │ │ ├── exceptions.py
│ │ │ ├── fields.py
│ │ │ ├── filepost.py
│ │ │ ├── http2
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ │ └── probe.cpython-312.pyc
│ │ │ │ ├── connection.py
│ │ │ │ └── probe.py
│ │ │ ├── poolmanager.py
│ │ │ ├── py.typed
│ │ │ ├── response.py
│ │ │ └── util
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── connection.cpython-312.pyc
│ │ │ │ ├── proxy.cpython-312.pyc
│ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ ├── retry.cpython-312.pyc
│ │ │ │ ├── ssl_.cpython-312.pyc
│ │ │ │ ├── ssl_match_hostname.cpython-312.pyc
│ │ │ │ ├── ssltransport.cpython-312.pyc
│ │ │ │ ├── timeout.cpython-312.pyc
│ │ │ │ ├── url.cpython-312.pyc
│ │ │ │ ├── util.cpython-312.pyc
│ │ │ │ └── wait.cpython-312.pyc
│ │ │ ├── connection.py
│ │ │ ├── proxy.py
│ │ │ ├── request.py
│ │ │ ├── response.py
│ │ │ ├── retry.py
│ │ │ ├── ssl_.py
│ │ │ ├── ssl_match_hostname.py
│ │ │ ├── ssltransport.py
│ │ │ ├── timeout.py
│ │ │ ├── url.py
│ │ │ ├── util.py
│ │ │ └── wait.py
│ │ ├── urllib3-2.2.3.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── licenses
│ │ │ │ └── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ └── WHEEL
│ │ ├── useragent
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── resources
│ │ │ │ └── user_agent_data.json
│ │ │ └── test
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-312.pyc
│ │ │ ├── test_additional_os.json
│ │ │ ├── test_browser.json
│ │ │ ├── test_device.json
│ │ │ ├── test_firefox.json
│ │ │ ├── test_os.json
│ │ │ └── test_pgts_browser.json
│ │ ├── useragent-0.1.1.dist-info
│ │ │ ├── INSTALLER
│ │ │ ├── LICENSE.txt
│ │ │ ├── METADATA
│ │ │ ├── RECORD
│ │ │ ├── REQUESTED
│ │ │ ├── top_level.txt
│ │ │ └── WHEEL
│ │ ├── werkzeug
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ ├── _internal.cpython-312.pyc
│ │ │ │ ├── _reloader.cpython-312.pyc
│ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ ├── formparser.cpython-312.pyc
│ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ ├── local.cpython-312.pyc
│ │ │ │ ├── security.cpython-312.pyc
│ │ │ │ ├── serving.cpython-312.pyc
│ │ │ │ ├── test.cpython-312.pyc
│ │ │ │ ├── testapp.cpython-312.pyc
│ │ │ │ ├── urls.cpython-312.pyc
│ │ │ │ ├── user_agent.cpython-312.pyc
│ │ │ │ ├── utils.cpython-312.pyc
│ │ │ │ └── wsgi.cpython-312.pyc
│ │ │ ├── _internal.py
│ │ │ ├── _reloader.py
│ │ │ ├── datastructures
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── accept.cpython-312.pyc
│ │ │ │ │ ├── auth.cpython-312.pyc
│ │ │ │ │ ├── cache_control.cpython-312.pyc
│ │ │ │ │ ├── csp.cpython-312.pyc
│ │ │ │ │ ├── etag.cpython-312.pyc
│ │ │ │ │ ├── file_storage.cpython-312.pyc
│ │ │ │ │ ├── headers.cpython-312.pyc
│ │ │ │ │ ├── mixins.cpython-312.pyc
│ │ │ │ │ ├── range.cpython-312.pyc
│ │ │ │ │ └── structures.cpython-312.pyc
│ │ │ │ ├── accept.py
│ │ │ │ ├── accept.pyi
│ │ │ │ ├── auth.py
│ │ │ │ ├── cache_control.py
│ │ │ │ ├── cache_control.pyi
│ │ │ │ ├── csp.py
│ │ │ │ ├── csp.pyi
│ │ │ │ ├── etag.py
│ │ │ │ ├── etag.pyi
│ │ │ │ ├── file_storage.py
│ │ │ │ ├── file_storage.pyi
│ │ │ │ ├── headers.py
│ │ │ │ ├── headers.pyi
│ │ │ │ ├── mixins.py
│ │ │ │ ├── mixins.pyi
│ │ │ │ ├── range.py
│ │ │ │ ├── range.pyi
│ │ │ │ ├── structures.py
│ │ │ │ └── structures.pyi
│ │ │ ├── debug
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── console.cpython-312.pyc
│ │ │ │ │ ├── repr.cpython-312.pyc
│ │ │ │ │ └── tbtools.cpython-312.pyc
│ │ │ │ ├── console.py
│ │ │ │ ├── repr.py
│ │ │ │ ├── shared
│ │ │ │ │ ├── console.png
│ │ │ │ │ ├── debugger.js
│ │ │ │ │ ├── ICON_LICENSE.md
│ │ │ │ │ ├── less.png
│ │ │ │ │ ├── more.png
│ │ │ │ │ └── style.css
│ │ │ │ └── tbtools.py
│ │ │ ├── exceptions.py
│ │ │ ├── formparser.py
│ │ │ ├── http.py
│ │ │ ├── local.py
│ │ │ ├── middleware
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── dispatcher.cpython-312.pyc
│ │ │ │ │ ├── http_proxy.cpython-312.pyc
│ │ │ │ │ ├── lint.cpython-312.pyc
│ │ │ │ │ ├── profiler.cpython-312.pyc
│ │ │ │ │ ├── proxy_fix.cpython-312.pyc
│ │ │ │ │ └── shared_data.cpython-312.pyc
│ │ │ │ ├── dispatcher.py
│ │ │ │ ├── http_proxy.py
│ │ │ │ ├── lint.py
│ │ │ │ ├── profiler.py
│ │ │ │ ├── proxy_fix.py
│ │ │ │ └── shared_data.py
│ │ │ ├── py.typed
│ │ │ ├── routing
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── converters.cpython-312.pyc
│ │ │ │ │ ├── exceptions.cpython-312.pyc
│ │ │ │ │ ├── map.cpython-312.pyc
│ │ │ │ │ ├── matcher.cpython-312.pyc
│ │ │ │ │ └── rules.cpython-312.pyc
│ │ │ │ ├── converters.py
│ │ │ │ ├── exceptions.py
│ │ │ │ ├── map.py
│ │ │ │ ├── matcher.py
│ │ │ │ └── rules.py
│ │ │ ├── sansio
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── http.cpython-312.pyc
│ │ │ │ │ ├── multipart.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ ├── response.cpython-312.pyc
│ │ │ │ │ └── utils.cpython-312.pyc
│ │ │ │ ├── http.py
│ │ │ │ ├── multipart.py
│ │ │ │ ├── request.py
│ │ │ │ ├── response.py
│ │ │ │ └── utils.py
│ │ │ ├── security.py
│ │ │ ├── serving.py
│ │ │ ├── test.py
│ │ │ ├── testapp.py
│ │ │ ├── urls.py
│ │ │ ├── user_agent.py
│ │ │ ├── utils.py
│ │ │ ├── wrappers
│ │ │ │ ├── __init__.py
│ │ │ │ ├── __pycache__
│ │ │ │ │ ├── __init__.cpython-312.pyc
│ │ │ │ │ ├── request.cpython-312.pyc
│ │ │ │ │ └── response.cpython-312.pyc
│ │ │ │ ├── request.py
│ │ │ │ └── response.py
│ │ │ └── wsgi.py
│ │ └── werkzeug-3.0.4.dist-info
│ │ ├── INSTALLER
│ │ ├── LICENSE.txt
│ │ ├── METADATA
│ │ ├── RECORD
│ │ └── WHEEL
│ ├── pyvenv.cfg
│ ├── static
│ │ └── styles.css
│ ├── templates
│ │ └── index.html
│ └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
├── text1.txt
└── text2.txt
```
# Files
--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/python.py:
--------------------------------------------------------------------------------
```python
1 | """
2 | pygments.lexers.python
3 | ~~~~~~~~~~~~~~~~~~~~~~
4 |
5 | Lexers for Python and related languages.
6 |
7 | :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
8 | :license: BSD, see LICENSE for details.
9 | """
10 |
11 | import keyword
12 |
13 | from pip._vendor.pygments.lexer import DelegatingLexer, RegexLexer, include, \
14 | bygroups, using, default, words, combined, this
15 | from pip._vendor.pygments.util import get_bool_opt, shebang_matches
16 | from pip._vendor.pygments.token import Text, Comment, Operator, Keyword, Name, String, \
17 | Number, Punctuation, Generic, Other, Error, Whitespace
18 | from pip._vendor.pygments import unistring as uni
19 |
20 | __all__ = ['PythonLexer', 'PythonConsoleLexer', 'PythonTracebackLexer',
21 | 'Python2Lexer', 'Python2TracebackLexer',
22 | 'CythonLexer', 'DgLexer', 'NumPyLexer']
23 |
24 |
25 | class PythonLexer(RegexLexer):
26 | """
27 | For Python source code (version 3.x).
28 |
29 | .. versionchanged:: 2.5
30 | This is now the default ``PythonLexer``. It is still available as the
31 | alias ``Python3Lexer``.
32 | """
33 |
34 | name = 'Python'
35 | url = 'https://www.python.org'
36 | aliases = ['python', 'py', 'sage', 'python3', 'py3', 'bazel', 'starlark']
37 | filenames = [
38 | '*.py',
39 | '*.pyw',
40 | # Type stubs
41 | '*.pyi',
42 | # Jython
43 | '*.jy',
44 | # Sage
45 | '*.sage',
46 | # SCons
47 | '*.sc',
48 | 'SConstruct',
49 | 'SConscript',
50 | # Skylark/Starlark (used by Bazel, Buck, and Pants)
51 | '*.bzl',
52 | 'BUCK',
53 | 'BUILD',
54 | 'BUILD.bazel',
55 | 'WORKSPACE',
56 | # Twisted Application infrastructure
57 | '*.tac',
58 | ]
59 | mimetypes = ['text/x-python', 'application/x-python',
60 | 'text/x-python3', 'application/x-python3']
61 | version_added = '0.10'
62 |
63 | uni_name = f"[{uni.xid_start}][{uni.xid_continue}]*"
64 |
65 | def innerstring_rules(ttype):
66 | return [
67 | # the old style '%s' % (...) string formatting (still valid in Py3)
68 | (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
69 | '[hlL]?[E-GXc-giorsaux%]', String.Interpol),
70 | # the new style '{}'.format(...) string formatting
71 | (r'\{'
72 | r'((\w+)((\.\w+)|(\[[^\]]+\]))*)?' # field name
73 | r'(\![sra])?' # conversion
74 | r'(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?'
75 | r'\}', String.Interpol),
76 |
77 | # backslashes, quotes and formatting signs must be parsed one at a time
78 | (r'[^\\\'"%{\n]+', ttype),
79 | (r'[\'"\\]', ttype),
80 | # unhandled string formatting sign
81 | (r'%|(\{{1,2})', ttype)
82 | # newlines are an error (use "nl" state)
83 | ]
84 |
85 | def fstring_rules(ttype):
86 | return [
87 | # Assuming that a '}' is the closing brace after format specifier.
88 | # Sadly, this means that we won't detect syntax error. But it's
89 | # more important to parse correct syntax correctly, than to
90 | # highlight invalid syntax.
91 | (r'\}', String.Interpol),
92 | (r'\{', String.Interpol, 'expr-inside-fstring'),
93 | # backslashes, quotes and formatting signs must be parsed one at a time
94 | (r'[^\\\'"{}\n]+', ttype),
95 | (r'[\'"\\]', ttype),
96 | # newlines are an error (use "nl" state)
97 | ]
98 |
99 | tokens = {
100 | 'root': [
101 | (r'\n', Whitespace),
102 | (r'^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")',
103 | bygroups(Whitespace, String.Affix, String.Doc)),
104 | (r"^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')",
105 | bygroups(Whitespace, String.Affix, String.Doc)),
106 | (r'\A#!.+$', Comment.Hashbang),
107 | (r'#.*$', Comment.Single),
108 | (r'\\\n', Text),
109 | (r'\\', Text),
110 | include('keywords'),
111 | include('soft-keywords'),
112 | (r'(def)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'funcname'),
113 | (r'(class)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'classname'),
114 | (r'(from)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
115 | 'fromimport'),
116 | (r'(import)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
117 | 'import'),
118 | include('expr'),
119 | ],
120 | 'expr': [
121 | # raw f-strings
122 | ('(?i)(rf|fr)(""")',
123 | bygroups(String.Affix, String.Double),
124 | combined('rfstringescape', 'tdqf')),
125 | ("(?i)(rf|fr)(''')",
126 | bygroups(String.Affix, String.Single),
127 | combined('rfstringescape', 'tsqf')),
128 | ('(?i)(rf|fr)(")',
129 | bygroups(String.Affix, String.Double),
130 | combined('rfstringescape', 'dqf')),
131 | ("(?i)(rf|fr)(')",
132 | bygroups(String.Affix, String.Single),
133 | combined('rfstringescape', 'sqf')),
134 | # non-raw f-strings
135 | ('([fF])(""")', bygroups(String.Affix, String.Double),
136 | combined('fstringescape', 'tdqf')),
137 | ("([fF])(''')", bygroups(String.Affix, String.Single),
138 | combined('fstringescape', 'tsqf')),
139 | ('([fF])(")', bygroups(String.Affix, String.Double),
140 | combined('fstringescape', 'dqf')),
141 | ("([fF])(')", bygroups(String.Affix, String.Single),
142 | combined('fstringescape', 'sqf')),
143 | # raw bytes and strings
144 | ('(?i)(rb|br|r)(""")',
145 | bygroups(String.Affix, String.Double), 'tdqs'),
146 | ("(?i)(rb|br|r)(''')",
147 | bygroups(String.Affix, String.Single), 'tsqs'),
148 | ('(?i)(rb|br|r)(")',
149 | bygroups(String.Affix, String.Double), 'dqs'),
150 | ("(?i)(rb|br|r)(')",
151 | bygroups(String.Affix, String.Single), 'sqs'),
152 | # non-raw strings
153 | ('([uU]?)(""")', bygroups(String.Affix, String.Double),
154 | combined('stringescape', 'tdqs')),
155 | ("([uU]?)(''')", bygroups(String.Affix, String.Single),
156 | combined('stringescape', 'tsqs')),
157 | ('([uU]?)(")', bygroups(String.Affix, String.Double),
158 | combined('stringescape', 'dqs')),
159 | ("([uU]?)(')", bygroups(String.Affix, String.Single),
160 | combined('stringescape', 'sqs')),
161 | # non-raw bytes
162 | ('([bB])(""")', bygroups(String.Affix, String.Double),
163 | combined('bytesescape', 'tdqs')),
164 | ("([bB])(''')", bygroups(String.Affix, String.Single),
165 | combined('bytesescape', 'tsqs')),
166 | ('([bB])(")', bygroups(String.Affix, String.Double),
167 | combined('bytesescape', 'dqs')),
168 | ("([bB])(')", bygroups(String.Affix, String.Single),
169 | combined('bytesescape', 'sqs')),
170 |
171 | (r'[^\S\n]+', Text),
172 | include('numbers'),
173 | (r'!=|==|<<|>>|:=|[-~+/*%=<>&^|.]', Operator),
174 | (r'[]{}:(),;[]', Punctuation),
175 | (r'(in|is|and|or|not)\b', Operator.Word),
176 | include('expr-keywords'),
177 | include('builtins'),
178 | include('magicfuncs'),
179 | include('magicvars'),
180 | include('name'),
181 | ],
182 | 'expr-inside-fstring': [
183 | (r'[{([]', Punctuation, 'expr-inside-fstring-inner'),
184 | # without format specifier
185 | (r'(=\s*)?' # debug (https://bugs.python.org/issue36817)
186 | r'(\![sraf])?' # conversion
187 | r'\}', String.Interpol, '#pop'),
188 | # with format specifier
189 | # we'll catch the remaining '}' in the outer scope
190 | (r'(=\s*)?' # debug (https://bugs.python.org/issue36817)
191 | r'(\![sraf])?' # conversion
192 | r':', String.Interpol, '#pop'),
193 | (r'\s+', Whitespace), # allow new lines
194 | include('expr'),
195 | ],
196 | 'expr-inside-fstring-inner': [
197 | (r'[{([]', Punctuation, 'expr-inside-fstring-inner'),
198 | (r'[])}]', Punctuation, '#pop'),
199 | (r'\s+', Whitespace), # allow new lines
200 | include('expr'),
201 | ],
202 | 'expr-keywords': [
203 | # Based on https://docs.python.org/3/reference/expressions.html
204 | (words((
205 | 'async for', 'await', 'else', 'for', 'if', 'lambda',
206 | 'yield', 'yield from'), suffix=r'\b'),
207 | Keyword),
208 | (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant),
209 | ],
210 | 'keywords': [
211 | (words((
212 | 'assert', 'async', 'await', 'break', 'continue', 'del', 'elif',
213 | 'else', 'except', 'finally', 'for', 'global', 'if', 'lambda',
214 | 'pass', 'raise', 'nonlocal', 'return', 'try', 'while', 'yield',
215 | 'yield from', 'as', 'with'), suffix=r'\b'),
216 | Keyword),
217 | (words(('True', 'False', 'None'), suffix=r'\b'), Keyword.Constant),
218 | ],
219 | 'soft-keywords': [
220 | # `match`, `case` and `_` soft keywords
221 | (r'(^[ \t]*)' # at beginning of line + possible indentation
222 | r'(match|case)\b' # a possible keyword
223 | r'(?![ \t]*(?:' # not followed by...
224 | r'[:,;=^&|@~)\]}]|(?:' + # characters and keywords that mean this isn't
225 | # pattern matching (but None/True/False is ok)
226 | r'|'.join(k for k in keyword.kwlist if k[0].islower()) + r')\b))',
227 | bygroups(Text, Keyword), 'soft-keywords-inner'),
228 | ],
229 | 'soft-keywords-inner': [
230 | # optional `_` keyword
231 | (r'(\s+)([^\n_]*)(_\b)', bygroups(Whitespace, using(this), Keyword)),
232 | default('#pop')
233 | ],
234 | 'builtins': [
235 | (words((
236 | '__import__', 'abs', 'aiter', 'all', 'any', 'bin', 'bool', 'bytearray',
237 | 'breakpoint', 'bytes', 'callable', 'chr', 'classmethod', 'compile',
238 | 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval',
239 | 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals',
240 | 'hasattr', 'hash', 'hex', 'id', 'input', 'int', 'isinstance',
241 | 'issubclass', 'iter', 'len', 'list', 'locals', 'map', 'max',
242 | 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow',
243 | 'print', 'property', 'range', 'repr', 'reversed', 'round', 'set',
244 | 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super',
245 | 'tuple', 'type', 'vars', 'zip'), prefix=r'(?<!\.)', suffix=r'\b'),
246 | Name.Builtin),
247 | (r'(?<!\.)(self|Ellipsis|NotImplemented|cls)\b', Name.Builtin.Pseudo),
248 | (words((
249 | 'ArithmeticError', 'AssertionError', 'AttributeError',
250 | 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning',
251 | 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError',
252 | 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',
253 | 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError',
254 | 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError',
255 | 'NotImplementedError', 'OSError', 'OverflowError',
256 | 'PendingDeprecationWarning', 'ReferenceError', 'ResourceWarning',
257 | 'RuntimeError', 'RuntimeWarning', 'StopIteration',
258 | 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
259 | 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
260 | 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
261 | 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError',
262 | 'Warning', 'WindowsError', 'ZeroDivisionError',
263 | # new builtin exceptions from PEP 3151
264 | 'BlockingIOError', 'ChildProcessError', 'ConnectionError',
265 | 'BrokenPipeError', 'ConnectionAbortedError', 'ConnectionRefusedError',
266 | 'ConnectionResetError', 'FileExistsError', 'FileNotFoundError',
267 | 'InterruptedError', 'IsADirectoryError', 'NotADirectoryError',
268 | 'PermissionError', 'ProcessLookupError', 'TimeoutError',
269 | # others new in Python 3
270 | 'StopAsyncIteration', 'ModuleNotFoundError', 'RecursionError',
271 | 'EncodingWarning'),
272 | prefix=r'(?<!\.)', suffix=r'\b'),
273 | Name.Exception),
274 | ],
275 | 'magicfuncs': [
276 | (words((
277 | '__abs__', '__add__', '__aenter__', '__aexit__', '__aiter__',
278 | '__and__', '__anext__', '__await__', '__bool__', '__bytes__',
279 | '__call__', '__complex__', '__contains__', '__del__', '__delattr__',
280 | '__delete__', '__delitem__', '__dir__', '__divmod__', '__enter__',
281 | '__eq__', '__exit__', '__float__', '__floordiv__', '__format__',
282 | '__ge__', '__get__', '__getattr__', '__getattribute__',
283 | '__getitem__', '__gt__', '__hash__', '__iadd__', '__iand__',
284 | '__ifloordiv__', '__ilshift__', '__imatmul__', '__imod__',
285 | '__imul__', '__index__', '__init__', '__instancecheck__',
286 | '__int__', '__invert__', '__ior__', '__ipow__', '__irshift__',
287 | '__isub__', '__iter__', '__itruediv__', '__ixor__', '__le__',
288 | '__len__', '__length_hint__', '__lshift__', '__lt__', '__matmul__',
289 | '__missing__', '__mod__', '__mul__', '__ne__', '__neg__',
290 | '__new__', '__next__', '__or__', '__pos__', '__pow__',
291 | '__prepare__', '__radd__', '__rand__', '__rdivmod__', '__repr__',
292 | '__reversed__', '__rfloordiv__', '__rlshift__', '__rmatmul__',
293 | '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__',
294 | '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__',
295 | '__rxor__', '__set__', '__setattr__', '__setitem__', '__str__',
296 | '__sub__', '__subclasscheck__', '__truediv__',
297 | '__xor__'), suffix=r'\b'),
298 | Name.Function.Magic),
299 | ],
300 | 'magicvars': [
301 | (words((
302 | '__annotations__', '__bases__', '__class__', '__closure__',
303 | '__code__', '__defaults__', '__dict__', '__doc__', '__file__',
304 | '__func__', '__globals__', '__kwdefaults__', '__module__',
305 | '__mro__', '__name__', '__objclass__', '__qualname__',
306 | '__self__', '__slots__', '__weakref__'), suffix=r'\b'),
307 | Name.Variable.Magic),
308 | ],
309 | 'numbers': [
310 | (r'(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)'
311 | r'([eE][+-]?\d(?:_?\d)*)?', Number.Float),
312 | (r'\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?', Number.Float),
313 | (r'0[oO](?:_?[0-7])+', Number.Oct),
314 | (r'0[bB](?:_?[01])+', Number.Bin),
315 | (r'0[xX](?:_?[a-fA-F0-9])+', Number.Hex),
316 | (r'\d(?:_?\d)*', Number.Integer),
317 | ],
318 | 'name': [
319 | (r'@' + uni_name, Name.Decorator),
320 | (r'@', Operator), # new matrix multiplication operator
321 | (uni_name, Name),
322 | ],
323 | 'funcname': [
324 | include('magicfuncs'),
325 | (uni_name, Name.Function, '#pop'),
326 | default('#pop'),
327 | ],
328 | 'classname': [
329 | (uni_name, Name.Class, '#pop'),
330 | ],
331 | 'import': [
332 | (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
333 | (r'\.', Name.Namespace),
334 | (uni_name, Name.Namespace),
335 | (r'(\s*)(,)(\s*)', bygroups(Text, Operator, Text)),
336 | default('#pop') # all else: go back
337 | ],
338 | 'fromimport': [
339 | (r'(\s+)(import)\b', bygroups(Text, Keyword.Namespace), '#pop'),
340 | (r'\.', Name.Namespace),
341 | # if None occurs here, it's "raise x from None", since None can
342 | # never be a module name
343 | (r'None\b', Keyword.Constant, '#pop'),
344 | (uni_name, Name.Namespace),
345 | default('#pop'),
346 | ],
347 | 'rfstringescape': [
348 | (r'\{\{', String.Escape),
349 | (r'\}\}', String.Escape),
350 | ],
351 | 'fstringescape': [
352 | include('rfstringescape'),
353 | include('stringescape'),
354 | ],
355 | 'bytesescape': [
356 | (r'\\([\\abfnrtv"\']|\n|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
357 | ],
358 | 'stringescape': [
359 | (r'\\(N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})', String.Escape),
360 | include('bytesescape')
361 | ],
362 | 'fstrings-single': fstring_rules(String.Single),
363 | 'fstrings-double': fstring_rules(String.Double),
364 | 'strings-single': innerstring_rules(String.Single),
365 | 'strings-double': innerstring_rules(String.Double),
366 | 'dqf': [
367 | (r'"', String.Double, '#pop'),
368 | (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
369 | include('fstrings-double')
370 | ],
371 | 'sqf': [
372 | (r"'", String.Single, '#pop'),
373 | (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
374 | include('fstrings-single')
375 | ],
376 | 'dqs': [
377 | (r'"', String.Double, '#pop'),
378 | (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
379 | include('strings-double')
380 | ],
381 | 'sqs': [
382 | (r"'", String.Single, '#pop'),
383 | (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
384 | include('strings-single')
385 | ],
386 | 'tdqf': [
387 | (r'"""', String.Double, '#pop'),
388 | include('fstrings-double'),
389 | (r'\n', String.Double)
390 | ],
391 | 'tsqf': [
392 | (r"'''", String.Single, '#pop'),
393 | include('fstrings-single'),
394 | (r'\n', String.Single)
395 | ],
396 | 'tdqs': [
397 | (r'"""', String.Double, '#pop'),
398 | include('strings-double'),
399 | (r'\n', String.Double)
400 | ],
401 | 'tsqs': [
402 | (r"'''", String.Single, '#pop'),
403 | include('strings-single'),
404 | (r'\n', String.Single)
405 | ],
406 | }
407 |
408 | def analyse_text(text):
409 | return shebang_matches(text, r'pythonw?(3(\.\d)?)?') or \
410 | 'import ' in text[:1000]
411 |
412 |
413 | Python3Lexer = PythonLexer
414 |
415 |
416 | class Python2Lexer(RegexLexer):
417 | """
418 | For Python 2.x source code.
419 |
420 | .. versionchanged:: 2.5
421 | This class has been renamed from ``PythonLexer``. ``PythonLexer`` now
422 | refers to the Python 3 variant. File name patterns like ``*.py`` have
423 | been moved to Python 3 as well.
424 | """
425 |
426 | name = 'Python 2.x'
427 | url = 'https://www.python.org'
428 | aliases = ['python2', 'py2']
429 | filenames = [] # now taken over by PythonLexer (3.x)
430 | mimetypes = ['text/x-python2', 'application/x-python2']
431 | version_added = ''
432 |
433 | def innerstring_rules(ttype):
434 | return [
435 | # the old style '%s' % (...) string formatting
436 | (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
437 | '[hlL]?[E-GXc-giorsux%]', String.Interpol),
438 | # backslashes, quotes and formatting signs must be parsed one at a time
439 | (r'[^\\\'"%\n]+', ttype),
440 | (r'[\'"\\]', ttype),
441 | # unhandled string formatting sign
442 | (r'%', ttype),
443 | # newlines are an error (use "nl" state)
444 | ]
445 |
446 | tokens = {
447 | 'root': [
448 | (r'\n', Whitespace),
449 | (r'^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")',
450 | bygroups(Whitespace, String.Affix, String.Doc)),
451 | (r"^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')",
452 | bygroups(Whitespace, String.Affix, String.Doc)),
453 | (r'[^\S\n]+', Text),
454 | (r'\A#!.+$', Comment.Hashbang),
455 | (r'#.*$', Comment.Single),
456 | (r'[]{}:(),;[]', Punctuation),
457 | (r'\\\n', Text),
458 | (r'\\', Text),
459 | (r'(in|is|and|or|not)\b', Operator.Word),
460 | (r'!=|==|<<|>>|[-~+/*%=<>&^|.]', Operator),
461 | include('keywords'),
462 | (r'(def)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'funcname'),
463 | (r'(class)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'classname'),
464 | (r'(from)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
465 | 'fromimport'),
466 | (r'(import)((?:\s|\\\s)+)', bygroups(Keyword.Namespace, Text),
467 | 'import'),
468 | include('builtins'),
469 | include('magicfuncs'),
470 | include('magicvars'),
471 | include('backtick'),
472 | ('([rR]|[uUbB][rR]|[rR][uUbB])(""")',
473 | bygroups(String.Affix, String.Double), 'tdqs'),
474 | ("([rR]|[uUbB][rR]|[rR][uUbB])(''')",
475 | bygroups(String.Affix, String.Single), 'tsqs'),
476 | ('([rR]|[uUbB][rR]|[rR][uUbB])(")',
477 | bygroups(String.Affix, String.Double), 'dqs'),
478 | ("([rR]|[uUbB][rR]|[rR][uUbB])(')",
479 | bygroups(String.Affix, String.Single), 'sqs'),
480 | ('([uUbB]?)(""")', bygroups(String.Affix, String.Double),
481 | combined('stringescape', 'tdqs')),
482 | ("([uUbB]?)(''')", bygroups(String.Affix, String.Single),
483 | combined('stringescape', 'tsqs')),
484 | ('([uUbB]?)(")', bygroups(String.Affix, String.Double),
485 | combined('stringescape', 'dqs')),
486 | ("([uUbB]?)(')", bygroups(String.Affix, String.Single),
487 | combined('stringescape', 'sqs')),
488 | include('name'),
489 | include('numbers'),
490 | ],
491 | 'keywords': [
492 | (words((
493 | 'assert', 'break', 'continue', 'del', 'elif', 'else', 'except',
494 | 'exec', 'finally', 'for', 'global', 'if', 'lambda', 'pass',
495 | 'print', 'raise', 'return', 'try', 'while', 'yield',
496 | 'yield from', 'as', 'with'), suffix=r'\b'),
497 | Keyword),
498 | ],
499 | 'builtins': [
500 | (words((
501 | '__import__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin',
502 | 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod',
503 | 'cmp', 'coerce', 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod',
504 | 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float',
505 | 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'hex', 'id',
506 | 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len',
507 | 'list', 'locals', 'long', 'map', 'max', 'min', 'next', 'object',
508 | 'oct', 'open', 'ord', 'pow', 'property', 'range', 'raw_input', 'reduce',
509 | 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice',
510 | 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type',
511 | 'unichr', 'unicode', 'vars', 'xrange', 'zip'),
512 | prefix=r'(?<!\.)', suffix=r'\b'),
513 | Name.Builtin),
514 | (r'(?<!\.)(self|None|Ellipsis|NotImplemented|False|True|cls'
515 | r')\b', Name.Builtin.Pseudo),
516 | (words((
517 | 'ArithmeticError', 'AssertionError', 'AttributeError',
518 | 'BaseException', 'DeprecationWarning', 'EOFError', 'EnvironmentError',
519 | 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit',
520 | 'IOError', 'ImportError', 'ImportWarning', 'IndentationError',
521 | 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError',
522 | 'MemoryError', 'NameError',
523 | 'NotImplementedError', 'OSError', 'OverflowError', 'OverflowWarning',
524 | 'PendingDeprecationWarning', 'ReferenceError',
525 | 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration',
526 | 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
527 | 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
528 | 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
529 | 'UnicodeWarning', 'UserWarning', 'ValueError', 'VMSError', 'Warning',
530 | 'WindowsError', 'ZeroDivisionError'), prefix=r'(?<!\.)', suffix=r'\b'),
531 | Name.Exception),
532 | ],
533 | 'magicfuncs': [
534 | (words((
535 | '__abs__', '__add__', '__and__', '__call__', '__cmp__', '__coerce__',
536 | '__complex__', '__contains__', '__del__', '__delattr__', '__delete__',
537 | '__delitem__', '__delslice__', '__div__', '__divmod__', '__enter__',
538 | '__eq__', '__exit__', '__float__', '__floordiv__', '__ge__', '__get__',
539 | '__getattr__', '__getattribute__', '__getitem__', '__getslice__', '__gt__',
540 | '__hash__', '__hex__', '__iadd__', '__iand__', '__idiv__', '__ifloordiv__',
541 | '__ilshift__', '__imod__', '__imul__', '__index__', '__init__',
542 | '__instancecheck__', '__int__', '__invert__', '__iop__', '__ior__',
543 | '__ipow__', '__irshift__', '__isub__', '__iter__', '__itruediv__',
544 | '__ixor__', '__le__', '__len__', '__long__', '__lshift__', '__lt__',
545 | '__missing__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__',
546 | '__nonzero__', '__oct__', '__op__', '__or__', '__pos__', '__pow__',
547 | '__radd__', '__rand__', '__rcmp__', '__rdiv__', '__rdivmod__', '__repr__',
548 | '__reversed__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__',
549 | '__rop__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__',
550 | '__rtruediv__', '__rxor__', '__set__', '__setattr__', '__setitem__',
551 | '__setslice__', '__str__', '__sub__', '__subclasscheck__', '__truediv__',
552 | '__unicode__', '__xor__'), suffix=r'\b'),
553 | Name.Function.Magic),
554 | ],
555 | 'magicvars': [
556 | (words((
557 | '__bases__', '__class__', '__closure__', '__code__', '__defaults__',
558 | '__dict__', '__doc__', '__file__', '__func__', '__globals__',
559 | '__metaclass__', '__module__', '__mro__', '__name__', '__self__',
560 | '__slots__', '__weakref__'),
561 | suffix=r'\b'),
562 | Name.Variable.Magic),
563 | ],
564 | 'numbers': [
565 | (r'(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?', Number.Float),
566 | (r'\d+[eE][+-]?[0-9]+j?', Number.Float),
567 | (r'0[0-7]+j?', Number.Oct),
568 | (r'0[bB][01]+', Number.Bin),
569 | (r'0[xX][a-fA-F0-9]+', Number.Hex),
570 | (r'\d+L', Number.Integer.Long),
571 | (r'\d+j?', Number.Integer)
572 | ],
573 | 'backtick': [
574 | ('`.*?`', String.Backtick),
575 | ],
576 | 'name': [
577 | (r'@[\w.]+', Name.Decorator),
578 | (r'[a-zA-Z_]\w*', Name),
579 | ],
580 | 'funcname': [
581 | include('magicfuncs'),
582 | (r'[a-zA-Z_]\w*', Name.Function, '#pop'),
583 | default('#pop'),
584 | ],
585 | 'classname': [
586 | (r'[a-zA-Z_]\w*', Name.Class, '#pop')
587 | ],
588 | 'import': [
589 | (r'(?:[ \t]|\\\n)+', Text),
590 | (r'as\b', Keyword.Namespace),
591 | (r',', Operator),
592 | (r'[a-zA-Z_][\w.]*', Name.Namespace),
593 | default('#pop') # all else: go back
594 | ],
595 | 'fromimport': [
596 | (r'(?:[ \t]|\\\n)+', Text),
597 | (r'import\b', Keyword.Namespace, '#pop'),
598 | # if None occurs here, it's "raise x from None", since None can
599 | # never be a module name
600 | (r'None\b', Name.Builtin.Pseudo, '#pop'),
601 | # sadly, in "raise x from y" y will be highlighted as namespace too
602 | (r'[a-zA-Z_.][\w.]*', Name.Namespace),
603 | # anything else here also means "raise x from y" and is therefore
604 | # not an error
605 | default('#pop'),
606 | ],
607 | 'stringescape': [
608 | (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
609 | r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
610 | ],
611 | 'strings-single': innerstring_rules(String.Single),
612 | 'strings-double': innerstring_rules(String.Double),
613 | 'dqs': [
614 | (r'"', String.Double, '#pop'),
615 | (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings
616 | include('strings-double')
617 | ],
618 | 'sqs': [
619 | (r"'", String.Single, '#pop'),
620 | (r"\\\\|\\'|\\\n", String.Escape), # included here for raw strings
621 | include('strings-single')
622 | ],
623 | 'tdqs': [
624 | (r'"""', String.Double, '#pop'),
625 | include('strings-double'),
626 | (r'\n', String.Double)
627 | ],
628 | 'tsqs': [
629 | (r"'''", String.Single, '#pop'),
630 | include('strings-single'),
631 | (r'\n', String.Single)
632 | ],
633 | }
634 |
635 | def analyse_text(text):
636 | return shebang_matches(text, r'pythonw?2(\.\d)?')
637 |
638 | class _PythonConsoleLexerBase(RegexLexer):
639 | name = 'Python console session'
640 | aliases = ['pycon', 'python-console']
641 | mimetypes = ['text/x-python-doctest']
642 |
643 | """Auxiliary lexer for `PythonConsoleLexer`.
644 |
645 | Code tokens are output as ``Token.Other.Code``, traceback tokens as
646 | ``Token.Other.Traceback``.
647 | """
648 | tokens = {
649 | 'root': [
650 | (r'(>>> )(.*\n)', bygroups(Generic.Prompt, Other.Code), 'continuations'),
651 | # This happens, e.g., when tracebacks are embedded in documentation;
652 | # trailing whitespaces are often stripped in such contexts.
653 | (r'(>>>)(\n)', bygroups(Generic.Prompt, Whitespace)),
654 | (r'(\^C)?Traceback \(most recent call last\):\n', Other.Traceback, 'traceback'),
655 | # SyntaxError starts with this
656 | (r' File "[^"]+", line \d+', Other.Traceback, 'traceback'),
657 | (r'.*\n', Generic.Output),
658 | ],
659 | 'continuations': [
660 | (r'(\.\.\. )(.*\n)', bygroups(Generic.Prompt, Other.Code)),
661 | # See above.
662 | (r'(\.\.\.)(\n)', bygroups(Generic.Prompt, Whitespace)),
663 | default('#pop'),
664 | ],
665 | 'traceback': [
666 | # As soon as we see a traceback, consume everything until the next
667 | # >>> prompt.
668 | (r'(?=>>>( |$))', Text, '#pop'),
669 | (r'(KeyboardInterrupt)(\n)', bygroups(Name.Class, Whitespace)),
670 | (r'.*\n', Other.Traceback),
671 | ],
672 | }
673 |
674 | class PythonConsoleLexer(DelegatingLexer):
675 | """
676 | For Python console output or doctests, such as:
677 |
678 | .. sourcecode:: pycon
679 |
680 | >>> a = 'foo'
681 | >>> print(a)
682 | foo
683 | >>> 1 / 0
684 | Traceback (most recent call last):
685 | File "<stdin>", line 1, in <module>
686 | ZeroDivisionError: integer division or modulo by zero
687 |
688 | Additional options:
689 |
690 | `python3`
691 | Use Python 3 lexer for code. Default is ``True``.
692 |
693 | .. versionadded:: 1.0
694 | .. versionchanged:: 2.5
695 | Now defaults to ``True``.
696 | """
697 |
698 | name = 'Python console session'
699 | aliases = ['pycon', 'python-console']
700 | mimetypes = ['text/x-python-doctest']
701 | url = 'https://python.org'
702 | version_added = ''
703 |
704 | def __init__(self, **options):
705 | python3 = get_bool_opt(options, 'python3', True)
706 | if python3:
707 | pylexer = PythonLexer
708 | tblexer = PythonTracebackLexer
709 | else:
710 | pylexer = Python2Lexer
711 | tblexer = Python2TracebackLexer
712 | # We have two auxiliary lexers. Use DelegatingLexer twice with
713 | # different tokens. TODO: DelegatingLexer should support this
714 | # directly, by accepting a tuplet of auxiliary lexers and a tuple of
715 | # distinguishing tokens. Then we wouldn't need this intermediary
716 | # class.
717 | class _ReplaceInnerCode(DelegatingLexer):
718 | def __init__(self, **options):
719 | super().__init__(pylexer, _PythonConsoleLexerBase, Other.Code, **options)
720 | super().__init__(tblexer, _ReplaceInnerCode, Other.Traceback, **options)
721 |
722 | class PythonTracebackLexer(RegexLexer):
723 | """
724 | For Python 3.x tracebacks, with support for chained exceptions.
725 |
726 | .. versionchanged:: 2.5
727 | This is now the default ``PythonTracebackLexer``. It is still available
728 | as the alias ``Python3TracebackLexer``.
729 | """
730 |
731 | name = 'Python Traceback'
732 | aliases = ['pytb', 'py3tb']
733 | filenames = ['*.pytb', '*.py3tb']
734 | mimetypes = ['text/x-python-traceback', 'text/x-python3-traceback']
735 | url = 'https://python.org'
736 | version_added = '1.0'
737 |
738 | tokens = {
739 | 'root': [
740 | (r'\n', Whitespace),
741 | (r'^(\^C)?Traceback \(most recent call last\):\n', Generic.Traceback, 'intb'),
742 | (r'^During handling of the above exception, another '
743 | r'exception occurred:\n\n', Generic.Traceback),
744 | (r'^The above exception was the direct cause of the '
745 | r'following exception:\n\n', Generic.Traceback),
746 | (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'),
747 | (r'^.*\n', Other),
748 | ],
749 | 'intb': [
750 | (r'^( File )("[^"]+")(, line )(\d+)(, in )(.+)(\n)',
751 | bygroups(Text, Name.Builtin, Text, Number, Text, Name, Whitespace)),
752 | (r'^( File )("[^"]+")(, line )(\d+)(\n)',
753 | bygroups(Text, Name.Builtin, Text, Number, Whitespace)),
754 | (r'^( )(.+)(\n)',
755 | bygroups(Whitespace, using(PythonLexer), Whitespace), 'markers'),
756 | (r'^([ \t]*)(\.\.\.)(\n)',
757 | bygroups(Whitespace, Comment, Whitespace)), # for doctests...
758 | (r'^([^:]+)(: )(.+)(\n)',
759 | bygroups(Generic.Error, Text, Name, Whitespace), '#pop'),
760 | (r'^([a-zA-Z_][\w.]*)(:?\n)',
761 | bygroups(Generic.Error, Whitespace), '#pop'),
762 | default('#pop'),
763 | ],
764 | 'markers': [
765 | # Either `PEP 657 <https://www.python.org/dev/peps/pep-0657/>`
766 | # error locations in Python 3.11+, or single-caret markers
767 | # for syntax errors before that.
768 | (r'^( {4,})([~^]+)(\n)',
769 | bygroups(Whitespace, Punctuation.Marker, Whitespace),
770 | '#pop'),
771 | default('#pop'),
772 | ],
773 | }
774 |
775 |
776 | Python3TracebackLexer = PythonTracebackLexer
777 |
778 |
779 | class Python2TracebackLexer(RegexLexer):
780 | """
781 | For Python tracebacks.
782 |
783 | .. versionchanged:: 2.5
784 | This class has been renamed from ``PythonTracebackLexer``.
785 | ``PythonTracebackLexer`` now refers to the Python 3 variant.
786 | """
787 |
788 | name = 'Python 2.x Traceback'
789 | aliases = ['py2tb']
790 | filenames = ['*.py2tb']
791 | mimetypes = ['text/x-python2-traceback']
792 | url = 'https://python.org'
793 | version_added = '0.7'
794 |
795 | tokens = {
796 | 'root': [
797 | # Cover both (most recent call last) and (innermost last)
798 | # The optional ^C allows us to catch keyboard interrupt signals.
799 | (r'^(\^C)?(Traceback.*\n)',
800 | bygroups(Text, Generic.Traceback), 'intb'),
801 | # SyntaxError starts with this.
802 | (r'^(?= File "[^"]+", line \d+)', Generic.Traceback, 'intb'),
803 | (r'^.*\n', Other),
804 | ],
805 | 'intb': [
806 | (r'^( File )("[^"]+")(, line )(\d+)(, in )(.+)(\n)',
807 | bygroups(Text, Name.Builtin, Text, Number, Text, Name, Whitespace)),
808 | (r'^( File )("[^"]+")(, line )(\d+)(\n)',
809 | bygroups(Text, Name.Builtin, Text, Number, Whitespace)),
810 | (r'^( )(.+)(\n)',
811 | bygroups(Text, using(Python2Lexer), Whitespace), 'marker'),
812 | (r'^([ \t]*)(\.\.\.)(\n)',
813 | bygroups(Text, Comment, Whitespace)), # for doctests...
814 | (r'^([^:]+)(: )(.+)(\n)',
815 | bygroups(Generic.Error, Text, Name, Whitespace), '#pop'),
816 | (r'^([a-zA-Z_]\w*)(:?\n)',
817 | bygroups(Generic.Error, Whitespace), '#pop')
818 | ],
819 | 'marker': [
820 | # For syntax errors.
821 | (r'( {4,})(\^)', bygroups(Text, Punctuation.Marker), '#pop'),
822 | default('#pop'),
823 | ],
824 | }
825 |
826 |
827 | class CythonLexer(RegexLexer):
828 | """
829 | For Pyrex and Cython source code.
830 | """
831 |
832 | name = 'Cython'
833 | url = 'https://cython.org'
834 | aliases = ['cython', 'pyx', 'pyrex']
835 | filenames = ['*.pyx', '*.pxd', '*.pxi']
836 | mimetypes = ['text/x-cython', 'application/x-cython']
837 | version_added = '1.1'
838 |
839 | tokens = {
840 | 'root': [
841 | (r'\n', Whitespace),
842 | (r'^(\s*)("""(?:.|\n)*?""")', bygroups(Whitespace, String.Doc)),
843 | (r"^(\s*)('''(?:.|\n)*?''')", bygroups(Whitespace, String.Doc)),
844 | (r'[^\S\n]+', Text),
845 | (r'#.*$', Comment),
846 | (r'[]{}:(),;[]', Punctuation),
847 | (r'\\\n', Whitespace),
848 | (r'\\', Text),
849 | (r'(in|is|and|or|not)\b', Operator.Word),
850 | (r'(<)([a-zA-Z0-9.?]+)(>)',
851 | bygroups(Punctuation, Keyword.Type, Punctuation)),
852 | (r'!=|==|<<|>>|[-~+/*%=<>&^|.?]', Operator),
853 | (r'(from)(\d+)(<=)(\s+)(<)(\d+)(:)',
854 | bygroups(Keyword, Number.Integer, Operator, Name, Operator,
855 | Name, Punctuation)),
856 | include('keywords'),
857 | (r'(def|property)(\s+)', bygroups(Keyword, Text), 'funcname'),
858 | (r'(cp?def)(\s+)', bygroups(Keyword, Text), 'cdef'),
859 | # (should actually start a block with only cdefs)
860 | (r'(cdef)(:)', bygroups(Keyword, Punctuation)),
861 | (r'(class|struct)(\s+)', bygroups(Keyword, Text), 'classname'),
862 | (r'(from)(\s+)', bygroups(Keyword, Text), 'fromimport'),
863 | (r'(c?import)(\s+)', bygroups(Keyword, Text), 'import'),
864 | include('builtins'),
865 | include('backtick'),
866 | ('(?:[rR]|[uU][rR]|[rR][uU])"""', String, 'tdqs'),
867 | ("(?:[rR]|[uU][rR]|[rR][uU])'''", String, 'tsqs'),
868 | ('(?:[rR]|[uU][rR]|[rR][uU])"', String, 'dqs'),
869 | ("(?:[rR]|[uU][rR]|[rR][uU])'", String, 'sqs'),
870 | ('[uU]?"""', String, combined('stringescape', 'tdqs')),
871 | ("[uU]?'''", String, combined('stringescape', 'tsqs')),
872 | ('[uU]?"', String, combined('stringescape', 'dqs')),
873 | ("[uU]?'", String, combined('stringescape', 'sqs')),
874 | include('name'),
875 | include('numbers'),
876 | ],
877 | 'keywords': [
878 | (words((
879 | 'assert', 'async', 'await', 'break', 'by', 'continue', 'ctypedef', 'del', 'elif',
880 | 'else', 'except', 'except?', 'exec', 'finally', 'for', 'fused', 'gil',
881 | 'global', 'if', 'include', 'lambda', 'nogil', 'pass', 'print',
882 | 'raise', 'return', 'try', 'while', 'yield', 'as', 'with'), suffix=r'\b'),
883 | Keyword),
884 | (r'(DEF|IF|ELIF|ELSE)\b', Comment.Preproc),
885 | ],
886 | 'builtins': [
887 | (words((
888 | '__import__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bint',
889 | 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr',
890 | 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'delattr',
891 | 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit',
892 | 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals',
893 | 'hasattr', 'hash', 'hex', 'id', 'input', 'int', 'intern', 'isinstance',
894 | 'issubclass', 'iter', 'len', 'list', 'locals', 'long', 'map', 'max',
895 | 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'Py_ssize_t',
896 | 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed',
897 | 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod',
898 | 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'unsigned',
899 | 'vars', 'xrange', 'zip'), prefix=r'(?<!\.)', suffix=r'\b'),
900 | Name.Builtin),
901 | (r'(?<!\.)(self|None|Ellipsis|NotImplemented|False|True|NULL'
902 | r')\b', Name.Builtin.Pseudo),
903 | (words((
904 | 'ArithmeticError', 'AssertionError', 'AttributeError',
905 | 'BaseException', 'DeprecationWarning', 'EOFError', 'EnvironmentError',
906 | 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit',
907 | 'IOError', 'ImportError', 'ImportWarning', 'IndentationError',
908 | 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError',
909 | 'MemoryError', 'NameError', 'NotImplemented', 'NotImplementedError',
910 | 'OSError', 'OverflowError', 'OverflowWarning',
911 | 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError',
912 | 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError',
913 | 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError',
914 | 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
915 | 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
916 | 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning',
917 | 'ZeroDivisionError'), prefix=r'(?<!\.)', suffix=r'\b'),
918 | Name.Exception),
919 | ],
920 | 'numbers': [
921 | (r'(\d+\.?\d*|\d*\.\d+)([eE][+-]?[0-9]+)?', Number.Float),
922 | (r'0\d+', Number.Oct),
923 | (r'0[xX][a-fA-F0-9]+', Number.Hex),
924 | (r'\d+L', Number.Integer.Long),
925 | (r'\d+', Number.Integer)
926 | ],
927 | 'backtick': [
928 | ('`.*?`', String.Backtick),
929 | ],
930 | 'name': [
931 | (r'@\w+', Name.Decorator),
932 | (r'[a-zA-Z_]\w*', Name),
933 | ],
934 | 'funcname': [
935 | (r'[a-zA-Z_]\w*', Name.Function, '#pop')
936 | ],
937 | 'cdef': [
938 | (r'(public|readonly|extern|api|inline)\b', Keyword.Reserved),
939 | (r'(struct|enum|union|class)\b', Keyword),
940 | (r'([a-zA-Z_]\w*)(\s*)(?=[(:#=]|$)',
941 | bygroups(Name.Function, Text), '#pop'),
942 | (r'([a-zA-Z_]\w*)(\s*)(,)',
943 | bygroups(Name.Function, Text, Punctuation)),
944 | (r'from\b', Keyword, '#pop'),
945 | (r'as\b', Keyword),
946 | (r':', Punctuation, '#pop'),
947 | (r'(?=["\'])', Text, '#pop'),
948 | (r'[a-zA-Z_]\w*', Keyword.Type),
949 | (r'.', Text),
950 | ],
951 | 'classname': [
952 | (r'[a-zA-Z_]\w*', Name.Class, '#pop')
953 | ],
954 | 'import': [
955 | (r'(\s+)(as)(\s+)', bygroups(Text, Keyword, Text)),
956 | (r'[a-zA-Z_][\w.]*', Name.Namespace),
957 | (r'(\s*)(,)(\s*)', bygroups(Text, Operator, Text)),
958 | default('#pop') # all else: go back
959 | ],
960 | 'fromimport': [
961 | (r'(\s+)(c?import)\b', bygroups(Text, Keyword), '#pop'),
962 | (r'[a-zA-Z_.][\w.]*', Name.Namespace),
963 | # ``cdef foo from "header"``, or ``for foo from 0 < i < 10``
964 | default('#pop'),
965 | ],
966 | 'stringescape': [
967 | (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
968 | r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
969 | ],
970 | 'strings': [
971 | (r'%(\([a-zA-Z0-9]+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
972 | '[hlL]?[E-GXc-giorsux%]', String.Interpol),
973 | (r'[^\\\'"%\n]+', String),
974 | # quotes, percents and backslashes must be parsed one at a time
975 | (r'[\'"\\]', String),
976 | # unhandled string formatting sign
977 | (r'%', String)
978 | # newlines are an error (use "nl" state)
979 | ],
980 | 'nl': [
981 | (r'\n', String)
982 | ],
983 | 'dqs': [
984 | (r'"', String, '#pop'),
985 | (r'\\\\|\\"|\\\n', String.Escape), # included here again for raw strings
986 | include('strings')
987 | ],
988 | 'sqs': [
989 | (r"'", String, '#pop'),
990 | (r"\\\\|\\'|\\\n", String.Escape), # included here again for raw strings
991 | include('strings')
992 | ],
993 | 'tdqs': [
994 | (r'"""', String, '#pop'),
995 | include('strings'),
996 | include('nl')
997 | ],
998 | 'tsqs': [
999 | (r"'''", String, '#pop'),
1000 | include('strings'),
1001 | include('nl')
1002 | ],
1003 | }
1004 |
1005 |
1006 | class DgLexer(RegexLexer):
1007 | """
1008 | Lexer for dg,
1009 | a functional and object-oriented programming language
1010 | running on the CPython 3 VM.
1011 | """
1012 | name = 'dg'
1013 | aliases = ['dg']
1014 | filenames = ['*.dg']
1015 | mimetypes = ['text/x-dg']
1016 | url = 'http://pyos.github.io/dg'
1017 | version_added = '1.6'
1018 |
1019 | tokens = {
1020 | 'root': [
1021 | (r'\s+', Text),
1022 | (r'#.*?$', Comment.Single),
1023 |
1024 | (r'(?i)0b[01]+', Number.Bin),
1025 | (r'(?i)0o[0-7]+', Number.Oct),
1026 | (r'(?i)0x[0-9a-f]+', Number.Hex),
1027 | (r'(?i)[+-]?[0-9]+\.[0-9]+(e[+-]?[0-9]+)?j?', Number.Float),
1028 | (r'(?i)[+-]?[0-9]+e[+-]?\d+j?', Number.Float),
1029 | (r'(?i)[+-]?[0-9]+j?', Number.Integer),
1030 |
1031 | (r"(?i)(br|r?b?)'''", String, combined('stringescape', 'tsqs', 'string')),
1032 | (r'(?i)(br|r?b?)"""', String, combined('stringescape', 'tdqs', 'string')),
1033 | (r"(?i)(br|r?b?)'", String, combined('stringescape', 'sqs', 'string')),
1034 | (r'(?i)(br|r?b?)"', String, combined('stringescape', 'dqs', 'string')),
1035 |
1036 | (r"`\w+'*`", Operator),
1037 | (r'\b(and|in|is|or|where)\b', Operator.Word),
1038 | (r'[!$%&*+\-./:<-@\\^|~;,]+', Operator),
1039 |
1040 | (words((
1041 | 'bool', 'bytearray', 'bytes', 'classmethod', 'complex', 'dict', 'dict\'',
1042 | 'float', 'frozenset', 'int', 'list', 'list\'', 'memoryview', 'object',
1043 | 'property', 'range', 'set', 'set\'', 'slice', 'staticmethod', 'str',
1044 | 'super', 'tuple', 'tuple\'', 'type'),
1045 | prefix=r'(?<!\.)', suffix=r'(?![\'\w])'),
1046 | Name.Builtin),
1047 | (words((
1048 | '__import__', 'abs', 'all', 'any', 'bin', 'bind', 'chr', 'cmp', 'compile',
1049 | 'complex', 'delattr', 'dir', 'divmod', 'drop', 'dropwhile', 'enumerate',
1050 | 'eval', 'exhaust', 'filter', 'flip', 'foldl1?', 'format', 'fst',
1051 | 'getattr', 'globals', 'hasattr', 'hash', 'head', 'hex', 'id', 'init',
1052 | 'input', 'isinstance', 'issubclass', 'iter', 'iterate', 'last', 'len',
1053 | 'locals', 'map', 'max', 'min', 'next', 'oct', 'open', 'ord', 'pow',
1054 | 'print', 'repr', 'reversed', 'round', 'setattr', 'scanl1?', 'snd',
1055 | 'sorted', 'sum', 'tail', 'take', 'takewhile', 'vars', 'zip'),
1056 | prefix=r'(?<!\.)', suffix=r'(?![\'\w])'),
1057 | Name.Builtin),
1058 | (r"(?<!\.)(self|Ellipsis|NotImplemented|None|True|False)(?!['\w])",
1059 | Name.Builtin.Pseudo),
1060 |
1061 | (r"(?<!\.)[A-Z]\w*(Error|Exception|Warning)'*(?!['\w])",
1062 | Name.Exception),
1063 | (r"(?<!\.)(Exception|GeneratorExit|KeyboardInterrupt|StopIteration|"
1064 | r"SystemExit)(?!['\w])", Name.Exception),
1065 |
1066 | (r"(?<![\w.])(except|finally|for|if|import|not|otherwise|raise|"
1067 | r"subclass|while|with|yield)(?!['\w])", Keyword.Reserved),
1068 |
1069 | (r"[A-Z_]+'*(?!['\w])", Name),
1070 | (r"[A-Z]\w+'*(?!['\w])", Keyword.Type),
1071 | (r"\w+'*", Name),
1072 |
1073 | (r'[()]', Punctuation),
1074 | (r'.', Error),
1075 | ],
1076 | 'stringescape': [
1077 | (r'\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|'
1078 | r'U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})', String.Escape)
1079 | ],
1080 | 'string': [
1081 | (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?'
1082 | '[hlL]?[E-GXc-giorsux%]', String.Interpol),
1083 | (r'[^\\\'"%\n]+', String),
1084 | # quotes, percents and backslashes must be parsed one at a time
1085 | (r'[\'"\\]', String),
1086 | # unhandled string formatting sign
1087 | (r'%', String),
1088 | (r'\n', String)
1089 | ],
1090 | 'dqs': [
1091 | (r'"', String, '#pop')
1092 | ],
1093 | 'sqs': [
1094 | (r"'", String, '#pop')
1095 | ],
1096 | 'tdqs': [
1097 | (r'"""', String, '#pop')
1098 | ],
1099 | 'tsqs': [
1100 | (r"'''", String, '#pop')
1101 | ],
1102 | }
1103 |
1104 |
1105 | class NumPyLexer(PythonLexer):
1106 | """
1107 | A Python lexer recognizing Numerical Python builtins.
1108 | """
1109 |
1110 | name = 'NumPy'
1111 | url = 'https://numpy.org/'
1112 | aliases = ['numpy']
1113 | version_added = '0.10'
1114 |
1115 | # override the mimetypes to not inherit them from python
1116 | mimetypes = []
1117 | filenames = []
1118 |
1119 | EXTRA_KEYWORDS = {
1120 | 'abs', 'absolute', 'accumulate', 'add', 'alen', 'all', 'allclose',
1121 | 'alltrue', 'alterdot', 'amax', 'amin', 'angle', 'any', 'append',
1122 | 'apply_along_axis', 'apply_over_axes', 'arange', 'arccos', 'arccosh',
1123 | 'arcsin', 'arcsinh', 'arctan', 'arctan2', 'arctanh', 'argmax', 'argmin',
1124 | 'argsort', 'argwhere', 'around', 'array', 'array2string', 'array_equal',
1125 | 'array_equiv', 'array_repr', 'array_split', 'array_str', 'arrayrange',
1126 | 'asanyarray', 'asarray', 'asarray_chkfinite', 'ascontiguousarray',
1127 | 'asfarray', 'asfortranarray', 'asmatrix', 'asscalar', 'astype',
1128 | 'atleast_1d', 'atleast_2d', 'atleast_3d', 'average', 'bartlett',
1129 | 'base_repr', 'beta', 'binary_repr', 'bincount', 'binomial',
1130 | 'bitwise_and', 'bitwise_not', 'bitwise_or', 'bitwise_xor', 'blackman',
1131 | 'bmat', 'broadcast', 'byte_bounds', 'bytes', 'byteswap', 'c_',
1132 | 'can_cast', 'ceil', 'choose', 'clip', 'column_stack', 'common_type',
1133 | 'compare_chararrays', 'compress', 'concatenate', 'conj', 'conjugate',
1134 | 'convolve', 'copy', 'corrcoef', 'correlate', 'cos', 'cosh', 'cov',
1135 | 'cross', 'cumprod', 'cumproduct', 'cumsum', 'delete', 'deprecate',
1136 | 'diag', 'diagflat', 'diagonal', 'diff', 'digitize', 'disp', 'divide',
1137 | 'dot', 'dsplit', 'dstack', 'dtype', 'dump', 'dumps', 'ediff1d', 'empty',
1138 | 'empty_like', 'equal', 'exp', 'expand_dims', 'expm1', 'extract', 'eye',
1139 | 'fabs', 'fastCopyAndTranspose', 'fft', 'fftfreq', 'fftshift', 'fill',
1140 | 'finfo', 'fix', 'flat', 'flatnonzero', 'flatten', 'fliplr', 'flipud',
1141 | 'floor', 'floor_divide', 'fmod', 'frexp', 'fromarrays', 'frombuffer',
1142 | 'fromfile', 'fromfunction', 'fromiter', 'frompyfunc', 'fromstring',
1143 | 'generic', 'get_array_wrap', 'get_include', 'get_numarray_include',
1144 | 'get_numpy_include', 'get_printoptions', 'getbuffer', 'getbufsize',
1145 | 'geterr', 'geterrcall', 'geterrobj', 'getfield', 'gradient', 'greater',
1146 | 'greater_equal', 'gumbel', 'hamming', 'hanning', 'histogram',
1147 | 'histogram2d', 'histogramdd', 'hsplit', 'hstack', 'hypot', 'i0',
1148 | 'identity', 'ifft', 'imag', 'index_exp', 'indices', 'inf', 'info',
1149 | 'inner', 'insert', 'int_asbuffer', 'interp', 'intersect1d',
1150 | 'intersect1d_nu', 'inv', 'invert', 'iscomplex', 'iscomplexobj',
1151 | 'isfinite', 'isfortran', 'isinf', 'isnan', 'isneginf', 'isposinf',
1152 | 'isreal', 'isrealobj', 'isscalar', 'issctype', 'issubclass_',
1153 | 'issubdtype', 'issubsctype', 'item', 'itemset', 'iterable', 'ix_',
1154 | 'kaiser', 'kron', 'ldexp', 'left_shift', 'less', 'less_equal', 'lexsort',
1155 | 'linspace', 'load', 'loads', 'loadtxt', 'log', 'log10', 'log1p', 'log2',
1156 | 'logical_and', 'logical_not', 'logical_or', 'logical_xor', 'logspace',
1157 | 'lstsq', 'mat', 'matrix', 'max', 'maximum', 'maximum_sctype',
1158 | 'may_share_memory', 'mean', 'median', 'meshgrid', 'mgrid', 'min',
1159 | 'minimum', 'mintypecode', 'mod', 'modf', 'msort', 'multiply', 'nan',
1160 | 'nan_to_num', 'nanargmax', 'nanargmin', 'nanmax', 'nanmin', 'nansum',
1161 | 'ndenumerate', 'ndim', 'ndindex', 'negative', 'newaxis', 'newbuffer',
1162 | 'newbyteorder', 'nonzero', 'not_equal', 'obj2sctype', 'ogrid', 'ones',
1163 | 'ones_like', 'outer', 'permutation', 'piecewise', 'pinv', 'pkgload',
1164 | 'place', 'poisson', 'poly', 'poly1d', 'polyadd', 'polyder', 'polydiv',
1165 | 'polyfit', 'polyint', 'polymul', 'polysub', 'polyval', 'power', 'prod',
1166 | 'product', 'ptp', 'put', 'putmask', 'r_', 'randint', 'random_integers',
1167 | 'random_sample', 'ranf', 'rank', 'ravel', 'real', 'real_if_close',
1168 | 'recarray', 'reciprocal', 'reduce', 'remainder', 'repeat', 'require',
1169 | 'reshape', 'resize', 'restoredot', 'right_shift', 'rint', 'roll',
1170 | 'rollaxis', 'roots', 'rot90', 'round', 'round_', 'row_stack', 's_',
1171 | 'sample', 'savetxt', 'sctype2char', 'searchsorted', 'seed', 'select',
1172 | 'set_numeric_ops', 'set_printoptions', 'set_string_function',
1173 | 'setbufsize', 'setdiff1d', 'seterr', 'seterrcall', 'seterrobj',
1174 | 'setfield', 'setflags', 'setmember1d', 'setxor1d', 'shape',
1175 | 'show_config', 'shuffle', 'sign', 'signbit', 'sin', 'sinc', 'sinh',
1176 | 'size', 'slice', 'solve', 'sometrue', 'sort', 'sort_complex', 'source',
1177 | 'split', 'sqrt', 'square', 'squeeze', 'standard_normal', 'std',
1178 | 'subtract', 'sum', 'svd', 'swapaxes', 'take', 'tan', 'tanh', 'tensordot',
1179 | 'test', 'tile', 'tofile', 'tolist', 'tostring', 'trace', 'transpose',
1180 | 'trapz', 'tri', 'tril', 'trim_zeros', 'triu', 'true_divide', 'typeDict',
1181 | 'typename', 'uniform', 'union1d', 'unique', 'unique1d', 'unravel_index',
1182 | 'unwrap', 'vander', 'var', 'vdot', 'vectorize', 'view', 'vonmises',
1183 | 'vsplit', 'vstack', 'weibull', 'where', 'who', 'zeros', 'zeros_like'
1184 | }
1185 |
1186 | def get_tokens_unprocessed(self, text):
1187 | for index, token, value in \
1188 | PythonLexer.get_tokens_unprocessed(self, text):
1189 | if token is Name and value in self.EXTRA_KEYWORDS:
1190 | yield index, Keyword.Pseudo, value
1191 | else:
1192 | yield index, token, value
1193 |
1194 | def analyse_text(text):
1195 | ltext = text[:1000]
1196 | return (shebang_matches(text, r'pythonw?(3(\.\d)?)?') or
1197 | 'import ' in ltext) \
1198 | and ('import numpy' in ltext or 'from numpy import' in ltext)
1199 |
```