From 3c76615ba64b324b445e162543b3106ab565bab6 Mon Sep 17 00:00:00 2001 From: Ole Valente Date: Wed, 10 Jun 2026 13:09:34 +0000 Subject: [PATCH] Initial stub: models, generator, parser, explainer, and demo --- .venv/bin/Activate.ps1 | 247 + .venv/bin/activate | 76 + .venv/bin/activate.csh | 27 + .venv/bin/activate.fish | 69 + .venv/bin/iriusrisk-drl-demo | 8 + .venv/bin/pip | 8 + .venv/bin/pip3 | 8 + .venv/bin/pip3.12 | 8 + .venv/bin/python | 1 + .venv/bin/python3 | 1 + .venv/bin/python3.12 | 1 + ...editable__.iriusrisk_drl_toolkit-0.1.0.pth | 1 + .../INSTALLER | 1 + .../METADATA | 6 + .../RECORD | 10 + .../REQUESTED | 0 .../WHEEL | 5 + .../direct_url.json | 1 + .../entry_points.txt | 2 + .../top_level.txt | 1 + .../jinja2-3.1.6.dist-info/INSTALLER | 1 + .../jinja2-3.1.6.dist-info/METADATA | 84 + .../jinja2-3.1.6.dist-info/RECORD | 58 + .../jinja2-3.1.6.dist-info/REQUESTED | 0 .../jinja2-3.1.6.dist-info/WHEEL | 4 + .../jinja2-3.1.6.dist-info/entry_points.txt | 3 + .../licenses/LICENSE.txt | 28 + .../site-packages/jinja2/__init__.py | 38 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1661 bytes .../__pycache__/_identifier.cpython-312.pyc | Bin 0 -> 2142 bytes .../__pycache__/async_utils.cpython-312.pyc | Bin 0 -> 4982 bytes .../__pycache__/bccache.cpython-312.pyc | Bin 0 -> 19333 bytes .../__pycache__/compiler.cpython-312.pyc | Bin 0 -> 103900 bytes .../__pycache__/constants.cpython-312.pyc | Bin 0 -> 1564 bytes .../jinja2/__pycache__/debug.cpython-312.pyc | Bin 0 -> 6574 bytes .../__pycache__/defaults.cpython-312.pyc | Bin 0 -> 1614 bytes .../__pycache__/environment.cpython-312.pyc | Bin 0 -> 76643 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 7723 bytes .../jinja2/__pycache__/ext.cpython-312.pyc | Bin 0 -> 41885 bytes .../__pycache__/filters.cpython-312.pyc | Bin 0 -> 72277 bytes .../__pycache__/idtracking.cpython-312.pyc | Bin 0 -> 19128 bytes .../jinja2/__pycache__/lexer.cpython-312.pyc | Bin 0 -> 32073 bytes .../__pycache__/loaders.cpython-312.pyc | Bin 0 -> 32283 bytes .../jinja2/__pycache__/meta.cpython-312.pyc | Bin 0 -> 5478 bytes .../__pycache__/nativetypes.cpython-312.pyc | Bin 0 -> 7027 bytes .../jinja2/__pycache__/nodes.cpython-312.pyc | Bin 0 -> 58227 bytes .../__pycache__/optimizer.cpython-312.pyc | Bin 0 -> 2697 bytes .../jinja2/__pycache__/parser.cpython-312.pyc | Bin 0 -> 61188 bytes .../__pycache__/runtime.cpython-312.pyc | Bin 0 -> 48892 bytes .../__pycache__/sandbox.cpython-312.pyc | Bin 0 -> 18105 bytes .../jinja2/__pycache__/tests.cpython-312.pyc | Bin 0 -> 9058 bytes .../jinja2/__pycache__/utils.cpython-312.pyc | Bin 0 -> 34806 bytes .../__pycache__/visitor.cpython-312.pyc | Bin 0 -> 5361 bytes .../site-packages/jinja2/_identifier.py | 6 + .../site-packages/jinja2/async_utils.py | 99 + .../site-packages/jinja2/bccache.py | 408 + .../site-packages/jinja2/compiler.py | 1998 ++++ .../site-packages/jinja2/constants.py | 20 + .../python3.12/site-packages/jinja2/debug.py | 191 + .../site-packages/jinja2/defaults.py | 48 + .../site-packages/jinja2/environment.py | 1672 ++++ .../site-packages/jinja2/exceptions.py | 166 + .../python3.12/site-packages/jinja2/ext.py | 870 ++ .../site-packages/jinja2/filters.py | 1873 ++++ .../site-packages/jinja2/idtracking.py | 318 + .../python3.12/site-packages/jinja2/lexer.py | 868 ++ .../site-packages/jinja2/loaders.py | 693 ++ .../python3.12/site-packages/jinja2/meta.py | 112 + .../site-packages/jinja2/nativetypes.py | 130 + .../python3.12/site-packages/jinja2/nodes.py | 1206 +++ .../site-packages/jinja2/optimizer.py | 48 + .../python3.12/site-packages/jinja2/parser.py | 1049 ++ .../python3.12/site-packages/jinja2/py.typed | 0 .../site-packages/jinja2/runtime.py | 1062 ++ .../site-packages/jinja2/sandbox.py | 436 + .../python3.12/site-packages/jinja2/tests.py | 256 + .../python3.12/site-packages/jinja2/utils.py | 766 ++ .../site-packages/jinja2/visitor.py | 92 + .../markupsafe-3.0.3.dist-info/INSTALLER | 1 + .../markupsafe-3.0.3.dist-info/METADATA | 74 + .../markupsafe-3.0.3.dist-info/RECORD | 14 + .../markupsafe-3.0.3.dist-info/WHEEL | 5 + .../licenses/LICENSE.txt | 28 + .../markupsafe-3.0.3.dist-info/top_level.txt | 1 + .../site-packages/markupsafe/__init__.py | 396 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 20996 bytes .../__pycache__/_native.cpython-312.pyc | Bin 0 -> 623 bytes .../site-packages/markupsafe/_native.py | 8 + .../site-packages/markupsafe/_speedups.c | 200 + ..._speedups.cpython-312-x86_64-linux-musl.so | Bin 0 -> 38096 bytes .../site-packages/markupsafe/_speedups.pyi | 1 + .../site-packages/markupsafe/py.typed | 0 .../pip-25.0.1.dist-info/AUTHORS.txt | 806 ++ .../pip-25.0.1.dist-info/INSTALLER | 1 + .../pip-25.0.1.dist-info/LICENSE.txt | 20 + .../pip-25.0.1.dist-info/METADATA | 90 + .../site-packages/pip-25.0.1.dist-info/RECORD | 854 ++ .../pip-25.0.1.dist-info/REQUESTED | 0 .../site-packages/pip-25.0.1.dist-info/WHEEL | 5 + .../pip-25.0.1.dist-info/entry_points.txt | 3 + .../pip-25.0.1.dist-info/top_level.txt | 1 + .../python3.12/site-packages/pip/__init__.py | 13 + .../python3.12/site-packages/pip/__main__.py | 24 + .../site-packages/pip/__pip-runner__.py | 50 + .../pip/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 700 bytes .../pip/__pycache__/__main__.cpython-312.pyc | Bin 0 -> 854 bytes .../__pip-runner__.cpython-312.pyc | Bin 0 -> 2218 bytes .../site-packages/pip/_internal/__init__.py | 18 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 800 bytes .../__pycache__/build_env.cpython-312.pyc | Bin 0 -> 14784 bytes .../__pycache__/cache.cpython-312.pyc | Bin 0 -> 12680 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 0 -> 17644 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 36858 bytes .../__pycache__/main.cpython-312.pyc | Bin 0 -> 683 bytes .../__pycache__/pyproject.cpython-312.pyc | Bin 0 -> 5131 bytes .../self_outdated_check.cpython-312.pyc | Bin 0 -> 10416 bytes .../__pycache__/wheel_builder.cpython-312.pyc | Bin 0 -> 13628 bytes .../site-packages/pip/_internal/build_env.py | 322 + .../site-packages/pip/_internal/cache.py | 290 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 291 bytes .../autocompletion.cpython-312.pyc | Bin 0 -> 8619 bytes .../__pycache__/base_command.cpython-312.pyc | Bin 0 -> 10521 bytes .../__pycache__/cmdoptions.cpython-312.pyc | Bin 0 -> 30414 bytes .../command_context.cpython-312.pyc | Bin 0 -> 1787 bytes .../__pycache__/index_command.cpython-312.pyc | Bin 0 -> 7194 bytes .../cli/__pycache__/main.cpython-312.pyc | Bin 0 -> 2313 bytes .../__pycache__/main_parser.cpython-312.pyc | Bin 0 -> 4919 bytes .../cli/__pycache__/parser.cpython-312.pyc | Bin 0 -> 15053 bytes .../__pycache__/progress_bars.cpython-312.pyc | Bin 0 -> 3865 bytes .../__pycache__/req_command.cpython-312.pyc | Bin 0 -> 12254 bytes .../cli/__pycache__/spinners.cpython-312.pyc | Bin 0 -> 7846 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 0 -> 388 bytes .../pip/_internal/cli/autocompletion.py | 176 + .../pip/_internal/cli/base_command.py | 240 + .../pip/_internal/cli/cmdoptions.py | 1075 ++ .../pip/_internal/cli/command_context.py | 27 + .../pip/_internal/cli/index_command.py | 171 + .../site-packages/pip/_internal/cli/main.py | 80 + .../pip/_internal/cli/main_parser.py | 134 + .../site-packages/pip/_internal/cli/parser.py | 294 + .../pip/_internal/cli/progress_bars.py | 94 + .../pip/_internal/cli/req_command.py | 329 + .../pip/_internal/cli/spinners.py | 159 + .../pip/_internal/cli/status_codes.py | 6 + .../pip/_internal/commands/__init__.py | 132 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4015 bytes .../__pycache__/cache.cpython-312.pyc | Bin 0 -> 9941 bytes .../__pycache__/check.cpython-312.pyc | Bin 0 -> 2605 bytes .../__pycache__/completion.cpython-312.pyc | Bin 0 -> 5206 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 0 -> 13176 bytes .../__pycache__/debug.cpython-312.pyc | Bin 0 -> 10081 bytes .../__pycache__/download.cpython-312.pyc | Bin 0 -> 7516 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 0 -> 4398 bytes .../commands/__pycache__/hash.cpython-312.pyc | Bin 0 -> 2981 bytes .../commands/__pycache__/help.cpython-312.pyc | Bin 0 -> 1686 bytes .../__pycache__/index.cpython-312.pyc | Bin 0 -> 6684 bytes .../__pycache__/inspect.cpython-312.pyc | Bin 0 -> 3993 bytes .../__pycache__/install.cpython-312.pyc | Bin 0 -> 29105 bytes .../commands/__pycache__/list.cpython-312.pyc | Bin 0 -> 15770 bytes .../__pycache__/search.cpython-312.pyc | Bin 0 -> 7531 bytes .../commands/__pycache__/show.cpython-312.pyc | Bin 0 -> 10950 bytes .../__pycache__/uninstall.cpython-312.pyc | Bin 0 -> 4722 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 0 -> 8878 bytes .../pip/_internal/commands/cache.py | 228 + .../pip/_internal/commands/check.py | 67 + .../pip/_internal/commands/completion.py | 130 + .../pip/_internal/commands/configuration.py | 280 + .../pip/_internal/commands/debug.py | 201 + .../pip/_internal/commands/download.py | 146 + .../pip/_internal/commands/freeze.py | 109 + .../pip/_internal/commands/hash.py | 59 + .../pip/_internal/commands/help.py | 41 + .../pip/_internal/commands/index.py | 139 + .../pip/_internal/commands/inspect.py | 92 + .../pip/_internal/commands/install.py | 784 ++ .../pip/_internal/commands/list.py | 375 + .../pip/_internal/commands/search.py | 172 + .../pip/_internal/commands/show.py | 224 + .../pip/_internal/commands/uninstall.py | 114 + .../pip/_internal/commands/wheel.py | 182 + .../pip/_internal/configuration.py | 383 + .../pip/_internal/distributions/__init__.py | 21 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 954 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 2906 bytes .../__pycache__/installed.cpython-312.pyc | Bin 0 -> 1713 bytes .../__pycache__/sdist.cpython-312.pyc | Bin 0 -> 8440 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 0 -> 2294 bytes .../pip/_internal/distributions/base.py | 53 + .../pip/_internal/distributions/installed.py | 29 + .../pip/_internal/distributions/sdist.py | 158 + .../pip/_internal/distributions/wheel.py | 42 + .../site-packages/pip/_internal/exceptions.py | 809 ++ .../pip/_internal/index/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 245 bytes .../__pycache__/collector.cpython-312.pyc | Bin 0 -> 21630 bytes .../package_finder.cpython-312.pyc | Bin 0 -> 41378 bytes .../index/__pycache__/sources.cpython-312.pyc | Bin 0 -> 12537 bytes .../pip/_internal/index/collector.py | 494 + .../pip/_internal/index/package_finder.py | 1029 ++ .../pip/_internal/index/sources.py | 284 + .../pip/_internal/locations/__init__.py | 456 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 16453 bytes .../__pycache__/_distutils.cpython-312.pyc | Bin 0 -> 6804 bytes .../__pycache__/_sysconfig.cpython-312.pyc | Bin 0 -> 8041 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 3794 bytes .../pip/_internal/locations/_distutils.py | 172 + .../pip/_internal/locations/_sysconfig.py | 214 + .../pip/_internal/locations/base.py | 81 + .../site-packages/pip/_internal/main.py | 12 + .../pip/_internal/metadata/__init__.py | 128 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 5880 bytes .../__pycache__/_json.cpython-312.pyc | Bin 0 -> 2980 bytes .../metadata/__pycache__/base.cpython-312.pyc | Bin 0 -> 35211 bytes .../__pycache__/pkg_resources.cpython-312.pyc | Bin 0 -> 16097 bytes .../pip/_internal/metadata/_json.py | 86 + .../pip/_internal/metadata/base.py | 688 ++ .../_internal/metadata/importlib/__init__.py | 6 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 371 bytes .../__pycache__/_compat.cpython-312.pyc | Bin 0 -> 4504 bytes .../__pycache__/_dists.cpython-312.pyc | Bin 0 -> 12892 bytes .../__pycache__/_envs.cpython-312.pyc | Bin 0 -> 11092 bytes .../_internal/metadata/importlib/_compat.py | 85 + .../_internal/metadata/importlib/_dists.py | 228 + .../pip/_internal/metadata/importlib/_envs.py | 189 + .../pip/_internal/metadata/pkg_resources.py | 301 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 279 bytes .../__pycache__/candidate.cpython-312.pyc | Bin 0 -> 1617 bytes .../__pycache__/direct_url.cpython-312.pyc | Bin 0 -> 10857 bytes .../format_control.cpython-312.pyc | Bin 0 -> 4236 bytes .../models/__pycache__/index.cpython-312.pyc | Bin 0 -> 1707 bytes .../installation_report.cpython-312.pyc | Bin 0 -> 2290 bytes .../models/__pycache__/link.cpython-312.pyc | Bin 0 -> 26996 bytes .../models/__pycache__/scheme.cpython-312.pyc | Bin 0 -> 1036 bytes .../__pycache__/search_scope.cpython-312.pyc | Bin 0 -> 5000 bytes .../selection_prefs.cpython-312.pyc | Bin 0 -> 1864 bytes .../__pycache__/target_python.cpython-312.pyc | Bin 0 -> 4966 bytes .../models/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 6565 bytes .../pip/_internal/models/candidate.py | 25 + .../pip/_internal/models/direct_url.py | 224 + .../pip/_internal/models/format_control.py | 78 + .../pip/_internal/models/index.py | 28 + .../_internal/models/installation_report.py | 56 + .../pip/_internal/models/link.py | 604 ++ .../pip/_internal/models/scheme.py | 25 + .../pip/_internal/models/search_scope.py | 127 + .../pip/_internal/models/selection_prefs.py | 53 + .../pip/_internal/models/target_python.py | 121 + .../pip/_internal/models/wheel.py | 118 + .../pip/_internal/network/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 267 bytes .../network/__pycache__/auth.cpython-312.pyc | Bin 0 -> 22112 bytes .../network/__pycache__/cache.cpython-312.pyc | Bin 0 -> 7059 bytes .../__pycache__/download.cpython-312.pyc | Bin 0 -> 8492 bytes .../__pycache__/lazy_wheel.cpython-312.pyc | Bin 0 -> 11620 bytes .../__pycache__/session.cpython-312.pyc | Bin 0 -> 18919 bytes .../network/__pycache__/utils.cpython-312.pyc | Bin 0 -> 2268 bytes .../__pycache__/xmlrpc.cpython-312.pyc | Bin 0 -> 2962 bytes .../pip/_internal/network/auth.py | 566 ++ .../pip/_internal/network/cache.py | 118 + .../pip/_internal/network/download.py | 187 + .../pip/_internal/network/lazy_wheel.py | 210 + .../pip/_internal/network/session.py | 523 + .../pip/_internal/network/utils.py | 98 + .../pip/_internal/network/xmlrpc.py | 62 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 210 bytes .../__pycache__/check.cpython-312.pyc | Bin 0 -> 7117 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 0 -> 10261 bytes .../__pycache__/prepare.cpython-312.pyc | Bin 0 -> 25785 bytes .../_internal/operations/build/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 216 bytes .../__pycache__/build_tracker.cpython-312.pyc | Bin 0 -> 7680 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 0 -> 1870 bytes .../metadata_editable.cpython-312.pyc | Bin 0 -> 1924 bytes .../metadata_legacy.cpython-312.pyc | Bin 0 -> 3024 bytes .../build/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 1690 bytes .../wheel_editable.cpython-312.pyc | Bin 0 -> 2029 bytes .../__pycache__/wheel_legacy.cpython-312.pyc | Bin 0 -> 3859 bytes .../operations/build/build_tracker.py | 138 + .../_internal/operations/build/metadata.py | 39 + .../operations/build/metadata_editable.py | 42 + .../operations/build/metadata_legacy.py | 74 + .../pip/_internal/operations/build/wheel.py | 37 + .../operations/build/wheel_editable.py | 46 + .../operations/build/wheel_legacy.py | 102 + .../pip/_internal/operations/check.py | 181 + .../pip/_internal/operations/freeze.py | 256 + .../_internal/operations/install/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 279 bytes .../editable_legacy.cpython-312.pyc | Bin 0 -> 1811 bytes .../install/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 34116 bytes .../operations/install/editable_legacy.py | 47 + .../pip/_internal/operations/install/wheel.py | 741 ++ .../pip/_internal/operations/prepare.py | 732 ++ .../site-packages/pip/_internal/pyproject.py | 185 + .../pip/_internal/req/__init__.py | 90 + .../req/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3458 bytes .../__pycache__/constructors.cpython-312.pyc | Bin 0 -> 21268 bytes .../req/__pycache__/req_file.cpython-312.pyc | Bin 0 -> 24251 bytes .../__pycache__/req_install.cpython-312.pyc | Bin 0 -> 38483 bytes .../req/__pycache__/req_set.cpython-312.pyc | Bin 0 -> 5496 bytes .../__pycache__/req_uninstall.cpython-312.pyc | Bin 0 -> 32107 bytes .../pip/_internal/req/constructors.py | 560 ++ .../pip/_internal/req/req_file.py | 623 ++ .../pip/_internal/req/req_install.py | 934 ++ .../pip/_internal/req/req_set.py | 82 + .../pip/_internal/req/req_uninstall.py | 633 ++ .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 210 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 1198 bytes .../pip/_internal/resolution/base.py | 20 + .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 217 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 0 -> 22592 bytes .../_internal/resolution/legacy/resolver.py | 597 ++ .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 221 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 8162 bytes .../__pycache__/candidates.cpython-312.pyc | Bin 0 -> 29421 bytes .../__pycache__/factory.cpython-312.pyc | Bin 0 -> 32499 bytes .../found_candidates.cpython-312.pyc | Bin 0 -> 6806 bytes .../__pycache__/provider.cpython-312.pyc | Bin 0 -> 10536 bytes .../__pycache__/reporter.cpython-312.pyc | Bin 0 -> 5053 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 0 -> 15369 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 0 -> 12327 bytes .../_internal/resolution/resolvelib/base.py | 139 + .../resolution/resolvelib/candidates.py | 574 ++ .../resolution/resolvelib/factory.py | 823 ++ .../resolution/resolvelib/found_candidates.py | 174 + .../resolution/resolvelib/provider.py | 258 + .../resolution/resolvelib/reporter.py | 81 + .../resolution/resolvelib/requirements.py | 245 + .../resolution/resolvelib/resolver.py | 317 + .../pip/_internal/self_outdated_check.py | 252 + .../pip/_internal/utils/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 205 bytes .../__pycache__/_jaraco_text.cpython-312.pyc | Bin 0 -> 4540 bytes .../utils/__pycache__/_log.cpython-312.pyc | Bin 0 -> 1876 bytes .../utils/__pycache__/appdirs.cpython-312.pyc | Bin 0 -> 2420 bytes .../utils/__pycache__/compat.cpython-312.pyc | Bin 0 -> 2917 bytes .../compatibility_tags.cpython-312.pyc | Bin 0 -> 6360 bytes .../__pycache__/datetime.cpython-312.pyc | Bin 0 -> 694 bytes .../__pycache__/deprecation.cpython-312.pyc | Bin 0 -> 4201 bytes .../direct_url_helpers.cpython-312.pyc | Bin 0 -> 3546 bytes .../__pycache__/egg_link.cpython-312.pyc | Bin 0 -> 3216 bytes .../__pycache__/entrypoints.cpython-312.pyc | Bin 0 -> 4003 bytes .../__pycache__/filesystem.cpython-312.pyc | Bin 0 -> 7339 bytes .../__pycache__/filetypes.cpython-312.pyc | Bin 0 -> 1174 bytes .../utils/__pycache__/glibc.cpython-312.pyc | Bin 0 -> 2429 bytes .../utils/__pycache__/hashes.cpython-312.pyc | Bin 0 -> 7613 bytes .../utils/__pycache__/logging.cpython-312.pyc | Bin 0 -> 13901 bytes .../utils/__pycache__/misc.cpython-312.pyc | Bin 0 -> 33236 bytes .../__pycache__/packaging.cpython-312.pyc | Bin 0 -> 2670 bytes .../utils/__pycache__/retry.cpython-312.pyc | Bin 0 -> 2118 bytes .../setuptools_build.cpython-312.pyc | Bin 0 -> 4560 bytes .../__pycache__/subprocess.cpython-312.pyc | Bin 0 -> 8649 bytes .../__pycache__/temp_dir.cpython-312.pyc | Bin 0 -> 12034 bytes .../__pycache__/unpacking.cpython-312.pyc | Bin 0 -> 13508 bytes .../utils/__pycache__/urls.cpython-312.pyc | Bin 0 -> 2087 bytes .../__pycache__/virtualenv.cpython-312.pyc | Bin 0 -> 4476 bytes .../utils/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 5913 bytes .../pip/_internal/utils/_jaraco_text.py | 109 + .../site-packages/pip/_internal/utils/_log.py | 38 + .../pip/_internal/utils/appdirs.py | 52 + .../pip/_internal/utils/compat.py | 79 + .../pip/_internal/utils/compatibility_tags.py | 188 + .../pip/_internal/utils/datetime.py | 11 + .../pip/_internal/utils/deprecation.py | 124 + .../pip/_internal/utils/direct_url_helpers.py | 87 + .../pip/_internal/utils/egg_link.py | 80 + .../pip/_internal/utils/entrypoints.py | 84 + .../pip/_internal/utils/filesystem.py | 149 + .../pip/_internal/utils/filetypes.py | 27 + .../pip/_internal/utils/glibc.py | 101 + .../pip/_internal/utils/hashes.py | 147 + .../pip/_internal/utils/logging.py | 354 + .../site-packages/pip/_internal/utils/misc.py | 773 ++ .../pip/_internal/utils/packaging.py | 58 + .../pip/_internal/utils/retry.py | 42 + .../pip/_internal/utils/setuptools_build.py | 146 + .../pip/_internal/utils/subprocess.py | 245 + .../pip/_internal/utils/temp_dir.py | 296 + .../pip/_internal/utils/unpacking.py | 337 + .../site-packages/pip/_internal/utils/urls.py | 55 + .../pip/_internal/utils/virtualenv.py | 104 + .../pip/_internal/utils/wheel.py | 134 + .../pip/_internal/vcs/__init__.py | 15 + .../vcs/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 544 bytes .../vcs/__pycache__/bazaar.cpython-312.pyc | Bin 0 -> 5065 bytes .../vcs/__pycache__/git.cpython-312.pyc | Bin 0 -> 19030 bytes .../vcs/__pycache__/mercurial.cpython-312.pyc | Bin 0 -> 7618 bytes .../__pycache__/subversion.cpython-312.pyc | Bin 0 -> 12537 bytes .../versioncontrol.cpython-312.pyc | Bin 0 -> 29010 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 112 + .../site-packages/pip/_internal/vcs/git.py | 527 + .../pip/_internal/vcs/mercurial.py | 163 + .../pip/_internal/vcs/subversion.py | 324 + .../pip/_internal/vcs/versioncontrol.py | 688 ++ .../pip/_internal/wheel_builder.py | 354 + .../site-packages/pip/_vendor/__init__.py | 116 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4563 bytes .../typing_extensions.cpython-312.pyc | Bin 0 -> 139465 bytes .../pip/_vendor/cachecontrol/__init__.py | 29 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 916 bytes .../__pycache__/_cmd.cpython-312.pyc | Bin 0 -> 2660 bytes .../__pycache__/adapter.cpython-312.pyc | Bin 0 -> 6478 bytes .../__pycache__/cache.cpython-312.pyc | Bin 0 -> 3801 bytes .../__pycache__/controller.cpython-312.pyc | Bin 0 -> 16238 bytes .../__pycache__/filewrapper.cpython-312.pyc | Bin 0 -> 4361 bytes .../__pycache__/heuristics.cpython-312.pyc | Bin 0 -> 6711 bytes .../__pycache__/serialize.cpython-312.pyc | Bin 0 -> 5275 bytes .../__pycache__/wrapper.cpython-312.pyc | Bin 0 -> 1688 bytes .../pip/_vendor/cachecontrol/_cmd.py | 70 + .../pip/_vendor/cachecontrol/adapter.py | 161 + .../pip/_vendor/cachecontrol/cache.py | 75 + .../_vendor/cachecontrol/caches/__init__.py | 8 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 449 bytes .../__pycache__/file_cache.cpython-312.pyc | Bin 0 -> 7758 bytes .../__pycache__/redis_cache.cpython-312.pyc | Bin 0 -> 2747 bytes .../_vendor/cachecontrol/caches/file_cache.py | 182 + .../cachecontrol/caches/redis_cache.py | 48 + .../pip/_vendor/cachecontrol/controller.py | 500 + .../pip/_vendor/cachecontrol/filewrapper.py | 119 + .../pip/_vendor/cachecontrol/heuristics.py | 157 + .../pip/_vendor/cachecontrol/py.typed | 0 .../pip/_vendor/cachecontrol/serialize.py | 146 + .../pip/_vendor/cachecontrol/wrapper.py | 43 + .../pip/_vendor/certifi/__init__.py | 4 + .../pip/_vendor/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 332 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 659 bytes .../certifi/__pycache__/core.cpython-312.pyc | Bin 0 -> 3225 bytes .../pip/_vendor/certifi/cacert.pem | 4929 ++++++++++ .../site-packages/pip/_vendor/certifi/core.py | 114 + .../pip/_vendor/certifi/py.typed | 0 .../pip/_vendor/distlib/__init__.py | 33 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1283 bytes .../__pycache__/compat.cpython-312.pyc | Bin 0 -> 45540 bytes .../__pycache__/database.cpython-312.pyc | Bin 0 -> 65595 bytes .../distlib/__pycache__/index.cpython-312.pyc | Bin 0 -> 24330 bytes .../__pycache__/locators.cpython-312.pyc | Bin 0 -> 59875 bytes .../__pycache__/manifest.cpython-312.pyc | Bin 0 -> 15090 bytes .../__pycache__/markers.cpython-312.pyc | Bin 0 -> 7668 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 0 -> 41574 bytes .../__pycache__/resources.cpython-312.pyc | Bin 0 -> 17326 bytes .../__pycache__/scripts.cpython-312.pyc | Bin 0 -> 19767 bytes .../distlib/__pycache__/util.cpython-312.pyc | Bin 0 -> 88049 bytes .../__pycache__/version.cpython-312.pyc | Bin 0 -> 30358 bytes .../distlib/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 52559 bytes .../pip/_vendor/distlib/compat.py | 1137 +++ .../pip/_vendor/distlib/database.py | 1329 +++ .../pip/_vendor/distlib/index.py | 508 + .../pip/_vendor/distlib/locators.py | 1295 +++ .../pip/_vendor/distlib/manifest.py | 384 + .../pip/_vendor/distlib/markers.py | 162 + .../pip/_vendor/distlib/metadata.py | 1031 ++ .../pip/_vendor/distlib/resources.py | 358 + .../pip/_vendor/distlib/scripts.py | 447 + .../site-packages/pip/_vendor/distlib/t32.exe | Bin 0 -> 97792 bytes .../pip/_vendor/distlib/t64-arm.exe | Bin 0 -> 182784 bytes .../site-packages/pip/_vendor/distlib/t64.exe | Bin 0 -> 108032 bytes .../site-packages/pip/_vendor/distlib/util.py | 1984 ++++ .../pip/_vendor/distlib/version.py | 750 ++ .../site-packages/pip/_vendor/distlib/w32.exe | Bin 0 -> 91648 bytes .../pip/_vendor/distlib/w64-arm.exe | Bin 0 -> 168448 bytes .../site-packages/pip/_vendor/distlib/w64.exe | Bin 0 -> 101888 bytes .../pip/_vendor/distlib/wheel.py | 1100 +++ .../pip/_vendor/distro/__init__.py | 54 + .../pip/_vendor/distro/__main__.py | 4 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 974 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 306 bytes .../distro/__pycache__/distro.cpython-312.pyc | Bin 0 -> 53806 bytes .../pip/_vendor/distro/distro.py | 1403 +++ .../site-packages/pip/_vendor/distro/py.typed | 0 .../pip/_vendor/idna/__init__.py | 45 + .../idna/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 900 bytes .../idna/__pycache__/codec.cpython-312.pyc | Bin 0 -> 4990 bytes .../idna/__pycache__/compat.cpython-312.pyc | Bin 0 -> 904 bytes .../idna/__pycache__/core.cpython-312.pyc | Bin 0 -> 16135 bytes .../idna/__pycache__/idnadata.cpython-312.pyc | Bin 0 -> 99490 bytes .../__pycache__/intranges.cpython-312.pyc | Bin 0 -> 2647 bytes .../__pycache__/package_data.cpython-312.pyc | Bin 0 -> 231 bytes .../__pycache__/uts46data.cpython-312.pyc | Bin 0 -> 158860 bytes .../site-packages/pip/_vendor/idna/codec.py | 122 + .../site-packages/pip/_vendor/idna/compat.py | 15 + .../site-packages/pip/_vendor/idna/core.py | 437 + .../pip/_vendor/idna/idnadata.py | 4243 ++++++++ .../pip/_vendor/idna/intranges.py | 57 + .../pip/_vendor/idna/package_data.py | 1 + .../site-packages/pip/_vendor/idna/py.typed | 0 .../pip/_vendor/idna/uts46data.py | 8681 +++++++++++++++++ .../pip/_vendor/msgpack/__init__.py | 55 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1753 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 2039 bytes .../msgpack/__pycache__/ext.cpython-312.pyc | Bin 0 -> 8307 bytes .../__pycache__/fallback.cpython-312.pyc | Bin 0 -> 41504 bytes .../pip/_vendor/msgpack/exceptions.py | 48 + .../site-packages/pip/_vendor/msgpack/ext.py | 170 + .../pip/_vendor/msgpack/fallback.py | 929 ++ .../pip/_vendor/packaging/__init__.py | 15 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 572 bytes .../__pycache__/_elffile.cpython-312.pyc | Bin 0 -> 5037 bytes .../__pycache__/_manylinux.cpython-312.pyc | Bin 0 -> 9725 bytes .../__pycache__/_musllinux.cpython-312.pyc | Bin 0 -> 4568 bytes .../__pycache__/_parser.cpython-312.pyc | Bin 0 -> 13999 bytes .../__pycache__/_structures.cpython-312.pyc | Bin 0 -> 3255 bytes .../__pycache__/_tokenizer.cpython-312.pyc | Bin 0 -> 7929 bytes .../__pycache__/markers.cpython-312.pyc | Bin 0 -> 11388 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 0 -> 27226 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 0 -> 4424 bytes .../__pycache__/specifiers.cpython-312.pyc | Bin 0 -> 39056 bytes .../__pycache__/tags.cpython-312.pyc | Bin 0 -> 23019 bytes .../__pycache__/utils.cpython-312.pyc | Bin 0 -> 6649 bytes .../__pycache__/version.cpython-312.pyc | Bin 0 -> 20500 bytes .../pip/_vendor/packaging/_elffile.py | 110 + .../pip/_vendor/packaging/_manylinux.py | 263 + .../pip/_vendor/packaging/_musllinux.py | 85 + .../pip/_vendor/packaging/_parser.py | 354 + .../pip/_vendor/packaging/_structures.py | 61 + .../pip/_vendor/packaging/_tokenizer.py | 194 + .../_vendor/packaging/licenses/__init__.py | 145 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4134 bytes .../__pycache__/_spdx.cpython-312.pyc | Bin 0 -> 47378 bytes .../pip/_vendor/packaging/licenses/_spdx.py | 759 ++ .../pip/_vendor/packaging/markers.py | 331 + .../pip/_vendor/packaging/metadata.py | 863 ++ .../pip/_vendor/packaging/py.typed | 0 .../pip/_vendor/packaging/requirements.py | 91 + .../pip/_vendor/packaging/specifiers.py | 1020 ++ .../pip/_vendor/packaging/tags.py | 617 ++ .../pip/_vendor/packaging/utils.py | 163 + .../pip/_vendor/packaging/version.py | 582 ++ .../pip/_vendor/pkg_resources/__init__.py | 3676 +++++++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 161275 bytes .../pip/_vendor/platformdirs/__init__.py | 631 ++ .../pip/_vendor/platformdirs/__main__.py | 55 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 19861 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 1962 bytes .../__pycache__/android.cpython-312.pyc | Bin 0 -> 10711 bytes .../__pycache__/api.cpython-312.pyc | Bin 0 -> 13318 bytes .../__pycache__/macos.cpython-312.pyc | Bin 0 -> 8838 bytes .../__pycache__/unix.cpython-312.pyc | Bin 0 -> 14704 bytes .../__pycache__/version.cpython-312.pyc | Bin 0 -> 611 bytes .../__pycache__/windows.cpython-312.pyc | Bin 0 -> 13688 bytes .../pip/_vendor/platformdirs/android.py | 249 + .../pip/_vendor/platformdirs/api.py | 298 + .../pip/_vendor/platformdirs/macos.py | 144 + .../pip/_vendor/platformdirs/py.typed | 0 .../pip/_vendor/platformdirs/unix.py | 269 + .../pip/_vendor/platformdirs/version.py | 16 + .../pip/_vendor/platformdirs/windows.py | 272 + .../pip/_vendor/pygments/__init__.py | 82 + .../pip/_vendor/pygments/__main__.py | 17 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3503 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 749 bytes .../__pycache__/cmdline.cpython-312.pyc | Bin 0 -> 26599 bytes .../__pycache__/console.cpython-312.pyc | Bin 0 -> 2643 bytes .../__pycache__/filter.cpython-312.pyc | Bin 0 -> 3236 bytes .../__pycache__/formatter.cpython-312.pyc | Bin 0 -> 4735 bytes .../__pycache__/lexer.cpython-312.pyc | Bin 0 -> 38376 bytes .../__pycache__/modeline.cpython-312.pyc | Bin 0 -> 1574 bytes .../__pycache__/plugin.cpython-312.pyc | Bin 0 -> 2623 bytes .../__pycache__/regexopt.cpython-312.pyc | Bin 0 -> 4092 bytes .../__pycache__/scanner.cpython-312.pyc | Bin 0 -> 4771 bytes .../__pycache__/sphinxext.cpython-312.pyc | Bin 0 -> 12113 bytes .../__pycache__/style.cpython-312.pyc | Bin 0 -> 6708 bytes .../__pycache__/token.cpython-312.pyc | Bin 0 -> 8204 bytes .../__pycache__/unistring.cpython-312.pyc | Bin 0 -> 32987 bytes .../pygments/__pycache__/util.cpython-312.pyc | Bin 0 -> 14084 bytes .../pip/_vendor/pygments/cmdline.py | 668 ++ .../pip/_vendor/pygments/console.py | 70 + .../pip/_vendor/pygments/filter.py | 70 + .../pip/_vendor/pygments/filters/__init__.py | 940 ++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 37926 bytes .../pip/_vendor/pygments/formatter.py | 129 + .../_vendor/pygments/formatters/__init__.py | 157 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 6917 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 0 -> 4230 bytes .../__pycache__/bbcode.cpython-312.pyc | Bin 0 -> 4237 bytes .../__pycache__/groff.cpython-312.pyc | Bin 0 -> 7308 bytes .../__pycache__/html.cpython-312.pyc | Bin 0 -> 41041 bytes .../__pycache__/img.cpython-312.pyc | Bin 0 -> 28563 bytes .../__pycache__/irc.cpython-312.pyc | Bin 0 -> 6070 bytes .../__pycache__/latex.cpython-312.pyc | Bin 0 -> 20140 bytes .../__pycache__/other.cpython-312.pyc | Bin 0 -> 6892 bytes .../__pycache__/pangomarkup.cpython-312.pyc | Bin 0 -> 2973 bytes .../__pycache__/rtf.cpython-312.pyc | Bin 0 -> 13788 bytes .../__pycache__/svg.cpython-312.pyc | Bin 0 -> 9154 bytes .../__pycache__/terminal.cpython-312.pyc | Bin 0 -> 5834 bytes .../__pycache__/terminal256.cpython-312.pyc | Bin 0 -> 15133 bytes .../_vendor/pygments/formatters/_mapping.py | 23 + .../pip/_vendor/pygments/formatters/bbcode.py | 108 + .../pip/_vendor/pygments/formatters/groff.py | 170 + .../pip/_vendor/pygments/formatters/html.py | 987 ++ .../pip/_vendor/pygments/formatters/img.py | 685 ++ .../pip/_vendor/pygments/formatters/irc.py | 154 + .../pip/_vendor/pygments/formatters/latex.py | 518 + .../pip/_vendor/pygments/formatters/other.py | 160 + .../pygments/formatters/pangomarkup.py | 83 + .../pip/_vendor/pygments/formatters/rtf.py | 349 + .../pip/_vendor/pygments/formatters/svg.py | 185 + .../_vendor/pygments/formatters/terminal.py | 127 + .../pygments/formatters/terminal256.py | 338 + .../pip/_vendor/pygments/lexer.py | 963 ++ .../pip/_vendor/pygments/lexers/__init__.py | 362 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 14636 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 0 -> 68278 bytes .../lexers/__pycache__/python.cpython-312.pyc | Bin 0 -> 42982 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 589 ++ .../pip/_vendor/pygments/lexers/python.py | 1198 +++ .../pip/_vendor/pygments/modeline.py | 43 + .../pip/_vendor/pygments/plugin.py | 72 + .../pip/_vendor/pygments/regexopt.py | 91 + .../pip/_vendor/pygments/scanner.py | 104 + .../pip/_vendor/pygments/sphinxext.py | 247 + .../pip/_vendor/pygments/style.py | 203 + .../pip/_vendor/pygments/styles/__init__.py | 61 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2679 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 0 -> 3663 bytes .../pip/_vendor/pygments/styles/_mapping.py | 54 + .../pip/_vendor/pygments/token.py | 214 + .../pip/_vendor/pygments/unistring.py | 153 + .../pip/_vendor/pygments/util.py | 324 + .../pip/_vendor/pyproject_hooks/__init__.py | 31 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 762 bytes .../__pycache__/_impl.cpython-312.pyc | Bin 0 -> 18061 bytes .../pip/_vendor/pyproject_hooks/_impl.py | 410 + .../pyproject_hooks/_in_process/__init__.py | 21 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1091 bytes .../__pycache__/_in_process.cpython-312.pyc | Bin 0 -> 15329 bytes .../_in_process/_in_process.py | 389 + .../pip/_vendor/pyproject_hooks/py.typed | 0 .../pip/_vendor/requests/__init__.py | 179 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 5268 bytes .../__pycache__/__version__.cpython-312.pyc | Bin 0 -> 599 bytes .../_internal_utils.cpython-312.pyc | Bin 0 -> 2039 bytes .../__pycache__/adapters.cpython-312.pyc | Bin 0 -> 28446 bytes .../requests/__pycache__/api.cpython-312.pyc | Bin 0 -> 7206 bytes .../requests/__pycache__/auth.cpython-312.pyc | Bin 0 -> 13936 bytes .../__pycache__/certs.cpython-312.pyc | Bin 0 -> 693 bytes .../__pycache__/compat.cpython-312.pyc | Bin 0 -> 1692 bytes .../__pycache__/cookies.cpython-312.pyc | Bin 0 -> 25213 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 7613 bytes .../requests/__pycache__/help.cpython-312.pyc | Bin 0 -> 4243 bytes .../__pycache__/hooks.cpython-312.pyc | Bin 0 -> 1066 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 35443 bytes .../__pycache__/packages.cpython-312.pyc | Bin 0 -> 1281 bytes .../__pycache__/sessions.cpython-312.pyc | Bin 0 -> 27861 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 0 -> 6038 bytes .../__pycache__/structures.cpython-312.pyc | Bin 0 -> 5638 bytes .../__pycache__/utils.cpython-312.pyc | Bin 0 -> 36381 bytes .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 50 + .../pip/_vendor/requests/adapters.py | 719 ++ .../site-packages/pip/_vendor/requests/api.py | 157 + .../pip/_vendor/requests/auth.py | 314 + .../pip/_vendor/requests/certs.py | 17 + .../pip/_vendor/requests/compat.py | 78 + .../pip/_vendor/requests/cookies.py | 561 ++ .../pip/_vendor/requests/exceptions.py | 151 + .../pip/_vendor/requests/help.py | 127 + .../pip/_vendor/requests/hooks.py | 33 + .../pip/_vendor/requests/models.py | 1037 ++ .../pip/_vendor/requests/packages.py | 25 + .../pip/_vendor/requests/sessions.py | 831 ++ .../pip/_vendor/requests/status_codes.py | 128 + .../pip/_vendor/requests/structures.py | 99 + .../pip/_vendor/requests/utils.py | 1096 +++ .../pip/_vendor/resolvelib/__init__.py | 26 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 649 bytes .../__pycache__/providers.cpython-312.pyc | Bin 0 -> 6866 bytes .../__pycache__/reporters.cpython-312.pyc | Bin 0 -> 2669 bytes .../__pycache__/resolvers.cpython-312.pyc | Bin 0 -> 25895 bytes .../__pycache__/structs.cpython-312.pyc | Bin 0 -> 10515 bytes .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 215 bytes .../collections_abc.cpython-312.pyc | Bin 0 -> 435 bytes .../resolvelib/compat/collections_abc.py | 6 + .../pip/_vendor/resolvelib/providers.py | 133 + .../pip/_vendor/resolvelib/py.typed | 0 .../pip/_vendor/resolvelib/reporters.py | 43 + .../pip/_vendor/resolvelib/resolvers.py | 547 ++ .../pip/_vendor/resolvelib/structs.py | 170 + .../pip/_vendor/rich/__init__.py | 177 + .../pip/_vendor/rich/__main__.py | 273 + .../rich/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 7030 bytes .../rich/__pycache__/__main__.cpython-312.pyc | Bin 0 -> 10307 bytes .../__pycache__/_cell_widths.cpython-312.pyc | Bin 0 -> 7887 bytes .../__pycache__/_emoji_codes.cpython-312.pyc | Bin 0 -> 205991 bytes .../_emoji_replace.cpython-312.pyc | Bin 0 -> 1744 bytes .../_export_format.cpython-312.pyc | Bin 0 -> 2364 bytes .../__pycache__/_extension.cpython-312.pyc | Bin 0 -> 552 bytes .../rich/__pycache__/_fileno.cpython-312.pyc | Bin 0 -> 870 bytes .../rich/__pycache__/_inspect.cpython-312.pyc | Bin 0 -> 12037 bytes .../__pycache__/_log_render.cpython-312.pyc | Bin 0 -> 4162 bytes .../rich/__pycache__/_loop.cpython-312.pyc | Bin 0 -> 1885 bytes .../__pycache__/_null_file.cpython-312.pyc | Bin 0 -> 3644 bytes .../__pycache__/_palettes.cpython-312.pyc | Bin 0 -> 5175 bytes .../rich/__pycache__/_pick.cpython-312.pyc | Bin 0 -> 736 bytes .../rich/__pycache__/_ratio.cpython-312.pyc | Bin 0 -> 6585 bytes .../__pycache__/_spinners.cpython-312.pyc | Bin 0 -> 13194 bytes .../rich/__pycache__/_stack.cpython-312.pyc | Bin 0 -> 980 bytes .../rich/__pycache__/_timer.cpython-312.pyc | Bin 0 -> 880 bytes .../_win32_console.cpython-312.pyc | Bin 0 -> 28826 bytes .../rich/__pycache__/_windows.cpython-312.pyc | Bin 0 -> 2505 bytes .../_windows_renderer.cpython-312.pyc | Bin 0 -> 3578 bytes .../rich/__pycache__/_wrap.cpython-312.pyc | Bin 0 -> 3341 bytes .../rich/__pycache__/abc.cpython-312.pyc | Bin 0 -> 1623 bytes .../rich/__pycache__/align.cpython-312.pyc | Bin 0 -> 12406 bytes .../rich/__pycache__/ansi.cpython-312.pyc | Bin 0 -> 9096 bytes .../rich/__pycache__/bar.cpython-312.pyc | Bin 0 -> 4287 bytes .../rich/__pycache__/box.cpython-312.pyc | Bin 0 -> 11853 bytes .../rich/__pycache__/cells.cpython-312.pyc | Bin 0 -> 5575 bytes .../rich/__pycache__/color.cpython-312.pyc | Bin 0 -> 26567 bytes .../__pycache__/color_triplet.cpython-312.pyc | Bin 0 -> 1716 bytes .../rich/__pycache__/columns.cpython-312.pyc | Bin 0 -> 8599 bytes .../rich/__pycache__/console.cpython-312.pyc | Bin 0 -> 114560 bytes .../__pycache__/constrain.cpython-312.pyc | Bin 0 -> 2273 bytes .../__pycache__/containers.cpython-312.pyc | Bin 0 -> 9225 bytes .../rich/__pycache__/control.cpython-312.pyc | Bin 0 -> 10956 bytes .../default_styles.cpython-312.pyc | Bin 0 -> 10453 bytes .../rich/__pycache__/diagnose.cpython-312.pyc | Bin 0 -> 1503 bytes .../rich/__pycache__/emoji.cpython-312.pyc | Bin 0 -> 4227 bytes .../rich/__pycache__/errors.cpython-312.pyc | Bin 0 -> 1860 bytes .../__pycache__/file_proxy.cpython-312.pyc | Bin 0 -> 3586 bytes .../rich/__pycache__/filesize.cpython-312.pyc | Bin 0 -> 3062 bytes .../__pycache__/highlighter.cpython-312.pyc | Bin 0 -> 9903 bytes .../rich/__pycache__/json.cpython-312.pyc | Bin 0 -> 6050 bytes .../rich/__pycache__/jupyter.cpython-312.pyc | Bin 0 -> 5223 bytes .../rich/__pycache__/layout.cpython-312.pyc | Bin 0 -> 20173 bytes .../rich/__pycache__/live.cpython-312.pyc | Bin 0 -> 19023 bytes .../__pycache__/live_render.cpython-312.pyc | Bin 0 -> 4904 bytes .../rich/__pycache__/logging.cpython-312.pyc | Bin 0 -> 14079 bytes .../rich/__pycache__/markup.cpython-312.pyc | Bin 0 -> 9582 bytes .../rich/__pycache__/measure.cpython-312.pyc | Bin 0 -> 6393 bytes .../rich/__pycache__/padding.cpython-312.pyc | Bin 0 -> 6948 bytes .../rich/__pycache__/pager.cpython-312.pyc | Bin 0 -> 1826 bytes .../rich/__pycache__/palette.cpython-312.pyc | Bin 0 -> 5312 bytes .../rich/__pycache__/panel.cpython-312.pyc | Bin 0 -> 12785 bytes .../rich/__pycache__/pretty.cpython-312.pyc | Bin 0 -> 40626 bytes .../rich/__pycache__/progress.cpython-312.pyc | Bin 0 -> 75749 bytes .../__pycache__/progress_bar.cpython-312.pyc | Bin 0 -> 10392 bytes .../rich/__pycache__/prompt.cpython-312.pyc | Bin 0 -> 16020 bytes .../rich/__pycache__/protocol.cpython-312.pyc | Bin 0 -> 1807 bytes .../rich/__pycache__/region.cpython-312.pyc | Bin 0 -> 582 bytes .../rich/__pycache__/repr.cpython-312.pyc | Bin 0 -> 6628 bytes .../rich/__pycache__/rule.cpython-312.pyc | Bin 0 -> 6583 bytes .../rich/__pycache__/scope.cpython-312.pyc | Bin 0 -> 3840 bytes .../rich/__pycache__/screen.cpython-312.pyc | Bin 0 -> 2494 bytes .../rich/__pycache__/segment.cpython-312.pyc | Bin 0 -> 28552 bytes .../rich/__pycache__/spinner.cpython-312.pyc | Bin 0 -> 6105 bytes .../rich/__pycache__/status.cpython-312.pyc | Bin 0 -> 6076 bytes .../rich/__pycache__/style.cpython-312.pyc | Bin 0 -> 33491 bytes .../rich/__pycache__/styled.cpython-312.pyc | Bin 0 -> 2154 bytes .../rich/__pycache__/syntax.cpython-312.pyc | Bin 0 -> 40199 bytes .../rich/__pycache__/table.cpython-312.pyc | Bin 0 -> 43898 bytes .../terminal_theme.cpython-312.pyc | Bin 0 -> 3363 bytes .../rich/__pycache__/text.cpython-312.pyc | Bin 0 -> 61225 bytes .../rich/__pycache__/theme.cpython-312.pyc | Bin 0 -> 6342 bytes .../rich/__pycache__/themes.cpython-312.pyc | Bin 0 -> 329 bytes .../__pycache__/traceback.cpython-312.pyc | Bin 0 -> 32907 bytes .../rich/__pycache__/tree.cpython-312.pyc | Bin 0 -> 11808 bytes .../pip/_vendor/rich/_cell_widths.py | 454 + .../pip/_vendor/rich/_emoji_codes.py | 3610 +++++++ .../pip/_vendor/rich/_emoji_replace.py | 32 + .../pip/_vendor/rich/_export_format.py | 76 + .../pip/_vendor/rich/_extension.py | 10 + .../site-packages/pip/_vendor/rich/_fileno.py | 24 + .../pip/_vendor/rich/_inspect.py | 268 + .../pip/_vendor/rich/_log_render.py | 94 + .../site-packages/pip/_vendor/rich/_loop.py | 43 + .../pip/_vendor/rich/_null_file.py | 69 + .../pip/_vendor/rich/_palettes.py | 309 + .../site-packages/pip/_vendor/rich/_pick.py | 17 + .../site-packages/pip/_vendor/rich/_ratio.py | 159 + .../pip/_vendor/rich/_spinners.py | 482 + .../site-packages/pip/_vendor/rich/_stack.py | 16 + .../site-packages/pip/_vendor/rich/_timer.py | 19 + .../pip/_vendor/rich/_win32_console.py | 661 ++ .../pip/_vendor/rich/_windows.py | 71 + .../pip/_vendor/rich/_windows_renderer.py | 56 + .../site-packages/pip/_vendor/rich/_wrap.py | 93 + .../site-packages/pip/_vendor/rich/abc.py | 33 + .../site-packages/pip/_vendor/rich/align.py | 312 + .../site-packages/pip/_vendor/rich/ansi.py | 241 + .../site-packages/pip/_vendor/rich/bar.py | 93 + .../site-packages/pip/_vendor/rich/box.py | 480 + .../site-packages/pip/_vendor/rich/cells.py | 174 + .../site-packages/pip/_vendor/rich/color.py | 621 ++ .../pip/_vendor/rich/color_triplet.py | 38 + .../site-packages/pip/_vendor/rich/columns.py | 187 + .../site-packages/pip/_vendor/rich/console.py | 2661 +++++ .../pip/_vendor/rich/constrain.py | 37 + .../pip/_vendor/rich/containers.py | 167 + .../site-packages/pip/_vendor/rich/control.py | 225 + .../pip/_vendor/rich/default_styles.py | 191 + .../pip/_vendor/rich/diagnose.py | 37 + .../site-packages/pip/_vendor/rich/emoji.py | 96 + .../site-packages/pip/_vendor/rich/errors.py | 34 + .../pip/_vendor/rich/file_proxy.py | 57 + .../pip/_vendor/rich/filesize.py | 88 + .../pip/_vendor/rich/highlighter.py | 232 + .../site-packages/pip/_vendor/rich/json.py | 139 + .../site-packages/pip/_vendor/rich/jupyter.py | 101 + .../site-packages/pip/_vendor/rich/layout.py | 442 + .../site-packages/pip/_vendor/rich/live.py | 375 + .../pip/_vendor/rich/live_render.py | 112 + .../site-packages/pip/_vendor/rich/logging.py | 297 + .../site-packages/pip/_vendor/rich/markup.py | 251 + .../site-packages/pip/_vendor/rich/measure.py | 151 + .../site-packages/pip/_vendor/rich/padding.py | 141 + .../site-packages/pip/_vendor/rich/pager.py | 34 + .../site-packages/pip/_vendor/rich/palette.py | 100 + .../site-packages/pip/_vendor/rich/panel.py | 318 + .../site-packages/pip/_vendor/rich/pretty.py | 1016 ++ .../pip/_vendor/rich/progress.py | 1715 ++++ .../pip/_vendor/rich/progress_bar.py | 223 + .../site-packages/pip/_vendor/rich/prompt.py | 400 + .../pip/_vendor/rich/protocol.py | 42 + .../site-packages/pip/_vendor/rich/py.typed | 0 .../site-packages/pip/_vendor/rich/region.py | 10 + .../site-packages/pip/_vendor/rich/repr.py | 149 + .../site-packages/pip/_vendor/rich/rule.py | 130 + .../site-packages/pip/_vendor/rich/scope.py | 86 + .../site-packages/pip/_vendor/rich/screen.py | 54 + .../site-packages/pip/_vendor/rich/segment.py | 752 ++ .../site-packages/pip/_vendor/rich/spinner.py | 138 + .../site-packages/pip/_vendor/rich/status.py | 131 + .../site-packages/pip/_vendor/rich/style.py | 796 ++ .../site-packages/pip/_vendor/rich/styled.py | 42 + .../site-packages/pip/_vendor/rich/syntax.py | 966 ++ .../site-packages/pip/_vendor/rich/table.py | 1007 ++ .../pip/_vendor/rich/terminal_theme.py | 153 + .../site-packages/pip/_vendor/rich/text.py | 1361 +++ .../site-packages/pip/_vendor/rich/theme.py | 115 + .../site-packages/pip/_vendor/rich/themes.py | 5 + .../pip/_vendor/rich/traceback.py | 797 ++ .../site-packages/pip/_vendor/rich/tree.py | 257 + .../pip/_vendor/tomli/__init__.py | 8 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 353 bytes .../tomli/__pycache__/_parser.cpython-312.pyc | Bin 0 -> 29367 bytes .../tomli/__pycache__/_re.cpython-312.pyc | Bin 0 -> 4054 bytes .../tomli/__pycache__/_types.cpython-312.pyc | Bin 0 -> 381 bytes .../pip/_vendor/tomli/_parser.py | 770 ++ .../site-packages/pip/_vendor/tomli/_re.py | 112 + .../site-packages/pip/_vendor/tomli/_types.py | 10 + .../site-packages/pip/_vendor/tomli/py.typed | 1 + .../pip/_vendor/truststore/__init__.py | 36 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1359 bytes .../__pycache__/_api.cpython-312.pyc | Bin 0 -> 16788 bytes .../__pycache__/_macos.cpython-312.pyc | Bin 0 -> 19002 bytes .../__pycache__/_openssl.cpython-312.pyc | Bin 0 -> 2220 bytes .../_ssl_constants.cpython-312.pyc | Bin 0 -> 1114 bytes .../__pycache__/_windows.cpython-312.pyc | Bin 0 -> 15780 bytes .../pip/_vendor/truststore/_api.py | 316 + .../pip/_vendor/truststore/_macos.py | 571 ++ .../pip/_vendor/truststore/_openssl.py | 66 + .../pip/_vendor/truststore/_ssl_constants.py | 31 + .../pip/_vendor/truststore/_windows.py | 567 ++ .../pip/_vendor/truststore/py.typed | 0 .../pip/_vendor/typing_extensions.py | 3641 +++++++ .../pip/_vendor/urllib3/__init__.py | 102 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3420 bytes .../__pycache__/_collections.cpython-312.pyc | Bin 0 -> 16379 bytes .../__pycache__/_version.cpython-312.pyc | Bin 0 -> 233 bytes .../__pycache__/connection.cpython-312.pyc | Bin 0 -> 20418 bytes .../connectionpool.cpython-312.pyc | Bin 0 -> 36553 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 13508 bytes .../__pycache__/fields.cpython-312.pyc | Bin 0 -> 10417 bytes .../__pycache__/filepost.cpython-312.pyc | Bin 0 -> 4027 bytes .../__pycache__/poolmanager.cpython-312.pyc | Bin 0 -> 20444 bytes .../__pycache__/request.cpython-312.pyc | Bin 0 -> 7309 bytes .../__pycache__/response.cpython-312.pyc | Bin 0 -> 33958 bytes .../pip/_vendor/urllib3/_collections.py | 355 + .../pip/_vendor/urllib3/_version.py | 2 + .../pip/_vendor/urllib3/connection.py | 572 ++ .../pip/_vendor/urllib3/connectionpool.py | 1140 +++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 213 bytes .../_appengine_environ.cpython-312.pyc | Bin 0 -> 1863 bytes .../__pycache__/appengine.cpython-312.pyc | Bin 0 -> 11579 bytes .../__pycache__/ntlmpool.cpython-312.pyc | Bin 0 -> 5729 bytes .../__pycache__/pyopenssl.cpython-312.pyc | Bin 0 -> 24463 bytes .../securetransport.cpython-312.pyc | Bin 0 -> 35516 bytes .../contrib/__pycache__/socks.cpython-312.pyc | Bin 0 -> 7526 bytes .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 230 bytes .../__pycache__/bindings.cpython-312.pyc | Bin 0 -> 17442 bytes .../__pycache__/low_level.cpython-312.pyc | Bin 0 -> 14778 bytes .../contrib/_securetransport/bindings.py | 519 + .../contrib/_securetransport/low_level.py | 397 + .../pip/_vendor/urllib3/contrib/appengine.py | 314 + .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 + .../pip/_vendor/urllib3/contrib/pyopenssl.py | 518 + .../urllib3/contrib/securetransport.py | 920 ++ .../pip/_vendor/urllib3/contrib/socks.py | 216 + .../pip/_vendor/urllib3/exceptions.py | 323 + .../pip/_vendor/urllib3/fields.py | 274 + .../pip/_vendor/urllib3/filepost.py | 98 + .../pip/_vendor/urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 214 bytes .../packages/__pycache__/six.cpython-312.pyc | Bin 0 -> 41270 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 224 bytes .../__pycache__/makefile.cpython-312.pyc | Bin 0 -> 1840 bytes .../weakref_finalize.cpython-312.pyc | Bin 0 -> 7351 bytes .../urllib3/packages/backports/makefile.py | 51 + .../packages/backports/weakref_finalize.py | 155 + .../pip/_vendor/urllib3/packages/six.py | 1076 ++ .../pip/_vendor/urllib3/poolmanager.py | 540 + .../pip/_vendor/urllib3/request.py | 191 + .../pip/_vendor/urllib3/response.py | 879 ++ .../pip/_vendor/urllib3/util/__init__.py | 49 + .../util/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1161 bytes .../__pycache__/connection.cpython-312.pyc | Bin 0 -> 4762 bytes .../util/__pycache__/proxy.cpython-312.pyc | Bin 0 -> 1567 bytes .../util/__pycache__/queue.cpython-312.pyc | Bin 0 -> 1367 bytes .../util/__pycache__/request.cpython-312.pyc | Bin 0 -> 4198 bytes .../util/__pycache__/response.cpython-312.pyc | Bin 0 -> 3007 bytes .../util/__pycache__/retry.cpython-312.pyc | Bin 0 -> 21737 bytes .../util/__pycache__/ssl_.cpython-312.pyc | Bin 0 -> 15379 bytes .../ssl_match_hostname.cpython-312.pyc | Bin 0 -> 5066 bytes .../__pycache__/ssltransport.cpython-312.pyc | Bin 0 -> 10768 bytes .../util/__pycache__/timeout.cpython-312.pyc | Bin 0 -> 11154 bytes .../util/__pycache__/url.cpython-312.pyc | Bin 0 -> 15800 bytes .../util/__pycache__/wait.cpython-312.pyc | Bin 0 -> 4418 bytes .../pip/_vendor/urllib3/util/connection.py | 149 + .../pip/_vendor/urllib3/util/proxy.py | 57 + .../pip/_vendor/urllib3/util/queue.py | 22 + .../pip/_vendor/urllib3/util/request.py | 137 + .../pip/_vendor/urllib3/util/response.py | 107 + .../pip/_vendor/urllib3/util/retry.py | 622 ++ .../pip/_vendor/urllib3/util/ssl_.py | 504 + .../urllib3/util/ssl_match_hostname.py | 159 + .../pip/_vendor/urllib3/util/ssltransport.py | 221 + .../pip/_vendor/urllib3/util/timeout.py | 271 + .../pip/_vendor/urllib3/util/url.py | 435 + .../pip/_vendor/urllib3/util/wait.py | 152 + .../site-packages/pip/_vendor/vendor.txt | 18 + .../lib/python3.12/site-packages/pip/py.typed | 4 + .venv/lib64 | 1 + .venv/pyvenv.cfg | 5 + demo.py | 122 + pyproject.toml | 18 + src/iriusrisk_drl_toolkit.egg-info/PKG-INFO | 6 + .../SOURCES.txt | 12 + .../dependency_links.txt | 1 + .../entry_points.txt | 2 + .../requires.txt | 1 + .../top_level.txt | 1 + src/iriusrisk_drl_toolkit/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 176 bytes .../__pycache__/explainer.cpython-312.pyc | Bin 0 -> 2529 bytes .../__pycache__/generator.cpython-312.pyc | Bin 0 -> 1653 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 2562 bytes .../__pycache__/parser.cpython-312.pyc | Bin 0 -> 3779 bytes src/iriusrisk_drl_toolkit/explainer.py | 54 + src/iriusrisk_drl_toolkit/generator.py | 38 + src/iriusrisk_drl_toolkit/models.py | 67 + src/iriusrisk_drl_toolkit/parser.py | 93 + templates/relation_activity_rule.drl.j2 | 36 + 964 files changed, 155749 insertions(+) create mode 100644 .venv/bin/Activate.ps1 create mode 100644 .venv/bin/activate create mode 100644 .venv/bin/activate.csh create mode 100644 .venv/bin/activate.fish create mode 100755 .venv/bin/iriusrisk-drl-demo create mode 100755 .venv/bin/pip create mode 100755 .venv/bin/pip3 create mode 100755 .venv/bin/pip3.12 create mode 120000 .venv/bin/python create mode 120000 .venv/bin/python3 create mode 120000 .venv/bin/python3.12 create mode 100644 .venv/lib/python3.12/site-packages/__editable__.iriusrisk_drl_toolkit-0.1.0.pth create mode 100644 .venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/INSTALLER create mode 100644 .venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/METADATA create mode 100644 .venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/RECORD create mode 100644 .venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/REQUESTED create mode 100644 .venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/WHEEL create mode 100644 .venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/direct_url.json create mode 100644 .venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/entry_points.txt create mode 100644 .venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/top_level.txt create mode 100644 .venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/INSTALLER create mode 100644 .venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/METADATA create mode 100644 .venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/RECORD create mode 100644 .venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/REQUESTED create mode 100644 .venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/WHEEL create mode 100644 .venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/entry_points.txt create mode 100644 .venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/licenses/LICENSE.txt create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/_identifier.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/async_utils.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/bccache.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/compiler.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/constants.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/debug.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/defaults.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/environment.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/exceptions.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/ext.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/filters.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/idtracking.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/lexer.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/loaders.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/meta.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/nativetypes.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/nodes.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/optimizer.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/parser.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/runtime.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/sandbox.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/tests.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/utils.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/__pycache__/visitor.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/jinja2/_identifier.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/async_utils.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/bccache.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/compiler.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/constants.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/debug.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/defaults.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/environment.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/exceptions.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/ext.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/filters.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/idtracking.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/lexer.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/loaders.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/meta.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/nativetypes.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/nodes.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/optimizer.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/parser.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/py.typed create mode 100644 .venv/lib/python3.12/site-packages/jinja2/runtime.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/sandbox.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/tests.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/utils.py create mode 100644 .venv/lib/python3.12/site-packages/jinja2/visitor.py create mode 100644 .venv/lib/python3.12/site-packages/markupsafe-3.0.3.dist-info/INSTALLER create mode 100644 .venv/lib/python3.12/site-packages/markupsafe-3.0.3.dist-info/METADATA create mode 100644 .venv/lib/python3.12/site-packages/markupsafe-3.0.3.dist-info/RECORD create mode 100644 .venv/lib/python3.12/site-packages/markupsafe-3.0.3.dist-info/WHEEL create mode 100644 .venv/lib/python3.12/site-packages/markupsafe-3.0.3.dist-info/licenses/LICENSE.txt create mode 100644 .venv/lib/python3.12/site-packages/markupsafe-3.0.3.dist-info/top_level.txt create mode 100644 .venv/lib/python3.12/site-packages/markupsafe/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/markupsafe/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/markupsafe/__pycache__/_native.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/markupsafe/_native.py create mode 100644 .venv/lib/python3.12/site-packages/markupsafe/_speedups.c create mode 100755 .venv/lib/python3.12/site-packages/markupsafe/_speedups.cpython-312-x86_64-linux-musl.so create mode 100644 .venv/lib/python3.12/site-packages/markupsafe/_speedups.pyi create mode 100644 .venv/lib/python3.12/site-packages/markupsafe/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip-25.0.1.dist-info/AUTHORS.txt create mode 100644 .venv/lib/python3.12/site-packages/pip-25.0.1.dist-info/INSTALLER create mode 100644 .venv/lib/python3.12/site-packages/pip-25.0.1.dist-info/LICENSE.txt create mode 100644 .venv/lib/python3.12/site-packages/pip-25.0.1.dist-info/METADATA create mode 100644 .venv/lib/python3.12/site-packages/pip-25.0.1.dist-info/RECORD create mode 100644 .venv/lib/python3.12/site-packages/pip-25.0.1.dist-info/REQUESTED create mode 100644 .venv/lib/python3.12/site-packages/pip-25.0.1.dist-info/WHEEL create mode 100644 .venv/lib/python3.12/site-packages/pip-25.0.1.dist-info/entry_points.txt create mode 100644 .venv/lib/python3.12/site-packages/pip-25.0.1.dist-info/top_level.txt create mode 100644 .venv/lib/python3.12/site-packages/pip/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/__main__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/__pip-runner__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/__pycache__/__main__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/build_env.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cache.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/command_context.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/index_command.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/main.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/parser.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/spinners.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/cache.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/check.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/completion.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/configuration.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/debug.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/download.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/freeze.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/hash.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/help.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/index.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/inspect.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/install.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/list.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/search.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/show.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/commands/wheel.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/configuration.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/base.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/installed.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/exceptions.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/index/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/index/collector.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/index/package_finder.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/index/sources.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/locations/base.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/main.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/_json.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/base.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/candidate.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/direct_url.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/format_control.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/index.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/installation_report.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/link.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/scheme.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/search_scope.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/target_python.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/models/wheel.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/auth.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/cache.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/download.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/session.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/utils.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_legacy.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/check.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/freeze.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/install/editable_legacy.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/pyproject.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/constructors.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/req_file.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/req_install.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/req_set.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/base.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/retry.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/_log.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/compat.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/datetime.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/glibc.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/logging.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/misc.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/packaging.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/retry.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/urls.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/utils/wheel.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/git.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_internal/wheel_builder.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/certifi/core.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/certifi/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/database.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/index.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/locators.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/markers.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/t32.exe create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/t64-arm.exe create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/t64.exe create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/util.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/version.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/w32.exe create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/w64-arm.exe create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/w64.exe create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distro/distro.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/distro/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/codec.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/compat.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/core.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_elffile.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_parser.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_tokenizer.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/metadata.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/_elffile.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/_parser.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/_tokenizer.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/_spdx.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/metadata.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/packaging/version.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/console.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/groff.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/html.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/img.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/irc.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/latex.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/other.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/rtf.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/svg.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/terminal.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/terminal256.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexer.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/_mapping.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/python.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/modeline.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/plugin.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/regexopt.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/scanner.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/sphinxext.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/style.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/styles/_mapping.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/token.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/unistring.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pygments/util.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/help.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/__version__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/adapters.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/api.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/auth.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/certs.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/compat.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/cookies.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/help.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/hooks.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/models.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/packages.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/sessions.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/structures.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/requests/utils.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/providers.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/reporters.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__main__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/status.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_cell_widths.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_codes.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_replace.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/abc.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/align.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/bar.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/box.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/color.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/columns.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/console.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/containers.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/control.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/errors.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/json.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/jupyter.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/layout.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/live.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/live_render.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/logging.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/markup.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/measure.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/padding.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/pager.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/palette.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/panel.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/pretty.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/progress.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/prompt.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/protocol.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/region.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/repr.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/rule.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/scope.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/screen.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/segment.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/spinner.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/status.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/style.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/styled.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/syntax.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/table.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/text.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/theme.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/themes.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/traceback.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/rich/tree.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/tomli/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/tomli/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/_ssl_constants.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/truststore/py.typed create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/typing_extensions.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/_version.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/request.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/response.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/proxy.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 .venv/lib/python3.12/site-packages/pip/_vendor/vendor.txt create mode 100644 .venv/lib/python3.12/site-packages/pip/py.typed create mode 120000 .venv/lib64 create mode 100644 .venv/pyvenv.cfg create mode 100644 demo.py create mode 100644 pyproject.toml create mode 100644 src/iriusrisk_drl_toolkit.egg-info/PKG-INFO create mode 100644 src/iriusrisk_drl_toolkit.egg-info/SOURCES.txt create mode 100644 src/iriusrisk_drl_toolkit.egg-info/dependency_links.txt create mode 100644 src/iriusrisk_drl_toolkit.egg-info/entry_points.txt create mode 100644 src/iriusrisk_drl_toolkit.egg-info/requires.txt create mode 100644 src/iriusrisk_drl_toolkit.egg-info/top_level.txt create mode 100644 src/iriusrisk_drl_toolkit/__init__.py create mode 100644 src/iriusrisk_drl_toolkit/__pycache__/__init__.cpython-312.pyc create mode 100644 src/iriusrisk_drl_toolkit/__pycache__/explainer.cpython-312.pyc create mode 100644 src/iriusrisk_drl_toolkit/__pycache__/generator.cpython-312.pyc create mode 100644 src/iriusrisk_drl_toolkit/__pycache__/models.cpython-312.pyc create mode 100644 src/iriusrisk_drl_toolkit/__pycache__/parser.cpython-312.pyc create mode 100644 src/iriusrisk_drl_toolkit/explainer.py create mode 100644 src/iriusrisk_drl_toolkit/generator.py create mode 100644 src/iriusrisk_drl_toolkit/models.py create mode 100644 src/iriusrisk_drl_toolkit/parser.py create mode 100644 templates/relation_activity_rule.drl.j2 diff --git a/.venv/bin/Activate.ps1 b/.venv/bin/Activate.ps1 new file mode 100644 index 0000000..b49d77b --- /dev/null +++ b/.venv/bin/Activate.ps1 @@ -0,0 +1,247 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" diff --git a/.venv/bin/activate b/.venv/bin/activate new file mode 100644 index 0000000..f33d2ec --- /dev/null +++ b/.venv/bin/activate @@ -0,0 +1,76 @@ +# This file must be used with "source bin/activate" *from bash* +# You cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # Call hash to forget past locations. Without forgetting + # past locations the $PATH changes we made may not be respected. + # See "man bash" for more details. hash is usually a builtin of your shell + hash -r 2> /dev/null + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +# on Windows, a path can contain colons and backslashes and has to be converted: +case "$(uname)" in + CYGWIN*|MSYS*|MINGW*) + # transform D:\path\to\venv to /d/path/to/venv on MSYS and MINGW + # and to /cygdrive/d/path/to/venv on Cygwin + VIRTUAL_ENV=$(cygpath /workspace/projects/iriusrisk-drl-toolkit/.venv) + export VIRTUAL_ENV + ;; + *) + # use the path as-is + export VIRTUAL_ENV=/workspace/projects/iriusrisk-drl-toolkit/.venv + ;; +esac + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/"bin":$PATH" +export PATH + +VIRTUAL_ENV_PROMPT='(.venv) ' +export VIRTUAL_ENV_PROMPT + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1="("'(.venv) '") ${PS1:-}" + export PS1 +fi + +# Call hash to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +hash -r 2> /dev/null diff --git a/.venv/bin/activate.csh b/.venv/bin/activate.csh new file mode 100644 index 0000000..b0c8fc1 --- /dev/null +++ b/.venv/bin/activate.csh @@ -0,0 +1,27 @@ +# This file must be used with "source bin/activate.csh" *from csh*. +# You cannot run it directly. + +# Created by Davide Di Blasi . +# Ported to Python 3.3 venv by Andrew Svetlov + +alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate' + +# Unset irrelevant variables. +deactivate nondestructive + +setenv VIRTUAL_ENV /workspace/projects/iriusrisk-drl-toolkit/.venv + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/"bin":$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + set prompt = '(.venv) '"$prompt" + setenv VIRTUAL_ENV_PROMPT '(.venv) ' +endif + +alias pydoc python -m pydoc + +rehash diff --git a/.venv/bin/activate.fish b/.venv/bin/activate.fish new file mode 100644 index 0000000..bbf79d8 --- /dev/null +++ b/.venv/bin/activate.fish @@ -0,0 +1,69 @@ +# This file must be used with "source /bin/activate.fish" *from fish* +# (https://fishshell.com/). You cannot run it directly. + +function deactivate -d "Exit virtual environment and return to normal shell environment" + # reset old environment variables + if test -n "$_OLD_VIRTUAL_PATH" + set -gx PATH $_OLD_VIRTUAL_PATH + set -e _OLD_VIRTUAL_PATH + end + if test -n "$_OLD_VIRTUAL_PYTHONHOME" + set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME + set -e _OLD_VIRTUAL_PYTHONHOME + end + + if test -n "$_OLD_FISH_PROMPT_OVERRIDE" + set -e _OLD_FISH_PROMPT_OVERRIDE + # prevents error when using nested fish instances (Issue #93858) + if functions -q _old_fish_prompt + functions -e fish_prompt + functions -c _old_fish_prompt fish_prompt + functions -e _old_fish_prompt + end + end + + set -e VIRTUAL_ENV + set -e VIRTUAL_ENV_PROMPT + if test "$argv[1]" != "nondestructive" + # Self-destruct! + functions -e deactivate + end +end + +# Unset irrelevant variables. +deactivate nondestructive + +set -gx VIRTUAL_ENV /workspace/projects/iriusrisk-drl-toolkit/.venv + +set -gx _OLD_VIRTUAL_PATH $PATH +set -gx PATH "$VIRTUAL_ENV/"bin $PATH + +# Unset PYTHONHOME if set. +if set -q PYTHONHOME + set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME + set -e PYTHONHOME +end + +if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" + # fish uses a function instead of an env var to generate the prompt. + + # Save the current fish_prompt function as the function _old_fish_prompt. + functions -c fish_prompt _old_fish_prompt + + # With the original prompt function renamed, we can override with our own. + function fish_prompt + # Save the return status of the last command. + set -l old_status $status + + # Output the venv prompt; color taken from the blue of the Python logo. + printf "%s%s%s" (set_color 4B8BBE) '(.venv) ' (set_color normal) + + # Restore the return status of the previous command. + echo "exit $old_status" | . + # Output the original/"old" prompt. + _old_fish_prompt + end + + set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" + set -gx VIRTUAL_ENV_PROMPT '(.venv) ' +end diff --git a/.venv/bin/iriusrisk-drl-demo b/.venv/bin/iriusrisk-drl-demo new file mode 100755 index 0000000..1ed5ff4 --- /dev/null +++ b/.venv/bin/iriusrisk-drl-demo @@ -0,0 +1,8 @@ +#!/workspace/projects/iriusrisk-drl-toolkit/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from demo import demo +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(demo()) diff --git a/.venv/bin/pip b/.venv/bin/pip new file mode 100755 index 0000000..0eee52c --- /dev/null +++ b/.venv/bin/pip @@ -0,0 +1,8 @@ +#!/workspace/projects/iriusrisk-drl-toolkit/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/bin/pip3 b/.venv/bin/pip3 new file mode 100755 index 0000000..0eee52c --- /dev/null +++ b/.venv/bin/pip3 @@ -0,0 +1,8 @@ +#!/workspace/projects/iriusrisk-drl-toolkit/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/bin/pip3.12 b/.venv/bin/pip3.12 new file mode 100755 index 0000000..0eee52c --- /dev/null +++ b/.venv/bin/pip3.12 @@ -0,0 +1,8 @@ +#!/workspace/projects/iriusrisk-drl-toolkit/.venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from pip._internal.cli.main import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/.venv/bin/python b/.venv/bin/python new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/.venv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/.venv/bin/python3 b/.venv/bin/python3 new file mode 120000 index 0000000..ae65fda --- /dev/null +++ b/.venv/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/.venv/bin/python3.12 b/.venv/bin/python3.12 new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/.venv/bin/python3.12 @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/.venv/lib/python3.12/site-packages/__editable__.iriusrisk_drl_toolkit-0.1.0.pth b/.venv/lib/python3.12/site-packages/__editable__.iriusrisk_drl_toolkit-0.1.0.pth new file mode 100644 index 0000000..f397075 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/__editable__.iriusrisk_drl_toolkit-0.1.0.pth @@ -0,0 +1 @@ +/workspace/projects/iriusrisk-drl-toolkit/src diff --git a/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/INSTALLER b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/METADATA b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/METADATA new file mode 100644 index 0000000..1340fee --- /dev/null +++ b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/METADATA @@ -0,0 +1,6 @@ +Metadata-Version: 2.4 +Name: iriusrisk-drl-toolkit +Version: 0.1.0 +Summary: A stub toolkit for generating, parsing, and explaining a narrow subset of Drools DRL rules for IriusRisk. +Requires-Python: >=3.11 +Requires-Dist: jinja2>=3 diff --git a/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/RECORD b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/RECORD new file mode 100644 index 0000000..e677108 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/RECORD @@ -0,0 +1,10 @@ +../../../bin/iriusrisk-drl-demo,sha256=8M1Nvr_5tpx3wBzZb4IKNSATa4GBE_PxHvq3FWoAYbU,246 +__editable__.iriusrisk_drl_toolkit-0.1.0.pth,sha256=3Ck--2esEIW_r9M9J9b2JrYowit7yMjpiBaJV0LVnaw,46 +iriusrisk_drl_toolkit-0.1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +iriusrisk_drl_toolkit-0.1.0.dist-info/METADATA,sha256=OsLYQppZYK_rOogfor9I7VlOfRsZkYO7_RFiogTA7hY,229 +iriusrisk_drl_toolkit-0.1.0.dist-info/RECORD,, +iriusrisk_drl_toolkit-0.1.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +iriusrisk_drl_toolkit-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91 +iriusrisk_drl_toolkit-0.1.0.dist-info/direct_url.json,sha256=vcUuJoyH5RC997vOZZoHydOyrD1fw_3sGHMvx7t_WFQ,91 +iriusrisk_drl_toolkit-0.1.0.dist-info/entry_points.txt,sha256=_Q_fXwbhMLYnsV-NutAUbU8kDH4a1Tz3BwtuE-49SYU,49 +iriusrisk_drl_toolkit-0.1.0.dist-info/top_level.txt,sha256=KnETpyg9Z_0KP_CfSv2VrVMAKWZFhMQChXOxxd_8yPo,22 diff --git a/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/REQUESTED b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/WHEEL b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/WHEEL new file mode 100644 index 0000000..14a883f --- /dev/null +++ b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: setuptools (82.0.1) +Root-Is-Purelib: true +Tag: py3-none-any + diff --git a/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/direct_url.json b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/direct_url.json new file mode 100644 index 0000000..1a490f0 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/direct_url.json @@ -0,0 +1 @@ +{"dir_info": {"editable": true}, "url": "file:///workspace/projects/iriusrisk-drl-toolkit"} \ No newline at end of file diff --git a/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/entry_points.txt b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/entry_points.txt new file mode 100644 index 0000000..4832848 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +iriusrisk-drl-demo = demo:demo diff --git a/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/top_level.txt b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/top_level.txt new file mode 100644 index 0000000..b4182e5 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/iriusrisk_drl_toolkit-0.1.0.dist-info/top_level.txt @@ -0,0 +1 @@ +iriusrisk_drl_toolkit diff --git a/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/INSTALLER b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/INSTALLER new file mode 100644 index 0000000..a1b589e --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/INSTALLER @@ -0,0 +1 @@ +pip diff --git a/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/METADATA b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/METADATA new file mode 100644 index 0000000..ffef2ff --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/METADATA @@ -0,0 +1,84 @@ +Metadata-Version: 2.4 +Name: Jinja2 +Version: 3.1.6 +Summary: A very fast and expressive template engine. +Maintainer-email: Pallets +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +Classifier: Development Status :: 5 - Production/Stable +Classifier: Environment :: Web Environment +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: BSD License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content +Classifier: Topic :: Text Processing :: Markup :: HTML +Classifier: Typing :: Typed +License-File: LICENSE.txt +Requires-Dist: MarkupSafe>=2.0 +Requires-Dist: Babel>=2.7 ; extra == "i18n" +Project-URL: Changes, https://jinja.palletsprojects.com/changes/ +Project-URL: Chat, https://discord.gg/pallets +Project-URL: Documentation, https://jinja.palletsprojects.com/ +Project-URL: Donate, https://palletsprojects.com/donate +Project-URL: Source, https://github.com/pallets/jinja/ +Provides-Extra: i18n + +# Jinja + +Jinja is a fast, expressive, extensible templating engine. Special +placeholders in the template allow writing code similar to Python +syntax. Then the template is passed data to render the final document. + +It includes: + +- Template inheritance and inclusion. +- Define and import macros within templates. +- HTML templates can use autoescaping to prevent XSS from untrusted + user input. +- A sandboxed environment can safely render untrusted templates. +- AsyncIO support for generating templates and calling async + functions. +- I18N support with Babel. +- Templates are compiled to optimized Python code just-in-time and + cached, or can be compiled ahead-of-time. +- Exceptions point to the correct line in templates to make debugging + easier. +- Extensible filters, tests, functions, and even syntax. + +Jinja's philosophy is that while application logic belongs in Python if +possible, it shouldn't make the template designer's job difficult by +restricting functionality too much. + + +## In A Nutshell + +```jinja +{% extends "base.html" %} +{% block title %}Members{% endblock %} +{% block content %} + +{% endblock %} +``` + +## Donate + +The Pallets organization develops and supports Jinja and other popular +packages. In order to grow the community of contributors and users, and +allow the maintainers to devote more time to the projects, [please +donate today][]. + +[please donate today]: https://palletsprojects.com/donate + +## Contributing + +See our [detailed contributing documentation][contrib] for many ways to +contribute, including reporting issues, requesting features, asking or answering +questions, and making PRs. + +[contrib]: https://palletsprojects.com/contributing/ + diff --git a/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/RECORD b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/RECORD new file mode 100644 index 0000000..760da22 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/RECORD @@ -0,0 +1,58 @@ +jinja2-3.1.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +jinja2-3.1.6.dist-info/METADATA,sha256=aMVUj7Z8QTKhOJjZsx7FDGvqKr3ZFdkh8hQ1XDpkmcg,2871 +jinja2-3.1.6.dist-info/RECORD,, +jinja2-3.1.6.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +jinja2-3.1.6.dist-info/WHEEL,sha256=_2ozNFCLWc93bK4WKHCO-eDUENDlo-dgc9cU3qokYO4,82 +jinja2-3.1.6.dist-info/entry_points.txt,sha256=OL85gYU1eD8cuPlikifFngXpeBjaxl6rIJ8KkC_3r-I,58 +jinja2-3.1.6.dist-info/licenses/LICENSE.txt,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 +jinja2/__init__.py,sha256=xxepO9i7DHsqkQrgBEduLtfoz2QCuT6_gbL4XSN1hbU,1928 +jinja2/__pycache__/__init__.cpython-312.pyc,, +jinja2/__pycache__/_identifier.cpython-312.pyc,, +jinja2/__pycache__/async_utils.cpython-312.pyc,, +jinja2/__pycache__/bccache.cpython-312.pyc,, +jinja2/__pycache__/compiler.cpython-312.pyc,, +jinja2/__pycache__/constants.cpython-312.pyc,, +jinja2/__pycache__/debug.cpython-312.pyc,, +jinja2/__pycache__/defaults.cpython-312.pyc,, +jinja2/__pycache__/environment.cpython-312.pyc,, +jinja2/__pycache__/exceptions.cpython-312.pyc,, +jinja2/__pycache__/ext.cpython-312.pyc,, +jinja2/__pycache__/filters.cpython-312.pyc,, +jinja2/__pycache__/idtracking.cpython-312.pyc,, +jinja2/__pycache__/lexer.cpython-312.pyc,, +jinja2/__pycache__/loaders.cpython-312.pyc,, +jinja2/__pycache__/meta.cpython-312.pyc,, +jinja2/__pycache__/nativetypes.cpython-312.pyc,, +jinja2/__pycache__/nodes.cpython-312.pyc,, +jinja2/__pycache__/optimizer.cpython-312.pyc,, +jinja2/__pycache__/parser.cpython-312.pyc,, +jinja2/__pycache__/runtime.cpython-312.pyc,, +jinja2/__pycache__/sandbox.cpython-312.pyc,, +jinja2/__pycache__/tests.cpython-312.pyc,, +jinja2/__pycache__/utils.cpython-312.pyc,, +jinja2/__pycache__/visitor.cpython-312.pyc,, +jinja2/_identifier.py,sha256=_zYctNKzRqlk_murTNlzrju1FFJL7Va_Ijqqd7ii2lU,1958 +jinja2/async_utils.py,sha256=vK-PdsuorOMnWSnEkT3iUJRIkTnYgO2T6MnGxDgHI5o,2834 +jinja2/bccache.py,sha256=gh0qs9rulnXo0PhX5jTJy2UHzI8wFnQ63o_vw7nhzRg,14061 +jinja2/compiler.py,sha256=9RpCQl5X88BHllJiPsHPh295Hh0uApvwFJNQuutULeM,74131 +jinja2/constants.py,sha256=GMoFydBF_kdpaRKPoM5cl5MviquVRLVyZtfp5-16jg0,1433 +jinja2/debug.py,sha256=CnHqCDHd-BVGvti_8ZsTolnXNhA3ECsY-6n_2pwU8Hw,6297 +jinja2/defaults.py,sha256=boBcSw78h-lp20YbaXSJsqkAI2uN_mD_TtCydpeq5wU,1267 +jinja2/environment.py,sha256=9nhrP7Ch-NbGX00wvyr4yy-uhNHq2OCc60ggGrni_fk,61513 +jinja2/exceptions.py,sha256=ioHeHrWwCWNaXX1inHmHVblvc4haO7AXsjCp3GfWvx0,5071 +jinja2/ext.py,sha256=5PF5eHfh8mXAIxXHHRB2xXbXohi8pE3nHSOxa66uS7E,31875 +jinja2/filters.py,sha256=PQ_Egd9n9jSgtnGQYyF4K5j2nYwhUIulhPnyimkdr-k,55212 +jinja2/idtracking.py,sha256=-ll5lIp73pML3ErUYiIJj7tdmWxcH_IlDv3yA_hiZYo,10555 +jinja2/lexer.py,sha256=LYiYio6br-Tep9nPcupWXsPEtjluw3p1mU-lNBVRUfk,29786 +jinja2/loaders.py,sha256=wIrnxjvcbqh5VwW28NSkfotiDq8qNCxIOSFbGUiSLB4,24055 +jinja2/meta.py,sha256=OTDPkaFvU2Hgvx-6akz7154F8BIWaRmvJcBFvwopHww,4397 +jinja2/nativetypes.py,sha256=7GIGALVJgdyL80oZJdQUaUfwSt5q2lSSZbXt0dNf_M4,4210 +jinja2/nodes.py,sha256=m1Duzcr6qhZI8JQ6VyJgUNinjAf5bQzijSmDnMsvUx8,34579 +jinja2/optimizer.py,sha256=rJnCRlQ7pZsEEmMhsQDgC_pKyDHxP5TPS6zVPGsgcu8,1651 +jinja2/parser.py,sha256=lLOFy3sEmHc5IaEHRiH1sQVnId2moUQzhyeJZTtdY30,40383 +jinja2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +jinja2/runtime.py,sha256=gDk-GvdriJXqgsGbHgrcKTP0Yp6zPXzhzrIpCFH3jAU,34249 +jinja2/sandbox.py,sha256=Mw2aitlY2I8la7FYhcX2YG9BtUYcLnD0Gh3d29cDWrY,15009 +jinja2/tests.py,sha256=VLsBhVFnWg-PxSBz1MhRnNWgP1ovXk3neO1FLQMeC9Q,5926 +jinja2/utils.py,sha256=rRp3o9e7ZKS4fyrWRbELyLcpuGVTFcnooaOa1qx_FIk,24129 +jinja2/visitor.py,sha256=EcnL1PIwf_4RVCOMxsRNuR8AXHbS1qfAdMOE2ngKJz4,3557 diff --git a/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/REQUESTED b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/REQUESTED new file mode 100644 index 0000000..e69de29 diff --git a/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/WHEEL b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/WHEEL new file mode 100644 index 0000000..23d2d7e --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: flit 3.11.0 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/entry_points.txt b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/entry_points.txt new file mode 100644 index 0000000..abc3eae --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[babel.extractors] +jinja2=jinja2.ext:babel_extract[i18n] + diff --git a/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/licenses/LICENSE.txt b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/licenses/LICENSE.txt new file mode 100644 index 0000000..c37cae4 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/licenses/LICENSE.txt @@ -0,0 +1,28 @@ +Copyright 2007 Pallets + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.venv/lib/python3.12/site-packages/jinja2/__init__.py b/.venv/lib/python3.12/site-packages/jinja2/__init__.py new file mode 100644 index 0000000..1a423a3 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2/__init__.py @@ -0,0 +1,38 @@ +"""Jinja is a template engine written in pure Python. It provides a +non-XML syntax that supports inline expressions and an optional +sandboxed environment. +""" + +from .bccache import BytecodeCache as BytecodeCache +from .bccache import FileSystemBytecodeCache as FileSystemBytecodeCache +from .bccache import MemcachedBytecodeCache as MemcachedBytecodeCache +from .environment import Environment as Environment +from .environment import Template as Template +from .exceptions import TemplateAssertionError as TemplateAssertionError +from .exceptions import TemplateError as TemplateError +from .exceptions import TemplateNotFound as TemplateNotFound +from .exceptions import TemplateRuntimeError as TemplateRuntimeError +from .exceptions import TemplatesNotFound as TemplatesNotFound +from .exceptions import TemplateSyntaxError as TemplateSyntaxError +from .exceptions import UndefinedError as UndefinedError +from .loaders import BaseLoader as BaseLoader +from .loaders import ChoiceLoader as ChoiceLoader +from .loaders import DictLoader as DictLoader +from .loaders import FileSystemLoader as FileSystemLoader +from .loaders import FunctionLoader as FunctionLoader +from .loaders import ModuleLoader as ModuleLoader +from .loaders import PackageLoader as PackageLoader +from .loaders import PrefixLoader as PrefixLoader +from .runtime import ChainableUndefined as ChainableUndefined +from .runtime import DebugUndefined as DebugUndefined +from .runtime import make_logging_undefined as make_logging_undefined +from .runtime import StrictUndefined as StrictUndefined +from .runtime import Undefined as Undefined +from .utils import clear_caches as clear_caches +from .utils import is_undefined as is_undefined +from .utils import pass_context as pass_context +from .utils import pass_environment as pass_environment +from .utils import pass_eval_context as pass_eval_context +from .utils import select_autoescape as select_autoescape + +__version__ = "3.1.6" diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/__init__.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f35a95b8365b1a778c0a60f19f5a7a8a1d0c4bdd GIT binary patch literal 1661 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/bccache.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/bccache.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..769b45d9cdaac3f440cd0e1d1277d0e86cb4e2a0 GIT binary patch literal 19333 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/debug.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/debug.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd3f167690059f8015aab55c94d59af91d267cb5 GIT binary patch literal 6574 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/defaults.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/defaults.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a450f1e7e0da7847cd59f079508d1e771d48f27f GIT binary patch literal 1614 zcmah}TW=dh6rS}hzQm5Nxj5-9B@I>^TP+BI)KaX zzF+Dbg%J8(4E!fH0!Q~Hg!a%T!U#(SQY0L}K_k!&Dj^904jJKYL>cpN*obyxO3cF% zz;Pw+;W5AoCE?*H;BjSKLPY8m{b0vE4S8`=$^?!nX&hHFIH6?mxRS$3C67}|0ZYmx z_?C}-d_<;a0FoIzaTR*d75_(<_H-F#7H5<>oK;TY9C+tP>}hg_oF#D*BMCB&3ojzd zIXsD{umtZk{ATc^F5wI=zKAOG5NX-ZPD;Dl2_zrOI=%+m+PPMoJZGIS5A=2T#7rV z87Vh(262tg7w?&im(DKUqkg~m1y48SPu@%^-`$j(HMtbwVXB$igom)+W;|kedGbix zTL+JHyli>Q^mA?TsA*X}vABaU6oSWWi!ybG4D3?W$+oR-PlpPWHM_0rs?Deq?^8o} zNSPADNschn=r&cjF z1FB_HxLAl!_~OyV@-QPdv#Gbtq;K@Lnuq&LH*6XKKRPCwsA$A}DBc=_R+dRMs&)#UP*6xVCU2j3VE~M!-Fl5hIa^#g}Hy} z6WY9gApSFF)@P5ERQ#dv=xR^YQ8RcDc8O1@s%DxN(*$X&DoqGc0uozMy|gxXvLW(Z z8x3hv2nu&(c};DtSL<-DZmFa5MN?p-6GD*j>(;EU$Qx_bnoOqzAG#^dTd-;lendw= zpug41Ba7~M7oyUmR)@5iUD2uDx2bOLEMaOaG0QS`bXF-pB<914p?_KF4cG(Ae5ZW* zO2vkQzXaE5N82WLrK6i2?MelcEv;`byWAV_=+&-;`v&=tz6(gS+ZJy6C2IPZMss@HFXua1CY~X5ZUK z*WBq-;CmQHshm5Wc2o0iDlfiF@pW>n5E!D&;UtF81Po5Wl&c5{*ib(-_1=jix8C}pw literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/environment.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/environment.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce41a9af2c82a2637edbcaabd5f121c3e9c000aa GIT binary patch literal 76643 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 z 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/exceptions.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/exceptions.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f994596372c3dd0bf68191f78006db1376b20116 GIT binary patch literal 7723 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 RNesg4=%u6UOM2nQ{(p8_qQd|H literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/ext.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/ext.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b807ab761bdcc18b83c7799ab76c4db74f62371 GIT binary patch literal 41885 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 SR}mEaw)ndL&C#7L^8W$bt%idD literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/lexer.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/lexer.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd65ef6c1926e6fa7e30d261a405bc67ca885011 GIT binary patch literal 32073 zcmcJ&33yxAl_vNe_LTrhaNj_YA_?x=C5n3uhTQr9~5dP z%hXKIf9_iVQm~Tl`ua({@1A?lUEW>JJ?GqWFaFZ$v~hU)&-f;W!yNZF1gMW)@vImu z9Cw?0g%h}8PT&RIBtOivw{BREw|>%a(Ku}6Db6ryx@aCYGrw`ta?v_$h2JEYCv6w) z!w%-ROgb+X3>PrJb<%awJ?!Q=Q9rRxEjas@Y^D9Vfa4`^UVD zH(ZLeo!K<1524+vKl>IO z5)EF@;8G24VsM!TH#4|ggIgF}p}{@|S88x8gR3;SjltC#+|J+{4enrYtp;~8xK4w+ z80^*HZU)zD@CF92)8LH^ZqVRO3~tom%?w_z!CM&Iq`_Mm+^oUd7~G=4+ZpWB;2jKZ z)!-fmw`uTB2DfW)FM~TYco%~^HF!6JyEJ$YgS$2OB?fQM;64U#)Zo1g-lW0%7`$17 z_cM5l2KO^~s|Fun@HP!T$l&c7{4#@gXz(Eh_h|582Jh71BMk1<;G+!QrNPG-yjz0@ z7`#V=k2Cls4L-r(J`Fy};Jq4rioyFdcrd^T`^AQLd7)q23HN~54ELbe3ioAk6Wl}M zM!1K?t#FTsy>O3;op6td+u;s~U2u57L`Wb$P8-5jE_L?}Pei?&aRiO(l92YVl=7d+(eBb7Qk)LJ`2(L~2P_0My zEqv+gL}y=(uud=~fu z;4wiI#(}S&_$>PksxSYlBEE^z*t$Y%3-URKd_*00kQ2^-of87;7Y~oKunB~XBBy_& z=9+zfte5@6=NaY&U`}eO11#(!!ltya31M0YqO=Pv?h@kO5+}7>F0xPwp`qVU-W0r+4VQ=sk1hC;?~Ac*iFFp^z;Q@=k|D!5a>Gg`hVSyeN7vN#Z3bI3|Wd zfvIzy-a}#UcwjOtN+EA>I_wQhUG`4~1aI(?DEY%dgiZ!7h_*2DJ{t&!&IiWBIdNA+ zWINRy_WCC$gIAE)8x~P%e^?B$oI~OzKe7=+HZ>d-7eudrO7LD%KLjumidRuF)G0U> z>a_igI%dGfryY|4RLws*Dxz9|je_{rvx_EpNQpJTh{+wPjDw$VjIG_*#9<(RGMgmm9?ZM6L5h{>5RH3YQ@U&SB)VdoKmiy=Nz{c}KnKxDaG?=Cbw~>1@%``u0%j z;3XR4{z>n+sc&qbWFr-t}sz*=EfxgK#Absept@lCK2$ z>(hF_Af!#0QGs()Y2#RMGRR&RFZ$DZA#fQ^Fr3zjZ>25clfj@wLArC{wBcMBVW!Em zsJoc9u=fQqj1bgIoJ#8^frH8SR$6~CD8QMXOzWn^wBb_Vl9<+C3SLQ@BqcF>v&52| z*cuWq2IQ*fL(^x|#&BR#5Yx6R=P_qOm#9P|YU2;5%`{ogiBj4y<-aJVO`))axu3SE zlRRxdI~g3iFnU%z7nn+0Wk8$~(gm0OQow(9QdFWG8ceZP$$v$OFq4$DR|AHVFQ(pFTGb4)`b2dNDYj z=G)SIN1E@7=(@Vnd~2FtAJMhq^_4XLMw&mJ=3COdFU@~B&Cf)1yLLr%^}EviZl5)x z+YL`|MAwTK{&%MNo-`j#^X+MVXQWVVyO39qf|o9df^-6eWK0p1;N>_2{u=PNasbW| zj)!0u?G}#dj1}85B!d;!0 z#i`3(lYz5cGA-WJxnW~h2!p2sgXe<(oEYkwpjBsMm%PGUx|X)~o)f2tRPUCCQQq(4 zFH{BRKXAXi&c)p)63xeB_1`YKU2&^oe#7l*fWHb+GrV0_&#!75T6*bkr4r62vYBYQebIT-&;c01VRh`O#%j%SZhx!Uqy7FA+Bx@Fma>RNJ za$&9S1U^ik$sR!$Hfer+80?_@2>LKn01zY?!VV>v6O7>k&2I|3HNQDrr1>pjkLI_A zOEteOOtof@U=KJZs590)QGAKYW(;yZ$3Vo*=8`u!PHY5C!AJq7QVuL_MIMoI4NaS? zUPc=tr3(7m@N9}ppfGH0kmtCTVr_VtRtC*uT1=D#B}x%%f<1_442GAcI{2Zmcr_ex zDadN1uOMA0iI>6Dh@;v>1!r*lNdLg-zT?M^^$!eKp3Msa;vV zC`x0KBlhPwTR!Fkal4sczo_KQwy%!Ow$4o?P4$^7r*WM$ zilVV{(Zoy}hv>CxN@`?c0(dkf>Am*JPD7HQBnPmx$(Y5(bcNnVe)8v|5*|zvKGJZC z5eQ1aTU)Rs9_CB`}(+HJ!@1}=BhTO?`CaE+QHm)D%(;MTH63cd9th6szDXn z7n}xJq!BbVeetX)(Ri8?uP`Dvb{?|Q7?Z?EkOGd(r*(QE+Ch*DgluRDlIO;!!49K! zLHfigCNcrtuL^P)u}CQTFUrg~+H?f9O52ojM!`Io#{*LWWHt;?*2+0cYQY#)aa2JL zNnb@;lAS}eP+#YsSvZI5oyd}_KH;j5txvjIl6GI*;FHIs9SnskSV^?lt!hhJ30Yfy z2kR!<5}^F#wmvJlz5sVk zuG(szCs%ECS8{y;?zsM(9&?hL(71qXeqY@k)lHOSVb!++=2+APaK=#-kg0GsCI zxTY%Ni41F8hgven{Z@6#lTND>jWG5IdZkV;z+PLYaE+QesuK*K7**N^)tr7zca9Wu zApbM^s2 zGsdB~fM&%H9Z3jkk#R4>>>P+#-+aS65+1pHx;0V;J;9q%$j!S(27SIa-W(YueZuM1 zA#k;3g-4Oep-XxNpCG+T4x6zaRn7rdB!x$1Y9NV-PZ!BD+Ny{EMU-d~+N!tNIEtyJG=^3SE8UR z>F8!ynKHN2biF^*$XSY)%q~agne7wur9Irmq`^ErJ>QP!?co!iQE4CmI!OE3j?QirTLkefG5ZfIl!fEs2qdeWZbu7beLc z2+@S{o*8;xId{ezfFOd&CJOS3^$KY$&t7AbP0?qP0yA_8s;lv9-V0N~E6^8`UJt55 z8enPjMW_xTu%`86lOgFWDmgGlD~<%^lJ9RGCE3{htbi9TWN$&HAIj6L&ZpOoy(ZG^14~W zJC0OU?X2M^mU4ONG|}Xo3POQ|IYMfhh&?QJ4g_U3bk)~rJPB>8GNxFoJpz;mG@8D8 z&4Vx3sS4}2dG$;G09fp!z$<)*{PX18f%Du4Qa`Q!Ksf|k&$1=}azsJVQbBE^pmsj| zLG(^^;nl@2B@1@PExXx=`W$Jr6Mf+5XxcV93cVM|EBubp(YL1klS+(vbW{kAjgCsh zG^F*QeQ6%LvLVRs(rp$5(wnv%SG0rDcM*1vlbN{J;g@cy&i@Bb=ruTB=bq|xMoY%V zy~GdlPxS_4U8<}y!`}7lJ}SLi8gJQ|sPAPVPpr-rBQP=!-neHzl;QAN@c&@q-o*Xl zdqD<1=y*nTwBz`f2byK3fzq^lurX^hU%_UnI^& zc_zm3*FdbIJS3R5C_h1|);xkv(5tIFM*Esr0uicqLr&~D9pyjBT{HNMk^4hXM0)*- zpyEI04@~92Bw)y!5-Jlu<_GD4t{bfTS?psl@gm#AVR_GlSIFuEn4q)1{&X3|N8AE?hC(mQ* z07Wq@7Uy3_kdgAi19#31?b`2E9tA-zS0l1Sd;j#TcZ5)JCqPGb&(digOrYef;=3+u2>$y^0^W>QHd|X`2${4zJg_*;cw{j z3B*~!R#Cc^sY+Kx2`PPoywKD{OJp&XO%WQIUhj3*zDy|^sn0g=sDJ8OXD^iN{>jkp zPEC2*M6FKj?k{Dt3S7YJ1&9`^l+A%+Ld(XYAvfA`(Rkb{6Kaq=1>C%6URIE$S zD14QLx{=C>6s#_{kqV)O`ZH zl(H9m?Qq7x8yn|~S3o-(GbX38WWG4V;T7|&&?{4`Gwz5rWH`JQ8lTaN!=25L9crL4?f13}}!p5Hb3ydndLL}zZ1=K827h$t&TEZ4z zSfgX$aL&G>^UP#9>f@lXHk;$Kfv)>))J5pDC#yjKO%<_ga_nXLn$b= zoCQ^#gm;BMTe0xQniUgo^khsHP>1!;IJ{&ULy5-lr#+gq(~ex$5CWZO$fw{DO-yb9 z7nWBBvandgi((<~5PxO`e`W(|A>PamKdc=E3;a&8K!L!espD$cCD=r8bb=k+oC8>H z;1FSQ!e1zq3I$@366=EGRV=tg3o!E6k$nO3DMVV2g6RNU1h_=Ww;29Xp-k}LU8dle zfKvjv{F>cYE`5qtjQmxfLa<~i10^Gv4Ve;R6_=&AYXNam2zh&$5Y%&q4Tv)%L={0b z83n|KbO?0ueDDfwx-ioKFV+u*qAFA~5N2v&k{6KKMKOH7=M0VBGpK?0oNR1>O?#z2 z{_~<=kc;ptQ^`vP0GCw+)HDQQ4N=jL>|p*O^_)=<&nRM{l{PCGftT9wu}q>FGiZZ{ z<1|U?pCE7*U##uG=E{ay?V8%Hh$ZsH9wtX>xkvSgqx{)Jy7*B|hZ%Nh;kumtKD{cL z0aqhYVX!RnljYTUNU1)G^LgE zzIR6lq}mwNXtZ$zGagqJrSE# z%pJ8j{jK~q(hQ?BYt}DDnx3maTe1eJ{;D{$F18s8?zpAp`Snt(!+BI>)yT;!cdHA< zRX$YB^rzZ5L2~8Er?<}Pwx_iP#wh(UQb?bX!@7;}{KXYhwM@e;SCdKNz>Xd_rM9Q8LT>V`}k`I=m+^dAzDvcoyamM5O3rWIEXiGYq*0ZlEaX z&*0=TWia4D`iMLCTPWmB`WRx#u}@`jkb-f^QkAe&&G-MrBJYLfALs)6o_t0U;DhoG zIJR-1ksl;i9;kn)*YFU}0z#ue5SFpkhrTO28Vp`gdydGnOpiMu_z-!JM_d9v1Q4M} zTZ5B=ysJz`6(I;{tCdCu7(`uI-4qmZmYRa(K?o1=BzqGy+dF7Y((Y?Q!RD zETe&Od5fFrZ{)AW*A7Y3;u)s?IRJ4V9}WvvX&G5d&wnM23uLqUE0w^j^p&MZ2P)wz zz8Sp{o!<|#yx@tuI^vcN`NMLnuFZf}gnrRT`65ao)#s-m`L?y`JLm!3kUiu_BjuNl ze$#>`)mXVOk#_bV4~Oc{zEx`VT!|>Pfy)|BHFA=NEv$vvw5m_7HP5}yYI}vds(+ok z0?kS!dNAl+!*i}3{~&LK(rIIyE)8SsPq5*Bb{dA$9oVby8K0gSQ<+&(AcA#e)>L41 zVQ2|tOa=iqreopBYcg+2`S`5zY@n4K7R*8DwZ?PgMR|h!OGHZlGdceh4ptpTbam3@ z+*u<%K-}6jp3RxjC=I5!5sfKh;|hvyj@%fT)xi|vX7BIyrmE^b=)KdsRMnNJ>Pl8^ znBD)*QK$jkMYGn7Q$b#G)+U^_9|jW6u8dCatXZyWi0%LA@ZH17x~@6Hw;h;>gg-0I zT7UV>%z5g6&hgF~l0t2_Y=7W*;wnUDW(55@M2e12%PRY}aG!3e*juFk=Y>4nRZE`6 zk^ckW{${@F#VP=S&*7-G2@}?MYgoW2p%`A;Vkr>kuJP(jOI)~*BzM;7%K9(;81-Xp z%+P?(EQ`5}w6U!d#*F<1VX*G|U&yzHH)GuyDa_>%7<>LL>aR{Dz+wTec<6(XJ0nXq z-HDp+Kk?l^l`MOS@y8_<^XuOI61+ATx@0vvxzvt$GNO1Z{{%UH5m9(CGZb3PSw1wn z$Os8CUiCQ<#*~t!hi2trm(7lhg&da3bAqBw9vuTM?_u87kHiSqb9;k3M0)u{~ zG7aHkIgZF!zOvOZ@m<~fhWr@$2-SaO?ea)>SaXb#nf|NT?xdZGa}aqIomW_HlWusm;06R&CoU>3z)=z_a zPz4}ftL(e7bK6elTyl&wfR=>ur3%ZeLd4V#aX#$D=2UjEp8;l86~=b;9&<;H~F z9}&nz#D5K6+5#(ZY?_9zN&g!~5bG}egq-h@lO~7pDF2px56Gc~M*5tb?~{|&?te-k zIeVzl{|+9~+39Id)nP1tQtV;-L}CK=o<;;fUURu`PTZK7FTN4Xm?^}<0jc#?>-^xY zt`#eVRP#n(yt0F~1AG~1{a)th8wq%sM{-j^23xk}b3;GJK0x`3UJb}tbjF7H^|VQV z#b||I8H>qSIw!7hcs+INjb(FV84j-)a>FZQGaEhg`!XC}u|8V97N!%8TUH3p6zPne z6o;3bTW7}NG8WCRU*YgtS!Xa-WgMl(%K1$h4zJjjXY`UAhMHs53PzNR(cSZCq%Weo zpcc8b8cFCus6w}7SauPrtwz~!gc5~c^B~l=CI}!x|DN;|Ind(0=0PY4vuhrN67#y| z8F#> z2*&?eoME{J8xtnH_*~LIKqb;{?VO8hTJ;SIF4iolK={;{-=&x$)hsF}Vipn7?@_EB zhiWd4vOGg+=Op+9aQF)7R&6gsbbM`UOiY(t5XDQQVHm~`hp3ucN~C#`-Xe!O4B`@T zZqgYzX(Rir)dD9JoMHLMnv?;~Cp0ZTf(Nt^hTEPcOH;zql!954r7>Y?WFB9_;$xoX zgr%8zS`wBP=FyO!$EizL>KIOa!cxyXt1^Unx7~Do-?M7YS+V4(PB^OP2a}Ha>;152 zzCN?u=v!z@Hg1huw!Y(-8%)4}ydT>V*N@7Q4C<>r>ZDj{LJ;i~=h`m`x?uy`FV=tE zGHjgXuJXesES83JfocYFbdXv-@>-v4EQC{I;c40}CS%!)e(3@+<9-}Oqq7N`jV*2K zG4om4+duEWEU%q%2YO)}HyO}2@rWL-n(Q=PNtwIS2XFI>iW@9XkFh$GBRW$v*1wLbm0nC?oiq~D%&2x+Jef0)S&D%|6hP2 zrK>+2T3D9bzov0OGxL|E*z?@Da^rXAL$QNNX3{UOIOcpy43!p|42EgTm-0_LmD0yV zviiX?^-F}Zjlh>=Mexr7OXU1H6+_K~ ztriBtf!&)4y7yDCW0K5(JJTk{35DbnZ{XJkzze;Hn4FFFy8zSX6Y{ZDc?tg`3NpSj zMZ1E=AsV={71M{5l7?Q+Qv7!Wl9Ql@KMW5x+MNYAU%&DCT$jA}LK>|1oPv1P%2pK;i& z)bhV|tK_fAZ`B59&jQr65GE5vY%TJWMMsWFXCU`*y1e2Nl~v`H93$yYZ{Kt{2-RVL zw*KTp&SNl+AlX8(^31`O53aZ4m;;Ofv1nflPAg~3i8PZI9tYWpTq_EhfuKshN%WB` zf<>QpAN{$-de7oq13L&$7F^k53bH!pm}*y)6B7c%Fy#&5RE8q?L#$HH+B4}Yk4Xn9 zdG+{P`A;Bgxr;$QZf^!gx%p2G<|BMrOg4}Vg8u7<8GTl|&7LRBD#Zj&)qmvRY0`4e z>B4+?8fTYt+AtrUHlf0m>Tu6nt~M#cwJ*f;sS||TuDGyvEGjLoV)`$itwo-jpCxah+iHN&+q*ZRJB#xB?^6`R&$HzNGqKoKf-x_0X9DT-Vf8yND`$O2x?YokMEen$+60RpD1Pj4!Fa+%a&D z5128xI@Gvp^0^`X48}iB4%H2?Q!i{)SS2G6hf6BQl}R|cD(!rWLhhmSe9C~ZT6$ik zK<>?Cs;psP$BGy$O2==~{IN7YD4j+=xfXr=Sft`8yGKSnvXC`f9s3*NG3$^5;zV%? zQ}XyfEc(cE*Yk<)2ZnowyH&~Jj<`c+@o{a+)E=fDj})}*Ink?K60ti{+A`7+9chdD zMnbI!hD(>IbVLmBMI$<&kKLgVF|cGuP+r8UrtqZ=QZN{fSXw$;_xO-Zq8adOOT*b~ z=cM5DrHHPxEn=4=Dbu!yK04CzYeNIJRU-P9PG6+*Sb$x5qv|siVcr||pNkmfBs$c^ zs^t->)Cx!aAoFLd+!m=`lN;ic9UiD_BUbt}+#1v9i@4O{z)GqK=p2COkTVz@I(2B^VA`%8m8YlzIqLX{{!@KJ$4^N& zse+_8k^TcY|B;-Zk@LTk^M8=@f0FZ`;G_)`5V4u8Cj}``Ba;(#

1cykjf?S{br5 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 Z{hTBBS1TtW*6v_tQh!i{{c6~y959L literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/loaders.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/loaders.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2381821fbedff6b04971af7a47e4a537ed7657ac GIT binary patch literal 32283 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/nodes.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/nodes.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eea4bc335600bfb51189e8b07b3545b58e659729 GIT binary patch literal 58227 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/optimizer.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/optimizer.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40f56dcc4011524e295e4a46ec15c1c2767bd207 GIT binary patch literal 2697 zcmaJ@Uu+!38K2qP+xzFUo%oEMgu+NMn4`&E5(sKB3QdB6q_U|LzvL=dHn(&3p7(Z+ znK}RCsG=$o&O=KqflMSsQdEhcfSN~mLhUOrxM>w@1yZDn2i^{xiijt^nZ320$S~5* zd^7XS_viP0-^_lI&u0;|@mGs=VIlNCHHjO{b=!C!hE?RE3UaY)__$)Y3D@)!4YOim z1a#6*Hmr(;5jE<)-Ba5JZUK+wryH3{2KZCdtQWRzcS$$xX58$~do|0=T`(&-1HFLU zo(ss$Q|o#nI#}shG>W~>KQKa5GnBBV^cvn0#G(dfF(N*UY5x7jDwd>qv_KF#AmEYS^;OiuT(4Bf>BB4 z8J`7*BEzF?>S|_@o!8#ZICGRZ1i-0LP60h-JuMLhvS5BoTOY9kFb)wE+;xdq1fLfG zd`h$0d?6VJ(F)(#f8O$`C}qD@0i6660*8t?Oa{!Q0*JmzAf~tz2!#^mu#_7Q<~+`V z2G|jriZRU5ttGBfHMBUDEgn=2CAQnthRTzTKS8&Oq|&8Z8(;6zZy2(hNeI==cz<4c%4bLl z0vRj4YMjnG#90FEoTGRlaTK7jtZ8qK2Bo4EW?qWZKg57k71EU}pF&fC8YbsF;mKlx zr(lgMcf!nO!3YHdX!!BfvdRw8geoXEIjhsE6lITlEx|o8d(h?nLCKgu>&bEn^v;!i z?_9aLC}&vkMCtI6GN_;j;qN5Ay+->d=R#!>2`P&CaXw9=lYw_rbSu2C) zXEpCUT1cEl^SGFp@y7Ao@nh(p#|BOeCjM2x&=*aO%+io7 zDc4xw_xDh5r&msQ z5{e#u?8DaIS`q!5-+rF_EUD?+nclbdUflab5_rBt&_z|OgckE*%C=or1+y)=sD3RX z3nP=mluk0nxr%$3pE~=8ar@+p<0pTAYVrk*k$yKL&lHyWruqm)3Zfh4nFyC-{1EIb z$HWA5odm}CJ0p$FjRL|0-=Kl7(a7zD`R22Ke)engv5sZpqnD1ZKE3iZgcBdVHlc@4 Z>F4#&>JVjo^iJ;}E?nySKY~H4`w1rdi6;O6 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/parser.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/parser.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd01f90f4e428e792a89282e5881d511ee6fccfc GIT binary patch literal 61188 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 K80gGE;{O8xPH>9S4L6P$I?451=H%l*2eq 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Š@e z3JpIo2!F>!M777^HYtYBs}6Y0gJU9vA6kr|GA6PIE&1mJU^xQcFh^nX2OidvXm#G!=+;0l%uy9@Bz&dhz?;;^i<( znX7q*13X6H6ud(f{}CMi>wnIDZgN;1>2j{5V(NIhkSnUZ^wi8#tL}>R(Tcl1<*r{X zs$3~*OcgaEaVatr$u#@ixb6lT|KFmqegiAOWr8|l1kErc55$>d7Qa+ zCe2ZLu}O<>1U``72N;!oWLaZzy3}cPVW2(Nz>APv5Z5S5S30fttX4Io%@ntHXmRJh z_s+a?MoV`e`CaFSoh<#S({-t0ree*Cw&_Z{)i+;7o%j~JS(NS8_YwcM*56yHXJ5Ls z+PZJGto%ynWniInbIY5@t{q$G))s%^p;R-J2UHOHs+p?Uk}DOLE9RWZlC3G{wlyni z(tAs-_snH@Dv}GQ(;TA3lkYwL&f_;uesJdfGdGVX4?dFW>|LXZbekhPStJ*OX>6qH zMws@~l`e0`&@=0XB$jsKt%)03KWKly{pRV9nr=RkI?$Wibz+S}W%>!;jiHs*rmcwK zU{_pnDKV2s+bQSJb56>+ILxx;a!a~^a)q3$fL7}(H*$33!?R%p zgVx9A7|3BE({(ZJjlB0LZm>asYaEk&IM-Qs$WL3d?l8tj{gVWwiJc5)V%N9s(>J~P ze@fTab|8YVdD~MyGsYeW7R1G#WzT`tvg*&uybDbW@ujl8NzdM-W3P5gx!5fw|7#l0 zUs3QT1$3dXyF-%?{~cvVD0rWOe~%!SSO10zDR_;Bun&o^Uj(lPWg49 zhNUNZULHUy-w(38sA9t3o5aY}Q3UzU~Tm}d{TjF{uuqxsGJ7?57GYVlJy z?8MUI>u*>eAgy)I&MDDM_Lx$`i8_NH7%G9`_VNol4`gTfdWu^uubQ^J;?%ugQjTqN z`<5Kr*q%cTHhzA~#J6=1ku*s&{@4C1g7tyeAJ$L5P}n0ua{=bv$ZMbmanX+(AXUfhNfeD7!&)}$c~$J z(Wjr2$Uj3-FK(7s5$Eu1qG1gi+0a=l7W_5MkI3gmZq?$@S`Z5FevQpDSA!!cP;Ib- zVC^(b!cNbLlw$|7AQ;2XMcD6B6`5#6CX7(*$#n@jfx?u2)s}%Ficwu7?1%59)X5~< zXvT$t9N$uzc2sp`9Wpgl&n|1eq_Uf!NSjdY^bY!1K$aJ&h!h%`R9cx>9<(GVDJ3jL z>dNy}K^lWhOj~}Kf?f(vAiyuZv|n;l%Xg`uC{v)H9FNgJJ5$=vIQ|PYwa_T!e@jU- z+)tRhA@eO{Kjo0w4S5o^?B^Oxz+*QeJ7(I3tluQnalfV(9+Lk%z-ZHz|Ai3NbDsag zWa2Gr4vsJW16TM5uJjYm_X$_`30MCK*Zc{$f3l%7$<=MlwC-ATC7bU{a$6z)Itwoq z%@lp?DEY$VbQi6e3-GgOYY}uN0aYuG+LWUfmA6WJmK;aZR_H+>da9^PIqFcM7CsJx z7r|IjRm3?pR4zhQNW~r$ceWqrO;hgar!S4oj6q8pyF51c^c&}|o}UlADP5DUUR((L z`rKRRZZxHQOyjD0;AUB}>PX7d0|}ltrTh6p-ZKjo0MVSZMp3%K#k;2iX%5kB*BV9X z+HL$+;7weGmWAX(H;WdJtWhrg5MRlc%=2$ruUXR^lB9wlTI^e+=+2%2Grw={zB?Sn qcaGX!d}p%x-aA0td8gLH*Ur`4;Sk+v=6Pqbarfc_Uvfw>()>TS(J!9> literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/tests.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/tests.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1c1643d71d1edd92c2771c7d4c1d5341a8d850b GIT binary patch literal 9058 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 literal 0 HcmV?d00001 diff --git a/.venv/lib/python3.12/site-packages/jinja2/__pycache__/utils.cpython-312.pyc b/.venv/lib/python3.12/site-packages/jinja2/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c979576bfa6b19bee510e0614916e53da057bb4e GIT binary patch literal 34806 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 bool: + return t.cast(bool, args[0].is_async) + + else: + + def is_async(args: t.Any) -> bool: + return t.cast(bool, args[0].environment.is_async) + + # Take the doc and annotations from the sync function, but the + # name from the async function. Pallets-Sphinx-Themes + # build_function_directive expects __wrapped__ to point to the + # sync function. + async_func_attrs = ("__module__", "__name__", "__qualname__") + normal_func_attrs = tuple(set(WRAPPER_ASSIGNMENTS).difference(async_func_attrs)) + + @wraps(normal_func, assigned=normal_func_attrs) + @wraps(async_func, assigned=async_func_attrs, updated=()) + def wrapper(*args, **kwargs): # type: ignore + b = is_async(args) + + if need_eval_context: + args = args[1:] + + if b: + return async_func(*args, **kwargs) + + return normal_func(*args, **kwargs) + + if need_eval_context: + wrapper = pass_eval_context(wrapper) + + wrapper.jinja_async_variant = True # type: ignore[attr-defined] + return wrapper + + return decorator + + +_common_primitives = {int, float, bool, str, list, dict, tuple, type(None)} + + +async def auto_await(value: t.Union[t.Awaitable["V"], "V"]) -> "V": + # Avoid a costly call to isawaitable + if type(value) in _common_primitives: + return t.cast("V", value) + + if inspect.isawaitable(value): + return await t.cast("t.Awaitable[V]", value) + + return value + + +class _IteratorToAsyncIterator(t.Generic[V]): + def __init__(self, iterator: "t.Iterator[V]"): + self._iterator = iterator + + def __aiter__(self) -> "te.Self": + return self + + async def __anext__(self) -> V: + try: + return next(self._iterator) + except StopIteration as e: + raise StopAsyncIteration(e.value) from e + + +def auto_aiter( + iterable: "t.Union[t.AsyncIterable[V], t.Iterable[V]]", +) -> "t.AsyncIterator[V]": + if hasattr(iterable, "__aiter__"): + return iterable.__aiter__() + else: + return _IteratorToAsyncIterator(iter(iterable)) + + +async def auto_to_list( + value: "t.Union[t.AsyncIterable[V], t.Iterable[V]]", +) -> t.List["V"]: + return [x async for x in auto_aiter(value)] diff --git a/.venv/lib/python3.12/site-packages/jinja2/bccache.py b/.venv/lib/python3.12/site-packages/jinja2/bccache.py new file mode 100644 index 0000000..ada8b09 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2/bccache.py @@ -0,0 +1,408 @@ +"""The optional bytecode cache system. This is useful if you have very +complex template situations and the compilation of all those templates +slows down your application too much. + +Situations where this is useful are often forking web applications that +are initialized on the first request. +""" + +import errno +import fnmatch +import marshal +import os +import pickle +import stat +import sys +import tempfile +import typing as t +from hashlib import sha1 +from io import BytesIO +from types import CodeType + +if t.TYPE_CHECKING: + import typing_extensions as te + + from .environment import Environment + + class _MemcachedClient(te.Protocol): + def get(self, key: str) -> bytes: ... + + def set( + self, key: str, value: bytes, timeout: t.Optional[int] = None + ) -> None: ... + + +bc_version = 5 +# Magic bytes to identify Jinja bytecode cache files. Contains the +# Python major and minor version to avoid loading incompatible bytecode +# if a project upgrades its Python version. +bc_magic = ( + b"j2" + + pickle.dumps(bc_version, 2) + + pickle.dumps((sys.version_info[0] << 24) | sys.version_info[1], 2) +) + + +class Bucket: + """Buckets are used to store the bytecode for one template. It's created + and initialized by the bytecode cache and passed to the loading functions. + + The buckets get an internal checksum from the cache assigned and use this + to automatically reject outdated cache material. Individual bytecode + cache subclasses don't have to care about cache invalidation. + """ + + def __init__(self, environment: "Environment", key: str, checksum: str) -> None: + self.environment = environment + self.key = key + self.checksum = checksum + self.reset() + + def reset(self) -> None: + """Resets the bucket (unloads the bytecode).""" + self.code: t.Optional[CodeType] = None + + def load_bytecode(self, f: t.BinaryIO) -> None: + """Loads bytecode from a file or file like object.""" + # make sure the magic header is correct + magic = f.read(len(bc_magic)) + if magic != bc_magic: + self.reset() + return + # the source code of the file changed, we need to reload + checksum = pickle.load(f) + if self.checksum != checksum: + self.reset() + return + # if marshal_load fails then we need to reload + try: + self.code = marshal.load(f) + except (EOFError, ValueError, TypeError): + self.reset() + return + + def write_bytecode(self, f: t.IO[bytes]) -> None: + """Dump the bytecode into the file or file like object passed.""" + if self.code is None: + raise TypeError("can't write empty bucket") + f.write(bc_magic) + pickle.dump(self.checksum, f, 2) + marshal.dump(self.code, f) + + def bytecode_from_string(self, string: bytes) -> None: + """Load bytecode from bytes.""" + self.load_bytecode(BytesIO(string)) + + def bytecode_to_string(self) -> bytes: + """Return the bytecode as bytes.""" + out = BytesIO() + self.write_bytecode(out) + return out.getvalue() + + +class BytecodeCache: + """To implement your own bytecode cache you have to subclass this class + and override :meth:`load_bytecode` and :meth:`dump_bytecode`. Both of + these methods are passed a :class:`~jinja2.bccache.Bucket`. + + A very basic bytecode cache that saves the bytecode on the file system:: + + from os import path + + class MyCache(BytecodeCache): + + def __init__(self, directory): + self.directory = directory + + def load_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + if path.exists(filename): + with open(filename, 'rb') as f: + bucket.load_bytecode(f) + + def dump_bytecode(self, bucket): + filename = path.join(self.directory, bucket.key) + with open(filename, 'wb') as f: + bucket.write_bytecode(f) + + A more advanced version of a filesystem based bytecode cache is part of + Jinja. + """ + + def load_bytecode(self, bucket: Bucket) -> None: + """Subclasses have to override this method to load bytecode into a + bucket. If they are not able to find code in the cache for the + bucket, it must not do anything. + """ + raise NotImplementedError() + + def dump_bytecode(self, bucket: Bucket) -> None: + """Subclasses have to override this method to write the bytecode + from a bucket back to the cache. If it unable to do so it must not + fail silently but raise an exception. + """ + raise NotImplementedError() + + def clear(self) -> None: + """Clears the cache. This method is not used by Jinja but should be + implemented to allow applications to clear the bytecode cache used + by a particular environment. + """ + + def get_cache_key( + self, name: str, filename: t.Optional[t.Union[str]] = None + ) -> str: + """Returns the unique hash key for this template name.""" + hash = sha1(name.encode("utf-8")) + + if filename is not None: + hash.update(f"|{filename}".encode()) + + return hash.hexdigest() + + def get_source_checksum(self, source: str) -> str: + """Returns a checksum for the source.""" + return sha1(source.encode("utf-8")).hexdigest() + + def get_bucket( + self, + environment: "Environment", + name: str, + filename: t.Optional[str], + source: str, + ) -> Bucket: + """Return a cache bucket for the given template. All arguments are + mandatory but filename may be `None`. + """ + key = self.get_cache_key(name, filename) + checksum = self.get_source_checksum(source) + bucket = Bucket(environment, key, checksum) + self.load_bytecode(bucket) + return bucket + + def set_bucket(self, bucket: Bucket) -> None: + """Put the bucket into the cache.""" + self.dump_bytecode(bucket) + + +class FileSystemBytecodeCache(BytecodeCache): + """A bytecode cache that stores bytecode on the filesystem. It accepts + two arguments: The directory where the cache items are stored and a + pattern string that is used to build the filename. + + If no directory is specified a default cache directory is selected. On + Windows the user's temp directory is used, on UNIX systems a directory + is created for the user in the system temp directory. + + The pattern can be used to have multiple separate caches operate on the + same directory. The default pattern is ``'__jinja2_%s.cache'``. ``%s`` + is replaced with the cache key. + + >>> bcc = FileSystemBytecodeCache('/tmp/jinja_cache', '%s.cache') + + This bytecode cache supports clearing of the cache using the clear method. + """ + + def __init__( + self, directory: t.Optional[str] = None, pattern: str = "__jinja2_%s.cache" + ) -> None: + if directory is None: + directory = self._get_default_cache_dir() + self.directory = directory + self.pattern = pattern + + def _get_default_cache_dir(self) -> str: + def _unsafe_dir() -> "te.NoReturn": + raise RuntimeError( + "Cannot determine safe temp directory. You " + "need to explicitly provide one." + ) + + tmpdir = tempfile.gettempdir() + + # On windows the temporary directory is used specific unless + # explicitly forced otherwise. We can just use that. + if os.name == "nt": + return tmpdir + if not hasattr(os, "getuid"): + _unsafe_dir() + + dirname = f"_jinja2-cache-{os.getuid()}" + actual_dir = os.path.join(tmpdir, dirname) + + try: + os.mkdir(actual_dir, stat.S_IRWXU) + except OSError as e: + if e.errno != errno.EEXIST: + raise + try: + os.chmod(actual_dir, stat.S_IRWXU) + actual_dir_stat = os.lstat(actual_dir) + if ( + actual_dir_stat.st_uid != os.getuid() + or not stat.S_ISDIR(actual_dir_stat.st_mode) + or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU + ): + _unsafe_dir() + except OSError as e: + if e.errno != errno.EEXIST: + raise + + actual_dir_stat = os.lstat(actual_dir) + if ( + actual_dir_stat.st_uid != os.getuid() + or not stat.S_ISDIR(actual_dir_stat.st_mode) + or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU + ): + _unsafe_dir() + + return actual_dir + + def _get_cache_filename(self, bucket: Bucket) -> str: + return os.path.join(self.directory, self.pattern % (bucket.key,)) + + def load_bytecode(self, bucket: Bucket) -> None: + filename = self._get_cache_filename(bucket) + + # Don't test for existence before opening the file, since the + # file could disappear after the test before the open. + try: + f = open(filename, "rb") + except (FileNotFoundError, IsADirectoryError, PermissionError): + # PermissionError can occur on Windows when an operation is + # in progress, such as calling clear(). + return + + with f: + bucket.load_bytecode(f) + + def dump_bytecode(self, bucket: Bucket) -> None: + # Write to a temporary file, then rename to the real name after + # writing. This avoids another process reading the file before + # it is fully written. + name = self._get_cache_filename(bucket) + f = tempfile.NamedTemporaryFile( + mode="wb", + dir=os.path.dirname(name), + prefix=os.path.basename(name), + suffix=".tmp", + delete=False, + ) + + def remove_silent() -> None: + try: + os.remove(f.name) + except OSError: + # Another process may have called clear(). On Windows, + # another program may be holding the file open. + pass + + try: + with f: + bucket.write_bytecode(f) + except BaseException: + remove_silent() + raise + + try: + os.replace(f.name, name) + except OSError: + # Another process may have called clear(). On Windows, + # another program may be holding the file open. + remove_silent() + except BaseException: + remove_silent() + raise + + def clear(self) -> None: + # imported lazily here because google app-engine doesn't support + # write access on the file system and the function does not exist + # normally. + from os import remove + + files = fnmatch.filter(os.listdir(self.directory), self.pattern % ("*",)) + for filename in files: + try: + remove(os.path.join(self.directory, filename)) + except OSError: + pass + + +class MemcachedBytecodeCache(BytecodeCache): + """This class implements a bytecode cache that uses a memcache cache for + storing the information. It does not enforce a specific memcache library + (tummy's memcache or cmemcache) but will accept any class that provides + the minimal interface required. + + Libraries compatible with this class: + + - `cachelib `_ + - `python-memcached `_ + + (Unfortunately the django cache interface is not compatible because it + does not support storing binary data, only text. You can however pass + the underlying cache client to the bytecode cache which is available + as `django.core.cache.cache._client`.) + + The minimal interface for the client passed to the constructor is this: + + .. class:: MinimalClientInterface + + .. method:: set(key, value[, timeout]) + + Stores the bytecode in the cache. `value` is a string and + `timeout` the timeout of the key. If timeout is not provided + a default timeout or no timeout should be assumed, if it's + provided it's an integer with the number of seconds the cache + item should exist. + + .. method:: get(key) + + Returns the value for the cache key. If the item does not + exist in the cache the return value must be `None`. + + The other arguments to the constructor are the prefix for all keys that + is added before the actual cache key and the timeout for the bytecode in + the cache system. We recommend a high (or no) timeout. + + This bytecode cache does not support clearing of used items in the cache. + The clear method is a no-operation function. + + .. versionadded:: 2.7 + Added support for ignoring memcache errors through the + `ignore_memcache_errors` parameter. + """ + + def __init__( + self, + client: "_MemcachedClient", + prefix: str = "jinja2/bytecode/", + timeout: t.Optional[int] = None, + ignore_memcache_errors: bool = True, + ): + self.client = client + self.prefix = prefix + self.timeout = timeout + self.ignore_memcache_errors = ignore_memcache_errors + + def load_bytecode(self, bucket: Bucket) -> None: + try: + code = self.client.get(self.prefix + bucket.key) + except Exception: + if not self.ignore_memcache_errors: + raise + else: + bucket.bytecode_from_string(code) + + def dump_bytecode(self, bucket: Bucket) -> None: + key = self.prefix + bucket.key + value = bucket.bytecode_to_string() + + try: + if self.timeout is not None: + self.client.set(key, value, self.timeout) + else: + self.client.set(key, value) + except Exception: + if not self.ignore_memcache_errors: + raise diff --git a/.venv/lib/python3.12/site-packages/jinja2/compiler.py b/.venv/lib/python3.12/site-packages/jinja2/compiler.py new file mode 100644 index 0000000..a4ff6a1 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2/compiler.py @@ -0,0 +1,1998 @@ +"""Compiles nodes from the parser into Python code.""" + +import typing as t +from contextlib import contextmanager +from functools import update_wrapper +from io import StringIO +from itertools import chain +from keyword import iskeyword as is_python_keyword + +from markupsafe import escape +from markupsafe import Markup + +from . import nodes +from .exceptions import TemplateAssertionError +from .idtracking import Symbols +from .idtracking import VAR_LOAD_ALIAS +from .idtracking import VAR_LOAD_PARAMETER +from .idtracking import VAR_LOAD_RESOLVE +from .idtracking import VAR_LOAD_UNDEFINED +from .nodes import EvalContext +from .optimizer import Optimizer +from .utils import _PassArg +from .utils import concat +from .visitor import NodeVisitor + +if t.TYPE_CHECKING: + import typing_extensions as te + + from .environment import Environment + +F = t.TypeVar("F", bound=t.Callable[..., t.Any]) + +operators = { + "eq": "==", + "ne": "!=", + "gt": ">", + "gteq": ">=", + "lt": "<", + "lteq": "<=", + "in": "in", + "notin": "not in", +} + + +def optimizeconst(f: F) -> F: + def new_func( + self: "CodeGenerator", node: nodes.Expr, frame: "Frame", **kwargs: t.Any + ) -> t.Any: + # Only optimize if the frame is not volatile + if self.optimizer is not None and not frame.eval_ctx.volatile: + new_node = self.optimizer.visit(node, frame.eval_ctx) + + if new_node != node: + return self.visit(new_node, frame) + + return f(self, node, frame, **kwargs) + + return update_wrapper(new_func, f) # type: ignore[return-value] + + +def _make_binop(op: str) -> t.Callable[["CodeGenerator", nodes.BinExpr, "Frame"], None]: + @optimizeconst + def visitor(self: "CodeGenerator", node: nodes.BinExpr, frame: Frame) -> None: + if ( + self.environment.sandboxed and op in self.environment.intercepted_binops # type: ignore + ): + self.write(f"environment.call_binop(context, {op!r}, ") + self.visit(node.left, frame) + self.write(", ") + self.visit(node.right, frame) + else: + self.write("(") + self.visit(node.left, frame) + self.write(f" {op} ") + self.visit(node.right, frame) + + self.write(")") + + return visitor + + +def _make_unop( + op: str, +) -> t.Callable[["CodeGenerator", nodes.UnaryExpr, "Frame"], None]: + @optimizeconst + def visitor(self: "CodeGenerator", node: nodes.UnaryExpr, frame: Frame) -> None: + if ( + self.environment.sandboxed and op in self.environment.intercepted_unops # type: ignore + ): + self.write(f"environment.call_unop(context, {op!r}, ") + self.visit(node.node, frame) + else: + self.write("(" + op) + self.visit(node.node, frame) + + self.write(")") + + return visitor + + +def generate( + node: nodes.Template, + environment: "Environment", + name: t.Optional[str], + filename: t.Optional[str], + stream: t.Optional[t.TextIO] = None, + defer_init: bool = False, + optimized: bool = True, +) -> t.Optional[str]: + """Generate the python source for a node tree.""" + if not isinstance(node, nodes.Template): + raise TypeError("Can't compile non template nodes") + + generator = environment.code_generator_class( + environment, name, filename, stream, defer_init, optimized + ) + generator.visit(node) + + if stream is None: + return generator.stream.getvalue() # type: ignore + + return None + + +def has_safe_repr(value: t.Any) -> bool: + """Does the node have a safe representation?""" + if value is None or value is NotImplemented or value is Ellipsis: + return True + + if type(value) in {bool, int, float, complex, range, str, Markup}: + return True + + if type(value) in {tuple, list, set, frozenset}: + return all(has_safe_repr(v) for v in value) + + if type(value) is dict: # noqa E721 + return all(has_safe_repr(k) and has_safe_repr(v) for k, v in value.items()) + + return False + + +def find_undeclared( + nodes: t.Iterable[nodes.Node], names: t.Iterable[str] +) -> t.Set[str]: + """Check if the names passed are accessed undeclared. The return value + is a set of all the undeclared names from the sequence of names found. + """ + visitor = UndeclaredNameVisitor(names) + try: + for node in nodes: + visitor.visit(node) + except VisitorExit: + pass + return visitor.undeclared + + +class MacroRef: + def __init__(self, node: t.Union[nodes.Macro, nodes.CallBlock]) -> None: + self.node = node + self.accesses_caller = False + self.accesses_kwargs = False + self.accesses_varargs = False + + +class Frame: + """Holds compile time information for us.""" + + def __init__( + self, + eval_ctx: EvalContext, + parent: t.Optional["Frame"] = None, + level: t.Optional[int] = None, + ) -> None: + self.eval_ctx = eval_ctx + + # the parent of this frame + self.parent = parent + + if parent is None: + self.symbols = Symbols(level=level) + + # in some dynamic inheritance situations the compiler needs to add + # write tests around output statements. + self.require_output_check = False + + # inside some tags we are using a buffer rather than yield statements. + # this for example affects {% filter %} or {% macro %}. If a frame + # is buffered this variable points to the name of the list used as + # buffer. + self.buffer: t.Optional[str] = None + + # the name of the block we're in, otherwise None. + self.block: t.Optional[str] = None + + else: + self.symbols = Symbols(parent.symbols, level=level) + self.require_output_check = parent.require_output_check + self.buffer = parent.buffer + self.block = parent.block + + # a toplevel frame is the root + soft frames such as if conditions. + self.toplevel = False + + # the root frame is basically just the outermost frame, so no if + # conditions. This information is used to optimize inheritance + # situations. + self.rootlevel = False + + # variables set inside of loops and blocks should not affect outer frames, + # but they still needs to be kept track of as part of the active context. + self.loop_frame = False + self.block_frame = False + + # track whether the frame is being used in an if-statement or conditional + # expression as it determines which errors should be raised during runtime + # or compile time. + self.soft_frame = False + + def copy(self) -> "te.Self": + """Create a copy of the current one.""" + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.symbols = self.symbols.copy() + return rv + + def inner(self, isolated: bool = False) -> "Frame": + """Return an inner frame.""" + if isolated: + return Frame(self.eval_ctx, level=self.symbols.level + 1) + return Frame(self.eval_ctx, self) + + def soft(self) -> "te.Self": + """Return a soft frame. A soft frame may not be modified as + standalone thing as it shares the resources with the frame it + was created of, but it's not a rootlevel frame any longer. + + This is only used to implement if-statements and conditional + expressions. + """ + rv = self.copy() + rv.rootlevel = False + rv.soft_frame = True + return rv + + __copy__ = copy + + +class VisitorExit(RuntimeError): + """Exception used by the `UndeclaredNameVisitor` to signal a stop.""" + + +class DependencyFinderVisitor(NodeVisitor): + """A visitor that collects filter and test calls.""" + + def __init__(self) -> None: + self.filters: t.Set[str] = set() + self.tests: t.Set[str] = set() + + def visit_Filter(self, node: nodes.Filter) -> None: + self.generic_visit(node) + self.filters.add(node.name) + + def visit_Test(self, node: nodes.Test) -> None: + self.generic_visit(node) + self.tests.add(node.name) + + def visit_Block(self, node: nodes.Block) -> None: + """Stop visiting at blocks.""" + + +class UndeclaredNameVisitor(NodeVisitor): + """A visitor that checks if a name is accessed without being + declared. This is different from the frame visitor as it will + not stop at closure frames. + """ + + def __init__(self, names: t.Iterable[str]) -> None: + self.names = set(names) + self.undeclared: t.Set[str] = set() + + def visit_Name(self, node: nodes.Name) -> None: + if node.ctx == "load" and node.name in self.names: + self.undeclared.add(node.name) + if self.undeclared == self.names: + raise VisitorExit() + else: + self.names.discard(node.name) + + def visit_Block(self, node: nodes.Block) -> None: + """Stop visiting a blocks.""" + + +class CompilerExit(Exception): + """Raised if the compiler encountered a situation where it just + doesn't make sense to further process the code. Any block that + raises such an exception is not further processed. + """ + + +class CodeGenerator(NodeVisitor): + def __init__( + self, + environment: "Environment", + name: t.Optional[str], + filename: t.Optional[str], + stream: t.Optional[t.TextIO] = None, + defer_init: bool = False, + optimized: bool = True, + ) -> None: + if stream is None: + stream = StringIO() + self.environment = environment + self.name = name + self.filename = filename + self.stream = stream + self.created_block_context = False + self.defer_init = defer_init + self.optimizer: t.Optional[Optimizer] = None + + if optimized: + self.optimizer = Optimizer(environment) + + # aliases for imports + self.import_aliases: t.Dict[str, str] = {} + + # a registry for all blocks. Because blocks are moved out + # into the global python scope they are registered here + self.blocks: t.Dict[str, nodes.Block] = {} + + # the number of extends statements so far + self.extends_so_far = 0 + + # some templates have a rootlevel extends. In this case we + # can safely assume that we're a child template and do some + # more optimizations. + self.has_known_extends = False + + # the current line number + self.code_lineno = 1 + + # registry of all filters and tests (global, not block local) + self.tests: t.Dict[str, str] = {} + self.filters: t.Dict[str, str] = {} + + # the debug information + self.debug_info: t.List[t.Tuple[int, int]] = [] + self._write_debug_info: t.Optional[int] = None + + # the number of new lines before the next write() + self._new_lines = 0 + + # the line number of the last written statement + self._last_line = 0 + + # true if nothing was written so far. + self._first_write = True + + # used by the `temporary_identifier` method to get new + # unique, temporary identifier + self._last_identifier = 0 + + # the current indentation + self._indentation = 0 + + # Tracks toplevel assignments + self._assign_stack: t.List[t.Set[str]] = [] + + # Tracks parameter definition blocks + self._param_def_block: t.List[t.Set[str]] = [] + + # Tracks the current context. + self._context_reference_stack = ["context"] + + @property + def optimized(self) -> bool: + return self.optimizer is not None + + # -- Various compilation helpers + + def fail(self, msg: str, lineno: int) -> "te.NoReturn": + """Fail with a :exc:`TemplateAssertionError`.""" + raise TemplateAssertionError(msg, lineno, self.name, self.filename) + + def temporary_identifier(self) -> str: + """Get a new unique identifier.""" + self._last_identifier += 1 + return f"t_{self._last_identifier}" + + def buffer(self, frame: Frame) -> None: + """Enable buffering for the frame from that point onwards.""" + frame.buffer = self.temporary_identifier() + self.writeline(f"{frame.buffer} = []") + + def return_buffer_contents( + self, frame: Frame, force_unescaped: bool = False + ) -> None: + """Return the buffer contents of the frame.""" + if not force_unescaped: + if frame.eval_ctx.volatile: + self.writeline("if context.eval_ctx.autoescape:") + self.indent() + self.writeline(f"return Markup(concat({frame.buffer}))") + self.outdent() + self.writeline("else:") + self.indent() + self.writeline(f"return concat({frame.buffer})") + self.outdent() + return + elif frame.eval_ctx.autoescape: + self.writeline(f"return Markup(concat({frame.buffer}))") + return + self.writeline(f"return concat({frame.buffer})") + + def indent(self) -> None: + """Indent by one.""" + self._indentation += 1 + + def outdent(self, step: int = 1) -> None: + """Outdent by step.""" + self._indentation -= step + + def start_write(self, frame: Frame, node: t.Optional[nodes.Node] = None) -> None: + """Yield or write into the frame buffer.""" + if frame.buffer is None: + self.writeline("yield ", node) + else: + self.writeline(f"{frame.buffer}.append(", node) + + def end_write(self, frame: Frame) -> None: + """End the writing process started by `start_write`.""" + if frame.buffer is not None: + self.write(")") + + def simple_write( + self, s: str, frame: Frame, node: t.Optional[nodes.Node] = None + ) -> None: + """Simple shortcut for start_write + write + end_write.""" + self.start_write(frame, node) + self.write(s) + self.end_write(frame) + + def blockvisit(self, nodes: t.Iterable[nodes.Node], frame: Frame) -> None: + """Visit a list of nodes as block in a frame. If the current frame + is no buffer a dummy ``if 0: yield None`` is written automatically. + """ + try: + self.writeline("pass") + for node in nodes: + self.visit(node, frame) + except CompilerExit: + pass + + def write(self, x: str) -> None: + """Write a string into the output stream.""" + if self._new_lines: + if not self._first_write: + self.stream.write("\n" * self._new_lines) + self.code_lineno += self._new_lines + if self._write_debug_info is not None: + self.debug_info.append((self._write_debug_info, self.code_lineno)) + self._write_debug_info = None + self._first_write = False + self.stream.write(" " * self._indentation) + self._new_lines = 0 + self.stream.write(x) + + def writeline( + self, x: str, node: t.Optional[nodes.Node] = None, extra: int = 0 + ) -> None: + """Combination of newline and write.""" + self.newline(node, extra) + self.write(x) + + def newline(self, node: t.Optional[nodes.Node] = None, extra: int = 0) -> None: + """Add one or more newlines before the next write.""" + self._new_lines = max(self._new_lines, 1 + extra) + if node is not None and node.lineno != self._last_line: + self._write_debug_info = node.lineno + self._last_line = node.lineno + + def signature( + self, + node: t.Union[nodes.Call, nodes.Filter, nodes.Test], + frame: Frame, + extra_kwargs: t.Optional[t.Mapping[str, t.Any]] = None, + ) -> None: + """Writes a function call to the stream for the current node. + A leading comma is added automatically. The extra keyword + arguments may not include python keywords otherwise a syntax + error could occur. The extra keyword arguments should be given + as python dict. + """ + # if any of the given keyword arguments is a python keyword + # we have to make sure that no invalid call is created. + kwarg_workaround = any( + is_python_keyword(t.cast(str, k)) + for k in chain((x.key for x in node.kwargs), extra_kwargs or ()) + ) + + for arg in node.args: + self.write(", ") + self.visit(arg, frame) + + if not kwarg_workaround: + for kwarg in node.kwargs: + self.write(", ") + self.visit(kwarg, frame) + if extra_kwargs is not None: + for key, value in extra_kwargs.items(): + self.write(f", {key}={value}") + if node.dyn_args: + self.write(", *") + self.visit(node.dyn_args, frame) + + if kwarg_workaround: + if node.dyn_kwargs is not None: + self.write(", **dict({") + else: + self.write(", **{") + for kwarg in node.kwargs: + self.write(f"{kwarg.key!r}: ") + self.visit(kwarg.value, frame) + self.write(", ") + if extra_kwargs is not None: + for key, value in extra_kwargs.items(): + self.write(f"{key!r}: {value}, ") + if node.dyn_kwargs is not None: + self.write("}, **") + self.visit(node.dyn_kwargs, frame) + self.write(")") + else: + self.write("}") + + elif node.dyn_kwargs is not None: + self.write(", **") + self.visit(node.dyn_kwargs, frame) + + def pull_dependencies(self, nodes: t.Iterable[nodes.Node]) -> None: + """Find all filter and test names used in the template and + assign them to variables in the compiled namespace. Checking + that the names are registered with the environment is done when + compiling the Filter and Test nodes. If the node is in an If or + CondExpr node, the check is done at runtime instead. + + .. versionchanged:: 3.0 + Filters and tests in If and CondExpr nodes are checked at + runtime instead of compile time. + """ + visitor = DependencyFinderVisitor() + + for node in nodes: + visitor.visit(node) + + for id_map, names, dependency in ( + (self.filters, visitor.filters, "filters"), + ( + self.tests, + visitor.tests, + "tests", + ), + ): + for name in sorted(names): + if name not in id_map: + id_map[name] = self.temporary_identifier() + + # add check during runtime that dependencies used inside of executed + # blocks are defined, as this step may be skipped during compile time + self.writeline("try:") + self.indent() + self.writeline(f"{id_map[name]} = environment.{dependency}[{name!r}]") + self.outdent() + self.writeline("except KeyError:") + self.indent() + self.writeline("@internalcode") + self.writeline(f"def {id_map[name]}(*unused):") + self.indent() + self.writeline( + f'raise TemplateRuntimeError("No {dependency[:-1]}' + f' named {name!r} found.")' + ) + self.outdent() + self.outdent() + + def enter_frame(self, frame: Frame) -> None: + undefs = [] + for target, (action, param) in frame.symbols.loads.items(): + if action == VAR_LOAD_PARAMETER: + pass + elif action == VAR_LOAD_RESOLVE: + self.writeline(f"{target} = {self.get_resolve_func()}({param!r})") + elif action == VAR_LOAD_ALIAS: + self.writeline(f"{target} = {param}") + elif action == VAR_LOAD_UNDEFINED: + undefs.append(target) + else: + raise NotImplementedError("unknown load instruction") + if undefs: + self.writeline(f"{' = '.join(undefs)} = missing") + + def leave_frame(self, frame: Frame, with_python_scope: bool = False) -> None: + if not with_python_scope: + undefs = [] + for target in frame.symbols.loads: + undefs.append(target) + if undefs: + self.writeline(f"{' = '.join(undefs)} = missing") + + def choose_async(self, async_value: str = "async ", sync_value: str = "") -> str: + return async_value if self.environment.is_async else sync_value + + def func(self, name: str) -> str: + return f"{self.choose_async()}def {name}" + + def macro_body( + self, node: t.Union[nodes.Macro, nodes.CallBlock], frame: Frame + ) -> t.Tuple[Frame, MacroRef]: + """Dump the function def of a macro or call block.""" + frame = frame.inner() + frame.symbols.analyze_node(node) + macro_ref = MacroRef(node) + + explicit_caller = None + skip_special_params = set() + args = [] + + for idx, arg in enumerate(node.args): + if arg.name == "caller": + explicit_caller = idx + if arg.name in ("kwargs", "varargs"): + skip_special_params.add(arg.name) + args.append(frame.symbols.ref(arg.name)) + + undeclared = find_undeclared(node.body, ("caller", "kwargs", "varargs")) + + if "caller" in undeclared: + # In older Jinja versions there was a bug that allowed caller + # to retain the special behavior even if it was mentioned in + # the argument list. However thankfully this was only really + # working if it was the last argument. So we are explicitly + # checking this now and error out if it is anywhere else in + # the argument list. + if explicit_caller is not None: + try: + node.defaults[explicit_caller - len(node.args)] + except IndexError: + self.fail( + "When defining macros or call blocks the " + 'special "caller" argument must be omitted ' + "or be given a default.", + node.lineno, + ) + else: + args.append(frame.symbols.declare_parameter("caller")) + macro_ref.accesses_caller = True + if "kwargs" in undeclared and "kwargs" not in skip_special_params: + args.append(frame.symbols.declare_parameter("kwargs")) + macro_ref.accesses_kwargs = True + if "varargs" in undeclared and "varargs" not in skip_special_params: + args.append(frame.symbols.declare_parameter("varargs")) + macro_ref.accesses_varargs = True + + # macros are delayed, they never require output checks + frame.require_output_check = False + frame.symbols.analyze_node(node) + self.writeline(f"{self.func('macro')}({', '.join(args)}):", node) + self.indent() + + self.buffer(frame) + self.enter_frame(frame) + + self.push_parameter_definitions(frame) + for idx, arg in enumerate(node.args): + ref = frame.symbols.ref(arg.name) + self.writeline(f"if {ref} is missing:") + self.indent() + try: + default = node.defaults[idx - len(node.args)] + except IndexError: + self.writeline( + f'{ref} = undefined("parameter {arg.name!r} was not provided",' + f" name={arg.name!r})" + ) + else: + self.writeline(f"{ref} = ") + self.visit(default, frame) + self.mark_parameter_stored(ref) + self.outdent() + self.pop_parameter_definitions() + + self.blockvisit(node.body, frame) + self.return_buffer_contents(frame, force_unescaped=True) + self.leave_frame(frame, with_python_scope=True) + self.outdent() + + return frame, macro_ref + + def macro_def(self, macro_ref: MacroRef, frame: Frame) -> None: + """Dump the macro definition for the def created by macro_body.""" + arg_tuple = ", ".join(repr(x.name) for x in macro_ref.node.args) + name = getattr(macro_ref.node, "name", None) + if len(macro_ref.node.args) == 1: + arg_tuple += "," + self.write( + f"Macro(environment, macro, {name!r}, ({arg_tuple})," + f" {macro_ref.accesses_kwargs!r}, {macro_ref.accesses_varargs!r}," + f" {macro_ref.accesses_caller!r}, context.eval_ctx.autoescape)" + ) + + def position(self, node: nodes.Node) -> str: + """Return a human readable position for the node.""" + rv = f"line {node.lineno}" + if self.name is not None: + rv = f"{rv} in {self.name!r}" + return rv + + def dump_local_context(self, frame: Frame) -> str: + items_kv = ", ".join( + f"{name!r}: {target}" + for name, target in frame.symbols.dump_stores().items() + ) + return f"{{{items_kv}}}" + + def write_commons(self) -> None: + """Writes a common preamble that is used by root and block functions. + Primarily this sets up common local helpers and enforces a generator + through a dead branch. + """ + self.writeline("resolve = context.resolve_or_missing") + self.writeline("undefined = environment.undefined") + self.writeline("concat = environment.concat") + # always use the standard Undefined class for the implicit else of + # conditional expressions + self.writeline("cond_expr_undefined = Undefined") + self.writeline("if 0: yield None") + + def push_parameter_definitions(self, frame: Frame) -> None: + """Pushes all parameter targets from the given frame into a local + stack that permits tracking of yet to be assigned parameters. In + particular this enables the optimization from `visit_Name` to skip + undefined expressions for parameters in macros as macros can reference + otherwise unbound parameters. + """ + self._param_def_block.append(frame.symbols.dump_param_targets()) + + def pop_parameter_definitions(self) -> None: + """Pops the current parameter definitions set.""" + self._param_def_block.pop() + + def mark_parameter_stored(self, target: str) -> None: + """Marks a parameter in the current parameter definitions as stored. + This will skip the enforced undefined checks. + """ + if self._param_def_block: + self._param_def_block[-1].discard(target) + + def push_context_reference(self, target: str) -> None: + self._context_reference_stack.append(target) + + def pop_context_reference(self) -> None: + self._context_reference_stack.pop() + + def get_context_ref(self) -> str: + return self._context_reference_stack[-1] + + def get_resolve_func(self) -> str: + target = self._context_reference_stack[-1] + if target == "context": + return "resolve" + return f"{target}.resolve" + + def derive_context(self, frame: Frame) -> str: + return f"{self.get_context_ref()}.derived({self.dump_local_context(frame)})" + + def parameter_is_undeclared(self, target: str) -> bool: + """Checks if a given target is an undeclared parameter.""" + if not self._param_def_block: + return False + return target in self._param_def_block[-1] + + def push_assign_tracking(self) -> None: + """Pushes a new layer for assignment tracking.""" + self._assign_stack.append(set()) + + def pop_assign_tracking(self, frame: Frame) -> None: + """Pops the topmost level for assignment tracking and updates the + context variables if necessary. + """ + vars = self._assign_stack.pop() + if ( + not frame.block_frame + and not frame.loop_frame + and not frame.toplevel + or not vars + ): + return + public_names = [x for x in vars if x[:1] != "_"] + if len(vars) == 1: + name = next(iter(vars)) + ref = frame.symbols.ref(name) + if frame.loop_frame: + self.writeline(f"_loop_vars[{name!r}] = {ref}") + return + if frame.block_frame: + self.writeline(f"_block_vars[{name!r}] = {ref}") + return + self.writeline(f"context.vars[{name!r}] = {ref}") + else: + if frame.loop_frame: + self.writeline("_loop_vars.update({") + elif frame.block_frame: + self.writeline("_block_vars.update({") + else: + self.writeline("context.vars.update({") + for idx, name in enumerate(sorted(vars)): + if idx: + self.write(", ") + ref = frame.symbols.ref(name) + self.write(f"{name!r}: {ref}") + self.write("})") + if not frame.block_frame and not frame.loop_frame and public_names: + if len(public_names) == 1: + self.writeline(f"context.exported_vars.add({public_names[0]!r})") + else: + names_str = ", ".join(map(repr, sorted(public_names))) + self.writeline(f"context.exported_vars.update(({names_str}))") + + # -- Statement Visitors + + def visit_Template( + self, node: nodes.Template, frame: t.Optional[Frame] = None + ) -> None: + assert frame is None, "no root frame allowed" + eval_ctx = EvalContext(self.environment, self.name) + + from .runtime import async_exported + from .runtime import exported + + if self.environment.is_async: + exported_names = sorted(exported + async_exported) + else: + exported_names = sorted(exported) + + self.writeline("from jinja2.runtime import " + ", ".join(exported_names)) + + # if we want a deferred initialization we cannot move the + # environment into a local name + envenv = "" if self.defer_init else ", environment=environment" + + # do we have an extends tag at all? If not, we can save some + # overhead by just not processing any inheritance code. + have_extends = node.find(nodes.Extends) is not None + + # find all blocks + for block in node.find_all(nodes.Block): + if block.name in self.blocks: + self.fail(f"block {block.name!r} defined twice", block.lineno) + self.blocks[block.name] = block + + # find all imports and import them + for import_ in node.find_all(nodes.ImportedName): + if import_.importname not in self.import_aliases: + imp = import_.importname + self.import_aliases[imp] = alias = self.temporary_identifier() + if "." in imp: + module, obj = imp.rsplit(".", 1) + self.writeline(f"from {module} import {obj} as {alias}") + else: + self.writeline(f"import {imp} as {alias}") + + # add the load name + self.writeline(f"name = {self.name!r}") + + # generate the root render function. + self.writeline( + f"{self.func('root')}(context, missing=missing{envenv}):", extra=1 + ) + self.indent() + self.write_commons() + + # process the root + frame = Frame(eval_ctx) + if "self" in find_undeclared(node.body, ("self",)): + ref = frame.symbols.declare_parameter("self") + self.writeline(f"{ref} = TemplateReference(context)") + frame.symbols.analyze_node(node) + frame.toplevel = frame.rootlevel = True + frame.require_output_check = have_extends and not self.has_known_extends + if have_extends: + self.writeline("parent_template = None") + self.enter_frame(frame) + self.pull_dependencies(node.body) + self.blockvisit(node.body, frame) + self.leave_frame(frame, with_python_scope=True) + self.outdent() + + # make sure that the parent root is called. + if have_extends: + if not self.has_known_extends: + self.indent() + self.writeline("if parent_template is not None:") + self.indent() + if not self.environment.is_async: + self.writeline("yield from parent_template.root_render_func(context)") + else: + self.writeline("agen = parent_template.root_render_func(context)") + self.writeline("try:") + self.indent() + self.writeline("async for event in agen:") + self.indent() + self.writeline("yield event") + self.outdent() + self.outdent() + self.writeline("finally: await agen.aclose()") + self.outdent(1 + (not self.has_known_extends)) + + # at this point we now have the blocks collected and can visit them too. + for name, block in self.blocks.items(): + self.writeline( + f"{self.func('block_' + name)}(context, missing=missing{envenv}):", + block, + 1, + ) + self.indent() + self.write_commons() + # It's important that we do not make this frame a child of the + # toplevel template. This would cause a variety of + # interesting issues with identifier tracking. + block_frame = Frame(eval_ctx) + block_frame.block_frame = True + undeclared = find_undeclared(block.body, ("self", "super")) + if "self" in undeclared: + ref = block_frame.symbols.declare_parameter("self") + self.writeline(f"{ref} = TemplateReference(context)") + if "super" in undeclared: + ref = block_frame.symbols.declare_parameter("super") + self.writeline(f"{ref} = context.super({name!r}, block_{name})") + block_frame.symbols.analyze_node(block) + block_frame.block = name + self.writeline("_block_vars = {}") + self.enter_frame(block_frame) + self.pull_dependencies(block.body) + self.blockvisit(block.body, block_frame) + self.leave_frame(block_frame, with_python_scope=True) + self.outdent() + + blocks_kv_str = ", ".join(f"{x!r}: block_{x}" for x in self.blocks) + self.writeline(f"blocks = {{{blocks_kv_str}}}", extra=1) + debug_kv_str = "&".join(f"{k}={v}" for k, v in self.debug_info) + self.writeline(f"debug_info = {debug_kv_str!r}") + + def visit_Block(self, node: nodes.Block, frame: Frame) -> None: + """Call a block and register it for the template.""" + level = 0 + if frame.toplevel: + # if we know that we are a child template, there is no need to + # check if we are one + if self.has_known_extends: + return + if self.extends_so_far > 0: + self.writeline("if parent_template is None:") + self.indent() + level += 1 + + if node.scoped: + context = self.derive_context(frame) + else: + context = self.get_context_ref() + + if node.required: + self.writeline(f"if len(context.blocks[{node.name!r}]) <= 1:", node) + self.indent() + self.writeline( + f'raise TemplateRuntimeError("Required block {node.name!r} not found")', + node, + ) + self.outdent() + + if not self.environment.is_async and frame.buffer is None: + self.writeline( + f"yield from context.blocks[{node.name!r}][0]({context})", node + ) + else: + self.writeline(f"gen = context.blocks[{node.name!r}][0]({context})") + self.writeline("try:") + self.indent() + self.writeline( + f"{self.choose_async()}for event in gen:", + node, + ) + self.indent() + self.simple_write("event", frame) + self.outdent() + self.outdent() + self.writeline( + f"finally: {self.choose_async('await gen.aclose()', 'gen.close()')}" + ) + + self.outdent(level) + + def visit_Extends(self, node: nodes.Extends, frame: Frame) -> None: + """Calls the extender.""" + if not frame.toplevel: + self.fail("cannot use extend from a non top-level scope", node.lineno) + + # if the number of extends statements in general is zero so + # far, we don't have to add a check if something extended + # the template before this one. + if self.extends_so_far > 0: + # if we have a known extends we just add a template runtime + # error into the generated code. We could catch that at compile + # time too, but i welcome it not to confuse users by throwing the + # same error at different times just "because we can". + if not self.has_known_extends: + self.writeline("if parent_template is not None:") + self.indent() + self.writeline('raise TemplateRuntimeError("extended multiple times")') + + # if we have a known extends already we don't need that code here + # as we know that the template execution will end here. + if self.has_known_extends: + raise CompilerExit() + else: + self.outdent() + + self.writeline("parent_template = environment.get_template(", node) + self.visit(node.template, frame) + self.write(f", {self.name!r})") + self.writeline("for name, parent_block in parent_template.blocks.items():") + self.indent() + self.writeline("context.blocks.setdefault(name, []).append(parent_block)") + self.outdent() + + # if this extends statement was in the root level we can take + # advantage of that information and simplify the generated code + # in the top level from this point onwards + if frame.rootlevel: + self.has_known_extends = True + + # and now we have one more + self.extends_so_far += 1 + + def visit_Include(self, node: nodes.Include, frame: Frame) -> None: + """Handles includes.""" + if node.ignore_missing: + self.writeline("try:") + self.indent() + + func_name = "get_or_select_template" + if isinstance(node.template, nodes.Const): + if isinstance(node.template.value, str): + func_name = "get_template" + elif isinstance(node.template.value, (tuple, list)): + func_name = "select_template" + elif isinstance(node.template, (nodes.Tuple, nodes.List)): + func_name = "select_template" + + self.writeline(f"template = environment.{func_name}(", node) + self.visit(node.template, frame) + self.write(f", {self.name!r})") + if node.ignore_missing: + self.outdent() + self.writeline("except TemplateNotFound:") + self.indent() + self.writeline("pass") + self.outdent() + self.writeline("else:") + self.indent() + + def loop_body() -> None: + self.indent() + self.simple_write("event", frame) + self.outdent() + + if node.with_context: + self.writeline( + f"gen = template.root_render_func(" + "template.new_context(context.get_all(), True," + f" {self.dump_local_context(frame)}))" + ) + self.writeline("try:") + self.indent() + self.writeline(f"{self.choose_async()}for event in gen:") + loop_body() + self.outdent() + self.writeline( + f"finally: {self.choose_async('await gen.aclose()', 'gen.close()')}" + ) + elif self.environment.is_async: + self.writeline( + "for event in (await template._get_default_module_async())" + "._body_stream:" + ) + loop_body() + else: + self.writeline("yield from template._get_default_module()._body_stream") + + if node.ignore_missing: + self.outdent() + + def _import_common( + self, node: t.Union[nodes.Import, nodes.FromImport], frame: Frame + ) -> None: + self.write(f"{self.choose_async('await ')}environment.get_template(") + self.visit(node.template, frame) + self.write(f", {self.name!r}).") + + if node.with_context: + f_name = f"make_module{self.choose_async('_async')}" + self.write( + f"{f_name}(context.get_all(), True, {self.dump_local_context(frame)})" + ) + else: + self.write(f"_get_default_module{self.choose_async('_async')}(context)") + + def visit_Import(self, node: nodes.Import, frame: Frame) -> None: + """Visit regular imports.""" + self.writeline(f"{frame.symbols.ref(node.target)} = ", node) + if frame.toplevel: + self.write(f"context.vars[{node.target!r}] = ") + + self._import_common(node, frame) + + if frame.toplevel and not node.target.startswith("_"): + self.writeline(f"context.exported_vars.discard({node.target!r})") + + def visit_FromImport(self, node: nodes.FromImport, frame: Frame) -> None: + """Visit named imports.""" + self.newline(node) + self.write("included_template = ") + self._import_common(node, frame) + var_names = [] + discarded_names = [] + for name in node.names: + if isinstance(name, tuple): + name, alias = name + else: + alias = name + self.writeline( + f"{frame.symbols.ref(alias)} =" + f" getattr(included_template, {name!r}, missing)" + ) + self.writeline(f"if {frame.symbols.ref(alias)} is missing:") + self.indent() + # The position will contain the template name, and will be formatted + # into a string that will be compiled into an f-string. Curly braces + # in the name must be replaced with escapes so that they will not be + # executed as part of the f-string. + position = self.position(node).replace("{", "{{").replace("}", "}}") + message = ( + "the template {included_template.__name__!r}" + f" (imported on {position})" + f" does not export the requested name {name!r}" + ) + self.writeline( + f"{frame.symbols.ref(alias)} = undefined(f{message!r}, name={name!r})" + ) + self.outdent() + if frame.toplevel: + var_names.append(alias) + if not alias.startswith("_"): + discarded_names.append(alias) + + if var_names: + if len(var_names) == 1: + name = var_names[0] + self.writeline(f"context.vars[{name!r}] = {frame.symbols.ref(name)}") + else: + names_kv = ", ".join( + f"{name!r}: {frame.symbols.ref(name)}" for name in var_names + ) + self.writeline(f"context.vars.update({{{names_kv}}})") + if discarded_names: + if len(discarded_names) == 1: + self.writeline(f"context.exported_vars.discard({discarded_names[0]!r})") + else: + names_str = ", ".join(map(repr, discarded_names)) + self.writeline( + f"context.exported_vars.difference_update(({names_str}))" + ) + + def visit_For(self, node: nodes.For, frame: Frame) -> None: + loop_frame = frame.inner() + loop_frame.loop_frame = True + test_frame = frame.inner() + else_frame = frame.inner() + + # try to figure out if we have an extended loop. An extended loop + # is necessary if the loop is in recursive mode if the special loop + # variable is accessed in the body if the body is a scoped block. + extended_loop = ( + node.recursive + or "loop" + in find_undeclared(node.iter_child_nodes(only=("body",)), ("loop",)) + or any(block.scoped for block in node.find_all(nodes.Block)) + ) + + loop_ref = None + if extended_loop: + loop_ref = loop_frame.symbols.declare_parameter("loop") + + loop_frame.symbols.analyze_node(node, for_branch="body") + if node.else_: + else_frame.symbols.analyze_node(node, for_branch="else") + + if node.test: + loop_filter_func = self.temporary_identifier() + test_frame.symbols.analyze_node(node, for_branch="test") + self.writeline(f"{self.func(loop_filter_func)}(fiter):", node.test) + self.indent() + self.enter_frame(test_frame) + self.writeline(self.choose_async("async for ", "for ")) + self.visit(node.target, loop_frame) + self.write(" in ") + self.write(self.choose_async("auto_aiter(fiter)", "fiter")) + self.write(":") + self.indent() + self.writeline("if ", node.test) + self.visit(node.test, test_frame) + self.write(":") + self.indent() + self.writeline("yield ") + self.visit(node.target, loop_frame) + self.outdent(3) + self.leave_frame(test_frame, with_python_scope=True) + + # if we don't have an recursive loop we have to find the shadowed + # variables at that point. Because loops can be nested but the loop + # variable is a special one we have to enforce aliasing for it. + if node.recursive: + self.writeline( + f"{self.func('loop')}(reciter, loop_render_func, depth=0):", node + ) + self.indent() + self.buffer(loop_frame) + + # Use the same buffer for the else frame + else_frame.buffer = loop_frame.buffer + + # make sure the loop variable is a special one and raise a template + # assertion error if a loop tries to write to loop + if extended_loop: + self.writeline(f"{loop_ref} = missing") + + for name in node.find_all(nodes.Name): + if name.ctx == "store" and name.name == "loop": + self.fail( + "Can't assign to special loop variable in for-loop target", + name.lineno, + ) + + if node.else_: + iteration_indicator = self.temporary_identifier() + self.writeline(f"{iteration_indicator} = 1") + + self.writeline(self.choose_async("async for ", "for "), node) + self.visit(node.target, loop_frame) + if extended_loop: + self.write(f", {loop_ref} in {self.choose_async('Async')}LoopContext(") + else: + self.write(" in ") + + if node.test: + self.write(f"{loop_filter_func}(") + if node.recursive: + self.write("reciter") + else: + if self.environment.is_async and not extended_loop: + self.write("auto_aiter(") + self.visit(node.iter, frame) + if self.environment.is_async and not extended_loop: + self.write(")") + if node.test: + self.write(")") + + if node.recursive: + self.write(", undefined, loop_render_func, depth):") + else: + self.write(", undefined):" if extended_loop else ":") + + self.indent() + self.enter_frame(loop_frame) + + self.writeline("_loop_vars = {}") + self.blockvisit(node.body, loop_frame) + if node.else_: + self.writeline(f"{iteration_indicator} = 0") + self.outdent() + self.leave_frame( + loop_frame, with_python_scope=node.recursive and not node.else_ + ) + + if node.else_: + self.writeline(f"if {iteration_indicator}:") + self.indent() + self.enter_frame(else_frame) + self.blockvisit(node.else_, else_frame) + self.leave_frame(else_frame) + self.outdent() + + # if the node was recursive we have to return the buffer contents + # and start the iteration code + if node.recursive: + self.return_buffer_contents(loop_frame) + self.outdent() + self.start_write(frame, node) + self.write(f"{self.choose_async('await ')}loop(") + if self.environment.is_async: + self.write("auto_aiter(") + self.visit(node.iter, frame) + if self.environment.is_async: + self.write(")") + self.write(", loop)") + self.end_write(frame) + + # at the end of the iteration, clear any assignments made in the + # loop from the top level + if self._assign_stack: + self._assign_stack[-1].difference_update(loop_frame.symbols.stores) + + def visit_If(self, node: nodes.If, frame: Frame) -> None: + if_frame = frame.soft() + self.writeline("if ", node) + self.visit(node.test, if_frame) + self.write(":") + self.indent() + self.blockvisit(node.body, if_frame) + self.outdent() + for elif_ in node.elif_: + self.writeline("elif ", elif_) + self.visit(elif_.test, if_frame) + self.write(":") + self.indent() + self.blockvisit(elif_.body, if_frame) + self.outdent() + if node.else_: + self.writeline("else:") + self.indent() + self.blockvisit(node.else_, if_frame) + self.outdent() + + def visit_Macro(self, node: nodes.Macro, frame: Frame) -> None: + macro_frame, macro_ref = self.macro_body(node, frame) + self.newline() + if frame.toplevel: + if not node.name.startswith("_"): + self.write(f"context.exported_vars.add({node.name!r})") + self.writeline(f"context.vars[{node.name!r}] = ") + self.write(f"{frame.symbols.ref(node.name)} = ") + self.macro_def(macro_ref, macro_frame) + + def visit_CallBlock(self, node: nodes.CallBlock, frame: Frame) -> None: + call_frame, macro_ref = self.macro_body(node, frame) + self.writeline("caller = ") + self.macro_def(macro_ref, call_frame) + self.start_write(frame, node) + self.visit_Call(node.call, frame, forward_caller=True) + self.end_write(frame) + + def visit_FilterBlock(self, node: nodes.FilterBlock, frame: Frame) -> None: + filter_frame = frame.inner() + filter_frame.symbols.analyze_node(node) + self.enter_frame(filter_frame) + self.buffer(filter_frame) + self.blockvisit(node.body, filter_frame) + self.start_write(frame, node) + self.visit_Filter(node.filter, filter_frame) + self.end_write(frame) + self.leave_frame(filter_frame) + + def visit_With(self, node: nodes.With, frame: Frame) -> None: + with_frame = frame.inner() + with_frame.symbols.analyze_node(node) + self.enter_frame(with_frame) + for target, expr in zip(node.targets, node.values): + self.newline() + self.visit(target, with_frame) + self.write(" = ") + self.visit(expr, frame) + self.blockvisit(node.body, with_frame) + self.leave_frame(with_frame) + + def visit_ExprStmt(self, node: nodes.ExprStmt, frame: Frame) -> None: + self.newline(node) + self.visit(node.node, frame) + + class _FinalizeInfo(t.NamedTuple): + const: t.Optional[t.Callable[..., str]] + src: t.Optional[str] + + @staticmethod + def _default_finalize(value: t.Any) -> t.Any: + """The default finalize function if the environment isn't + configured with one. Or, if the environment has one, this is + called on that function's output for constants. + """ + return str(value) + + _finalize: t.Optional[_FinalizeInfo] = None + + def _make_finalize(self) -> _FinalizeInfo: + """Build the finalize function to be used on constants and at + runtime. Cached so it's only created once for all output nodes. + + Returns a ``namedtuple`` with the following attributes: + + ``const`` + A function to finalize constant data at compile time. + + ``src`` + Source code to output around nodes to be evaluated at + runtime. + """ + if self._finalize is not None: + return self._finalize + + finalize: t.Optional[t.Callable[..., t.Any]] + finalize = default = self._default_finalize + src = None + + if self.environment.finalize: + src = "environment.finalize(" + env_finalize = self.environment.finalize + pass_arg = { + _PassArg.context: "context", + _PassArg.eval_context: "context.eval_ctx", + _PassArg.environment: "environment", + }.get( + _PassArg.from_obj(env_finalize) # type: ignore + ) + finalize = None + + if pass_arg is None: + + def finalize(value: t.Any) -> t.Any: # noqa: F811 + return default(env_finalize(value)) + + else: + src = f"{src}{pass_arg}, " + + if pass_arg == "environment": + + def finalize(value: t.Any) -> t.Any: # noqa: F811 + return default(env_finalize(self.environment, value)) + + self._finalize = self._FinalizeInfo(finalize, src) + return self._finalize + + def _output_const_repr(self, group: t.Iterable[t.Any]) -> str: + """Given a group of constant values converted from ``Output`` + child nodes, produce a string to write to the template module + source. + """ + return repr(concat(group)) + + def _output_child_to_const( + self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo + ) -> str: + """Try to optimize a child of an ``Output`` node by trying to + convert it to constant, finalized data at compile time. + + If :exc:`Impossible` is raised, the node is not constant and + will be evaluated at runtime. Any other exception will also be + evaluated at runtime for easier debugging. + """ + const = node.as_const(frame.eval_ctx) + + if frame.eval_ctx.autoescape: + const = escape(const) + + # Template data doesn't go through finalize. + if isinstance(node, nodes.TemplateData): + return str(const) + + return finalize.const(const) # type: ignore + + def _output_child_pre( + self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo + ) -> None: + """Output extra source code before visiting a child of an + ``Output`` node. + """ + if frame.eval_ctx.volatile: + self.write("(escape if context.eval_ctx.autoescape else str)(") + elif frame.eval_ctx.autoescape: + self.write("escape(") + else: + self.write("str(") + + if finalize.src is not None: + self.write(finalize.src) + + def _output_child_post( + self, node: nodes.Expr, frame: Frame, finalize: _FinalizeInfo + ) -> None: + """Output extra source code after visiting a child of an + ``Output`` node. + """ + self.write(")") + + if finalize.src is not None: + self.write(")") + + def visit_Output(self, node: nodes.Output, frame: Frame) -> None: + # If an extends is active, don't render outside a block. + if frame.require_output_check: + # A top-level extends is known to exist at compile time. + if self.has_known_extends: + return + + self.writeline("if parent_template is None:") + self.indent() + + finalize = self._make_finalize() + body: t.List[t.Union[t.List[t.Any], nodes.Expr]] = [] + + # Evaluate constants at compile time if possible. Each item in + # body will be either a list of static data or a node to be + # evaluated at runtime. + for child in node.nodes: + try: + if not ( + # If the finalize function requires runtime context, + # constants can't be evaluated at compile time. + finalize.const + # Unless it's basic template data that won't be + # finalized anyway. + or isinstance(child, nodes.TemplateData) + ): + raise nodes.Impossible() + + const = self._output_child_to_const(child, frame, finalize) + except (nodes.Impossible, Exception): + # The node was not constant and needs to be evaluated at + # runtime. Or another error was raised, which is easier + # to debug at runtime. + body.append(child) + continue + + if body and isinstance(body[-1], list): + body[-1].append(const) + else: + body.append([const]) + + if frame.buffer is not None: + if len(body) == 1: + self.writeline(f"{frame.buffer}.append(") + else: + self.writeline(f"{frame.buffer}.extend((") + + self.indent() + + for item in body: + if isinstance(item, list): + # A group of constant data to join and output. + val = self._output_const_repr(item) + + if frame.buffer is None: + self.writeline("yield " + val) + else: + self.writeline(val + ",") + else: + if frame.buffer is None: + self.writeline("yield ", item) + else: + self.newline(item) + + # A node to be evaluated at runtime. + self._output_child_pre(item, frame, finalize) + self.visit(item, frame) + self._output_child_post(item, frame, finalize) + + if frame.buffer is not None: + self.write(",") + + if frame.buffer is not None: + self.outdent() + self.writeline(")" if len(body) == 1 else "))") + + if frame.require_output_check: + self.outdent() + + def visit_Assign(self, node: nodes.Assign, frame: Frame) -> None: + self.push_assign_tracking() + + # ``a.b`` is allowed for assignment, and is parsed as an NSRef. However, + # it is only valid if it references a Namespace object. Emit a check for + # that for each ref here, before assignment code is emitted. This can't + # be done in visit_NSRef as the ref could be in the middle of a tuple. + seen_refs: t.Set[str] = set() + + for nsref in node.find_all(nodes.NSRef): + if nsref.name in seen_refs: + # Only emit the check for each reference once, in case the same + # ref is used multiple times in a tuple, `ns.a, ns.b = c, d`. + continue + + seen_refs.add(nsref.name) + ref = frame.symbols.ref(nsref.name) + self.writeline(f"if not isinstance({ref}, Namespace):") + self.indent() + self.writeline( + "raise TemplateRuntimeError" + '("cannot assign attribute on non-namespace object")' + ) + self.outdent() + + self.newline(node) + self.visit(node.target, frame) + self.write(" = ") + self.visit(node.node, frame) + self.pop_assign_tracking(frame) + + def visit_AssignBlock(self, node: nodes.AssignBlock, frame: Frame) -> None: + self.push_assign_tracking() + block_frame = frame.inner() + # This is a special case. Since a set block always captures we + # will disable output checks. This way one can use set blocks + # toplevel even in extended templates. + block_frame.require_output_check = False + block_frame.symbols.analyze_node(node) + self.enter_frame(block_frame) + self.buffer(block_frame) + self.blockvisit(node.body, block_frame) + self.newline(node) + self.visit(node.target, frame) + self.write(" = (Markup if context.eval_ctx.autoescape else identity)(") + if node.filter is not None: + self.visit_Filter(node.filter, block_frame) + else: + self.write(f"concat({block_frame.buffer})") + self.write(")") + self.pop_assign_tracking(frame) + self.leave_frame(block_frame) + + # -- Expression Visitors + + def visit_Name(self, node: nodes.Name, frame: Frame) -> None: + if node.ctx == "store" and ( + frame.toplevel or frame.loop_frame or frame.block_frame + ): + if self._assign_stack: + self._assign_stack[-1].add(node.name) + ref = frame.symbols.ref(node.name) + + # If we are looking up a variable we might have to deal with the + # case where it's undefined. We can skip that case if the load + # instruction indicates a parameter which are always defined. + if node.ctx == "load": + load = frame.symbols.find_load(ref) + if not ( + load is not None + and load[0] == VAR_LOAD_PARAMETER + and not self.parameter_is_undeclared(ref) + ): + self.write( + f"(undefined(name={node.name!r}) if {ref} is missing else {ref})" + ) + return + + self.write(ref) + + def visit_NSRef(self, node: nodes.NSRef, frame: Frame) -> None: + # NSRef is a dotted assignment target a.b=c, but uses a[b]=c internally. + # visit_Assign emits code to validate that each ref is to a Namespace + # object only. That can't be emitted here as the ref could be in the + # middle of a tuple assignment. + ref = frame.symbols.ref(node.name) + self.writeline(f"{ref}[{node.attr!r}]") + + def visit_Const(self, node: nodes.Const, frame: Frame) -> None: + val = node.as_const(frame.eval_ctx) + if isinstance(val, float): + self.write(str(val)) + else: + self.write(repr(val)) + + def visit_TemplateData(self, node: nodes.TemplateData, frame: Frame) -> None: + try: + self.write(repr(node.as_const(frame.eval_ctx))) + except nodes.Impossible: + self.write( + f"(Markup if context.eval_ctx.autoescape else identity)({node.data!r})" + ) + + def visit_Tuple(self, node: nodes.Tuple, frame: Frame) -> None: + self.write("(") + idx = -1 + for idx, item in enumerate(node.items): + if idx: + self.write(", ") + self.visit(item, frame) + self.write(",)" if idx == 0 else ")") + + def visit_List(self, node: nodes.List, frame: Frame) -> None: + self.write("[") + for idx, item in enumerate(node.items): + if idx: + self.write(", ") + self.visit(item, frame) + self.write("]") + + def visit_Dict(self, node: nodes.Dict, frame: Frame) -> None: + self.write("{") + for idx, item in enumerate(node.items): + if idx: + self.write(", ") + self.visit(item.key, frame) + self.write(": ") + self.visit(item.value, frame) + self.write("}") + + visit_Add = _make_binop("+") + visit_Sub = _make_binop("-") + visit_Mul = _make_binop("*") + visit_Div = _make_binop("/") + visit_FloorDiv = _make_binop("//") + visit_Pow = _make_binop("**") + visit_Mod = _make_binop("%") + visit_And = _make_binop("and") + visit_Or = _make_binop("or") + visit_Pos = _make_unop("+") + visit_Neg = _make_unop("-") + visit_Not = _make_unop("not ") + + @optimizeconst + def visit_Concat(self, node: nodes.Concat, frame: Frame) -> None: + if frame.eval_ctx.volatile: + func_name = "(markup_join if context.eval_ctx.volatile else str_join)" + elif frame.eval_ctx.autoescape: + func_name = "markup_join" + else: + func_name = "str_join" + self.write(f"{func_name}((") + for arg in node.nodes: + self.visit(arg, frame) + self.write(", ") + self.write("))") + + @optimizeconst + def visit_Compare(self, node: nodes.Compare, frame: Frame) -> None: + self.write("(") + self.visit(node.expr, frame) + for op in node.ops: + self.visit(op, frame) + self.write(")") + + def visit_Operand(self, node: nodes.Operand, frame: Frame) -> None: + self.write(f" {operators[node.op]} ") + self.visit(node.expr, frame) + + @optimizeconst + def visit_Getattr(self, node: nodes.Getattr, frame: Frame) -> None: + if self.environment.is_async: + self.write("(await auto_await(") + + self.write("environment.getattr(") + self.visit(node.node, frame) + self.write(f", {node.attr!r})") + + if self.environment.is_async: + self.write("))") + + @optimizeconst + def visit_Getitem(self, node: nodes.Getitem, frame: Frame) -> None: + # slices bypass the environment getitem method. + if isinstance(node.arg, nodes.Slice): + self.visit(node.node, frame) + self.write("[") + self.visit(node.arg, frame) + self.write("]") + else: + if self.environment.is_async: + self.write("(await auto_await(") + + self.write("environment.getitem(") + self.visit(node.node, frame) + self.write(", ") + self.visit(node.arg, frame) + self.write(")") + + if self.environment.is_async: + self.write("))") + + def visit_Slice(self, node: nodes.Slice, frame: Frame) -> None: + if node.start is not None: + self.visit(node.start, frame) + self.write(":") + if node.stop is not None: + self.visit(node.stop, frame) + if node.step is not None: + self.write(":") + self.visit(node.step, frame) + + @contextmanager + def _filter_test_common( + self, node: t.Union[nodes.Filter, nodes.Test], frame: Frame, is_filter: bool + ) -> t.Iterator[None]: + if self.environment.is_async: + self.write("(await auto_await(") + + if is_filter: + self.write(f"{self.filters[node.name]}(") + func = self.environment.filters.get(node.name) + else: + self.write(f"{self.tests[node.name]}(") + func = self.environment.tests.get(node.name) + + # When inside an If or CondExpr frame, allow the filter to be + # undefined at compile time and only raise an error if it's + # actually called at runtime. See pull_dependencies. + if func is None and not frame.soft_frame: + type_name = "filter" if is_filter else "test" + self.fail(f"No {type_name} named {node.name!r}.", node.lineno) + + pass_arg = { + _PassArg.context: "context", + _PassArg.eval_context: "context.eval_ctx", + _PassArg.environment: "environment", + }.get( + _PassArg.from_obj(func) # type: ignore + ) + + if pass_arg is not None: + self.write(f"{pass_arg}, ") + + # Back to the visitor function to handle visiting the target of + # the filter or test. + yield + + self.signature(node, frame) + self.write(")") + + if self.environment.is_async: + self.write("))") + + @optimizeconst + def visit_Filter(self, node: nodes.Filter, frame: Frame) -> None: + with self._filter_test_common(node, frame, True): + # if the filter node is None we are inside a filter block + # and want to write to the current buffer + if node.node is not None: + self.visit(node.node, frame) + elif frame.eval_ctx.volatile: + self.write( + f"(Markup(concat({frame.buffer}))" + f" if context.eval_ctx.autoescape else concat({frame.buffer}))" + ) + elif frame.eval_ctx.autoescape: + self.write(f"Markup(concat({frame.buffer}))") + else: + self.write(f"concat({frame.buffer})") + + @optimizeconst + def visit_Test(self, node: nodes.Test, frame: Frame) -> None: + with self._filter_test_common(node, frame, False): + self.visit(node.node, frame) + + @optimizeconst + def visit_CondExpr(self, node: nodes.CondExpr, frame: Frame) -> None: + frame = frame.soft() + + def write_expr2() -> None: + if node.expr2 is not None: + self.visit(node.expr2, frame) + return + + self.write( + f'cond_expr_undefined("the inline if-expression on' + f" {self.position(node)} evaluated to false and no else" + f' section was defined.")' + ) + + self.write("(") + self.visit(node.expr1, frame) + self.write(" if ") + self.visit(node.test, frame) + self.write(" else ") + write_expr2() + self.write(")") + + @optimizeconst + def visit_Call( + self, node: nodes.Call, frame: Frame, forward_caller: bool = False + ) -> None: + if self.environment.is_async: + self.write("(await auto_await(") + if self.environment.sandboxed: + self.write("environment.call(context, ") + else: + self.write("context.call(") + self.visit(node.node, frame) + extra_kwargs = {"caller": "caller"} if forward_caller else None + loop_kwargs = {"_loop_vars": "_loop_vars"} if frame.loop_frame else {} + block_kwargs = {"_block_vars": "_block_vars"} if frame.block_frame else {} + if extra_kwargs: + extra_kwargs.update(loop_kwargs, **block_kwargs) + elif loop_kwargs or block_kwargs: + extra_kwargs = dict(loop_kwargs, **block_kwargs) + self.signature(node, frame, extra_kwargs) + self.write(")") + if self.environment.is_async: + self.write("))") + + def visit_Keyword(self, node: nodes.Keyword, frame: Frame) -> None: + self.write(node.key + "=") + self.visit(node.value, frame) + + # -- Unused nodes for extensions + + def visit_MarkSafe(self, node: nodes.MarkSafe, frame: Frame) -> None: + self.write("Markup(") + self.visit(node.expr, frame) + self.write(")") + + def visit_MarkSafeIfAutoescape( + self, node: nodes.MarkSafeIfAutoescape, frame: Frame + ) -> None: + self.write("(Markup if context.eval_ctx.autoescape else identity)(") + self.visit(node.expr, frame) + self.write(")") + + def visit_EnvironmentAttribute( + self, node: nodes.EnvironmentAttribute, frame: Frame + ) -> None: + self.write("environment." + node.name) + + def visit_ExtensionAttribute( + self, node: nodes.ExtensionAttribute, frame: Frame + ) -> None: + self.write(f"environment.extensions[{node.identifier!r}].{node.name}") + + def visit_ImportedName(self, node: nodes.ImportedName, frame: Frame) -> None: + self.write(self.import_aliases[node.importname]) + + def visit_InternalName(self, node: nodes.InternalName, frame: Frame) -> None: + self.write(node.name) + + def visit_ContextReference( + self, node: nodes.ContextReference, frame: Frame + ) -> None: + self.write("context") + + def visit_DerivedContextReference( + self, node: nodes.DerivedContextReference, frame: Frame + ) -> None: + self.write(self.derive_context(frame)) + + def visit_Continue(self, node: nodes.Continue, frame: Frame) -> None: + self.writeline("continue", node) + + def visit_Break(self, node: nodes.Break, frame: Frame) -> None: + self.writeline("break", node) + + def visit_Scope(self, node: nodes.Scope, frame: Frame) -> None: + scope_frame = frame.inner() + scope_frame.symbols.analyze_node(node) + self.enter_frame(scope_frame) + self.blockvisit(node.body, scope_frame) + self.leave_frame(scope_frame) + + def visit_OverlayScope(self, node: nodes.OverlayScope, frame: Frame) -> None: + ctx = self.temporary_identifier() + self.writeline(f"{ctx} = {self.derive_context(frame)}") + self.writeline(f"{ctx}.vars = ") + self.visit(node.context, frame) + self.push_context_reference(ctx) + + scope_frame = frame.inner(isolated=True) + scope_frame.symbols.analyze_node(node) + self.enter_frame(scope_frame) + self.blockvisit(node.body, scope_frame) + self.leave_frame(scope_frame) + self.pop_context_reference() + + def visit_EvalContextModifier( + self, node: nodes.EvalContextModifier, frame: Frame + ) -> None: + for keyword in node.options: + self.writeline(f"context.eval_ctx.{keyword.key} = ") + self.visit(keyword.value, frame) + try: + val = keyword.value.as_const(frame.eval_ctx) + except nodes.Impossible: + frame.eval_ctx.volatile = True + else: + setattr(frame.eval_ctx, keyword.key, val) + + def visit_ScopedEvalContextModifier( + self, node: nodes.ScopedEvalContextModifier, frame: Frame + ) -> None: + old_ctx_name = self.temporary_identifier() + saved_ctx = frame.eval_ctx.save() + self.writeline(f"{old_ctx_name} = context.eval_ctx.save()") + self.visit_EvalContextModifier(node, frame) + for child in node.body: + self.visit(child, frame) + frame.eval_ctx.revert(saved_ctx) + self.writeline(f"context.eval_ctx.revert({old_ctx_name})") diff --git a/.venv/lib/python3.12/site-packages/jinja2/constants.py b/.venv/lib/python3.12/site-packages/jinja2/constants.py new file mode 100644 index 0000000..41a1c23 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2/constants.py @@ -0,0 +1,20 @@ +#: list of lorem ipsum words used by the lipsum() helper function +LOREM_IPSUM_WORDS = """\ +a ac accumsan ad adipiscing aenean aliquam aliquet amet ante aptent arcu at +auctor augue bibendum blandit class commodo condimentum congue consectetuer +consequat conubia convallis cras cubilia cum curabitur curae cursus dapibus +diam dictum dictumst dignissim dis dolor donec dui duis egestas eget eleifend +elementum elit enim erat eros est et etiam eu euismod facilisi facilisis fames +faucibus felis fermentum feugiat fringilla fusce gravida habitant habitasse hac +hendrerit hymenaeos iaculis id imperdiet in inceptos integer interdum ipsum +justo lacinia lacus laoreet lectus leo libero ligula litora lobortis lorem +luctus maecenas magna magnis malesuada massa mattis mauris metus mi molestie +mollis montes morbi mus nam nascetur natoque nec neque netus nibh nisi nisl non +nonummy nostra nulla nullam nunc odio orci ornare parturient pede pellentesque +penatibus per pharetra phasellus placerat platea porta porttitor posuere +potenti praesent pretium primis proin pulvinar purus quam quis quisque rhoncus +ridiculus risus rutrum sagittis sapien scelerisque sed sem semper senectus sit +sociis sociosqu sodales sollicitudin suscipit suspendisse taciti tellus tempor +tempus tincidunt torquent tortor tristique turpis ullamcorper ultrices +ultricies urna ut varius vehicula vel velit venenatis vestibulum vitae vivamus +viverra volutpat vulputate""" diff --git a/.venv/lib/python3.12/site-packages/jinja2/debug.py b/.venv/lib/python3.12/site-packages/jinja2/debug.py new file mode 100644 index 0000000..eeeeee7 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2/debug.py @@ -0,0 +1,191 @@ +import sys +import typing as t +from types import CodeType +from types import TracebackType + +from .exceptions import TemplateSyntaxError +from .utils import internal_code +from .utils import missing + +if t.TYPE_CHECKING: + from .runtime import Context + + +def rewrite_traceback_stack(source: t.Optional[str] = None) -> BaseException: + """Rewrite the current exception to replace any tracebacks from + within compiled template code with tracebacks that look like they + came from the template source. + + This must be called within an ``except`` block. + + :param source: For ``TemplateSyntaxError``, the original source if + known. + :return: The original exception with the rewritten traceback. + """ + _, exc_value, tb = sys.exc_info() + exc_value = t.cast(BaseException, exc_value) + tb = t.cast(TracebackType, tb) + + if isinstance(exc_value, TemplateSyntaxError) and not exc_value.translated: + exc_value.translated = True + exc_value.source = source + # Remove the old traceback, otherwise the frames from the + # compiler still show up. + exc_value.with_traceback(None) + # Outside of runtime, so the frame isn't executing template + # code, but it still needs to point at the template. + tb = fake_traceback( + exc_value, None, exc_value.filename or "", exc_value.lineno + ) + else: + # Skip the frame for the render function. + tb = tb.tb_next + + stack = [] + + # Build the stack of traceback object, replacing any in template + # code with the source file and line information. + while tb is not None: + # Skip frames decorated with @internalcode. These are internal + # calls that aren't useful in template debugging output. + if tb.tb_frame.f_code in internal_code: + tb = tb.tb_next + continue + + template = tb.tb_frame.f_globals.get("__jinja_template__") + + if template is not None: + lineno = template.get_corresponding_lineno(tb.tb_lineno) + fake_tb = fake_traceback(exc_value, tb, template.filename, lineno) + stack.append(fake_tb) + else: + stack.append(tb) + + tb = tb.tb_next + + tb_next = None + + # Assign tb_next in reverse to avoid circular references. + for tb in reversed(stack): + tb.tb_next = tb_next + tb_next = tb + + return exc_value.with_traceback(tb_next) + + +def fake_traceback( # type: ignore + exc_value: BaseException, tb: t.Optional[TracebackType], filename: str, lineno: int +) -> TracebackType: + """Produce a new traceback object that looks like it came from the + template source instead of the compiled code. The filename, line + number, and location name will point to the template, and the local + variables will be the current template context. + + :param exc_value: The original exception to be re-raised to create + the new traceback. + :param tb: The original traceback to get the local variables and + code info from. + :param filename: The template filename. + :param lineno: The line number in the template source. + """ + if tb is not None: + # Replace the real locals with the context that would be + # available at that point in the template. + locals = get_template_locals(tb.tb_frame.f_locals) + locals.pop("__jinja_exception__", None) + else: + locals = {} + + globals = { + "__name__": filename, + "__file__": filename, + "__jinja_exception__": exc_value, + } + # Raise an exception at the correct line number. + code: CodeType = compile( + "\n" * (lineno - 1) + "raise __jinja_exception__", filename, "exec" + ) + + # Build a new code object that points to the template file and + # replaces the location with a block name. + location = "template" + + if tb is not None: + function = tb.tb_frame.f_code.co_name + + if function == "root": + location = "top-level template code" + elif function.startswith("block_"): + location = f"block {function[6:]!r}" + + if sys.version_info >= (3, 8): + code = code.replace(co_name=location) + else: + code = CodeType( + code.co_argcount, + code.co_kwonlyargcount, + code.co_nlocals, + code.co_stacksize, + code.co_flags, + code.co_code, + code.co_consts, + code.co_names, + code.co_varnames, + code.co_filename, + location, + code.co_firstlineno, + code.co_lnotab, + code.co_freevars, + code.co_cellvars, + ) + + # Execute the new code, which is guaranteed to raise, and return + # the new traceback without this frame. + try: + exec(code, globals, locals) + except BaseException: + return sys.exc_info()[2].tb_next # type: ignore + + +def get_template_locals(real_locals: t.Mapping[str, t.Any]) -> t.Dict[str, t.Any]: + """Based on the runtime locals, get the context that would be + available at that point in the template. + """ + # Start with the current template context. + ctx: t.Optional[Context] = real_locals.get("context") + + if ctx is not None: + data: t.Dict[str, t.Any] = ctx.get_all().copy() + else: + data = {} + + # Might be in a derived context that only sets local variables + # rather than pushing a context. Local variables follow the scheme + # l_depth_name. Find the highest-depth local that has a value for + # each name. + local_overrides: t.Dict[str, t.Tuple[int, t.Any]] = {} + + for name, value in real_locals.items(): + if not name.startswith("l_") or value is missing: + # Not a template variable, or no longer relevant. + continue + + try: + _, depth_str, name = name.split("_", 2) + depth = int(depth_str) + except ValueError: + continue + + cur_depth = local_overrides.get(name, (-1,))[0] + + if cur_depth < depth: + local_overrides[name] = (depth, value) + + # Modify the context with any derived context. + for name, (_, value) in local_overrides.items(): + if value is missing: + data.pop(name, None) + else: + data[name] = value + + return data diff --git a/.venv/lib/python3.12/site-packages/jinja2/defaults.py b/.venv/lib/python3.12/site-packages/jinja2/defaults.py new file mode 100644 index 0000000..638cad3 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2/defaults.py @@ -0,0 +1,48 @@ +import typing as t + +from .filters import FILTERS as DEFAULT_FILTERS # noqa: F401 +from .tests import TESTS as DEFAULT_TESTS # noqa: F401 +from .utils import Cycler +from .utils import generate_lorem_ipsum +from .utils import Joiner +from .utils import Namespace + +if t.TYPE_CHECKING: + import typing_extensions as te + +# defaults for the parser / lexer +BLOCK_START_STRING = "{%" +BLOCK_END_STRING = "%}" +VARIABLE_START_STRING = "{{" +VARIABLE_END_STRING = "}}" +COMMENT_START_STRING = "{#" +COMMENT_END_STRING = "#}" +LINE_STATEMENT_PREFIX: t.Optional[str] = None +LINE_COMMENT_PREFIX: t.Optional[str] = None +TRIM_BLOCKS = False +LSTRIP_BLOCKS = False +NEWLINE_SEQUENCE: "te.Literal['\\n', '\\r\\n', '\\r']" = "\n" +KEEP_TRAILING_NEWLINE = False + +# default filters, tests and namespace + +DEFAULT_NAMESPACE = { + "range": range, + "dict": dict, + "lipsum": generate_lorem_ipsum, + "cycler": Cycler, + "joiner": Joiner, + "namespace": Namespace, +} + +# default policies +DEFAULT_POLICIES: t.Dict[str, t.Any] = { + "compiler.ascii_str": True, + "urlize.rel": "noopener", + "urlize.target": None, + "urlize.extra_schemes": None, + "truncate.leeway": 5, + "json.dumps_function": None, + "json.dumps_kwargs": {"sort_keys": True}, + "ext.i18n.trimmed": False, +} diff --git a/.venv/lib/python3.12/site-packages/jinja2/environment.py b/.venv/lib/python3.12/site-packages/jinja2/environment.py new file mode 100644 index 0000000..0fc6e5b --- /dev/null +++ b/.venv/lib/python3.12/site-packages/jinja2/environment.py @@ -0,0 +1,1672 @@ +"""Classes for managing templates and their runtime and compile time +options. +""" + +import os +import typing +import typing as t +import weakref +from collections import ChainMap +from functools import lru_cache +from functools import partial +from functools import reduce +from types import CodeType + +from markupsafe import Markup + +from . import nodes +from .compiler import CodeGenerator +from .compiler import generate +from .defaults import BLOCK_END_STRING +from .defaults import BLOCK_START_STRING +from .defaults import COMMENT_END_STRING +from .defaults import COMMENT_START_STRING +from .defaults import DEFAULT_FILTERS # type: ignore[attr-defined] +from .defaults import DEFAULT_NAMESPACE +from .defaults import DEFAULT_POLICIES +from .defaults import DEFAULT_TESTS # type: ignore[attr-defined] +from .defaults import KEEP_TRAILING_NEWLINE +from .defaults import LINE_COMMENT_PREFIX +from .defaults import LINE_STATEMENT_PREFIX +from .defaults import LSTRIP_BLOCKS +from .defaults import NEWLINE_SEQUENCE +from .defaults import TRIM_BLOCKS +from .defaults import VARIABLE_END_STRING +from .defaults import VARIABLE_START_STRING +from .exceptions import TemplateNotFound +from .exceptions import TemplateRuntimeError +from .exceptions import TemplatesNotFound +from .exceptions import TemplateSyntaxError +from .exceptions import UndefinedError +from .lexer import get_lexer +from .lexer import Lexer +from .lexer import TokenStream +from .nodes import EvalContext +from .parser import Parser +from .runtime import Context +from .runtime import new_context +from .runtime import Undefined +from .utils import _PassArg +from .utils import concat +from .utils import consume +from .utils import import_string +from .utils import internalcode +from .utils import LRUCache +from .utils import missing + +if t.TYPE_CHECKING: + import typing_extensions as te + + from .bccache import BytecodeCache + from .ext import Extension + from .loaders import BaseLoader + +_env_bound = t.TypeVar("_env_bound", bound="Environment") + + +# for direct template usage we have up to ten living environments +@lru_cache(maxsize=10) +def get_spontaneous_environment(cls: t.Type[_env_bound], *args: t.Any) -> _env_bound: + """Return a new spontaneous environment. A spontaneous environment + is used for templates created directly rather than through an + existing environment. + + :param cls: Environment class to create. + :param args: Positional arguments passed to environment. + """ + env = cls(*args) + env.shared = True + return env + + +def create_cache( + size: int, +) -> t.Optional[t.MutableMapping[t.Tuple["weakref.ref[t.Any]", str], "Template"]]: + """Return the cache class for the given size.""" + if size == 0: + return None + + if size < 0: + return {} + + return LRUCache(size) # type: ignore + + +def copy_cache( + cache: t.Optional[t.MutableMapping[t.Any, t.Any]], +) -> t.Optional[t.MutableMapping[t.Tuple["weakref.ref[t.Any]", str], "Template"]]: + """Create an empty copy of the given cache.""" + if cache is None: + return None + + if type(cache) is dict: # noqa E721 + return {} + + return LRUCache(cache.capacity) # type: ignore + + +def load_extensions( + environment: "Environment", + extensions: t.Sequence[t.Union[str, t.Type["Extension"]]], +) -> t.Dict[str, "Extension"]: + """Load the extensions from the list and bind it to the environment. + Returns a dict of instantiated extensions. + """ + result = {} + + for extension in extensions: + if isinstance(extension, str): + extension = t.cast(t.Type["Extension"], import_string(extension)) + + result[extension.identifier] = extension(environment) + + return result + + +def _environment_config_check(environment: _env_bound) -> _env_bound: + """Perform a sanity check on the environment.""" + assert issubclass( + environment.undefined, Undefined + ), "'undefined' must be a subclass of 'jinja2.Undefined'." + assert ( + environment.block_start_string + != environment.variable_start_string + != environment.comment_start_string + ), "block, variable and comment start strings must be different." + assert environment.newline_sequence in { + "\r", + "\r\n", + "\n", + }, "'newline_sequence' must be one of '\\n', '\\r\\n', or '\\r'." + return environment + + +class Environment: + r"""The core component of Jinja is the `Environment`. It contains + important shared variables like configuration, filters, tests, + globals and others. Instances of this class may be modified if + they are not shared and if no template was loaded so far. + Modifications on environments after the first template was loaded + will lead to surprising effects and undefined behavior. + + Here are the possible initialization parameters: + + `block_start_string` + The string marking the beginning of a block. Defaults to ``'{%'``. + + `block_end_string` + The string marking the end of a block. Defaults to ``'%}'``. + + `variable_start_string` + The string marking the beginning of a print statement. + Defaults to ``'{{'``. + + `variable_end_string` + The string marking the end of a print statement. Defaults to + ``'}}'``. + + `comment_start_string` + The string marking the beginning of a comment. Defaults to ``'{#'``. + + `comment_end_string` + The string marking the end of a comment. Defaults to ``'#}'``. + + `line_statement_prefix` + If given and a string, this will be used as prefix for line based + statements. See also :ref:`line-statements`. + + `line_comment_prefix` + If given and a string, this will be used as prefix for line based + comments. See also :ref:`line-statements`. + + .. versionadded:: 2.2 + + `trim_blocks` + If this is set to ``True`` the first newline after a block is + removed (block, not variable tag!). Defaults to `False`. + + `lstrip_blocks` + If this is set to ``True`` leading spaces and tabs are stripped + from the start of a line to a block. Defaults to `False`. + + `newline_sequence` + The sequence that starts a newline. Must be one of ``'\r'``, + ``'\n'`` or ``'\r\n'``. The default is ``'\n'`` which is a + useful default for Linux and OS X systems as well as web + applications. + + `keep_trailing_newline` + Preserve the trailing newline when rendering templates. + The default is ``False``, which causes a single newline, + if present, to be stripped from the end of the template. + + .. versionadded:: 2.7 + + `extensions` + List of Jinja extensions to use. This can either be import paths + as strings or extension classes. For more information have a + look at :ref:`the extensions documentation `. + + `optimized` + should the optimizer be enabled? Default is ``True``. + + `undefined` + :class:`Undefined` or a subclass of it that is used to represent + undefined values in the template. + + `finalize` + A callable that can be used to process the result of a variable + expression before it is output. For example one can convert + ``None`` implicitly into an empty string here. + + `autoescape` + If set to ``True`` the XML/HTML autoescaping feature is enabled by + default. For more details about autoescaping see + :class:`~markupsafe.Markup`. As of Jinja 2.4 this can also + be a callable that is passed the template name and has to + return ``True`` or ``False`` depending on autoescape should be + enabled by default. + + .. versionchanged:: 2.4 + `autoescape` can now be a function + + `loader` + The template loader for this environment. + + `cache_size` + The size of the cache. Per default this is ``400`` which means + that if more than 400 templates are loaded the loader will clean + out the least recently used template. If the cache size is set to + ``0`` templates are recompiled all the time, if the cache size is + ``-1`` the cache will not be cleaned. + + .. versionchanged:: 2.8 + The cache size was increased to 400 from a low 50. + + `auto_reload` + Some loaders load templates from locations where the template + sources may change (ie: file system or database). If + ``auto_reload`` is set to ``True`` (default) every time a template is + requested the loader checks if the source changed and if yes, it + will reload the template. For higher performance it's possible to + disable that. + + `bytecode_cache` + If set to a bytecode cache object, this object will provide a + cache for the internal Jinja bytecode so that templates don't + have to be parsed if they were not changed. + + See :ref:`bytecode-cache` for more information. + + `enable_async` + If set to true this enables async template execution which + allows using async functions and generators. + """ + + #: if this environment is sandboxed. Modifying this variable won't make + #: the environment sandboxed though. For a real sandboxed environment + #: have a look at jinja2.sandbox. This flag alone controls the code + #: generation by the compiler. + sandboxed = False + + #: True if the environment is just an overlay + overlayed = False + + #: the environment this environment is linked to if it is an overlay + linked_to: t.Optional["Environment"] = None + + #: shared environments have this set to `True`. A shared environment + #: must not be modified + shared = False + + #: the class that is used for code generation. See + #: :class:`~jinja2.compiler.CodeGenerator` for more information. + code_generator_class: t.Type["CodeGenerator"] = CodeGenerator + + concat = "".join + + #: the context class that is used for templates. See + #: :class:`~jinja2.runtime.Context` for more information. + context_class: t.Type[Context] = Context + + template_class: t.Type["Template"] + + def __init__( + self, + block_start_string: str = BLOCK_START_STRING, + block_end_string: str = BLOCK_END_STRING, + variable_start_string: str = VARIABLE_START_STRING, + variable_end_string: str = VARIABLE_END_STRING, + comment_start_string: str = COMMENT_START_STRING, + comment_end_string: str = COMMENT_END_STRING, + line_statement_prefix: t.Optional[str] = LINE_STATEMENT_PREFIX, + line_comment_prefix: t.Optional[str] = LINE_COMMENT_PREFIX, + trim_blocks: bool = TRIM_BLOCKS, + lstrip_blocks: bool = LSTRIP_BLOCKS, + newline_sequence: "te.Literal['\\n', '\\r\\n', '\\r']" = NEWLINE_SEQUENCE, + keep_trailing_newline: bool = KEEP_TRAILING_NEWLINE, + extensions: t.Sequence[t.Union[str, t.Type["Extension"]]] = (), + optimized: bool = True, + undefined: t.Type[Undefined] = Undefined, + finalize: t.Optional[t.Callable[..., t.Any]] = None, + autoescape: t.Union[bool, t.Callable[[t.Optional[str]], bool]] = False, + loader: t.Optional["BaseLoader"] = None, + cache_size: int = 400, + auto_reload: bool = True, + bytecode_cache: t.Optional["BytecodeCache"] = None, + enable_async: bool = False, + ): + # !!Important notice!! + # The constructor accepts quite a few arguments that should be + # passed by keyword rather than position. However it's important to + # not change the order of arguments because it's used at least + # internally in those cases: + # - spontaneous environments (i18n extension and Template) + # - unittests + # If parameter changes are required only add parameters at the end + # and don't change the arguments (or the defaults!) of the arguments + # existing already. + + # lexer / parser information + self.block_start_string = block_start_string + self.block_end_string = block_end_string + self.variable_start_string = variable_start_string + self.variable_end_string = variable_end_string + self.comment_start_string = comment_start_string + self.comment_end_string = comment_end_string + self.line_statement_prefix = line_statement_prefix + self.line_comment_prefix = line_comment_prefix + self.trim_blocks = trim_blocks + self.lstrip_blocks = lstrip_blocks + self.newline_sequence = newline_sequence + self.keep_trailing_newline = keep_trailing_newline + + # runtime information + self.undefined: t.Type[Undefined] = undefined + self.optimized = optimized + self.finalize = finalize + self.autoescape = autoescape + + # defaults + self.filters = DEFAULT_FILTERS.copy() + self.tests = DEFAULT_TESTS.copy() + self.globals = DEFAULT_NAMESPACE.copy() + + # set the loader provided + self.loader = loader + self.cache = create_cache(cache_size) + self.bytecode_cache = bytecode_cache + self.auto_reload = auto_reload + + # configurable policies + self.policies = DEFAULT_POLICIES.copy() + + # load extensions + self.extensions = load_extensions(self, extensions) + + self.is_async = enable_async + _environment_config_check(self) + + def add_extension(self, extension: t.Union[str, t.Type["Extension"]]) -> None: + """Adds an extension after the environment was created. + + .. versionadded:: 2.5 + """ + self.extensions.update(load_extensions(self, [extension])) + + def extend(self, **attributes: t.Any) -> None: + """Add the items to the instance of the environment if they do not exist + yet. This is used by :ref:`extensions ` to register + callbacks and configuration values without breaking inheritance. + """ + for key, value in attributes.items(): + if not hasattr(self, key): + setattr(self, key, value) + + def overlay( + self, + block_start_string: str = missing, + block_end_string: str = missing, + variable_start_string: str = missing, + variable_end_string: str = missing, + comment_start_string: str = missing, + comment_end_string: str = missing, + line_statement_prefix: t.Optional[str] = missing, + line_comment_prefix: t.Optional[str] = missing, + trim_blocks: bool = missing, + lstrip_blocks: bool = missing, + newline_sequence: "te.Literal['\\n', '\\r\\n', '\\r']" = missing, + keep_trailing_newline: bool = missing, + extensions: t.Sequence[t.Union[str, t.Type["Extension"]]] = missing, + optimized: bool = missing, + undefined: t.Type[Undefined] = missing, + finalize: t.Optional[t.Callable[..., t.Any]] = missing, + autoescape: t.Union[bool, t.Callable[[t.Optional[str]], bool]] = missing, + loader: t.Optional["BaseLoader"] = missing, + cache_size: int = missing, + auto_reload: bool = missing, + bytecode_cache: t.Optional["BytecodeCache"] = missing, + enable_async: bool = missing, + ) -> "te.Self": + """Create a new overlay environment that shares all the data with the + current environment except for cache and the overridden attributes. + Extensions cannot be removed for an overlayed environment. An overlayed + environment automatically gets all the extensions of the environment it + is linked to plus optional extra extensions. + + Creating overlays should happen after the initial environment was set + up completely. Not all attributes are truly linked, some are just + copied over so modifications on the original environment may not shine + through. + + .. versionchanged:: 3.1.5 + ``enable_async`` is applied correctly. + + .. versionchanged:: 3.1.2 + Added the ``newline_sequence``, ``keep_trailing_newline``, + and ``enable_async`` parameters to match ``__init__``. + """ + args = dict(locals()) + del args["self"], args["cache_size"], args["extensions"], args["enable_async"] + + rv = object.__new__(self.__class__) + rv.__dict__.update(self.__dict__) + rv.overlayed = True + rv.linked_to = self + + for key, value in args.items(): + if value is not missing: + setattr(rv, key, value) + + if cache_size is not missing: + rv.cache = create_cache(cache_size) + else: + rv.cache = copy_cache(self.cache) + + rv.extensions = {} + for key, value in self.extensions.items(): + rv.extensions[key] = value.bind(rv) + if extensions is not missing: + rv.extensions.update(load_extensions(rv, extensions)) + + if enable_async is not missing: + rv.is_async = enable_async + + return _environment_config_check(rv) + + @property + def lexer(self) -> Lexer: + """The lexer for this environment.""" + return get_lexer(self) + + def iter_extensions(self) -> t.Iterator["Extension"]: + """Iterates over the extensions by priority.""" + return iter(sorted(self.extensions.values(), key=lambda x: x.priority)) + + def getitem( + self, obj: t.Any, argument: t.Union[str, t.Any] + ) -> t.Union[t.Any, Undefined]: + """Get an item or attribute of an object but prefer the item.""" + try: + return obj[argument] + except (AttributeError, TypeError, LookupError): + if isinstance(argument, str): + try: + attr = str(argument) + except Exception: + pass + else: + try: + return getattr(obj, attr) + except AttributeError: + pass + return self.undefined(obj=obj, name=argument) + + def getattr(self, obj: t.Any, attribute: str) -> t.Any: + """Get an item or attribute of an object but prefer the attribute. + Unlike :meth:`getitem` the attribute *must* be a string. + """ + try: + return getattr(obj, attribute) + except AttributeError: + pass + try: + return obj[attribute] + except (TypeError, LookupError, AttributeError): + return self.undefined(obj=obj, name=attribute) + + def _filter_test_common( + self, + name: t.Union[str, Undefined], + value: t.Any, + args: t.Optional[t.Sequence[t.Any]], + kwargs: t.Optional[t.Mapping[str, t.Any]], + context: t.Optional[Context], + eval_ctx: t.Optional[EvalContext], + is_filter: bool, + ) -> t.Any: + if is_filter: + env_map = self.filters + type_name = "filter" + else: + env_map = self.tests + type_name = "test" + + func = env_map.get(name) # type: ignore + + if func is None: + msg = f"No {type_name} named {name!r}." + + if isinstance(name, Undefined): + try: + name._fail_with_undefined_error() + except Exception as e: + msg = f"{msg} ({e}; did you forget to quote the callable name?)" + + raise TemplateRuntimeError(msg) + + args = [value, *(args if args is not None else ())] + kwargs = kwargs if kwargs is not None else {} + pass_arg = _PassArg.from_obj(func) + + if pass_arg is _PassArg.context: + if context is None: + raise TemplateRuntimeError( + f"Attempted to invoke a context {type_name} without context." + ) + + args.insert(0, context) + elif pass_arg is _PassArg.eval_context: + if eval_ctx is None: + if context is not None: + eval_ctx = context.eval_ctx + else: + eval_ctx = EvalContext(self) + + args.insert(0, eval_ctx) + elif pass_arg is _PassArg.environment: + args.insert(0, self) + + return func(*args, **kwargs) + + def call_filter( + self, + name: str, + value: t.Any, + args: t.Optional[t.Sequence[t.Any]] = None, + kwargs: t.Optional[t.Mapping[str, t.Any]] = None, + context: t.Optional[Context] = None, + eval_ctx: t.Optional[EvalContext] = None, + ) -> t.Any: + """Invoke a filter on a value the same way the compiler does. + + This might return a coroutine if the filter is running from an + environment in async mode and the filter supports async + execution. It's your responsibility to await this if needed. + + .. versionadded:: 2.7 + """ + return self._filter_test_common( + name, value, args, kwargs, context, eval_ctx, True + ) + + def call_test( + self, + name: str, + value: t.Any, + args: t.Optional[t.Sequence[t.Any]] = None, + kwargs: t.Optional[t.Mapping[str, t.Any]] = None, + context: t.Optional[Context] = None, + eval_ctx: t.Optional[EvalContext] = None, + ) -> t.Any: + """Invoke a test on a value the same way the compiler does. + + This might return a coroutine if the test is running from an + environment in async mode and the test supports async execution. + It's your responsibility to await this if needed. + + .. versionchanged:: 3.0 + Tests support ``@pass_context``, etc. decorators. Added + the ``context`` and ``eval_ctx`` parameters. + + .. versionadded:: 2.7 + """ + return self._filter_test_common( + name, value, args, kwargs, context, eval_ctx, False + ) + + @internalcode + def parse( + self, + source: str, + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + ) -> nodes.Template: + """Parse the sourcecode and return the abstract syntax tree. This + tree of nodes is used by the compiler to convert the template into + executable source- or bytecode. This is useful for debugging or to + extract information from templates. + + If you are :ref:`developing Jinja extensions ` + this gives you a good overview of the node tree generated. + """ + try: + return self._parse(source, name, filename) + except TemplateSyntaxError: + self.handle_exception(source=source) + + def _parse( + self, source: str, name: t.Optional[str], filename: t.Optional[str] + ) -> nodes.Template: + """Internal parsing function used by `parse` and `compile`.""" + return Parser(self, source, name, filename).parse() + + def lex( + self, + source: str, + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + ) -> t.Iterator[t.Tuple[int, str, str]]: + """Lex the given sourcecode and return a generator that yields + tokens as tuples in the form ``(lineno, token_type, value)``. + This can be useful for :ref:`extension development ` + and debugging templates. + + This does not perform preprocessing. If you want the preprocessing + of the extensions to be applied you have to filter source through + the :meth:`preprocess` method. + """ + source = str(source) + try: + return self.lexer.tokeniter(source, name, filename) + except TemplateSyntaxError: + self.handle_exception(source=source) + + def preprocess( + self, + source: str, + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + ) -> str: + """Preprocesses the source with all extensions. This is automatically + called for all parsing and compiling methods but *not* for :meth:`lex` + because there you usually only want the actual source tokenized. + """ + return reduce( + lambda s, e: e.preprocess(s, name, filename), + self.iter_extensions(), + str(source), + ) + + def _tokenize( + self, + source: str, + name: t.Optional[str], + filename: t.Optional[str] = None, + state: t.Optional[str] = None, + ) -> TokenStream: + """Called by the parser to do the preprocessing and filtering + for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`. + """ + source = self.preprocess(source, name, filename) + stream = self.lexer.tokenize(source, name, filename, state) + + for ext in self.iter_extensions(): + stream = ext.filter_stream(stream) # type: ignore + + if not isinstance(stream, TokenStream): + stream = TokenStream(stream, name, filename) + + return stream + + def _generate( + self, + source: nodes.Template, + name: t.Optional[str], + filename: t.Optional[str], + defer_init: bool = False, + ) -> str: + """Internal hook that can be overridden to hook a different generate + method in. + + .. versionadded:: 2.5 + """ + return generate( # type: ignore + source, + self, + name, + filename, + defer_init=defer_init, + optimized=self.optimized, + ) + + def _compile(self, source: str, filename: str) -> CodeType: + """Internal hook that can be overridden to hook a different compile + method in. + + .. versionadded:: 2.5 + """ + return compile(source, filename, "exec") + + @typing.overload + def compile( + self, + source: t.Union[str, nodes.Template], + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + raw: "te.Literal[False]" = False, + defer_init: bool = False, + ) -> CodeType: ... + + @typing.overload + def compile( + self, + source: t.Union[str, nodes.Template], + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + raw: "te.Literal[True]" = ..., + defer_init: bool = False, + ) -> str: ... + + @internalcode + def compile( + self, + source: t.Union[str, nodes.Template], + name: t.Optional[str] = None, + filename: t.Optional[str] = None, + raw: bool = False, + defer_init: bool = False, + ) -> t.Union[str, CodeType]: + """Compile a node or template source code. The `name` parameter is + the load name of the template after it was joined using + :meth:`join_path` if necessary, not the filename on the file system. + the `filename` parameter is the estimated filename of the template on + the file system. If the template came from a database or memory this + can be omitted. + + The return value of this method is a python code object. If the `raw` + parameter is `True` the return value will be a string with python + code equivalent to the bytecode returned otherwise. This method is + mainly used internally. + + `defer_init` is use internally to aid the module code generator. This + causes the generated code to be able to import without the global + environment variable to be set. + + .. versionadded:: 2.4 + `defer_init` parameter added. + """ + source_hint = None + try: + if isinstance(source, str): + source_hint = source + source = self._parse(source, name, filename) + source = self._generate(source, name, filename, defer_init=defer_init) + if raw: + return source + if filename is None: + filename = "